summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-oe
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openembedded/meta-oe')
-rw-r--r--meta-openembedded/meta-oe/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-oe/README14
-rw-r--r--meta-openembedded/meta-oe/classes/breakpad.bbclass33
-rw-r--r--meta-openembedded/meta-oe/classes/dos2unix.bbclass14
-rw-r--r--meta-openembedded/meta-oe/classes/gitpkgv.bbclass122
-rw-r--r--meta-openembedded/meta-oe/classes/gitver.bbclass84
-rw-r--r--meta-openembedded/meta-oe/classes/gpe.bbclass17
-rw-r--r--meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass8
-rw-r--r--meta-openembedded/meta-oe/classes/socorro-syms.bbclass231
-rw-r--r--meta-openembedded/meta-oe/conf/layer.conf79
-rw-r--r--meta-openembedded/meta-oe/licenses/FLTK530
-rw-r--r--meta-openembedded/meta-oe/licenses/GD53
-rw-r--r--meta-openembedded/meta-oe/licenses/GPL-2.0-with-lmbench-restriction108
-rw-r--r--meta-openembedded/meta-oe/licenses/ImageMagick103
-rw-r--r--meta-openembedded/meta-oe/licenses/Kilgard5
-rw-r--r--meta-openembedded/meta-oe/licenses/ManishSingh19
-rw-r--r--meta-openembedded/meta-oe/licenses/OGPL104
-rw-r--r--meta-openembedded/meta-oe/licenses/OpenLDAP47
-rw-r--r--meta-openembedded/meta-oe/licenses/QWTv1.0543
-rw-r--r--meta-openembedded/meta-oe/licenses/TLWG150
-rw-r--r--meta-openembedded/meta-oe/licenses/UFL97
-rw-r--r--meta-openembedded/meta-oe/licenses/X1123
-rw-r--r--meta-openembedded/meta-oe/licenses/flite32
-rw-r--r--meta-openembedded/meta-oe/licenses/gnuplot29
-rw-r--r--meta-openembedded/meta-oe/licenses/iozone362
-rw-r--r--meta-openembedded/meta-oe/licenses/nbench-byte10
-rw-r--r--meta-openembedded/meta-oe/licenses/unRAR41
-rw-r--r--meta-openembedded/meta-oe/licenses/vim81
-rw-r--r--meta-openembedded/meta-oe/licenses/zsh37
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_git.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/bonnie/bonnie++_1.03e.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/bonnie/files/gcc-4.3-fixes.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/cpuburn/cpuburn-neon_20140626.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/dbench/dbench_4.0.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/dbench/files/destdir.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/dbench/files/makefile.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone-2.1/dhrystone.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone_2.1.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2.9.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0001-Fix-clang-warnings.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/Fix-configure-for-sqrt-check.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/build-Check-packages-to-be-used-by-the-enabled-flavo.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb62
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/copyright.txt62
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/parallelism.patch97
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_465.bb117
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iperf2/iperf2_2.0.10.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0002-Remove-pg-from-profile_CFLAGS.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/automake-foreign.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.2.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libc-bench/libc-bench_20110206.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/Force-text-segment-alignment-to-0x08000000-for-i386-.patch92
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-avoid-search-host-library-path-for-cros.patch99
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-elf_i386-avoid-search-host-library-path.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/tests-Makefile-install-static-4G-edge-testcases.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb74
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/linpack/linpack_1.0.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-Check-for-musl-define-guard-before-redefining-sockle.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-lat_http.c-Add-printf-format.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0002-build-Adjust-CFLAGS-LDFLAGS-to-append-values-passed-.patch73
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/fix-lmbench-memory-check-failure.patch215
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/lmbench_result_html_report.patch69
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/obey-ranlib.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-config-script.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-results-script.patch170
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/use-base_libdir-instead-of-hardcoded-lib.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/0001-avoid-gcc-optimize-away-the-loops.patch80
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/lmbench-run23
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/rename-line-binary.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb88
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/memtester/files/Makefile.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/memtester/memtester_4.3.0.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/Makefile-add-more-dependencies-to-pointer.h.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/nbench_32bits.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte_2.2.3.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_7.8.0.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/sysbench/sysbench_0.4.12.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tinymembench/tinymembench_git.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Drop-inline-of-crc32-function-to-fix-build-using-GCC.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Specify-printf-formats.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/avoid-glibc-clashes.patch57
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/tiobench-makefile.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench_0.3.3.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/whetstone/whetstone_1.2.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/acpitool/acpitool_0.5.1.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils/0001-dont-unset-cflags.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils_008.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/add-restart-to-initscript.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/edac.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/make-init-script-be-able-to-automatically-load-EDAC-.patch98
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efibootmgr/efibootmgr_0.15.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-dp.h-Add-Wunknown-attributes-when-using-clang.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-fix-for-cross-compile.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-makeguids-Do-not-use-__bswap_constant_-16-32-macros.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0003-efivar-fix-for-cross-compile.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0004-fix-unknow-option-for-gold-linker.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/allow-multi-definitions-for-native.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/fix-compile-failure-with-host-gcc-4.6.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/musl-strndupa.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/efivar/efivar_0.31.bb50
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-platform-Add-riscv-to-known-platforms.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/sst26.patch198
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.0.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/fancontrol2
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord16
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.cgi10
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.conf16
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensors.conf2
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config_1.0.bb63
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-lmsensors-sensors-detect-print-a-special-message-whe.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-prog-Do-not-limit-sys-io.h-header-include-to-just-gl.patch88
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/fancontrol.init47
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/sensord.init49
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.4.0.bb140
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lssci/lsscsi_0.28.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/COPYING2
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/pointercal0
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarm/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv6/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv7/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemumips/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuppc/pointercalbin0 -> 36 bytes
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86-64/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86/pointercal1
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal_0.0.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammu-smsdrc80
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammurc173
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb68
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch177
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch253
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch187
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0004-Prevent-installation-of-an-all-zero-TK.patch82
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch67
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0006-TDLS-Reject-TPK-TK-reconfiguration.patch135
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch85
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/defconfig145
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd.service11
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/init58
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb58
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.0.4.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/0001-aclocal-Add-parameter-to-disable-keyutils-detection.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/crosscompile_nm.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/debian-suppress-usr-lib-in-krb5-config.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-admin-server4
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-kdc5
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-admin-server140
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-kdc133
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-admin-server.service15
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-kdc.service14
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb188
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/configure-fix-largefile.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch73
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules999
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb58
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet/0001-Support-musl-libc-remove-support-for-glibc-2.1.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-Detect-clang.patch85
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-implement-64bit-atomic-for-mips.patch263
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch94
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0003-include-missing-time.h-for-time_t.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_1.8.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles1
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf24
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf315
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init40
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service20
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init37
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch101
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb87
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch10
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.3.0.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch975
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init89
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service15
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb83
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server_0.4.6.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb40
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/0001-apps-CMakeLists.txt-Explicitly-link-libbfb-and-libmu.patch66
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/Remove_some_printf_in_obexftpd.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/make_fuse_swig_optional.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp_0.24.2.bb43
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/packagegroups/packagegroup-tools-bluetooth.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/makefile.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils/0001-Include-limits.h-for-PATH_MAX.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rabbitmq-c/rabbitmq-c_0.7.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/0001-rfkill-makefile-don-t-use-t-the-OE-install-wrapper-d.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/dont.call.git.rev-parse.on.parent.dir.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill_0.5.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent/don-t-run-code-while-configuring-package.patch94
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/scripts_no_bash.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/sms_binpath.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3_3.1.21.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-glib_0.24.0.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle/fix-svc-gtk-doc.h-target.patch15
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch110
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb64
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch143
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch23
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d112
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial/typo_pon.wvdial.1.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Check-for-limits.h-during-configure.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-build-fix-parallel-make.patch76
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvtask-Dont-use-ucontext-on-non-glibc-systems.patch135
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0003-wvtask-Check-for-HAVE_LIBC_STACK_END-only-on-glibc-s.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0004-wvcrash-Replace-use-of-basename-API.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0005-check-for-libexecinfo-during-configure.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/04_signed_request.diff13
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff41
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/06_gcc-4.7.diff18
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/07_buildflags.diff32
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/argp.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/gcc-6.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb56
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/0001-Fix-configure.ac.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/zabbix-agent.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_3.0.9.bb75
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb21
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-connectivity/zeromq/files/run-ptest10
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.2.5.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-Comment-rst2man-related-stuff.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-Correct-including-directory-for-conf.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_git.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy/0001-dbus-daemon-proxy-Return-DBUS_HANDLER_RESULT_NOT_YET.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy_git.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-pipe.c-Use-a-string-instead-of-char.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-src-eventloop.cpp-use-portable-method-for-initializi.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0002-tools-generate_proxy.cpp-avoid-possibly-undefined-ui.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0003-Fixed-undefined-ssize_t-for-clang-3.8.0-on-FreeBSD.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0004-use-POSIX-poll.h-instead-of-sys-poll.h.patch74
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/fix-missing-unistd.h-include.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/remove-CXX_FOR_BUILD-stuff.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++_0.9.0.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/gtk-doc.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/marshal.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus_0.6.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-core/ell/ell/0001-ell-fix-build-with-musl-libc.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-core/ell/ell_0.4.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/0001-Glib-Threads-Private-Fix-gobj.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/remove-examples.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.54.1.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.0.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libxml/libxml++/libxml++_ptest.patch82
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libxml/libxml++/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libxml/libxml++_2.40.1.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-core/meta/distro-feed-configs.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_0.9.11.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-basic.bb56
-rw-r--r--meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-boot.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-core/plymouth/files/0001-Make-full-path-to-systemd-tty-ask-password-agent-con.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.2.bb66
-rw-r--r--meta-openembedded/meta-oe/recipes-core/proxy-libintl/proxy-libintl_20100902.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.7.5.bb71
-rw-r--r--meta-openembedded/meta-oe/recipes-core/usleep/files/GPLv2.patch347
-rw-r--r--meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.125
-rw-r--r--meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.c82
-rw-r--r--meta-openembedded/meta-oe/recipes-core/usleep/usleep_1.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_1.7.4.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/engine-pkcs11/engine-pkcs11_0.2.2.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/libmcrypt/libmcrypt_2.5.8.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.11.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.11.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Makefile-Fix-parallel-build.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-build_detect_platform-Check-for-__SSE4_2__.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0002-makefile-build-SHARED_MEMENVLIB.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_git.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi.inc17
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi_0.9.0.bb6
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-strerror_r-only-on-glibc-systems.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-d_state.cpp-Add-missing-dependenncy-on-local_shardin.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Conditionalize-glibc-specific-strerror_r.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/disable-hw-crc32-on-arm64-s390x.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb76
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_5.5.59.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc297
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-disable-ucontext-on-musl.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/change-cc-to-cc-version.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/configure.cmake-fix-valgrind.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-a-building-failure.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-cmake-module-path.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-mysqlclient-r-version.patch160
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db13
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db.service17
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/my.cnf25
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysql-systemd-start66
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysqld.service25
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/remove-bad-path.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_5.5.59.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Use-pkg-config-for-libxml2-detection.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-bashprofile4
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-setup73
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.init193
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.pam4
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.service27
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc383
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_9.4.17.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-donot-use-the-hardcode-libdir.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-fix-for-ptest-support.patch148
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-remove-some-checks-for-cross-compiling.patch118
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/run-ptest46
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc.inc50
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_09.05.0300.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/soci/soci/soci_libdir.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/soci/soci_3.2.3.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/0001-shell.c-Fix-format-not-a-string-literal-warning.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_build_dynamic.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_no_tcl.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/sqlite.pc12
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite_2.8.17.bb61
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/.gitignore59
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch351
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch134
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adb.mk72
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk164
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/android-tools-adbd.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/define-shell-command.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/ext4_utils.mk103
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fastboot.mk89
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fix-big-endian-build.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/implicit-declaration-function-strlcat-strlcopy.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg-Add-dt-parameter-to-specify-DT-image.patch108
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg.mk29
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/preserve-ownership.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-bionic-android.patch67
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-selinux-android.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-capability.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-local-socket.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb158
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0001-svg-add-rudimentary-support-for-ARM-cpuinfo.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0002-svg-open-etc-os-release-and-use-PRETTY_NAME-for-the-.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart_git.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Replace-use-of-struct-ucontext-with-ucontext_t.patch242
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch52
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-include-sys-reg.h-to-get-__WORDSIZE-on-musl-libc.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-lss-Match-syscalls-to-match-musl.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Avoid-using-basename.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Dont-include-stab.h.patch88
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0004-elf_reader.cc-include-sys-reg.h-to-get-__WORDSIZE-on.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0005-md2core-Replace-basename.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch77
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mips_asm_sgidefs.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb123
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.6.1.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb/remove-help2man.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.6.8.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9-avahi.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9.service11
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/index.js2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit/cross.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20170122.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cscope/cscope_15.8b.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_5.8.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap/devices.tar.gzbin0 -> 767 bytes
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap_1.0.67.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu/configure.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu_1.4.4.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/0001-undefined-strdup-macro.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/02-Makefile.in.patch312
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/03-threads.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/100-use-xtools.patch109
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/13-fix-ldflags-in-makefile.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/130-mips.patch90
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/150-use_DESTDIR.patch104
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/configure-pagesize-HACK.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc_5.5.2.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-correct-version-for-so-lib.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-flatbuffers-Move-EndianSwap-template-to-flatbuffers-.patch113
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0002-use-__builtin_bswap16-when-building-with-clang.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.9.0.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/geany/geany-plugins_1.31.bb271
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.31.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/giflib/giflib_5.1.4.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/glade/glade/remove-yelp-help-rules-var.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.20.2.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch68
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch166
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0004-CMakeLists.txt-Find-c-ares-in-target-sysroot-alone.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.8.5.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/icon-slicer/files/0001-Makefile.am-no-examples.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/icon-slicer/icon-slicer_0.3.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/0001-Fix-printd-formatting-strings.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/ncurses-config.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng_1.1.4.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jq/jq/Support-without-oniguruma.patch68
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.5.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Adjust-the-cmake-files.patch145
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Link-to-libatomic.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/json_spirit_v4.08.zipbin0 -> 56299 bytes
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit_4.08.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsoncpp/jsoncpp_1.8.4.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-cmake-replace-hardcoded-lib-CMAKE_LIBRARY_PATH-with-.patch77
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorclient-Typecast-min-arguments-correctl.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorserver-Include-sys-select.h-before-oth.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-memset-and-family-needs-to-include-string.h.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0002-Fix-build-problem-on-Mac.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_0.7.0.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Makefile-ensure-frontends-exits-before-writing-into-.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Switch-utils-kconfig-diff-to-use-Python-3.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/kconfig-frontends_4.11.0.1.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lemon/files/lemon.163
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lemon/lemon.inc25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lemon/lemon_3.7.3.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libedit/libedit/stdc-predef.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libedit/libedit_20170329-3.1.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libfribidi/fribidi_0.19.7.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.18.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Add-CMake-build-files.patch302
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Check-for-__powerpc__-define.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-ClientStub.hpp-fix-a-clang-compiling-issue.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/aarch64-support.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/mips-support.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/librcf/librcf_2.2.0.0.bb54
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3/0001-configure.ac-fix-cross-compiling-issue.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3_2.4.0.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/0001-version-libraries.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/fix-libdir.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libubox/libubox_git.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_1.2.0.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-ARM-code-has-unreachable-code-after-switch-statement.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Add-support-for-mips64-n32-n64.patch1148
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Fix-tautological-compare-warning.patch261
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Use-correct-enum-type.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-configure-Recognise-linux-musl-as-a-host-OS.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-mips-plt.c-Delete-include-error.h.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-replace-readdir_r-with-readdir.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0002-Fix-const-qualifier-error.patch76
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/configure-allow-to-disable-selinux-support.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lua/lua/lua.pc.in10
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lua/lua/run-ptest19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lua/lua/uclibc-pthread.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.4.bb59
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb95
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/mcpp/files/ice-mcpp.patch208
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/mcpp/mcpp_2.7.2.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/memstat/memstat/0001-Include-limits.h-for-PATH_MAX-definition.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/memstat/memstat_1.0.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_4.4.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c/0001-Fix-Werror-class-memaccess.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c_2.1.5.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/msr-tools/msr-tools_1.3.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_8.9.4.bb90
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Add-fallthrough-comments.patch155
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0002-Workaround-new-warnings-generated-by-GCC-7.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0003-armv7a-Add-missing-break-to-fix-fallthrough-warning.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0004-Fix-overflow-warning.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0005-command-Move-the-fall-through-comment-to-right-scope.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/packagegroups/packagegroup-sdk-target.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_0.96.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/libdbd-mysql-perl_4.043.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.641.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php.inc263
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Add-lpthread-to-link.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude-use-pkgconfig-for-libxml2-config.patch90
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-fix-error-caused-by-a-new-variable-is-declared-after.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch385
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf12
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php7.conf9
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/acinclude-xml2-config.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/change-AC_TRY_RUN-to-AC_TRY_LINK.patch61
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/pear-makefile.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm-apache.conf6
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.conf510
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php5-0001-opcache-config.m4-enable-opcache.patch387
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php5-pear-makefile.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php5-phar-makefile.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php/pthread-check-threads-m4.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php_5.6.35.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/php/php_7.2.4.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch66
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools_git.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/run-ptest38
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.5.1.bb84
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.5.7.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.inc13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.2.0.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.28.0.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/python/python3-distutils-extra.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson/remove-march-native-from-CMAKE_CXX_FLAGS.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson_git.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Makefile-Change-order-of-link-flags.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.8.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tclap/tclap/Makefile.am-disable-docs.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tclap/tclap_1.2.1.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/configure.use.fontconfig.with.xft.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/confsearch.diff35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/fix-xft.diff16
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/non-linux.diff27
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tklibrary.diff22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tkprivate.diff41
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/tcltk/tk_8.6.8.bb79
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.8.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007e-shared.patch82
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007f-format-security.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/quote_cctype.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap_2007f.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/xerces-c/xerces-c_3.1.4.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0001-fix-compile-failure-against-musl-C-library.patch52
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0002-fix-formatting-issues.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.31.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_1.0.12.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/boinc-AM_CONDITIONAL.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/cross-compile.patch98
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/gtk-configure.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/opengl_m4_check.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.6.33.bb79
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc23
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/byacc/byacc/0001-byacc-do-not-reorder-CC-and-CFLAGS.patch161
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/byacc/byacc/byacc-open.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20170201.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.10.2.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/change-hard-coded-lib-path.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/set-path-of-default-config-file.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.10.2.bb73
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Add-PYTHON_ABI-suffix-to-the-python-library-name.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Fix-error.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Modify-cmakelist.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-fix-the-build-error-when-python-3.0.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-no-ruby-perl.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-sblim-sigsegv.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.9.5-python-lib-dir.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings_git.bb40
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch125
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.init212
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd/no-gcrypt-badpath.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.7.2.bb86
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.22.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20171209.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/dumb-init/dumb-init_1.2.0.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/enscript/enscript/enscript-autoconf.patch118
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/enscript/enscript_1.6.6.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/0001-fluent-bit-shared-Link-with-lpthread.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/jemalloc.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_0.12.1.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0001-reduce-build-to-conversion-tools-for-native-build.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0002-do-not-build-demos.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0003-Use-native-tools-to-build-docs.patch111
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0004-Add-configure-option-to-find-qt5-native-tools.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.desktop8
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.pngbin0 -> 9383 bytes
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot_5.2.2.bb69
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/haveged/haveged/haveged-init.d-Makefile.am-add-missing-dependency.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/haveged/haveged_1.9.2.bb40
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hiredis/files/0001-Makefile-remove-hardcoding-of-CC.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hiredis/hiredis_0.13.1.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch395
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb74
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_1.11.5.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.10.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0001-tweak-install-prefix.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0002-fix-parallel-error.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/isomd5sum/isomd5sum_1.2.1.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/jansson/jansson_2.9.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-CMakeLists.txt-fix-lib64-can-not-be-shiped-in-64bit-.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-drop-including-rpath-cmake-module.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-include-asm-ioctl.h-explicitly.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb99
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0001-fix-configure-and-compile-failures.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0002-remove-python2-support.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0003-remove-dmraid-while-compiling-with-with-dm.patch492
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0004-fix-compile-failure-against-musl-C-library.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0005-fix-a-clang-compiling-issue.patch111
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.16.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libcec/files/python-install-location.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libconfig/libconfig_1.5.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libdivecomputer/files/fix-ar.patch16
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libdivecomputer/libdivecomputer_git.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0001-makefile-Fix-build-on-linux.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0002-execinfo-Fix-compiler-errors-found-with-newer-gcc-cl.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo_1.1.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0001-Use-AM_CPPFLAGS-instead-of-INCLUDES.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0002-Update-autotools-macro.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0003-Add-format-string-qualifier-to-fix-potential-securit.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/multi-line-ACLOCAL_AMFLAGS-isnot-supported-by-autoreconf.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim_0.5.0.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/0001-Fix-warnings-found-with-clang.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/fix-parallel-make.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_1.8.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/configure.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/install.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/ldflags.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-install-so-to-man-dir.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-nfslib-and-soname.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile_1.09.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblogging/liblogging_1.0.5.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm.inc17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm_1.0.1.bb5
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus.inc13
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libqb/libqb/0001-build-fix-configure-script-neglecting-re-enable-out-.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.3.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/files/0001-Makefile.am-remove-doc-and-apidoc.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/files/0002-configure.ac-remove-prog-test-of-xmlto-and-asciidoc.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/files/0003-without-build-plugins.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/files/0004-configure.ac-remove-prog-test-of-augparse.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/files/0005-remove-python2-support.patch142
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libreport/libreport_2.9.2.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libuio/libuio/0001-include-fcntl.h-for-O_RDWR-define.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libuio/libuio/replace_inline_with_static-inline.patch121
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libuio/libuio_0.2.1.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/0001-configure-use-pkg-config-for-freetype.patch67
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-intoverflow.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-useafterfree.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf_0.2.8.4.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/0001-assume-zero-is-valid-address.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/libx86-mmap-offset.patch190
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/makefile-add-ldflags.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1_1.1.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/lockfile-progs/lockfile-progs_0.1.17.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/logwatch/logwatch_7.4.3.bb58
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/lprng/lprng_3.8.C.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0001-Don-t-reuse-weak-symbol-optopt-to-fix-FTBFS-on-mips.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0002-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0003-Fixed-Lintian-warning-warning-macro-N-not-defined.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0011-outof-Introduce-expandaddr-flag.patch71
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0012-unpack-Disable-option-processing-for-email-addresses.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0013-fio.c-Unconditionally-require-wordexp-support.patch113
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0014-globname-Invoke-wordexp-with-WRDE_NOCMD.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/0015-usr-sbin-sendmail.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/files/explicitly.disable.krb5.support.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mailx/mailx_12.5-5.bb53
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/md5deep/files/0001-Fix-errors-found-by-clang.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/md5deep/files/wrong-variable-expansion.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/md5deep/md5deep_4.4.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0001-include-cstdio-to-get-printf-definitions.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0002-configure.ac-header-detection-of-hash_map-is-broken-.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0003-gcc-6.0-build-fixes.patch93
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/use_hostcxx.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview_0.8.0.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-compare-the-first-character-of-string-to-be-null-or-.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs17.0.0-fix-the-compile-bug-of-powerpc.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-regenerate-configure.patch3238
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-Move-JS_BYTES_PER_WORD-out-of-config.h.patch75
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-Add-AArch64-support.patch76
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-mozbug746112-no-decommit-on-large-pages.patch103
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-aarch64-64k-page.patch44
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/Manually_mmap_heap_memory_esr17.patch112
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix-the-compile-error-of-powerpc64.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix_milestone_compile_issue.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_17.0.0.bb82
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb58
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/nana/nana/change-mandir-to-DESTDIR.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/nana/nana/modify-acinclude.m4-and-configure.in.patch137
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat/0001-nicstat.c-Do-not-define-uint64_t-and-uint32_t.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/0001-lock.c-Define-PTHREAD_MUTEX_RECURSIVE_NP-if-undefine.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/libssl-is-required-if-eventint-supported.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/openwsmand.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman_2.6.3.bb70
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/p7zip/files/0001-Fix-narrowing-errors-Wc-11-narrowing.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/p7zip/files/CVE-2017-17969.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/p7zip/files/do_not_override_compiler_and_do_not_strip.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/p7zip/p7zip_16.02.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/p8platform/p8platform_git.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/perl/libfile-fnmatch-perl_0.02.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.NetworkManager.rules8
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.timedate1.rules8
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-datetime.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-network.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule.inc10
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-make-netgroup-support-configurable.patch107
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit/polkit-1_pam.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/polkit/polkit_0.113.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0001-rarpd.8-add-man-file.patch89
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0002-Makefile-modify-compile-parameters.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0003-rarpd.c-bug-fix.patch263
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0004-rarpd.init-add-new-init-file.patch116
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0005-ethernet.c-remove-it.patch244
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/ethers.sample1
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/rarpd.service14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-update-Makefile-to-add-symbols-to-staticlib.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-use-default-CC-if-it-is-set.patch30
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-extended/redis/redis/init-redis-server40
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/lua-update-Makefile-to-use-environment-build-setting.patch71
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/oe-use-libc-malloc.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.conf550
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.service15
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis_3.0.2.bb55
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.6.0.bb128
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.4.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.2.14.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/0001-Include-sys-time-h.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/initscript118
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog-fix-ptest-not-finish.patch118
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.conf86
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate39
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/use-pkgconfig-to-check-libgcrypt.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.29.0.bb150
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel/sblim-cmpi-devel-2.0.3-docdir.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel_2.0.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfc-common/sblim-sfc-common_1.0.1.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/files/sfcb.service11
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-Replace-need-for-error.h-when-it-does-not-exist.patch124
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-include-stdint.h-system-header-for-UINT16_MAX.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.15-fix-provider-debugging.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-maxMsgLen.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-multilib-man-cfg.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.5-service.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.8-default-ecdh-curve-name.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.9-fix-ftbfs.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb87
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc/0001-cimxml-Include-sys-select.h-for-fd_set.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc_2.2.8.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/mdadm.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/print-format.patch218
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/0001-makefile-Add-LDFLAGS-to-linking-rule.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/Makefile-error-fix.patch127
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio_1.2.0.10.bb27
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-extended/smartmontools/files/initd.smartd112
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartd.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartmontools.default6
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/smartmontools/smartmontools_6.6.bb52
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/socketcan/canutils/0001-canutils-candump-Add-error-frame-s-handling.patch94
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/socketcan/libsocketcan_0.0.10.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch108
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/configure.patch141
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/format_security.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/libtool.patch144
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib_5.1.2.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-include-sys-select.h-for-FD_-definitions.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-multicast_blast-tipcc-Fix-struct-type-for-TIPC_GROUP.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0002-replace-non-standard-uint-with-unsigned-int.patch211
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils_git.bb52
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tiptop/tiptop_2.3.1.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/0001-include-required-system-header-files-for-fd_set-and-.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/fix-ldflags.patch104
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/unstrip.patch84
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb50
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/disable_vlockrc.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock-no_tally.patch120
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam3
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam_tally2_reset.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb59
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/volume_key/files/0001-explicitly-support-python3-by-pkg-config.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/volume_key/volume-key_0.3.9.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/wipe/files/makefile-add-ldflags.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/wipe/files/support-cross-compile-for-linux.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/wipe/wipe_git.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/zlog/zlog/0001-event.c-Cast-pthread_t-to-unsigned-long-instead-of-u.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/zlog/zlog_git.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/zram/zram/init85
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/zram/zram_0.1.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.24.2.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/files/gnome-doc-utils.m461
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/gnome-doc-utils-stub_1.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gtk+/files/0001-do-not-build-demos.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.22.2.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc18
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/cve-2012-2738.patch136
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/obsolete_automake_macros.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.28.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.12.0.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash/0001-configure.ac-Do-not-demand-linker-hash-style.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash_git.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples/configure.in-Fix-string-argument-syntax.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples_1.7.0.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb.inc85
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/0001-gfx-direct-Aboid-usng-VLAs-and-printf-formats.patch61
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/bashism.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/compar_fn_t.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/configurefix.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fix-client-gfx_state-initialisation.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fusion.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/union-sigval.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/use-PTHREAD_MUTEX_RECURSIVE.patch116
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/directfb/directfb_1.7.7.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.10.bb73
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbida/files/0001-Avoid-using-host-path.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbida/files/fix-preprocessor.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbida/files/support-jpeg-turbo.patch1854
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fbida/files/use-jpeg-turbo.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20170731.bb60
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0001-Fix-compilation-for-disabled-gnome.patch69
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0002-Avoid-absolute-symlinks.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.7.bb114
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/files/0001-Make-GLM_ENABLE_EXPERIMENTAL-a-configurable-option.patch860
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/files/0002-glm-install-headers-only.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9-a2.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0002-Look-for-popt-with-GP_CHECK_LIBRARY-function.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2_2.5.14.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2-device.fdi9533
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2.fdi19018
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/40-libgphoto2.rules1955
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.16.bb54
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0001-Include-stdlib.h-for-exit-API.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0002-timing.c-Fix-format-security-errors.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/Makevars25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_1.900.1.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.74.4.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libmng/libmng_2.0.3.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.11.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-Fix-the-error-of-can-t-find-header-file.patch101
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-use-_nl_msg_cat_cntr-only-with-glibc.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_git.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-GCC-8-warning.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-build-with-clang.patch687
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libyui/libyui_git.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-check-for-libexecinfo-providing-backtrace-APIs.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-lxdm.conf.in-blacklist-root-for-release-images.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-let-autotools-create-lxdm.conf.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam-debug13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm.conf4
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb80
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/numlockx/numlockx_1.2.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb56
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openjpeg/files/0001-bmp_read_info_header-reject-bmp-files-with-biBitCoun.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.2.0.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/packagegroups/packagegroup-fonts-truetype.bb40
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/takao-fonts/takao-fonts_003.03.01.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/terminus-font/terminus-font_4.38.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract-lang_git.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0001-tigervnc-remove-includedir.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0002-do-not-build-tests-sub-directory.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0003-add-missing-dynamic-library-to-FLTK_LIBRARIES.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0004-tigervnc-add-fPIC-option-to-COMPILE_FLAGS.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0005-Remove-INITARGS-from-xserver119.patch.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.8.0.bb132
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/ts.conf25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/tslib.sh8
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.15.bb82
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts/44-source-han-sans-cn.conf19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts_1.004.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts/44-source-han-sans-jp.conf19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts_1.004.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts/44-source-han-sans-kr.conf19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts_1.004.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts/44-source-han-sans-tw.conf19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts_1.004.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-arphic-uming_20080216.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf16
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu_2.37.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-droid_git.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-gentium_1.02.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata/OFL.txt97
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow/30-0-liberation-sans-narrow.conf18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation_0.2.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lklug_0.6-14.20090803cvs.fc24.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-mplus_027.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-pt-sans_1.1.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-sazanami_20040629.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-tlwg_0.6.1.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-ubuntu-font-family_0.80.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-vlgothic_20141206.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-wqy-zenhei_0.9.45.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf.inc12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/vdpau/libvdpau_git.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/endian-fix.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/remove-redundant-RPATH.patch86
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/starting-fix.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.13.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xcursorgen/xcursorgen_1.0.5.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/bdftopcf_1.1.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/iceauth_1.0.7.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg/0001-Makefile.am-Error-Fix.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg_1.1.1.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/setxkbmap_1.3.1.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/twm_1.0.9.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xclock_1.0.5.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xfontsel_1.0.5.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xgamma_1.0.6.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbevd_1.1.4.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbprint_1.0.4.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.4.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsatoms_1.1.2.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsclients_1.1.4.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsfonts_1.0.6.bb10
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmag_1.0.5.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmessage_1.0.4.bb10
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrdb_1.1.0.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrefresh_1.0.5.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetmode_1.0.0.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.1.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xstdcmap_1.0.3.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_330.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwd_1.0.6.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwud_1.0.5.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-data/xbitmaps_1.1.1.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-data/xorg-data-common.inc12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-doc-common.inc12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-sgml-doctools_1.7.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi11
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules5
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-0.0.6-xf86XInputSetScreen.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-port-ABI-12-r48.patch196
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib_0.0.6.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-void_1.4.1.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-ati_7.8.0.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga/checkfile.patch68
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga_1.6.5.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-nouveau_1.0.15.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-100dpi_1.0.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-utopia-100dpi_1.0.4.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-100dpi_1.0.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bitstream-100dpi_1.0.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-cursor-misc_1.0.3.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-misc-misc_1.1.2.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-font/xorg-fonts-100dpi.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil-1.1.0/mkg3states-1.1.patch55
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil_1.1.0.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxaw_1.0.13.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxkbui_1.0.2.bb10
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-COPYING-add-GPLv2-license-file.patch362
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-Don-t-install-Xsession-or-Xserver.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0002-add-setdpi-Xinit.d-script.patch110
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0006-add-support-for-etc-X11-xserver-system.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0007-use-own-functions-file-instead-etc-init.d-functions.patch85
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0008-xserver-common-add-dpi-and-nocursor-params-for-gta01.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0009-xserver-common-add-support-for-n900-alias-nokia_rx-5.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0010-xserver-common-add-support-for-nexus-S-alias-herring.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0011-xserver-common-add-support-for-nexus-one-alias-mahim.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0012-xserver-common-add-support-for-gta04-alias-OpenPhoen.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0013-xserver-common-add-support-for-tuna-alias-Galaxy-Nex.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0015-xserver-common-disable-TCP-connections.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common_1.34.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/30xTs_Calibrate.sh13
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/change-cross.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/cleanup.patch621
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/dso_linking_change_build_fix.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal_0.6.3.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/agent-proxy/agent-proxy_git.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/agent-proxy/files/0001-Makefile-Add-LDFLAGS-variable.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/cpupower/cpupower.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-cross_add_configure_option.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/0003-crash-detect-the-sysroot-s-glibc-header-file.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/7001force_define_architecture.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/7003cross_ranlib.patch10
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/config-site.crash-7.0.91
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/donnot-extract-gdb-during-do-compile.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/gdb_build_jobs_and_not_write_crash_target.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/remove-unrecognized-gcc-option-m32-for-mips.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-common-sim-arange-fix-extern-inline-handling.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-ppc-drop-LIBS-from-psim-dependency.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.0.bb115
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/fix_systemd_path.patch127
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.0.5.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch.inc49
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0001-kpatch-build-add-cross-compilation-support.patch103
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/linux/linux.inc131
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch134
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch73
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.2.bb54
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-fix-compile-error-on-arch-x32.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-Initialize-pointer-to-config-struct-t.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.init40
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.service11
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/minicoredumper/minicoredumper_2.0.0.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc65
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Add-rmb-definition-for-NIOS2-architecture.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Fix-FTBFS-problem-with-GCC-6.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/acinclude.m4581
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/automake-foreign.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/musl.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/oprofile-cross-compile-tests.patch98
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/root-home-dir.patch44
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/run-ptest19
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.1.0.bb10
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss/libio.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss_1.0.28.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/audiofile/audiofile_0.3.6.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0001-fix-negative-shift-constants.patch77
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0002-fix-build-on-gcc6.patch75
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0003-fix-CVE-2015-7747.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/cdrkit/cdrkit_1.1.11.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-define-__THROW-to-avoid-build-issue-with-musl.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-do-not-create-a-run-test-to-determine-order-of-bitfi.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-genisoimage-Fix-fprintf-format-errors.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0002-Do-not-use-rcmd-on-build-with-musl.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0001-audio_alsa09.c-alsa-drain-fix.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0002-Undefine-open64-and-fopen64.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0003-Use-I-path-in-configure.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/esound/esound/no-docs.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/esound/esound_0.2.41.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/faad2/faad2_2.7.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib/acdefine.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0001-wscript-add-pthread-library-dependency-to-fix-linkin.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0002-aarch64.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid_8.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/jack/jack_git.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libass/libass_0.14.0.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libburn/libburn_1.4.0.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio-paranoia_10.2+0.93+1.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio_2.0.0.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_5.0.3.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/0004-Remove-clang-unsupported-compiler-flags.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/add-pkgconfig.patch70
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/automake-foreign.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/no-force-mem.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad_0.15.1b.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmms/libmms_0.6.4.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libmodplug/libmodplug_0.8.8.5.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libopus/libopus_1.1.3.bb52
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image/configure.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image_1.2.12.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl2-image_2.0.1.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer/configure.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer_1.2.12.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl2-mixer_2.0.2.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/live555/files/config.linux-cross17
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/live555/live555.inc56
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/live555/live555_20170410.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/mikmod/libmikmod_3.3.6.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna-daemon.init.d54
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf15
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb73
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/opus-tools/opus-tools_0.1.8.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0001-build-sys-Use-C-11-for-building.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0002-build-sys-Add-m4-file-for-AX_CXX_COMPILE_STDCXX_11.patch624
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol_3.0.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/sound-themes/sound-theme-freedesktop_0.8.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-buildsystem-do-not-assume-building-in-source-tree.patch108
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-ir-ctl-Define-TEMP_FAILURE_RETRY-if-undefined.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0002-contrib-test-Link-mc_nextgen_test-with-libargp-if-ne.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0003-v4l2-ctl-Do-not-use-getsubopt.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/export-mediactl-headers.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/mediactl-pkgconfig.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.12.3.bb55
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta/0001-Add-stdout-mode-to-allow-streaming-over-the-network-.patch961
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta_git.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/wavpack/wavpack_4.60.1.bb10
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx/libvpx-configure-support-blank-prefix.patch52
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.6.1.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext/auxdir.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext_1.0-5.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp/xsp-fix-pc.patch10
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp_1.0.0-8.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.4.4.bb53
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geos/files/fix-gcc6-isnan.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geos/files/geos-config-Add-includedir-variable.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geos/geos.inc21
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.4.2.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-include-sys-ttydefaults.h.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0004-SConstruct-disable-html-and-man-docs-building-becaus.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.17.bb137
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite-4.2.0/geos-config.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite_4.2.0.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/0001-orrery-Fix-sprintf-format.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/orrery.pngbin0 -> 19475 bytes
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/use.GdkPixbuf.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/orrery/orrery_2.7.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/proj/proj_4.9.3.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc/makefile-add-ldflags.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc_1.3.1.bb66
-rw-r--r--meta-openembedded/meta-oe/recipes-security/tomoyo-tools/tomoyo-tools_2.5.0.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/dash/dash/0001-Fix-printf-format-errors-with-clang.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.9.1.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0001-Enable-system-malloc-on-all-linux.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0002-Add-debian-csh-scripts.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.20.00.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/zsh/zsh_5.4.2.bb64
-rw-r--r--meta-openembedded/meta-oe/recipes-support/anthy/anthy/2ch_t.patch5062
-rw-r--r--meta-openembedded/meta-oe/recipes-support/anthy/anthy/native-helpers.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-support/anthy/anthy/not_build_elc.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/anthy/anthy/target-helpers.patch111
-rw-r--r--meta-openembedded/meta-oe/recipes-support/anthy/anthy_9100h.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/asio/asio.inc15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/asio/asio/0001-Automatically-handle-glibc-variant-of-strerror_r-wit.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/asio/asio/0001-use-POSIX-poll.h-instead-of-sys-poll.h.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-support/asio/asio_1.10.6.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/0001-include-missing-header-files.patch97
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch52
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.99_atop1
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.atop.conf1
-rw-r--r--meta-openembedded/meta-oe/recipes-support/atop/atop_2.2.3.bb63
-rw-r--r--meta-openembedded/meta-oe/recipes-support/augeas/augeas.inc33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/augeas/augeas/0001-Unset-need_charset_alias-when-building-for-musl.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/augeas/augeas/add-missing-argz-conditional.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/augeas/augeas/sepbuildfix.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/augeas/augeas_1.5.0.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-avro-c-Fix-build-with-clang-compiler.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.8.1.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame/pessimizing-move.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/0001-libgeis-Compare-the-first-character-of-string-to-nul.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/fix-indentation-for-gcc6.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb55
-rw-r--r--meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ccid/ccid/no-dep-on-libfl.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.4.24.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_1.14.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ckermit/ckermit_302.bb61
-rw-r--r--meta-openembedded/meta-oe/recipes-support/cpprest/cpprest-2.10.2/fix-cmake-install.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.2.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ctapi-common/ctapi-common_1.1-14.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemonize/daemonize_git.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemonize/files/fix-ldflags-for-gnuhash.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-Fix-QA-Issue.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-error.h-include-errno.h-instead-of-extern-int.diff25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff47
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb51
-rw-r--r--meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb54
-rw-r--r--meta-openembedded/meta-oe/recipes-support/devmem2/devmem2.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch91
-rw-r--r--meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util-native_0.9.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util/0001-Revert-Makefile.am-Drop-static-dfu-util.patch68
-rw-r--r--meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util_0.9.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/digitemp/digitemp_git.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/dos2unix/dos2unix_7.4.0.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.3.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.1-verbose.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-error-return.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-spaces.patch66
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eject/eject/eject-timeout.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eject/eject_2.1.5.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca/configure-hack.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca/configure-remove-dumbness.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca/dont-run-tests.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca/libenca-003-iconv.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca/makefile-remove-tools.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/enca/enca_1.9.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-support/espeak/files/gcc-narrowing-warning-fix.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-support/eventlog/eventlog_0.2.13.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.13.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/fbset-2.1-fix-makefile-dep.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/makefile.patch11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/fb.modes3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/om-gta01/fb.modes29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/omap3-pandora/fb.modes6
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemuarm/fb.modes17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemumips/fb.modes17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset/0001-fbset-including-asm-types.h-is-needed-on-all-linux-s.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fbset/fbset_2.1.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch80
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fftw/fftw_3.3.7.bb80
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk-native.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk.inc21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk/0001-Fl_Preferences.cxx-do-not-use-dlopen-in-case-glibc-s.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk/0002-always-build-fluid-and-export-pointers.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk/0003-CMake-build-Force-shared-libs-with-unsuffixed-names.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk/disable_test.patch11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/fltk/fltk/fltk-no-freetype-config.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb86
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb48
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gflags/gflags_2.2.0.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/glog/glog/0001-configure.ac-Allow-user-to-disable-gflags.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.4.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Support-Atomic-ops-on-clang.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Use-ucontext_t-instead-of-struct-ucontext.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-disbale-heap-checkers-and-debug-allocator-on-musl.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-include-fcntl.h-for-loff_t-definition.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/disable_libunwind_aarch64.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/sgidef.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.6.1.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm/0001-Use-sigemptyset-API-instead-of-__sigemptyset.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm/gpm.service.in9
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm/init32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm/no-docs.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm/processcreds.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb47
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-Append-instead-of-overriding-LDFLAGS.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-remove-strip.patch61
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gradm/gradm_3.1.bb52
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gsl/gsl.inc9
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gsl/gsl_1.15.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-Fix-out-of-tree-builds.patch178
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-stdgsoap2-Fix-build-with-musl.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.51.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/0001-backtrace-Replace-struct-ucontext-with-ucontext_t.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-0.3-beta15-autodetect-717479.patch92
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-no-nls-support.patch66
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp.db531
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp_0.3-beta15-52.diff2288
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/init100
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp_0.3-beta15.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hidapi/hidapi_git.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/htop/files/0001-Use-pkg-config.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/htop/htop_2.1.0.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/avoid-obsolete-gnutls-apis.patch55
-rw-r--r--meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/fix-configure-option-parsing.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb82
-rw-r--r--meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotifywait-fix-compile-error-with-GCC-6.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/joe/joe/0001-adjust-signature-of-main.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/joe/joe_3.1.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.7.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.11.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libatasmart/files/0001-Makefile.am-add-CFLAGS-and-LDFLAGS-definiton.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libatasmart/libatasmart_0.19.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libbytesize/files/0001-remove-python2-support.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_0.10.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch92
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libcyusbserial/libcyusbserial_git.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libee/libee.inc39
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/libee/libee/ezapi1.sh14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libee/libee/libee-parallel-make.patch20
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/libee/libee/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libee/libee_0.4.1.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.4.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libestr/libestr_0.1.10.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libftdi/libftdi_1.4.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.24.3.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.0.1.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libjs/libjs-jquery_1.7.2.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libjs/libjs-sizzle_1.10.18.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liblinebreak/liblinebreak_1.2.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.55.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/0001-signal.c-SIGCLD-and-SIGCHILD-are-same-on-sytem-V-sys.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/libnih_1.0.3-4ubuntu16.patch3593
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libnih/libnih_1.0.3.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboauth/liboauth_1.0.3.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libol/libol/configure.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libol/libol_0.3.18.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboop/liboop/explicit_linking.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboop/liboop/new-readline-typedef.patch11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboop/liboop/read_bugfixes.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboop/liboop/tcl_dev.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/liboop/liboop_1.0.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.7.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libraw1394/libraw1394_2.1.2.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf/use.pkg-config.for.freetype2.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf_2.0.11.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/automake_foreign.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/use.pkg-config.for.freetype2.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf_2.0.14.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/libsmi-fix-the-test-dump-files.patch277
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/smi.conf48
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsoc/libsoc_0.8.2.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.7.3.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtar/files/0002-Do-not-strip-libtar.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtar/files/fix_libtool_sysroot.patch19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtar/libtar_1.2.20.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-include-sys-select.h-for-fd_set-definition.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-disable-RedHat-specific-test.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libteam/libteam/0002-teamd-Re-adjust-include-header-order.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb42
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml_2.6.2.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_5.0.1.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libusbg/libusbg/0001-Fix-out-of-tree-builds.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb41
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0001-Fix-macro-error.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/libutempter-remove-glibc-assumption.patch81
-rw-r--r--meta-openembedded/meta-oe/recipes-support/links/files/ac-prog-cxx.patch11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/links/files/links2.desktop14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/links/links-x11_2.7.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/links/links.inc17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/links/links_2.7.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils/0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch61
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/log4c/log4c/0001-Use-the-API-properly-in-the-example-format-security-.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/log4c/log4c/fix_configure_with-expat.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/log4c/log4c_1.2.4.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/log4cpp/files/fix-pc.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/logwarn/logwarn_1.0.14.bb52
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch182
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-implement-libc-specific-reopen_stream.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0002-Guard-use-of-mallinfo-with-__GLIBC__.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0004-tweak-MODPROBE_CMD-for-cross-compile.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/files/lvm.conf326
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.171.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc60
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb54
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.48.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mbuffer/mbuffer_20140310.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mcelog/mce-inject_git.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mcelog/mcelog/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_1.49.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mg/mg/0001-Undefine-REGEX-for-musl-based-systems.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mg/mg/0001-fileio-Include-sys-param.h-for-MAXNAMLEN.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mg/mg/0002-fileio-Define-DEFFILEMODE-if-platform-is-missing.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mg/mg_20170401.bb37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb58
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/minini/minini_1.2.b.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-kpartx-include-limits.h-for-PATH_MAX.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-attempt-at-common-multipath.rules.patch107
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-fixup-udev-rules-for-redhat.patch110
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-Remove-the-property-blacklist-exception-builtin.patch70
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-don-t-start-without-a-config-file.patch108
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch648
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch166
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-trigger-change-uevent-on-new-device-creation.patch138
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-libmultipath-change-how-RADOS-checker-is-enabled.patch56
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-set-verbosity-to-default-during-config.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-mpath-skip-device-configs-without-vendor-product.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-fix-show-maps-json-crash.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-multipath-tools-modify-Makefile.inc-for-cross-compil.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-Always-use-devmapper.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-Always-use-devmapper-for-kpartx.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipath.conf.example90
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipathd.oe146
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.1.bb113
-rw-r--r--meta-openembedded/meta-oe/recipes-support/nano/nano.inc17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/nano/nano_2.9.3.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-CMakeLists.txt-Remove-mthumb-interwork.patch44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-Dont-specify-march-explicitly.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ne10/ne10_1.2.1.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/neon/neon/pkgconfig.patch15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/neon/neon_0.30.2.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/nmon/nmon/0001-lmon16g.c-Adjust-system-headers.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/nmon/nmon_16g.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/numactl/numactl/0001-define-run-test-target.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/numactl/numactl/Fix-the-test-output-format.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-support/numactl/numactl/Makefile7
-rw-r--r--meta-openembedded/meta-oe/recipes-support/numactl/numactl/fix-null-pointer.patch28
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/numactl/numactl/run-ptest9
-rw-r--r--meta-openembedded/meta-oe/recipes-support/numactl/numactl_git.bb61
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ode/ode/install.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/onig/files/configure.patch13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/onig/files/do-not-use-system-headers.patch44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/onig/onig_5.9.6.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/tools.conf2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.init66
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.service11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-include-poll.h-instead-of-obsolete-sys-poll.h.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Rename-poll.h-to-vm_poll.h.patch756
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Add-Wno-incompatible-pointer-types-and-Wno-error-add.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch144
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-use-posix-strerror_r-unless-gnu.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Add-support-for-building-with-system-libtirpc.patch342
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-gnu-ucontext.patch65
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.1.5.bb114
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct.udev.in-disablePROGRAM.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct_usb.in-modify-UDEVINFO.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct/openct.init89
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct/openct.service13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct/openct.sysconfig5
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb94
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-build-workaround-GCC-7.1.1-compilation-issue-with-sa.patch127
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-carotene-don-t-use-__asm__-with-aarch64.patch1250
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Do-not-enable-asm-with-clang.patch993
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Make-opencv-ts-create-share-library-intead-of-static.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-imgcodecs-refactoring-improve-code-quality.patch656
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch80
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-imgproc-test-add-checks-for-remove-call.patch186
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/CVE-2017-14136.patch288
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/already-exists.patch394
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/fixpkgconfig.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/javagen.patch16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/protobuf.patch57
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/tinydnn.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/uselocalxfeatures.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.3.bb203
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/initscript35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/install-strip.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-2.4.28-gnutls-gcrypt.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-CVE-2015-3276.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-m4-pthread.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/slapd.service10
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/thread_stub.patch20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap/use-urandom.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.45.bb256
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.16.0.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opensync/wbxml2_0.10.8.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/checkserverkey20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/loadmof.sh118
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/novell-openwbem-root-acl.mof21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-etc_pam.d_openwbem7
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-owcimomd.init131
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-rpmlintrc2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/owcimomd.service12
-rw-r--r--meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/rmmof.sh53
-rw-r--r--meta-openembedded/meta-oe/recipes-support/p910nd/p910nd/fix-var-lock.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-support/p910nd/p910nd_0.95.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.22.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-support/picocom/picocom_git.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/libotr/fix_qa-issue_include.patch18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/libotr/sepbuild.patch16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/libotr_4.1.1.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/pidgin-otr_4.0.2.bb15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/pidgin-cross-python-265.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/purple-OE-branding-25.patch24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/sanitize-configure.ac.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pidgin/pidgin_2.12.0.bb120
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-make-Respect-variables-from-environement.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-png-fix-IDAT-windowsize-Fix-format-string-errors-in-.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/10-pngsplit-format-strings.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck_2.3.0.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest9
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poco/poco_1.8.0.1.bb106
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poppler/poppler-data_0.4.8.bb36
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-Do-not-overwrite-all-our-build-flags.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poppler/poppler/0002-CairoOutputDev.cc-fix-build-error-when-using-fixedpo.patch100
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.63.0.bb56
-rw-r--r--meta-openembedded/meta-oe/recipes-support/portaudio/files/ldflags.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-support/portaudio/portaudio-v19_20161030.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pps-tools/pps-tools_git.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-compile-errors.patch606
-rw-r--r--meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-man-file.patch83
-rw-r--r--meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-modify-parameters.patch127
-rw-r--r--meta-openembedded/meta-oe/recipes-support/procmail/procmail/man-file-mailstat.1-from-debian.patch60
-rw-r--r--meta-openembedded/meta-oe/recipes-support/procmail/procmail_3.22.bb45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/Makefile3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/i2c.patch15
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/munmap.patch22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/pxaregs.c1975
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/serial.patch14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/usb.patch17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs_1.14.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/raptor2/files/0001-configure.ac-do-additional-checks-on-libxml2-also-wh.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/raptor2/raptor2_2.0.15.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/rdfind/files/reproducible_build.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/rdfind/rdfind_1.3.4.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot/configure-fix-cmd_rsync.patch44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb53
-rw-r--r--meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/satyr/files/0001-do-not-support-python2.patch84
-rw-r--r--meta-openembedded/meta-oe/recipes-support/satyr/files/0002-fix-compile-failure-against-musl-C-library.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.23.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-support/serial-utils/pty-forward-native.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward/0001-serial_forward-Disable-default-static-linking.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward_git.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-Fix-build-with-clang.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/srecord/files/add-option-to-remove-docs.patch57
-rw-r--r--meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch872
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch123
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch40
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/synergy/synergy_git.bb35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/Fix-the-memory-leak-problem-when-HAVE_ENVIRON-defined.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/configure.ac-add-option-enable-thread-tls-to-manage-.patch47
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-config-libnet.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-invalid-ownership.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/initscript62
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf155
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/files/volatiles.03_syslog-ng1
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc114
-rw-r--r--meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.8.1.bb11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tbb/tbb/0001-mallinfo-is-glibc-specific-API-mark-it-so.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/0001-do-not-strip-pdata_tools-at-do_install.patch33
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.6.3.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet/remove-hard-coded-include-and-lib-paths.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet_1.4.48.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tree/tree_1.7.0.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-Make-udev-rules-directory-configurable.patch89
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-fix-build-with-newer-glibc-versions.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks/optional-depends.patch498
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks/udisks-1.0.5-fix-service-file.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-data-fix-out-of-tree-build.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks2/non-gnu-libc.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.6.bb49
-rw-r--r--meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uim/uim/0001-Add-support-for-aarch64.patch80
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uim/uim/0001-fix-bug-for-cross-compile.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uim/uim/uim-module-manager.patch21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.6.bb144
-rw-r--r--meta-openembedded/meta-oe/recipes-support/unixodbc/files/do-not-use-libltdl-source-directory.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb34
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.8.4.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch11
-rw-r--r--meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb21
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/uthash/uthash/run-ptest10
-rw-r--r--meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb46
-rw-r--r--meta-openembedded/meta-oe/recipes-support/utouch/files/0001-include-sys-stat.h-for-fixing-build-issue-on-musl.patch29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/utouch/files/remove-man-page-creation.patch16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-support/utouch/utouch-frame_git.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-support/utouch/utouch-mtview_git.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils45
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.8.bb78
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vim/files/CVE-2017-17087.patch70
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch27
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch38
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.0.0983.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vim/vim_8.0.0983.bb114
-rw-r--r--meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/0001-Fix-issue-599.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4.patch155
-rw-r--r--meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/9ddb300d874a30db35e3ad58f188944bef0bf31b.patch600
-rw-r--r--meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/disable-tests.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.7.0.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch656
-rw-r--r--meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xdelta/xdelta3_3.0.11.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xdg-user-dirs/xdg-user-dirs_0.17.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/0001-usage2c.awk-fix-wrong-basename-regexp.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/configure.ac.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xmlstarlet/xmlstarlet_1.6.1.bb26
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xorg-xrdp/xorgxrdp_0.2.5.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Added-req_distinguished_name-in-etc-xrdp-openssl.con.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-of-CVE-2017-16927.patch148
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-sesman.ini-and-xrdp.ini.patch75
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-the-compile-error.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/xrdp.sysconfig4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xrdp/xrdp_0.9.4.bb99
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-make-relies-GNU-extentions.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-undefine-__va_arg_pack.patch51
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zbar/zbar_0.10.bb28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zile/files/remove-help2man.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zile/zile_2.4.14.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-test/cppunit/cppunit_1.13.2.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-test/cppunit/files/0001-doc-Makefile.am-do-not-preserve-file-flags-when-copy.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb19
-rw-r--r--meta-openembedded/meta-oe/recipes-test/cunit/files/fixup-install-docdir.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.3.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-test/evtest/evtest_git.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fbtest/fb-test_git.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Add-correct-printf-qualifier-for-off_t.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Include-poll.h-instead-of-deprecated-sys-poll.h.patch48
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-ignore-constant-logical-operand-warning-with-clang.patch83
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Add-C99-defined-format-for-printing-uint64_t.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Define-__SWORD_TYPE-if-not-defined-by-libc.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-Undefine-PAGE_SIZE.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-use-intptr_t-to-fix-pointer-to-int-cast-issues.patch76
-rw-r--r--meta-openembedded/meta-oe/recipes-test/fwts/fwts_git.bb39
-rw-r--r--meta-openembedded/meta-oe/recipes-test/gtest/gtest/Add-pkg-config-support.patch106
-rw-r--r--meta-openembedded/meta-oe/recipes-test/gtest/gtest_1.8.0.bb24
-rw-r--r--meta-openembedded/meta-oe/recipes-test/pm-qa/pm-qa_git.bb65
-rw-r--r--meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0001-Several-changes-to-fix-musl-build.patch141
-rw-r--r--meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0002-stress-fcntl-fix-build-for-musl.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng_0.09.14.bb25
-rw-r--r--meta-openembedded/meta-oe/recipes-test/testfloat/files/0001-Makefile-for-cross-compile-SoftFloat.patch348
-rw-r--r--meta-openembedded/meta-oe/recipes-test/testfloat/files/0002-Makefile-for-cross-compile-TestFloat.patch396
-rw-r--r--meta-openembedded/meta-oe/recipes-test/testfloat/testfloat_3a.bb35
1730 files changed, 142796 insertions, 0 deletions
diff --git a/meta-openembedded/meta-oe/COPYING.MIT b/meta-openembedded/meta-oe/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-oe/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/meta-openembedded/meta-oe/README b/meta-openembedded/meta-oe/README
new file mode 100644
index 000000000..7cde0a2da
--- /dev/null
+++ b/meta-openembedded/meta-oe/README
@@ -0,0 +1,14 @@
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-oe]' in the subject'
+
+When sending single patches, please use something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-oe][PATCH'
+
+You are encouraged to fork the mirror on github https://github.com/openembedded/meta-oe/ to share your patches, this is preferred for patch sets consisting of more than one patch. Other services like gitorious, repo.or.cz or self hosted setups are of course accepted as well, 'git fetch <remote>' works the same on all of them. We recommend github because it is free, easy to use, has been proven to be reliable and has a really good web GUI.
+
+Main layer maintainer: Armin Kuster <akuster808@gmail.com>
diff --git a/meta-openembedded/meta-oe/classes/breakpad.bbclass b/meta-openembedded/meta-oe/classes/breakpad.bbclass
new file mode 100644
index 000000000..36f11ff48
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/breakpad.bbclass
@@ -0,0 +1,33 @@
+# Class to inherit when you want to build against Breakpad.
+# Apart from inheriting this class, you need to set BREAKPAD_BIN in
+# your recipe, and make sure that you link against libbreakpad_client.a.
+
+DEPENDS += "breakpad breakpad-native"
+
+CFLAGS += "-I${STAGING_DIR_TARGET}${includedir}/breakpad "
+CXXFLAGS += "-I${STAGING_DIR_TARGET}${includedir}/breakpad "
+
+BREAKPAD_BIN ?= ""
+
+python () {
+ breakpad_bin = d.getVar("BREAKPAD_BIN")
+
+ if not breakpad_bin:
+ PN = d.getVar("PN")
+ FILE = os.path.basename(d.getVar("FILE"))
+ bb.error("To build %s, see breakpad.bbclass for instructions on \
+ setting up your Breakpad configuration" % PN)
+ raise ValueError('BREAKPAD_BIN not defined in %s' % PN)
+}
+
+# Add creation of symbols here
+PACKAGE_PREPROCESS_FUNCS += "breakpad_package_preprocess"
+breakpad_package_preprocess () {
+ mkdir -p ${PKGD}/usr/share/breakpad-syms
+ find ${D} -name ${BREAKPAD_BIN} -exec sh -c "dump_syms {} > ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}.sym" \;
+}
+
+PACKAGES =+ "${PN}-breakpad"
+
+FILES_${PN}-breakpad = "/usr/share/breakpad-syms"
+
diff --git a/meta-openembedded/meta-oe/classes/dos2unix.bbclass b/meta-openembedded/meta-oe/classes/dos2unix.bbclass
new file mode 100644
index 000000000..1bad998dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/dos2unix.bbclass
@@ -0,0 +1,14 @@
+# Class for use to convert all CRLF line terminators to LF
+# provided that some projects are being developed/maintained
+# on Windows so they have different line terminators(CRLF) vs
+# on Linux(LF), which can cause annoying patching errors during
+# git push/checkout processes.
+
+do_convert_crlf_to_lf[depends] += "dos2unix-native:do_populate_sysroot"
+
+# Convert CRLF line terminators to LF
+do_convert_crlf_to_lf () {
+ find ${S} -type f -exec dos2unix {} \;
+}
+
+addtask convert_crlf_to_lf after do_unpack before do_patch
diff --git a/meta-openembedded/meta-oe/classes/gitpkgv.bbclass b/meta-openembedded/meta-oe/classes/gitpkgv.bbclass
new file mode 100644
index 000000000..2d9680a35
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/gitpkgv.bbclass
@@ -0,0 +1,122 @@
+# gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
+# used in PKGV, as described bellow:
+#
+# - GITPKGV which is a sortable version with the format NN+GITHASH, to
+# be used in PKGV, where
+#
+# NN equals the total number of revs up to SRCREV
+# GITHASH is SRCREV's (full) hash
+#
+# - GITPKGVTAG which is the output of 'git describe' allowing for
+# automatic versioning
+#
+# gitpkgv.bbclass assumes the git repository has been cloned, and
+# contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG} should never be
+# used in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as
+# well as SRCREV = "<some fixed git hash>".
+#
+# WARNING: if upstream repository is always using consistent and
+# sortable tag name scheme you can get sortable version including tag
+# name with ${GITPKGVTAG}, but be aware that ie tag sequence "v1.0,
+# v1.2, xtest, v2.0" will force you to increment PE to get upgradeable
+# path to v2.0 revisions
+#
+# use example:
+#
+# inherit gitpkgv
+#
+# PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
+# PKGV = "1.0+gitr${GITPKGV}" # expands also to something like 1.0+gitr31337+4c1c21d7d
+#
+# or
+#
+# inherit gitpkgv
+#
+# PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
+# PKGV = "${GITPKGVTAG}" # expands to something like 1.0-31337+g4c1c21d
+# if there is tag v1.0 before this revision or
+# ver1.0-31337+g4c1c21d if there is tag ver1.0
+
+GITPKGV = "${@get_git_pkgv(d, False)}"
+GITPKGVTAG = "${@get_git_pkgv(d, True)}"
+
+def gitpkgv_drop_tag_prefix(version):
+ import re
+ if re.match("v\d", version):
+ return version[1:]
+ else:
+ return version
+
+def get_git_pkgv(d, use_tags):
+ import os
+ import bb
+ from pipes import quote
+
+ src_uri = d.getVar('SRC_URI').split()
+ fetcher = bb.fetch2.Fetch(src_uri, d)
+ ud = fetcher.ud
+
+ #
+ # If SRCREV_FORMAT is set respect it for tags
+ #
+ format = d.getVar('SRCREV_FORMAT')
+ if not format:
+ names = []
+ for url in ud.values():
+ if url.type == 'git' or url.type == 'gitsm':
+ names.extend(url.revisions.keys())
+ if len(names) > 0:
+ format = '_'.join(names)
+ else:
+ format = 'default'
+
+ found = False
+ for url in ud.values():
+ if url.type == 'git' or url.type == 'gitsm':
+ for name, rev in url.revisions.items():
+ if not os.path.exists(url.localpath):
+ return None
+
+ found = True
+
+ vars = { 'repodir' : quote(url.localpath),
+ 'rev' : quote(rev) }
+
+ rev = bb.fetch2.get_srcrev(d).split('+')[1]
+ rev_file = os.path.join(url.localpath, "oe-gitpkgv_" + rev)
+
+ if not os.path.exists(rev_file) or os.path.getsize(rev_file)==0:
+ commits = bb.fetch2.runfetchcmd(
+ "cd %(repodir)s && "
+ "git rev-list %(rev)s -- 2> /dev/null "
+ "| wc -l" % vars,
+ d, quiet=True).strip().lstrip('0')
+
+ if commits != "":
+ oe.path.remove(rev_file, recurse=False)
+ with open(rev_file, "w") as f:
+ f.write("%d\n" % int(commits))
+ else:
+ commits = "0"
+ else:
+ with open(rev_file, "r") as f:
+ commits = f.readline(128).strip()
+
+ if use_tags:
+ try:
+ output = bb.fetch2.runfetchcmd(
+ "cd %(repodir)s && "
+ "git describe %(rev)s 2>/dev/null" % vars,
+ d, quiet=True).strip()
+ ver = gitpkgv_drop_tag_prefix(output)
+ except Exception:
+ ver = "0.0-%s-g%s" % (commits, vars['rev'][:7])
+ else:
+ ver = "%s+%s" % (commits, vars['rev'][:7])
+
+ format = format.replace(name, ver)
+
+ if found:
+ return format
+
+ return '0+0'
diff --git a/meta-openembedded/meta-oe/classes/gitver.bbclass b/meta-openembedded/meta-oe/classes/gitver.bbclass
new file mode 100644
index 000000000..07f44c34b
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/gitver.bbclass
@@ -0,0 +1,84 @@
+# Copyright (C) 2009 Chris Larson <clarson@kergoth.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+#
+# gitver.bbclass provides a GITVER variable which is a (fairly) sane version,
+# for use in ${PV}, extracted from the ${S} git checkout, assuming it is one.
+# This is most useful in concert with srctree.bbclass.
+
+def git_drop_tag_prefix(version):
+ import re
+ if re.match("v\d", version):
+ return version[1:]
+ else:
+ return version
+
+GIT_TAGADJUST = "git_drop_tag_prefix(version)"
+GITVER = "${@get_git_pv(d, tagadjust=lambda version:${GIT_TAGADJUST})}"
+GITSHA = "${@get_git_hash(d)}"
+
+def gitrev_run(cmd, path):
+ (output, error) = bb.process.run(cmd, cwd=path)
+ return output.rstrip()
+
+def get_git_pv(d, tagadjust=None):
+ import os
+
+ srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
+ gitdir = os.path.abspath(os.path.join(srcdir, ".git"))
+ try:
+ ver = gitrev_run("git describe --tags", gitdir)
+ except:
+ try:
+ ver = gitrev_run("git rev-parse --short HEAD", gitdir)
+ if ver:
+ return "0.0+%s" % ver
+ else:
+ return "0.0"
+
+ except Exception as exc:
+ raise bb.parse.SkipRecipe(str(exc))
+
+ if ver and tagadjust:
+ ver = tagadjust(ver)
+ return ver
+
+def get_git_hash(d):
+ import os
+
+ srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
+ gitdir = os.path.abspath(os.path.join(srcdir, ".git"))
+ try:
+ rev = gitrev_run("git rev-list HEAD -1")
+ return rev[:7]
+ except Exception as exc:
+ bb.fatal(str(exc))
+
+def mark_recipe_dependencies(path, d):
+ from bb.parse import mark_dependency
+
+ gitdir = os.path.join(path, ".git")
+
+ # Force the recipe to be reparsed so the version gets bumped
+ # if the active branch is switched, or if the branch changes.
+ mark_dependency(d, os.path.join(gitdir, "HEAD"))
+
+ # Force a reparse if anything in the index changes.
+ mark_dependency(d, os.path.join(gitdir, "index"))
+
+ try:
+ ref = gitrev_run("git symbolic-ref -q HEAD", gitdir)
+ except bb.process.CmdError:
+ pass
+ else:
+ if ref:
+ mark_dependency(d, os.path.join(gitdir, ref))
+
+ # Catch new tags.
+ tagdir = os.path.join(gitdir, "refs", "tags")
+ if os.path.exists(tagdir):
+ mark_dependency(d, tagdir)
+
+python () {
+ srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
+ mark_recipe_dependencies(srcdir, d)
+}
diff --git a/meta-openembedded/meta-oe/classes/gpe.bbclass b/meta-openembedded/meta-oe/classes/gpe.bbclass
new file mode 100644
index 000000000..9fc136590
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/gpe.bbclass
@@ -0,0 +1,17 @@
+DEPENDS_prepend = "virtual/libintl intltool-native "
+GPE_TARBALL_SUFFIX ?= "gz"
+SRC_URI = "${GPE_MIRROR}/${BP}.tar.${GPE_TARBALL_SUFFIX}"
+FILES_${PN} += "${datadir}/gpe ${datadir}/application-registry"
+SECTION ?= "gpe"
+
+inherit gettext
+
+gpe_do_compile() {
+ oe_runmake PREFIX=${prefix}
+}
+
+gpe_do_install() {
+ oe_runmake PREFIX=${prefix} DESTDIR=${D} install
+}
+
+EXPORT_FUNCTIONS do_compile do_install
diff --git a/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass b/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass
new file mode 100644
index 000000000..e48bd017f
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass
@@ -0,0 +1,8 @@
+python __anonymous () {
+
+ machine_kernel_pr = d.getVar('MACHINE_KERNEL_PR')
+
+ if machine_kernel_pr:
+ d.setVar('PR', machine_kernel_pr)
+}
+
diff --git a/meta-openembedded/meta-oe/classes/socorro-syms.bbclass b/meta-openembedded/meta-oe/classes/socorro-syms.bbclass
new file mode 100644
index 000000000..cc435aba1
--- /dev/null
+++ b/meta-openembedded/meta-oe/classes/socorro-syms.bbclass
@@ -0,0 +1,231 @@
+# Inherit this class when you want to allow Mozilla Socorro to link Breakpad's
+# stack trace information to the correct source code revision.
+# This class creates a new version of the symbol file (.sym) created by
+# Breakpad. The absolute file paths in the symbol file will be replaced by VCS,
+# branch, file and revision of the source file. That information facilitates the
+# lookup of a particular source code line in the stack trace.
+#
+# Use example:
+#
+# BREAKPAD_BIN = "YourBinary"
+# inherit socorro-syms
+#
+
+# We depend on Breakpad creating the original symbol file.
+inherit breakpad
+
+PACKAGE_PREPROCESS_FUNCS += "symbol_file_preprocess"
+PACKAGES =+ "${PN}-socorro-syms"
+FILES_${PN}-socorro-syms = "/usr/share/socorro-syms"
+
+
+python symbol_file_preprocess() {
+
+ package_dir = d.getVar("PKGD")
+ breakpad_bin = d.getVar("BREAKPAD_BIN")
+ if not breakpad_bin:
+ package_name = d.getVar("PN")
+ bb.error("Package %s depends on Breakpad via socorro-syms. See "
+ "breakpad.bbclass for instructions on setting up the Breakpad "
+ "configuration." % package_name)
+ raise ValueError("BREAKPAD_BIN not defined in %s." % package_name)
+
+ sym_file_name = breakpad_bin + ".sym"
+
+ breakpad_syms_dir = os.path.join(
+ package_dir, "usr", "share", "breakpad-syms")
+ socorro_syms_dir = os.path.join(
+ package_dir, "usr", "share", "socorro-syms")
+ if not os.path.exists(socorro_syms_dir):
+ os.makedirs(socorro_syms_dir)
+
+ breakpad_sym_file_path = os.path.join(breakpad_syms_dir, sym_file_name)
+ socorro_sym_file_path = os.path.join(socorro_syms_dir, sym_file_name)
+
+ create_socorro_sym_file(d, breakpad_sym_file_path, socorro_sym_file_path)
+
+ arrange_socorro_sym_file(socorro_sym_file_path, socorro_syms_dir)
+
+ return
+}
+
+
+def run_command(command, directory):
+
+ (output, error) = bb.process.run(command, cwd=directory)
+ if error:
+ raise bb.process.ExecutionError(command, error)
+
+ return output.rstrip()
+
+
+def create_socorro_sym_file(d, breakpad_sym_file_path, socorro_sym_file_path):
+
+ # In the symbol file, all source files are referenced like the following.
+ # FILE 123 /path/to/some/File.cpp
+ # Go through all references and replace the file paths with repository
+ # paths.
+ with open(breakpad_sym_file_path, 'r') as breakpad_sym_file, \
+ open(socorro_sym_file_path, 'w') as socorro_sym_file:
+
+ for line in breakpad_sym_file:
+ if line.startswith("FILE "):
+ socorro_sym_file.write(socorro_file_reference(d, line))
+ else:
+ socorro_sym_file.write(line)
+
+ return
+
+
+def socorro_file_reference(d, line):
+
+ # The 3rd position is the file path. See example above.
+ source_file_path = line.split()[2]
+ source_file_repo_path = repository_path(
+ d, os.path.normpath(source_file_path))
+
+ # If the file could be found in any repository then replace it with the
+ # repository's path.
+ if source_file_repo_path:
+ return line.replace(source_file_path, source_file_repo_path)
+
+ return line
+
+
+def repository_path(d, source_file_path):
+
+ if not os.path.isfile(source_file_path):
+ return None
+
+ # Check which VCS is used and use that to extract repository information.
+ (output, error) = bb.process.run("git status",
+ cwd=os.path.dirname(source_file_path))
+ if not error:
+ # Make sure the git repository we just found wasn't the yocto repository
+ # itself, i.e. the root of the repository we're looking for must be a
+ # child of the build directory TOPDIR.
+ git_root_dir = run_command(
+ "git rev-parse --show-toplevel", os.path.dirname(source_file_path))
+ if not git_root_dir.startswith(d.getVar("TOPDIR")):
+ return None
+
+ return git_repository_path(source_file_path)
+
+ # Here we can add support for other VCSs like hg, svn, cvs, etc.
+
+ # The source file isn't under any VCS so we leave it be.
+ return None
+
+
+def is_local_url(url):
+
+ return \
+ url.startswith("file:") or url.startswith("/") or url.startswith("./")
+
+
+def git_repository_path(source_file_path):
+
+ import re
+
+ # We need to extract the following.
+ # (1): VCS URL, (2): branch, (3): repo root directory name, (4): repo file,
+ # (5): revision.
+
+ source_file_dir = os.path.dirname(source_file_path)
+
+ # (1) Get the VCS URL and extract the server part, i.e. change the URL from
+ # gitolite@git.someserver.com:SomeRepo.git to just git.someserver.com.
+ source_long_url = run_command(
+ "git config --get remote.origin.url", source_file_dir)
+
+ # The URL could be a local download directory. If so, get the URL again
+ # using the local directory's config file.
+ if is_local_url(source_long_url):
+ git_config_file = os.path.join(source_long_url, "config")
+ source_long_url = run_command(
+ "git config --file %s --get remote.origin.url" % git_config_file,
+ source_file_dir)
+
+ # If also the download directory redirects to a local git directory,
+ # then we're probably using source code from a local debug branch which
+ # won't be accessible by Socorro.
+ if is_local_url(source_long_url):
+ return None
+
+ # The URL can have several formats. A full list can be found using
+ # git help clone. Extract the server part with a regex.
+ url_match = re.search(".*(://|@)([^:/]*).*", source_long_url)
+ source_server = url_match.group(2)
+
+ # (2) Get the branch for this file.
+ source_branch_list = run_command("git show-branch --list", source_file_dir)
+ source_branch_match = re.search(".*?\[(.*?)\].*", source_branch_list)
+ source_branch = source_branch_match.group(1)
+
+ # (3) Since the repo root directory name can be changed without affecting
+ # git, we need to extract the name from something more reliable.
+ # The git URL has a repo name that we could use. We just need to strip off
+ # everything around it - from gitolite@git.someserver.com:SomeRepo.git/ to
+ # SomeRepo.
+ source_repo_dir = re.sub("/$", "", source_long_url)
+ source_repo_dir = re.sub("\.git$", "", source_repo_dir)
+ source_repo_dir = re.sub(".*[:/]", "", source_repo_dir)
+
+ # (4) We know the file but want to remove all of the build system dependent
+ # path up to and including the repository's root directory, e.g. remove
+ # /home/someuser/dev/repo/projectx/
+ source_toplevel = run_command(
+ "git rev-parse --show-toplevel", source_file_dir)
+ source_toplevel = source_toplevel + os.path.sep
+ source_file = source_file_path.replace(source_toplevel, "")
+
+ # (5) Get the source revision this file is part of.
+ source_revision = run_command("git rev-parse HEAD", source_file_dir)
+
+ # Assemble the repository path according to the Socorro format.
+ socorro_reference = "git:%s/%s:%s/%s:%s" % \
+ (source_server, source_branch,
+ source_repo_dir, source_file,
+ source_revision)
+
+ return socorro_reference
+
+
+def arrange_socorro_sym_file(socorro_sym_file_path, socorro_syms_dir):
+
+ import re
+
+ # Breakpad's minidump_stackwalk needs a certain directory structure in order
+ # to find correct symbols when extracting a stack trace out of a minidump.
+ # The directory structure must look like the following.
+ # YourBinary/<hash>/YourBinary.sym
+ # YourLibrary.so/<hash>/YourLibrary.so.sym
+ # To be able to create such structure we need to extract the hash value that
+ # is found in each symbol file. The header of the symbol file looks
+ # something like this:
+ # MODULE Linux x86 A079E473106CE51C74C1C25AF536CCD30 YourBinary
+ # See
+ # http://code.google.com/p/google-breakpad/wiki/LinuxStarterGuide
+
+ # Create the directory with the same name as the binary.
+ binary_dir = re.sub("\.sym$", "", socorro_sym_file_path)
+ if not os.path.exists(binary_dir):
+ os.makedirs(binary_dir)
+
+ # Get the hash from the header of the symbol file.
+ with open(socorro_sym_file_path, 'r') as socorro_sym_file:
+
+ # The hash is the 4th argument of the first line.
+ sym_file_hash = socorro_sym_file.readline().split()[3]
+
+ # Create the hash directory.
+ hash_dir = os.path.join(binary_dir, sym_file_hash)
+ if not os.path.exists(hash_dir):
+ os.makedirs(hash_dir)
+
+ # Move the symbol file to the hash directory.
+ sym_file_name = os.path.basename(socorro_sym_file_path)
+ os.rename(socorro_sym_file_path, os.path.join(hash_dir, sym_file_name))
+
+ return
+
diff --git a/meta-openembedded/meta-oe/conf/layer.conf b/meta-openembedded/meta-oe/conf/layer.conf
new file mode 100644
index 000000000..1a4357530
--- /dev/null
+++ b/meta-openembedded/meta-oe/conf/layer.conf
@@ -0,0 +1,79 @@
+# It really depends on order of the layers appearing in BBLAYERS
+# variable in toplevel bblayers.conf file, where bitbake will search
+# for .inc files and others where bitbake uses BBPATH since it will
+# search the directories from first to last as specified in BBPATH
+# Therefore if you want a given layer to be considered high priority
+# for the .inc and .conf etc. then consider it adding at the beginning
+# of BBPATH. For bblayers bitbake will use BBFILES_PRIORITY to resolve
+# the recipe contention so the order of directories in BBFILES does
+# not matter.
+
+# We have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a recipes directory, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "openembedded-layer"
+BBFILE_PATTERN_openembedded-layer := "^${LAYERDIR}/"
+
+# Define the priority for recipes (.bb files) from this layer,
+# choosing carefully how this layer interacts with all of the
+# other layers.
+
+BBFILE_PRIORITY_openembedded-layer = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_openembedded-layer = "1"
+
+LAYERDEPENDS_openembedded-layer = "core"
+
+LAYERSERIES_COMPAT_openembedded-layer = "sumo"
+
+LICENSE_PATH += "${LAYERDIR}/licenses"
+
+SIGGEN_EXCLUDERECIPES_ABISAFE += " \
+ mplayer-common \
+ fbset-modes \
+ gpsd-machine-conf \
+ distro-feed-configs \
+ ca-certificates \
+ pointercal \
+"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ android-tools->android-tools-conf \
+ usb-modeswitch-data->usb-modeswitch \
+ lmsensors->lmsensors-config \
+ phoronix-test-suite->bash \
+ phoronix-test-suite->python \
+ phoronix-test-suite->php \
+"
+
+# ttf.inc inherits fontcache which adds fontconfig-utils to RDEPENDS
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ terminus-font->fontconfig \
+ ttf-abyssinica->fontconfig \
+ ttf-arphic-uming->fontconfig \
+ ttf-dejavu->fontconfig \
+ ttf-droid->fontconfig \
+ ttf-gentium->fontconfig \
+ ttf-hunkyfonts->fontconfig \
+ ttf-inconsolata->fontconfig \
+ ttf-liberation->fontconfig \
+ ttf-liberation-sans-narrow->fontconfig \
+ ttf-lklug->fontconfig \
+ ttf-lohit->fontconfig \
+ ttf-pt-sans->fontconfig \
+ ttf-mplus->fontconfig \
+ ttf-sazanami->fontconfig \
+ ttf-tlwg->fontconfig \
+ ttf-ubuntu-font-family->fontconfig \
+ ttf-vlgothic->fontconfig \
+ ttf-wqy-zenhei->fontconfig \
+ source-han-sans-cn-fonts->fontconfig \
+ source-han-sans-jp-fonts->fontconfig \
+ source-han-sans-kr-fonts->fontconfig \
+ source-han-sans-tw-fonts->fontconfig \
+"
diff --git a/meta-openembedded/meta-oe/licenses/FLTK b/meta-openembedded/meta-oe/licenses/FLTK
new file mode 100644
index 000000000..954207522
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/FLTK
@@ -0,0 +1,530 @@
+ FLTK License
+ December 11, 2001
+
+The FLTK library and included programs are provided under the terms
+of the GNU Library General Public License (LGPL) with the following
+exceptions:
+
+ 1. Modifications to the FLTK configure script, config
+ header file, and makefiles by themselves to support
+ a specific platform do not constitute a modified or
+ derivative work.
+
+ The authors do request that such modifications be
+ contributed to the FLTK project - send all contributions
+ through the "Software Trouble Report" on the following page:
+
+ http://www.fltk.org/str.php
+
+ 2. Widgets that are subclassed from FLTK widgets do not
+ constitute a derivative work.
+
+ 3. Static linking of applications and widgets to the
+ FLTK library does not constitute a derivative work
+ and does not require the author to provide source
+ code for the application or widget, use the shared
+ FLTK libraries, or link their applications or
+ widgets against a user-supplied version of FLTK.
+
+ If you link the application or widget to a modified
+ version of FLTK, then the changes to FLTK must be
+ provided under the terms of the LGPL in sections
+ 1, 2, and 4.
+
+ 4. You do not have to provide a copy of the FLTK license
+ with programs that are linked to the FLTK library, nor
+ do you have to identify the FLTK license in your
+ program or documentation as required by section 6
+ of the LGPL.
+
+ However, programs must still identify their use of FLTK.
+ The following example statement can be included in user
+ documentation to satisfy this requirement:
+
+ [program/widget] is based in part on the work of
+ the FLTK project (http://www.fltk.org).
+
+-----------------------------------------------------------------------
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ [This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/meta-openembedded/meta-oe/licenses/GD b/meta-openembedded/meta-oe/licenses/GD
new file mode 100644
index 000000000..5e17d03e8
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/GD
@@ -0,0 +1,53 @@
+
+ Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002 by Cold Spring Harbor Laboratory. Funded under Grant
+ P41-RR02188 by the National Institutes of Health.
+
+ Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
+ Boutell.Com, Inc.
+
+ Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
+ Philip Warner.
+
+ Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
+ Roelofs.
+
+ Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
+ Ellson (ellson@lucent.com).
+
+ Portions relating to gdft.c copyright 2001, 2002 John Ellson
+ (ellson@lucent.com).
+
+ Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Pierre-Alain Joye (pierre@libgd.org).
+
+ Portions relating to JPEG and to color quantization copyright 2000,
+ 2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is
+ based in part on the work of the Independent JPEG Group. See the
+ file README-JPEG.TXT for more information.
+
+ Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
+ Szmurlo and Johan Van den Brande.
+
+ Permission has been granted to copy, distribute and modify gd in
+ any context without fee, including a commercial application,
+ provided that this notice is present in user-accessible supporting
+ documentation.
+
+ This does not affect your ownership of the derived work itself, and
+ the intent is to assure proper credit for the authors of gd, not to
+ interfere with your productive use of gd. If you have questions,
+ ask. "Derived works" includes all programs that utilize the
+ library. Credit must be given in user-accessible documentation.
+
+ This software is provided "AS IS." The copyright holders disclaim
+ all warranties, either express or implied, including but not
+ limited to implied warranties of merchantability and fitness for a
+ particular purpose, with respect to this code and accompanying
+ documentation.
+
+ Although their code does not appear in gd, the authors wish to thank
+ David Koblas, David Rowley, and Hutchison Avenue Software Corporation
+ for their prior contributions.
+
diff --git a/meta-openembedded/meta-oe/licenses/GPL-2.0-with-lmbench-restriction b/meta-openembedded/meta-oe/licenses/GPL-2.0-with-lmbench-restriction
new file mode 100644
index 000000000..3e1f7cc6d
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/GPL-2.0-with-lmbench-restriction
@@ -0,0 +1,108 @@
+%M% %I% %E%
+
+The set of programs and documentation known as "lmbench" are distributed
+under the Free Software Foundation's General Public License with the
+following additional restrictions (which override any conflicting
+restrictions in the GPL):
+
+1. You may not distribute results in any public forum, in any publication,
+ or in any other way if you have modified the benchmarks.
+
+2. You may not distribute the results for a fee of any kind. This includes
+ web sites which generate revenue from advertising.
+
+If you have modifications or enhancements that you wish included in
+future versions, please mail those to me, Larry McVoy, at lm@bitmover.com.
+
+=========================================================================
+
+Rationale for the publication restrictions:
+
+In summary:
+
+ a) LMbench is designed to measure enough of an OS that if you do well in
+ all catagories, you've covered latency and bandwidth in networking,
+ disks, file systems, VM systems, and memory systems.
+ b) Multiple times in the past people have wanted to report partial results.
+ Without exception, they were doing so to show a skewed view of whatever
+ it was they were measuring (for example, one OS fit small processes into
+ segments and used the segment register to switch them, getting good
+ results, but did not want to report large process context switches
+ because those didn't look as good).
+ c) We insist that if you formally report LMbench results, you have to
+ report all of them and make the raw results file easily available.
+ Reporting all of them means in that same publication, a pointer
+ does not count. Formally, in this context, means in a paper,
+ on a web site, etc., but does not mean the exchange of results
+ between OS developers who are tuning a particular subsystem.
+
+We have a lot of history with benchmarking and feel strongly that there
+is little to be gained and a lot to be lost if we allowed the results
+to be published in isolation, without the complete story being told.
+
+There has been a lot of discussion about this, with people not liking this
+restriction, more or less on the freedom principle as far as I can tell.
+We're not swayed by that, our position is that we are doing the right
+thing for the OS community and will stick to our guns on this one.
+
+It would be a different matter if there were 3 other competing
+benchmarking systems out there that did what LMbench does and didn't have
+the same reporting rules. There aren't and as long as that is the case,
+I see no reason to change my mind and lots of reasons not to do so. I'm
+sorry if I'm a pain in the ass on this topic, but I'm doing the right
+thing for you and the sooner people realize that the sooner we can get on
+to real work.
+
+Operating system design is a largely an art of balancing tradeoffs.
+In many cases improving one part of the system has negative effects
+on other parts of the system. The art is choosing which parts to
+optimize and which to not optimize. Just like in computer architecture,
+you can optimize the common instructions (RISC) or the uncommon
+instructions (CISC), but in either case there is usually a cost to
+pay (in RISC uncommon instructions are more expensive than common
+instructions, and in CISC common instructions are more expensive
+than required). The art lies in knowing which operations are
+important and optmizing those while minimizing the impact on the
+rest of the system.
+
+Since lmbench gives a good overview of many important system features,
+users may see the performance of the system as a whole, and can
+see where tradeoffs may have been made. This is the driving force
+behind the publication restriction: any idiot can optimize certain
+subsystems while completely destroying overall system performance.
+If said idiot publishes *only* the numbers relating to the optimized
+subsystem, then the costs of the optimization are hidden and readers
+will mistakenly believe that the optimization is a good idea. By
+including the publication restriction readers would be able to
+detect that the optimization improved the subsystem performance
+while damaging the rest of the system performance and would be able
+to make an informed decision as to the merits of the optimization.
+
+Note that these restrictions only apply to *publications*. We
+intend and encourage lmbench's use during design, development,
+and tweaking of systems and applications. If you are tuning the
+linux or BSD TCP stack, then by all means, use the networking
+benchmarks to evaluate the performance effects of various
+modifications; Swap results with other developers; use the
+networking numbers in isolation. The restrictions only kick
+in when you go to *publish* the results. If you sped up the
+TCP stack by a factor of 2 and want to publish a paper with the
+various tweaks or algorithms used to accomplish this goal, then
+you can publish the networking numbers to show the improvement.
+However, the paper *must* also include the rest of the standard
+lmbench numbers to show how your tweaks may (or may not) have
+impacted the rest of the system. The full set of numbers may
+be included in an appendix, but they *must* be included in the
+paper.
+
+This helps protect the community from adopting flawed technologies
+based on incomplete data. It also helps protect the community from
+misleading marketing which tries to sell systems based on partial
+(skewed) lmbench performance results.
+
+We have seen many cases in the past where partial or misleading
+benchmark results have caused great harm to the community, and
+we want to ensure that our benchmark is not used to perpetrate
+further harm and support false or misleading claims.
+
+
diff --git a/meta-openembedded/meta-oe/licenses/ImageMagick b/meta-openembedded/meta-oe/licenses/ImageMagick
new file mode 100644
index 000000000..914166882
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/ImageMagick
@@ -0,0 +1,103 @@
+Before we get to the text of the license, lets just review what the license says in simple terms:
+
+It allows you to:
+
+ * freely download and use ImageMagick software, in whole or in part, for personal, company internal, or commercial purposes;
+ * use ImageMagick software in packages or distributions that you create;
+ * link against a library under a different license;
+ * link code under a different license against a library under this license;
+ * merge code into a work under a different license;
+ * extend patent grants to any code using code under this license;
+ * and extend patent protection.
+
+It forbids you to:
+
+ * redistribute any piece of ImageMagick-originated software without proper attribution;
+ * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that ImageMagick Studio LLC endorses your distribution;
+ * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that you created the ImageMagick software in question.
+
+It requires you to:
+
+ * include a copy of the license in any redistribution you may make that includes ImageMagick software;
+ * provide clear attribution to ImageMagick Studio LLC for any distributions that include ImageMagick software.
+
+It does not require you to:
+
+ * include the source of the ImageMagick software itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it;
+ * submit changes that you make to the software back to the ImageMagick Studio LLC (though such feedback is encouraged).
+
+A few other clarifications include:
+
+ * ImageMagick is freely available without charge;
+ * you may include ImageMagick on a DVD as long as you comply with the terms of the license;
+ * you can give modified code away for free or sell it under the terms of the ImageMagick license or distribute the result under a different license, but you need to acknowledge the use of the ImageMagick software;
+ * the license is compatible with the GPL V3.
+ * when exporting the ImageMagick software, review its export classification.
+
+Terms and Conditions for Use, Reproduction, and Distribution
+
+The legally binding and authoritative terms and conditions for use, reproduction, and distribution of ImageMagick follow:
+
+Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization dedicated to making software imaging solutions freely available.
+
+1. Definitions.
+
+License shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+Legal Entity shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, control means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+You (or Your) shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+Source form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+Object form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+Work shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+Derivative Works shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+Contribution shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as Not a Contribution.
+
+Contributor shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ * You must give any other recipients of the Work or Derivative Works a copy of this License; and
+ * You must cause any modified files to carry prominent notices stating that You changed the files; and
+ * You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+ * If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+How to Apply the License to your Work
+
+To apply the ImageMagick License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information (don't include the brackets). The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the ImageMagick License (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy
+ of the License at
+
+ http://www.imagemagick.org/script/license.php
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
diff --git a/meta-openembedded/meta-oe/licenses/Kilgard b/meta-openembedded/meta-oe/licenses/Kilgard
new file mode 100644
index 000000000..8836db117
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/Kilgard
@@ -0,0 +1,5 @@
+Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998.
+
+This program is freely distributable without licensing fees and is
+provided without guarantee or warrantee expressed or implied. This
+program is -not- in the public domain.
diff --git a/meta-openembedded/meta-oe/licenses/ManishSingh b/meta-openembedded/meta-oe/licenses/ManishSingh
new file mode 100644
index 000000000..0243ddff4
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/ManishSingh
@@ -0,0 +1,19 @@
+Copyright (C) 2002 Manish Singh
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of Manish Singh not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. Manish Singh makes no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+MANISH SINGH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL MANISH SINGH BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/meta-openembedded/meta-oe/licenses/OGPL b/meta-openembedded/meta-oe/licenses/OGPL
new file mode 100644
index 000000000..bce3b71d4
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/OGPL
@@ -0,0 +1,104 @@
+$TOG: COPYRIGHT.MOTIF /main/5 2000/04/10 12:00:00 $
+
+ MOTIF 2.1.30
+ Source Code
+ MASTER COPYRIGHT NOTICE
+
+(c) Copyright 1989 - 1994, 1996 - 1999 The Open Group
+(c) Copyright 1987 - 1999 Hewlett-Packard Company
+(c) Copyright 1987 - 1999 Digital Equipment Corporation, Maynard, Mass.
+(c) Copyright 1988 Massachusetts Institute of Technology
+(c) Copyright 1988 Microsoft Corporation
+(c) Copyright 1990 Motorola Inc.
+(c) Copyright 1989 - 1994 Groupe Bull
+(c) Copyright 1991 Joseph Friedman
+(c) Copyright 1995 - 1999 International Business Machines Corp.
+(c) Copyright 1995 - 1999 Sun Microsystems, Inc.
+(c) Copyright 1995 - 1999 Santa Cruz Organization, Inc.
+(c) Copyright 1995, 1996 Fujitsu Limited
+(c) Copyright 1995, 1996 Hitachi, Ltd.
+
+
+ALL RIGHTS RESERVED
+
+This software is furnished under a license and may be used
+and copied only in accordance with the terms of such license and
+with the inclusion of this copyright notice. No title to and ownership
+of the software is hereby transferred.
+
+This software is subject to an open license. It may only be
+used on, with or for operating systems which are themselves open
+source systems. You must contact The Open Group for a license allowing
+distribution and sublicensing of this software on, with, or for
+operating systems which are not Open Source programs.
+
+See http://www.opengroup.org/openmotif/license for full
+details of the license agreement. Any use, reproduction, or
+distribution of the program constitutes recipient's acceptance of
+this agreement.
+
+THE OPEN GROUP AND ITS THIRD PARTY SUPPLIERS, ASSUME NO RESPONSIBILITY
+FOR THE USE OR INABILITY TO USE ANY OF ITS SOFTWARE.
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE.
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+The information in this software is subject to change without
+notice and should not be construed as a commitment by The Open Group
+or its third party suppliers.
+
+Notice: Notwithstanding any other lease or license that may pertain to,
+or accompany the delivery of, this computer software, the rights of the
+Government regarding its use, reproduction and disclosure are as set
+forth in Section 52.227-19 of the FARS Computer Software-Restricted
+Rights clause.
+
+(c) Copyright 1990, 1991, 1992, 1993, 1994, 1996 Open Software
+Foundation, Inc.
+(c) Copyright 1996, 1997, 1998, 1999, 2000 The Open Group.
+Unpublished - all rights reserved under the Copyright laws of the United
+States.
+
+RESTRICTED RIGHTS NOTICE: Use, duplication, or disclosure by the
+Government is subject to the restrictions as set forth in subparagraph
+(c)(1)(ii) of the Rights in Technical Data and Computer Software clause
+at DFARS 52.227-7013.
+
+The Open Group LLC
+Apex Plaza, Forbury Road
+Reading, Berkshire,
+RG1 1AX, UK.
+
+RESTRICTED RIGHTS LEGEND: This computer software is submitted with
+"restricted rights." Use, duplication or disclosure is subject to the
+restrictions as set forth in NASA FAR SUP 18-52.227-79 (April 1985)
+"Commercial Computer Software- Restricted Rights (April 1985)." The
+Open Group, Apex Plaza, Forbury Road, Reading, Berkshire, RG1 1AX, UK.
+If the contract contains the Clause at 18-52.227-74 "Rights in Data
+General" then the "Alternate III" clause applies.
+
+(c) Copyright 1990, 1991, 1992, 1993, 1994, 1996 Open Software
+Foundation,Inc. ALL RIGHTS RESERVED
+(c) Copyright 1996, 1997, 1998, 1999, 2000 The Open Group. ALL RIGHTS
+RESERVED
+
+The Open Group, Open Software Foundation, OSF, OSF/Motif, and Motif are
+Trademarks of The Open Group
+DEC and DIGITAL are registered trademarks of Digital Equipment
+Corporation
+HP is a trademark of Hewlett-Packard Company
+X Window System is a trademark of the Massachusetts Institute of
+Technology
diff --git a/meta-openembedded/meta-oe/licenses/OpenLDAP b/meta-openembedded/meta-oe/licenses/OpenLDAP
new file mode 100644
index 000000000..05ad7571e
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/OpenLDAP
@@ -0,0 +1,47 @@
+The OpenLDAP Public License
+ Version 2.8, 17 August 2003
+
+Redistribution and use of this software and associated documentation
+("Software"), with or without modification, are permitted provided
+that the following conditions are met:
+
+1. Redistributions in source form must retain copyright statements
+ and notices,
+
+2. Redistributions in binary form must reproduce applicable copyright
+ statements and notices, this list of conditions, and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution, and
+
+3. Redistributions must contain a verbatim copy of this document.
+
+The OpenLDAP Foundation may revise this license from time to time.
+Each revision is distinguished by a version number. You may use
+this Software under terms of this license revision or under the
+terms of any subsequent revision of the license.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
+CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S)
+OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+The names of the authors and copyright holders must not be used in
+advertising or otherwise to promote the sale, use or other dealing
+in this Software without specific, written prior permission. Title
+to copyright in this Software shall at all times remain with copyright
+holders.
+
+OpenLDAP is a registered trademark of the OpenLDAP Foundation.
+
+Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
+California, USA. All Rights Reserved. Permission to copy and
+distribute verbatim copies of this document is granted.
diff --git a/meta-openembedded/meta-oe/licenses/QWTv1.0 b/meta-openembedded/meta-oe/licenses/QWTv1.0
new file mode 100644
index 000000000..9c01f7e21
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/QWTv1.0
@@ -0,0 +1,543 @@
+ Qwt License
+ Version 1.0, January 1, 2003
+
+The Qwt library and included programs are provided under the terms
+of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) with the following
+exceptions:
+
+ 1. Widgets that are subclassed from Qwt widgets do not
+ constitute a derivative work.
+
+ 2. Static linking of applications and widgets to the
+ Qwt library does not constitute a derivative work
+ and does not require the author to provide source
+ code for the application or widget, use the shared
+ Qwt libraries, or link their applications or
+ widgets against a user-supplied version of Qwt.
+
+ If you link the application or widget to a modified
+ version of Qwt, then the changes to Qwt must be
+ provided under the terms of the LGPL in sections
+ 1, 2, and 4.
+
+ 3. You do not have to provide a copy of the Qwt license
+ with programs that are linked to the Qwt library, nor
+ do you have to identify the Qwt license in your
+ program or documentation as required by section 6
+ of the LGPL.
+
+
+ However, programs must still identify their use of Qwt.
+ The following example statement can be included in user
+ documentation to satisfy this requirement:
+
+ [program/widget] is based in part on the work of
+ the Qwt project (http://qwt.sf.net).
+
+----------------------------------------------------------------------
+
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library 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 library 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 library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/meta-openembedded/meta-oe/licenses/TLWG b/meta-openembedded/meta-oe/licenses/TLWG
new file mode 100644
index 000000000..a124184ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/TLWG
@@ -0,0 +1,150 @@
+This package collects Thai scalable fonts available in free licenses, and
+maintains and distributes them under GNU General Public License with
+original authors' permissions.
+
+Some fonts cannot be GPL, because they are based on fonts with different
+licenses. See the list of such fonts at the end of this file.
+
+Copyright:
+
+ - Kinnari:
+
+ Copyright (C) 1999 Db Type. All Rights Reserved.
+ Copyright (C) 2007 National Electronics and Computer Technology Center.
+ All Rights Reserved.
+
+ - Garuda:
+
+ Generated by NECTEC for Public Domain.
+ Modified under GNU General Public License by TLWG.
+
+ - Norasi:
+
+ Copyright (C) 1999, The National Font Project (v.beta).
+ Yannis Haralambous, Virach Sornlertlamvanich and Anutara Tantraporn.
+ All rights reserved.
+ Modified under GNU General Public License, with creators' permission,
+ by Thai Linux Working Group (TLWG).
+
+ - Loma:
+
+ Copyright (C) 2003, NECTEC. All rights reserved.
+
+ - TlwgMono:
+
+ Copyright (C) 2003 Poonlap Veerathanabutr <poonlap@linux.thai.net>
+
+ - Tlwg Typewriter:
+
+ Copyright (C) 2003, 2004 Poonlap Veerathanabutr <poonlap@linux.thai.net>
+
+ - Tlwg Typist:
+
+ Tlwg Typist, based on Poonlap Veerathanabutr's Tlwg Typewriter.
+
+ Copyright (C) 2005-2006 Theppitak Karoonboonyanan. Tlwg Typewriter,
+ Free Thai Pseudo Monospace outline font.
+
+ Copyright (C) 2003, 2004 Poonlap Veerathanabutr <poonlap@linux.thai.net>
+
+ - Purisa:
+
+ Copyright (C) 2003, 2004 Poonlap Veerathanabutr
+ <poonlap@linux.thai.net>, GPL license
+
+ - Sawasdee:
+
+ Copyright (C) 2007 Pol Udomwittayanukul <webnaipol@gmail.com>.
+ All rights reserved.
+
+ - Umpush:
+
+ Copyright (C) 2003 NECTEC. All rights reserved.
+ Copyright (c) 2007 Widhaya Trisarnwadhana <widhaya3@gmail.com>.
+ All rights reserved.
+
+License:
+
+ This font is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This font 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this font; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, if you create a document which uses this font,
+ and embed this font or unaltered portions of this font into the
+ document, this font does not by itself cause the resulting document
+ to be covered by the GNU General Public License. This exception does
+ not however invalidate any other reasons why the document might be
+ covered by the GNU General Public License. If you modify this font,
+ you may extend this exception to your version of the font, but you
+ are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+See included GPL file for the GNU General Public License (GPL) terms.
+
+
+* Non-GPL Fonts:
+
+- Waree:
+
+Copyright:
+
+ Copyright (C) 2003 by Bitstream, Inc. All Rights Reserved.
+ TLWG changes are in public domain.
+
+ Bitstream Vera is a trademark of Bitstream, Inc.
+
+License:
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of the fonts accompanying this license ("Fonts") and associated
+ documentation files (the "Font Software"), to reproduce and distribute
+ the Font Software, including without limitation the rights to use,
+ copy, merge, publish, distribute, and/or sell copies of the Font
+ Software, and to permit persons to whom the Font Software is furnished
+ to do so, subject to the following conditions:
+
+ The above copyright and trademark notices and this permission notice
+ shall be included in all copies of one or more of the Font Software
+ typefaces.
+
+ The Font Software may be modified, altered, or added to, and in
+ particular the designs of glyphs or characters in the Fonts may be
+ modified and additional glyphs or characters may be added to the
+ Fonts, only if the fonts are renamed to names not containing either
+ the words "Bitstream" or the word "Vera".
+
+ This License becomes null and void to the extent applicable to Fonts
+ or Font Software that has been modified and is distributed under the
+ "Bitstream Vera" names.
+
+ The Font Software may be sold as part of a larger software package
+ but no copy of one or more of the Font Software typefaces may be sold
+ by itself.
+
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+ BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
+ OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
+ SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+
+ Except as contained in this notice, the names of Gnome, the Gnome
+ Foundation, and Bitstream Inc., shall not be used in advertising or
+ otherwise to promote the sale, use or other dealings in this Font
+ Software without prior written authorization from the Gnome Foundation
+ or Bitstream Inc., respectively. For further information, contact:
+ fonts at gnome dot org.
+
diff --git a/meta-openembedded/meta-oe/licenses/UFL b/meta-openembedded/meta-oe/licenses/UFL
new file mode 100644
index 000000000..e78ac4a5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/UFL
@@ -0,0 +1,97 @@
+-------------------------------
+UBUNTU FONT LICENCE Version 1.0
+-------------------------------
+
+PREAMBLE
+This licence allows the licensed fonts to be used, studied, modified and
+redistributed freely. The fonts, including any derivative works, can be
+bundled, embedded, and redistributed provided the terms of this licence
+are met. The fonts and derivatives, however, cannot be released under
+any other licence. The requirement for fonts to remain under this
+licence does not require any document created using the fonts or their
+derivatives to be published under this licence, as long as the primary
+purpose of the document is not to be a vehicle for the distribution of
+the fonts.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this licence and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Original Version" refers to the collection of Font Software components
+as received under this licence.
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to
+a new environment.
+
+"Copyright Holder(s)" refers to all individuals and companies who have a
+copyright ownership of the Font Software.
+
+"Substantially Changed" refers to Modified Versions which can be easily
+identified as dissimilar to the Font Software by users of the Font
+Software comparing the Original Version with the Modified Version.
+
+To "Propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification and with or without charging
+a redistribution fee), making available to the public, and in some
+countries other activities as well.
+
+PERMISSION & CONDITIONS
+This licence does not grant any rights under trademark law and all such
+rights are reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of the Font Software, to propagate the Font Software, subject to
+the below conditions:
+
+1) Each copy of the Font Software must contain the above copyright
+notice and this licence. These can be included either as stand-alone
+text files, human-readable headers or in the appropriate machine-
+readable metadata fields within text or binary files as long as those
+fields can be easily viewed by the user.
+
+2) The font name complies with the following:
+(a) The Original Version must retain its name, unmodified.
+(b) Modified Versions which are Substantially Changed must be renamed to
+avoid use of the name of the Original Version or similar names entirely.
+(c) Modified Versions which are not Substantially Changed must be
+renamed to both (i) retain the name of the Original Version and (ii) add
+additional naming elements to distinguish the Modified Version from the
+Original Version. The name of such Modified Versions must be the name of
+the Original Version, with "derivative X" where X represents the name of
+the new work, appended to that name.
+
+3) The name(s) of the Copyright Holder(s) and any contributor to the
+Font Software shall not be used to promote, endorse or advertise any
+Modified Version, except (i) as required by this licence, (ii) to
+acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
+their explicit written permission.
+
+4) The Font Software, modified or unmodified, in part or in whole, must
+be distributed entirely under this licence, and must not be distributed
+under any other licence. The requirement for fonts to remain under this
+licence does not affect any document created using the Font Software,
+except any version of the Font Software extracted from a document
+created using the Font Software may only be distributed under this
+licence.
+
+TERMINATION
+This licence becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
+DEALINGS IN THE FONT SOFTWARE.
+
diff --git a/meta-openembedded/meta-oe/licenses/X11 b/meta-openembedded/meta-oe/licenses/X11
new file mode 100644
index 000000000..da3e40624
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/X11
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2008 Alex Graveley
+ * Copyright (C) 2010 Ulrik Sverdrup <ulrik.sverdrup@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
diff --git a/meta-openembedded/meta-oe/licenses/flite b/meta-openembedded/meta-oe/licenses/flite
new file mode 100644
index 000000000..51e67fd78
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/flite
@@ -0,0 +1,32 @@
+/*************************************************************************/
+/* */
+/* Language Technologies Institute */
+/* Carnegie Mellon University */
+/* Copyright (c) 1999-2009 */
+/* All Rights Reserved. */
+/* */
+/* Permission is hereby granted, free of charge, to use and distribute */
+/* this software and its documentation without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of this work, and to */
+/* permit persons to whom this work is furnished to do so, subject to */
+/* the following conditions: */
+/* 1. The code must retain the above copyright notice, this list of */
+/* conditions and the following disclaimer. */
+/* 2. Any modifications must be clearly marked as such. */
+/* 3. Original authors' names are not deleted. */
+/* 4. The authors' names are not used to endorse or promote products */
+/* derived from this software without specific prior written */
+/* permission. */
+/* */
+/* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */
+/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
+/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
+/* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */
+/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
+/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
+/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
+/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
+/* THIS SOFTWARE. */
+/* */
+/*************************************************************************/
diff --git a/meta-openembedded/meta-oe/licenses/gnuplot b/meta-openembedded/meta-oe/licenses/gnuplot
new file mode 100644
index 000000000..ff6fe2338
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/gnuplot
@@ -0,0 +1,29 @@
+/*[
+ * Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
+ *
+ * Permission to use, copy, and distribute this software and its
+ * documentation for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.
+ *
+ * Permission to modify the software is granted, but not the right to
+ * distribute the complete modified source code. Modifications are to
+ * be distributed as patches to the released version. Permission to
+ * distribute binaries produced by compiling modified sources is granted,
+ * provided you
+ * 1. distribute the corresponding source modifications from the
+ * released version in the form of a patch file along with the binaries,
+ * 2. add special version identification to distinguish your version
+ * in addition to the base release version number,
+ * 3. provide your name and address as the primary contact for the
+ * support of your modified version, and
+ * 4. retain our contact information in regard to use of the base
+ * software.
+ * Permission to distribute the released version of the source code along
+ * with corresponding source modifications in the form of a patch file is
+ * granted with same provisions 2 through 4 for binary distributions.
+ *
+ * This software is provided "as is" without express or implied warranty
+ * to the extent permitted by applicable law.
+]*/
diff --git a/meta-openembedded/meta-oe/licenses/iozone3 b/meta-openembedded/meta-oe/licenses/iozone3
new file mode 100644
index 000000000..3468fa929
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/iozone3
@@ -0,0 +1,62 @@
+LICENSE:
+
+ Copyright 1991, 1992, 1994, 1998, 1999, 2002 William D. Norcott
+
+ License to freely use and distribute this software is hereby granted
+ by the author, subject to the condition that this copyright notice
+ remains intact. The author retains the exclusive right to publish
+ derivative works based on this work, including, but not limited to
+ revised versions of this work.
+
+
+
+Below is author reply to question about distributing iozone3 in
+OpenEmbedded:
+
+========================================================================
+
+Marcin,
+
+ Re-distribution is permitted as long as the copyright is
+ maintained and the source code is not changed. I do not
+ see a problem with your mods to enable fileop for Linux-arm,
+ as these mods have been returned to the Iozone folks,
+ and they have been accepted for inclusion in the next
+ release :-)
+
+Thank you for your contribution,
+Don Capps
+
+----- Original Message -----
+From: "Marcin Juszkiewicz" <firma@hrw.one.pl>
+To: "Don Capps" <don.capps2@verizon.net>; "William D. Norcott"
+<wnorcott@us.oracle.com>
+Sent: Sunday, October 29, 2006 4:55 PM
+Subject: iozone3 263 patch for arm and License question
+
+
+> Morning
+>
+> I want to include iozone3 in OpenEmbedded [1] metadata to give it for
+> other developers. Currently OE is used to build few distributions for
+> misc platforms: ARM, SH3, SH4, x86, PowerPC and different types of
+> machines (PDA, settopbox, devboards, desktops, thin clients, routers).
+>
+> According to your distribution of derivations is forbidden. Packaging
+> iozone3 in OpenEmbedded will not involve any source code changes. But
+> when I was building it for ARM I discovered that fileop binary was not
+> built - so I created patch for it (attached). Not yet tested it on target
+> device.
+>
+> Thus, I seek your written permission via e-mail to distribute a package of
+> the unmodified source code and also a package of the pre-compiled binary.
+> Your copyright statement will be included in the package.
+>
+>
+> 1. http://www.openembedded.org/
+>
+> Regards
+> --
+> JID: hrw-jabber.org
+> OpenEmbedded developer/consultant
+
diff --git a/meta-openembedded/meta-oe/licenses/nbench-byte b/meta-openembedded/meta-oe/licenses/nbench-byte
new file mode 100644
index 000000000..7e47ba62b
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/nbench-byte
@@ -0,0 +1,10 @@
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/meta-openembedded/meta-oe/licenses/unRAR b/meta-openembedded/meta-oe/licenses/unRAR
new file mode 100644
index 000000000..5f78b728d
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/unRAR
@@ -0,0 +1,41 @@
+ ****** ***** ****** unRAR - free utility for RAR archives
+ ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ****** ******* ****** License for use and distribution of
+ ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ** ** ** ** ** ** FREE portable version
+ ~~~~~~~~~~~~~~~~~~~~~
+
+ The source code of unRAR utility is freeware. This means:
+
+ 1. All copyrights to RAR and the utility unRAR are exclusively
+ owned by the author - Alexander Roshal.
+
+ 2. The unRAR sources may be used in any software to handle RAR
+ archives without limitations free of charge, but cannot be used
+ to re-create the RAR compression algorithm, which is proprietary.
+ Distribution of modified unRAR sources in separate form or as a
+ part of other software is permitted, provided that it is clearly
+ stated in the documentation and source comments that the code may
+ not be used to develop a RAR (WinRAR) compatible archiver.
+
+ 3. The unRAR utility may be freely distributed. No person or company
+ may charge a fee for the distribution of unRAR without written
+ permission from the copyright holder.
+
+ 4. THE RAR ARCHIVER AND THE UNRAR UTILITY ARE DISTRIBUTED "AS IS".
+ NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT
+ YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS,
+ DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING
+ OR MISUSING THIS SOFTWARE.
+
+ 5. Installing and using the unRAR utility signifies acceptance of
+ these terms and conditions of the license.
+
+ 6. If you don't agree with terms of the license you must remove
+ unRAR files from your storage devices and cease to use the
+ utility.
+
+ Thank you for your interest in RAR and unRAR.
+
+
+ Alexander L. Roshal \ No newline at end of file
diff --git a/meta-openembedded/meta-oe/licenses/vim b/meta-openembedded/meta-oe/licenses/vim
new file mode 100644
index 000000000..4aa818eb2
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/vim
@@ -0,0 +1,81 @@
+VIM LICENSE
+
+I) There are no restrictions on distributing unmodified copies of Vim except
+ that they must include this license text. You can also distribute
+ unmodified parts of Vim, likewise unrestricted except that they must
+ include this license text. You are also allowed to include executables
+ that you made from the unmodified Vim sources, plus your own usage
+ examples and Vim scripts.
+
+II) It is allowed to distribute a modified (or extended) version of Vim,
+ including executables and/or source code, when the following four
+ conditions are met:
+ 1) This license text must be included unmodified.
+ 2) The modified Vim must be distributed in one of the following five ways:
+ a) If you make changes to Vim yourself, you must clearly describe in
+ the distribution how to contact you. When the maintainer asks you
+ (in any way) for a copy of the modified Vim you distributed, you
+ must make your changes, including source code, available to the
+ maintainer without fee. The maintainer reserves the right to
+ include your changes in the official version of Vim. What the
+ maintainer will do with your changes and under what license they
+ will be distributed is negotiable. If there has been no negotiation
+ then this license, or a later version, also applies to your changes.
+ The current maintainer is Bram Moolenaar <Bram@vim.org>. If this
+ changes it will be announced in appropriate places (most likely
+ vim.sf.net, www.vim.org and/or comp.editors). When it is completely
+ impossible to contact the maintainer, the obligation to send him
+ your changes ceases. Once the maintainer has confirmed that he has
+ received your changes they will not have to be sent again.
+ b) If you have received a modified Vim that was distributed as
+ mentioned under a) you are allowed to further distribute it
+ unmodified, as mentioned at I). If you make additional changes the
+ text under a) applies to those changes.
+ c) Provide all the changes, including source code, with every copy of
+ the modified Vim you distribute. This may be done in the form of a
+ context diff. You can choose what license to use for new code you
+ add. The changes and their license must not restrict others from
+ making their own changes to the official version of Vim.
+ d) When you have a modified Vim which includes changes as mentioned
+ under c), you can distribute it without the source code for the
+ changes if the following three conditions are met:
+ - The license that applies to the changes permits you to distribute
+ the changes to the Vim maintainer without fee or restriction, and
+ permits the Vim maintainer to include the changes in the official
+ version of Vim without fee or restriction.
+ - You keep the changes for at least three years after last
+ distributing the corresponding modified Vim. When the maintainer
+ or someone who you distributed the modified Vim to asks you (in
+ any way) for the changes within this period, you must make them
+ available to him.
+ - You clearly describe in the distribution how to contact you. This
+ contact information must remain valid for at least three years
+ after last distributing the corresponding modified Vim, or as long
+ as possible.
+ e) When the GNU General Public License (GPL) applies to the changes,
+ you can distribute the modified Vim under the GNU GPL version 2 or
+ any later version.
+ 3) A message must be added, at least in the output of the ":version"
+ command and in the intro screen, such that the user of the modified Vim
+ is able to see that it was modified. When distributing as mentioned
+ under 2)e) adding the message is only required for as far as this does
+ not conflict with the license used for the changes.
+ 4) The contact information as required under 2)a) and 2)d) must not be
+ removed or changed, except that the person himself can make
+ corrections.
+
+III) If you distribute a modified version of Vim, you are encouraged to use
+ the Vim license for your changes and make them available to the
+ maintainer, including the source code. The preferred way to do this is
+ by e-mail or by uploading the files to a server and e-mailing the URL.
+ If the number of changes is small (e.g., a modified Makefile) e-mailing a
+ context diff will do. The e-mail address to be used is
+ <maintainer@vim.org>
+
+IV) It is not allowed to remove this license from the distribution of the Vim
+ sources, parts of it or from a modified version. You may use this
+ license for previous Vim releases instead of the license that they came
+ with, at your option.
+
+===
+Read more about this license at http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
diff --git a/meta-openembedded/meta-oe/licenses/zsh b/meta-openembedded/meta-oe/licenses/zsh
new file mode 100644
index 000000000..1fb1fc4e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/zsh
@@ -0,0 +1,37 @@
+Unless otherwise noted in the header of specific files, files in this
+distribution have the licence shown below.
+
+However, note that certain shell functions are licensed under versions
+of the GNU General Public Licence. Anyone distributing the shell as a
+binary including those files needs to take account of this. Search
+shell functions for "Copyright" for specific copyright information.
+None of the core functions are affected by this, so those files may
+simply be omitted.
+
+--
+
+The Z Shell is copyright (c) 1992-2009 Paul Falstad, Richard Coleman,
+Zoltán Hidvégi, Andrew Main, Peter Stephenson, Sven Wischnowsky, and
+others. All rights reserved. Individual authors, whether or not
+specifically named, retain copyright in all changes; in what follows, they
+are referred to as `the Zsh Development Group'. This is for convenience
+only and this body has no legal status. The Z shell is distributed under
+the following licence; any provisions made in individual files take
+precedence.
+
+Permission is hereby granted, without written agreement and without
+licence or royalty fees, to use, copy, modify, and distribute this
+software and to distribute modified versions of this software for any
+purpose, provided that the above copyright notice and the following
+two paragraphs appear in all copies of this software.
+
+In no event shall the Zsh Development Group be liable to any party for
+direct, indirect, special, incidental, or consequential damages arising out
+of the use of this software and its documentation, even if the Zsh
+Development Group have been advised of the possibility of such damage.
+
+The Zsh Development Group specifically disclaim any warranties, including,
+but not limited to, the implied warranties of merchantability and fitness
+for a particular purpose. The software provided hereunder is on an "as is"
+basis, and the Zsh Development Group have no obligation to provide
+maintenance, support, updates, enhancements, or modifications.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_git.bb
new file mode 100644
index 000000000..8888b2267
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Analyze Suspend"
+DESCRIPTION = "analyze-suspend is a tool for system developers to visualize \
+the activity between suspend and resume, allowing them to identify \
+inefficiencies and bottlenecks."
+HOMEPAGE = "https://01.org/suspendresume"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
+
+# Apart from the listed RDEPENDS, analyze-suspend depends on some features
+# provided by the kernel. These options are:
+# - CONFIG_PM_DEBUG=y
+# - CONFIG_PM_SLEEP_DEBUG=y
+# - CONFIG_FTRACE=y
+# - CONFIG_FUNCTION_TRACER=y
+# - CONFIG_FUNCTION_GRAPH_TRACER=y
+
+RDEPENDS_${PN} += "python-core python-datetime python-stringold"
+
+PV = "3.2+gitr${SRCPV}"
+SRCREV = "c669e002a2e7504f21e277ad248fa81033926391"
+SRC_URI = "git://github.com/01org/suspendresume.git;protocol=https"
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -Dm 0755 analyze_suspend.py ${D}${bindir}/analyze_suspend.py
+ install -Dm 0644 README ${D}${docdir}/analyze-suspend/README
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/bonnie/bonnie++_1.03e.bb b/meta-openembedded/meta-oe/recipes-benchmark/bonnie/bonnie++_1.03e.bb
new file mode 100644
index 000000000..2c1217e34
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/bonnie/bonnie++_1.03e.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Tests large file IO and creation/deletion of small files"
+HOMEPAGE = "http://www.coker.com.au/bonnie++/"
+SECTION = "benchmark/tests"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://copyright.txt;md5=cd4dde95a6b9d122f0a9150ae9cc3ee0"
+
+SRC_URI = "http://www.coker.com.au/bonnie++/${BPN}-${PV}.tgz \
+ file://gcc-4.3-fixes.patch \
+"
+SRC_URI[md5sum] = "750aa5b5051263a99c6c195888c74968"
+SRC_URI[sha256sum] = "cb3866116634bf65760b6806be4afa7e24a1cad6f145c876df8721f01ba2e2cb"
+
+inherit autotools-brokensep
+
+SCRIPTS = "bon_csv2html bon_csv2txt"
+EXES = "bonnie++ zcav"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install () {
+ install -d ${D}/${bindir}
+ install -d ${D}/${sbindir}
+ install -m 0755 ${EXES} ${D}/${sbindir}
+ install -m 0755 ${SCRIPTS} ${D}/${bindir}
+}
+
+PACKAGES =+ "bonnie-scripts"
+
+FILES_${PN} = "${sbindir}"
+FILES_bonnie-scripts = "${bindir}"
+
+RDEPENDS_bonnie-scripts += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/bonnie/files/gcc-4.3-fixes.patch b/meta-openembedded/meta-oe/recipes-benchmark/bonnie/files/gcc-4.3-fixes.patch
new file mode 100644
index 000000000..67f1b7494
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/bonnie/files/gcc-4.3-fixes.patch
@@ -0,0 +1,19 @@
+Includes string.h to one of the source file.
+
+Upstream-Status: Inappropriate [not author.]
+---
+ zcav.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: bonnie++-1.03a/zcav.cpp
+===================================================================
+--- bonnie++-1.03a.orig/zcav.cpp
++++ bonnie++-1.03a/zcav.cpp
+@@ -15,6 +15,7 @@ using namespace std;
+ #else
+ #include <vector.h>
+ #endif
++#include <string.h>
+
+ // Read the specified number of megabytes of data from the fd and return the
+ // amount of time elapsed in seconds.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/cpuburn/cpuburn-neon_20140626.bb b/meta-openembedded/meta-oe/recipes-benchmark/cpuburn/cpuburn-neon_20140626.bb
new file mode 100644
index 000000000..14e3fc4f3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/cpuburn/cpuburn-neon_20140626.bb
@@ -0,0 +1,30 @@
+SUMMARY = "CPU burn app that loads the NEON coprocessor fully"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://burn.S;md5=823abc72c2cd448e87df9bc5355a4456"
+
+DL_DIR_append = "/${PN}-${PV}"
+
+# Ensure to make this available for machine which has neon
+COMPATIBLE_MACHINE = "(${@bb.utils.contains("TUNE_FEATURES", "neon", "${MACHINE}", "Invalid!", d)})"
+
+SRC_URI = "http://hardwarebug.org/files/burn.S;name=mru \
+ https://raw.githubusercontent.com/ssvb/cpuburn-arm/dd5c5ba58d2b0b23cfab4a286f9d3f5510000f20/cpuburn-a8.S;name=ssvb"
+
+SRC_URI[mru.md5sum] = "823abc72c2cd448e87df9bc5355a4456"
+SRC_URI[mru.sha256sum] = "01d9fc04f83740c513c25401dcc89c11b2a5a6013e70bfca42b7b02129f88cd2"
+SRC_URI[ssvb.md5sum] = "ba0ef2939a3b3b487523448c67544e94"
+SRC_URI[ssvb.sha256sum] = "ce42ebdc71c876a33d9f7534355ef76cefa0d00ddb19ad69cf05a266c861d08d"
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} burn.S -o burn
+ ${CC} ${CFLAGS} ${LDFLAGS} cpuburn-a8.S -o burn-neona8
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/burn ${D}${bindir}/burn-neon
+ install -m 0755 ${S}/burn-neona8 ${D}${bindir}/
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/dbench/dbench_4.0.bb b/meta-openembedded/meta-oe/recipes-benchmark/dbench/dbench_4.0.bb
new file mode 100644
index 000000000..1915e4c2e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/dbench/dbench_4.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "The dbench (disk) and tbench (TCP) benchmarks"
+SUMMARY_dbench = "Filesystem load benchmark"
+SUMMARY_tbench = "TCP load benchmark"
+HOMEPAGE = "http://samba.org/ftp/tridge/dbench/"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "popt"
+
+SRC_URI = "\
+ http://samba.org/ftp/tridge/dbench/dbench-${PV}.tar.gz \
+ file://destdir.patch \
+ file://makefile.patch"
+
+inherit autotools
+
+PACKAGES =+ "tbench tbench-dbg"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+FILES_tbench = "${bindir}/tbench* ${prefix}/share/client.txt"
+FILES_tbench-dbg += "${bindir}/.debug/tbench*"
+
+SRC_URI[md5sum] = "1fe56ff71b9a416f8889d7150ac54da4"
+SRC_URI[sha256sum] = "6001893f34e68a3cfeb5d424e1f2bfef005df96a22d86f35dc770c5bccf3aa8a"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/destdir.patch b/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/destdir.patch
new file mode 100644
index 000000000..4cd2a35f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/destdir.patch
@@ -0,0 +1,28 @@
+Append $(DESTDIR) to all $(bindir), $(datadir) and $(mandir). Got
+this patch from OE commit id 709c4d66e0b107ca606941b988bad717c0b45d9b
+
+Upstream-Status: Inappropriate [not author]
+
+Index: dbench-3.04/Makefile.in
+===================================================================
+--- dbench-3.04.orig/Makefile.in 2006-09-17 20:21:07.000000000 +0200
++++ dbench-3.04/Makefile.in 2006-09-17 20:21:36.000000000 +0200
+@@ -32,12 +32,12 @@
+
+ # Careful here: don't install client.txt over itself.
+ install: all
+- ${INSTALLCMD} -d $(bindir) $(datadir) $(mandir)
+- ${INSTALLCMD} dbench tbench tbench_srv $(bindir)
+- ${INSTALLCMD} client.txt $(datadir)
+- ${INSTALLCMD} -m644 dbench.1 $(mandir)
+- ln -sf dbench.1 $(mandir)/tbench.1
+- ln -sf dbench.1 $(mandir)/tbench_srv.1
++ ${INSTALLCMD} -d $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) $(DESTDIR)$(mandir)
++ ${INSTALLCMD} dbench tbench tbench_srv $(DESTDIR)$(bindir)
++ ${INSTALLCMD} @top_srcdir@/client.txt $(DESTDIR)$(datadir)
++ ${INSTALLCMD} -m644 @top_srcdir@/dbench.1 $(DESTDIR)$(mandir)
++ ln -sf dbench.1 $(DESTDIR)$(mandir)/tbench.1
++ ln -sf dbench.1 $(DESTDIR)$(mandir)/tbench_srv.1
+
+ clean:
+ rm -f *.o *~ dbench tbench tbench_srv
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/makefile.patch b/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/makefile.patch
new file mode 100644
index 000000000..11fb4ffbd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/dbench/files/makefile.patch
@@ -0,0 +1,18 @@
+Add space between install -m option and its argument. Got this patch from
+OE 709c4d66e0b107ca606941b988bad717c0b45d9b
+
+Upstream-Status: Inappropriate [not author]
+
+Index: dbench-4.0/Makefile.in
+===================================================================
+--- dbench-4.0.orig/Makefile.in
++++ dbench-4.0/Makefile.in
+@@ -35,7 +35,7 @@ install: all
+ ${INSTALLCMD} -d $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) $(DESTDIR)$(mandir)
+ ${INSTALLCMD} dbench tbench tbench_srv $(DESTDIR)$(bindir)
+ ${INSTALLCMD} @top_srcdir@/client.txt $(DESTDIR)$(datadir)
+- ${INSTALLCMD} -m644 @top_srcdir@/dbench.1 $(DESTDIR)$(mandir)
++ ${INSTALLCMD} -m 644 @top_srcdir@/dbench.1 $(DESTDIR)$(mandir)
+ ln -sf dbench.1 $(DESTDIR)$(mandir)/tbench.1
+ ln -sf dbench.1 $(DESTDIR)$(mandir)/tbench_srv.1
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone-2.1/dhrystone.patch b/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone-2.1/dhrystone.patch
new file mode 100644
index 000000000..6a5350c37
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone-2.1/dhrystone.patch
@@ -0,0 +1,81 @@
+dhrystone: fix compilation problems
+
+This patch fixes two compilation errors with original
+dhrystone sources:
+* Redefinition of times() with wrong return type
+ - Fixed by commenting out the unnecessary redefinition
+* Undefined identifier HZ
+ - Originally HZ was supposed to be the clock frequency
+ value for times()
+ - For Linux, the frequency should come from sysconf
+ - This patch defines global varible HZ and initializes
+ it from sysconf
+
+Additionally, this patch adds a simple Makefile.
+
+Upstream-status: Pending
+
+Sign-off-by: Kimmo Surakka <kimmo.surakka@ge.com>
+Signed-off-by: Jose Alarcon <jose.alarcon@ge.com>
+---
+
+diff -Naur dhry.orig/dhry_1.c dhry/dhry_1.c
+--- dhry.orig/dhry_1.c 2015-07-20 14:25:58.059945353 +0300
++++ dhry/dhry_1.c 2015-07-20 12:43:25.318945353 +0300
+@@ -45,11 +45,15 @@
+
+ #ifdef TIMES
+ struct tms time_info;
+-extern int times ();
++/* extern int times (); */
+ /* see library function "times" */
+ #define Too_Small_Time 120
+ /* Measurements should last at least about 2 seconds */
+ #endif
++#ifndef HZ
++#include <unistd.h> /* sysconf */
++ long HZ;
++#endif
+ #ifdef TIME
+ extern long time();
+ /* see library function "time" */
+@@ -84,6 +88,9 @@
+
+ /* Initializations */
+
++#ifndef HZ
++ HZ = sysconf(_SC_CLK_TCK);
++#endif
+ Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
+ Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
+
+diff -Naur dhry.orig/dhry.h dhry/dhry.h
+--- dhry.orig/dhry.h 2015-07-20 14:25:58.054945353 +0300
++++ dhry/dhry.h 2015-07-20 12:42:59.903945353 +0300
+@@ -420,4 +420,6 @@
+ } variant;
+ } Rec_Type, *Rec_Pointer;
+
+-
++#ifndef HZ
++ extern long HZ;
++#endif
+diff -Naur dhry.orig/Makefile dhry/Makefile
+--- dhry.orig/Makefile 1970-01-01 02:00:00.000000000 +0200
++++ dhry/Makefile 2015-07-20 14:10:45.832945353 +0300
+@@ -0,0 +1,15 @@
++CC=gcc
++
++all: dhry
++
++dhry: dhry_1.o dhry_2.o
++ $(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
++
++dhry_1.o: dhry_1.c dhry.h
++
++dhry_2.o: dhry_2.c dhry.h
++
++clean:
++ rm -f *.o *~
++
++.PHONY: all clean
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone_2.1.bb b/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone_2.1.bb
new file mode 100644
index 000000000..17e8c700c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/dhrystone/dhrystone_2.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Dhrystone CPU benchmark"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/PD;md5=b3597d12946881e13cb3b548d1173851"
+
+SRC_URI = "http://www.netlib.org/benchmark/dhry-c;downloadfilename=dhry-c.shar \
+ file://dhrystone.patch"
+SRC_URI[md5sum] = "75aa5909c174eed98c134be2f56307da"
+SRC_URI[sha256sum] = "038a7e9169787125c3451a6c941f3aca5db2d2f3863871afcdce154ef17f4e3e"
+
+# Need to override Makefile variables
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_unpack() {
+ [ -d ${S} ] || mkdir -p ${S}
+ cd ${S}
+ sh ${DL_DIR}/dhry-c.shar
+}
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/dhry ${D}${bindir}
+}
+
+# Prevent procedure merging as required by dhrystone.c:
+CFLAGS += "-fno-lto"
+
+LDFLAGS += "-fno-lto"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2.9.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2.9.bb
new file mode 100644
index 000000000..67b513fa0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2.9.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Filesystem and hardware benchmark and stress tool"
+DESCRIPTION = "fio is an I/O tool meant to be used both for benchmark and \
+stress/hardware verification. It has support for a number of I/O engines, \
+I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, \
+and much more. It can work on block devices as well as files. fio accepts \
+job descriptions in a simple-to-understand text format. Several example job \
+files are included. fio displays all sorts of I/O performance information."
+HOMEPAGE = "http://freecode.com/projects/fio"
+SECTION = "console/tests"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+
+DEPENDS = "libaio zlib"
+
+PACKAGECONFIG_NUMA = "numa"
+# ARM does not currently support NUMA
+PACKAGECONFIG_NUMA_arm = ""
+
+PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
+PACKAGECONFIG[numa] = ",--disable-numa,numactl"
+
+# rev for v2.9
+SRCREV = "fe8d0f4c54f0c308c9a02a4e3c2f5084e8bf5461"
+SRC_URI = "git://git.kernel.dk/fio.git"
+
+S = "${WORKDIR}/git"
+
+# avoids build breaks when using no-static-libs.inc
+DISABLE_STATIC = ""
+
+EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
+
+do_configure() {
+ ./configure ${EXTRA_OECONF}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} prefix=${prefix} mandir=${mandir}
+ install -d ${D}/${docdir}/${PN}
+ cp -R --no-dereference --preserve=mode,links -v ${S}/examples ${D}/${docdir}/${PN}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0001-Fix-clang-warnings.patch b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0001-Fix-clang-warnings.patch
new file mode 100644
index 000000000..cdf09faec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0001-Fix-clang-warnings.patch
@@ -0,0 +1,31 @@
+From 35e9f80518d666db5f9c62e8072ffbc307b4af4f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 08:30:01 -0700
+Subject: [PATCH] Fix clang warnings
+
+../src/native-state-drm.cpp:334:20: error: cannot pass object of non-trivial type 'std::__cxx11::basic_string<char>' through variadic function; call will abort at runtime [-Wnon-pod-varargs]
+ dev_path);
+ ^
+1 error generated.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/native-state-drm.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/native-state-drm.cpp b/src/native-state-drm.cpp
+index dc2b323..62566ee 100644
+--- a/src/native-state-drm.cpp
++++ b/src/native-state-drm.cpp
+@@ -331,7 +331,7 @@ static int open_using_udev_scan()
+ if (!valid_fd(fd)) {
+ // %m is GLIBC specific... Maybe use strerror here...
+ Log::error("Tried to use '%s' but failed.\nReason : %m",
+- dev_path);
++ dev_path.c_str());
+ }
+ else
+ Log::debug("Success!\n");
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/Fix-configure-for-sqrt-check.patch b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/Fix-configure-for-sqrt-check.patch
new file mode 100644
index 000000000..7de05ee58
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/Fix-configure-for-sqrt-check.patch
@@ -0,0 +1,21 @@
+From 9fb298c398f88a63d71432be1410d52fae089063 Mon Sep 17 00:00:00 2001
+From: Tom Hochstein <tom.hochstein@nxp.com>
+Date: Mon, 8 Aug 2016 11:39:54 -0500
+
+---
+ wscript | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/wscript b/wscript
+index ca843f4..eb4a26a 100644
+--- a/wscript
++++ b/wscript
+@@ -84,7 +84,7 @@ def configure(ctx):
+ ctx.check_cc(lib = lib, uselib_store = uselib)
+
+ # Check required functions
+- req_funcs = [('memset', 'string.h', []) ,('sqrt', 'math.h', ['m'])]
++ req_funcs = [('memset', 'string.h', [])]
+ for func, header, uselib in req_funcs:
+ ctx.check_cc(function_name = func, header_name = header,
+ uselib = uselib, mandatory = True)
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/build-Check-packages-to-be-used-by-the-enabled-flavo.patch b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/build-Check-packages-to-be-used-by-the-enabled-flavo.patch
new file mode 100644
index 000000000..72b8debe5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/build-Check-packages-to-be-used-by-the-enabled-flavo.patch
@@ -0,0 +1,43 @@
+From: Otavio Salvador <otavio@ossystems.com.br>
+Subject: [PATCH] build: Check packages to be used by the enabled flavors
+Organization: O.S. Systems Software LTDA.
+
+The packages shouldn't be dynamically detected otherwise the build
+predictability is lost. We now have all packages as mandatory but
+dependent of the flavors which use them.
+
+Upstream-Status: Submitted [https://github.com/glmark2/glmark2/pull/8]
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ wscript | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/wscript b/wscript
+index cab62a3..e7eaed0 100644
+--- a/wscript
++++ b/wscript
+@@ -121,13 +121,17 @@ def configure(ctx):
+ ('mirclient','mirclient', '0.13', list_contains(ctx.options.flavors, 'mir')),
+ ('wayland-client','wayland-client', None, list_contains(ctx.options.flavors, 'wayland')),
+ ('wayland-egl','wayland-egl', None, list_contains(ctx.options.flavors, 'wayland'))]
+- for (pkg, uselib, atleast, mandatory) in opt_pkgs:
++ for (pkg, uselib, atleast, check) in opt_pkgs:
++ # Check packages required by the flavors
++ if not check:
++ continue
++
+ if atleast is None:
+ ctx.check_cfg(package = pkg, uselib_store = uselib,
+- args = '--cflags --libs', mandatory = mandatory)
++ args = '--cflags --libs', mandatory = True)
+ else:
+ ctx.check_cfg(package = pkg, uselib_store = uselib, atleast_version=atleast,
+- args = '--cflags --libs', mandatory = mandatory)
++ args = '--cflags --libs', mandatory = True)
+
+
+ # Prepend CXX flags so that they can be overriden by the
+--
+2.4.6
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
new file mode 100644
index 000000000..b72ced06a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
@@ -0,0 +1,62 @@
+SUMMARY = "OpenGL (ES) 2.0 benchmark"
+DESCRIPTION = "glmark2 is a benchmark for OpenGL (ES) 2.0. \
+It uses only the subset of the OpenGL 2.0 API that is compatible with OpenGL ES 2.0."
+HOMEPAGE = "https://launchpad.net/glmark2"
+BUGTRACKER = "https://bugs.launchpad.net/glmark2"
+
+LICENSE = "GPLv3+ & SGIv1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.SGI;beginline=5;md5=269cdab4af6748677acce51d9aa13552"
+
+DEPENDS = "libpng jpeg udev"
+
+PV = "2017.07+${SRCPV}"
+
+COMPATIBLE_HOST_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '.*-linux*', 'null', d)}"
+
+SRC_URI = "git://github.com/glmark2/glmark2.git;protocol=https \
+ file://build-Check-packages-to-be-used-by-the-enabled-flavo.patch \
+ file://Fix-configure-for-sqrt-check.patch \
+ file://0001-Fix-clang-warnings.patch \
+ "
+SRCREV = "ed20c633f1926d1dd78e3e89043c85a81302cbe6"
+
+S = "${WORKDIR}/git"
+
+inherit waf pkgconfig distro_features_check
+
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'x11-gl x11-gles2', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland opengl', 'wayland-gl wayland-gles2', '', d)} \
+ drm-gl drm-gles2"
+
+# Enable C++11 features
+CXXFLAGS += "-std=c++11"
+
+PACKAGECONFIG[x11-gl] = ",,virtual/libgl virtual/libx11"
+PACKAGECONFIG[x11-gles2] = ",,virtual/libgles2 virtual/libx11"
+PACKAGECONFIG[drm-gl] = ",,virtual/libgl libdrm"
+PACKAGECONFIG[drm-gles2] = ",,virtual/libgles2 libdrm"
+PACKAGECONFIG[wayland-gl] = ",,virtual/libgl wayland"
+PACKAGECONFIG[wayland-gles2] = ",,virtual/libgles2 wayland"
+
+python __anonymous() {
+ packageconfig = (d.getVar("PACKAGECONFIG") or "").split()
+ flavors = []
+ if "x11-gles2" in packageconfig:
+ flavors.append("x11-glesv2")
+ if "x11-gl" in packageconfig:
+ flavors.append("x11-gl")
+ if "wayland-gles2" in packageconfig:
+ flavors.append("wayland-glesv2")
+ if "wayland-gl" in packageconfig:
+ flavors.append("wayland-gl")
+ if "drm-gles2" in packageconfig:
+ flavors.append("drm-glesv2")
+ if "drm-gl" in packageconfig:
+ flavors.append("drm-gl")
+ if flavors:
+ d.appendVar("EXTRA_OECONF", " --with-flavors=%s" % ",".join(flavors))
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/copyright.txt b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/copyright.txt
new file mode 100644
index 000000000..3468fa929
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/copyright.txt
@@ -0,0 +1,62 @@
+LICENSE:
+
+ Copyright 1991, 1992, 1994, 1998, 1999, 2002 William D. Norcott
+
+ License to freely use and distribute this software is hereby granted
+ by the author, subject to the condition that this copyright notice
+ remains intact. The author retains the exclusive right to publish
+ derivative works based on this work, including, but not limited to
+ revised versions of this work.
+
+
+
+Below is author reply to question about distributing iozone3 in
+OpenEmbedded:
+
+========================================================================
+
+Marcin,
+
+ Re-distribution is permitted as long as the copyright is
+ maintained and the source code is not changed. I do not
+ see a problem with your mods to enable fileop for Linux-arm,
+ as these mods have been returned to the Iozone folks,
+ and they have been accepted for inclusion in the next
+ release :-)
+
+Thank you for your contribution,
+Don Capps
+
+----- Original Message -----
+From: "Marcin Juszkiewicz" <firma@hrw.one.pl>
+To: "Don Capps" <don.capps2@verizon.net>; "William D. Norcott"
+<wnorcott@us.oracle.com>
+Sent: Sunday, October 29, 2006 4:55 PM
+Subject: iozone3 263 patch for arm and License question
+
+
+> Morning
+>
+> I want to include iozone3 in OpenEmbedded [1] metadata to give it for
+> other developers. Currently OE is used to build few distributions for
+> misc platforms: ARM, SH3, SH4, x86, PowerPC and different types of
+> machines (PDA, settopbox, devboards, desktops, thin clients, routers).
+>
+> According to your distribution of derivations is forbidden. Packaging
+> iozone3 in OpenEmbedded will not involve any source code changes. But
+> when I was building it for ARM I discovered that fileop binary was not
+> built - so I created patch for it (attached). Not yet tested it on target
+> device.
+>
+> Thus, I seek your written permission via e-mail to distribute a package of
+> the unmodified source code and also a package of the pre-compiled binary.
+> Your copyright statement will be included in the package.
+>
+>
+> 1. http://www.openembedded.org/
+>
+> Regards
+> --
+> JID: hrw-jabber.org
+> OpenEmbedded developer/consultant
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/parallelism.patch b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/parallelism.patch
new file mode 100644
index 000000000..d5622ed2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3/parallelism.patch
@@ -0,0 +1,97 @@
+remove libasync.o and libbif.o from deps
+
+there are no implicit rules to build them and they get wrong CFLAGS
+when compiled with implicit rule.
+
+They are built as part of iozone_linux.o target anyway
+
+Only fixed linux targets for now
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+
+
+--- current/makefile.org 2016-12-06 02:19:10.367911020 +0000
++++ current/makefile 2016-12-06 02:21:38.767911020 +0000
+@@ -167,7 +167,7 @@
+ #
+ # GNU 'C' compiler Linux build with threads, largefiles, async I/O
+ #
+-linux: iozone_linux.o libasync.o libbif.o fileop_linux.o pit_server.o
++linux: iozone_linux.o fileop_linux.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux.o libasync.o libbif.o -lpthread \
+ -lrt -o iozone
+ $(CC) -O3 -Dlinux fileop_linux.o -o fileop
+@@ -176,7 +176,7 @@
+ #
+ # GNU 'C' compiler Linux build for powerpc chip with threads, largefiles, async I/O
+ #
+-linux-powerpc: iozone_linux-powerpc.o libbif.o libasync.o fileop_linux-ppc.o pit_server.o
++linux-powerpc: iozone_linux-powerpc.o fileop_linux-ppc.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux-powerpc.o libasync.o \
+ libbif.o -lpthread -lrt -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-ppc.o -o fileop
+@@ -184,7 +184,7 @@
+ #
+ # GNU 'C' compiler Linux build for sparc chip with threads, largefiles, async I/O
+ #
+-linux-sparc: iozone_linux-sparc.o libbif.o libasync.o fileop_linux.o pit_server.o
++linux-sparc: iozone_linux-sparc.o fileop_linux.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux-sparc.o libasync.o libbif.o \
+ -lpthread -lrt -o iozone
+ $(CC) -O3 -Dlinux fileop_linux.o -o fileop
+@@ -193,7 +193,7 @@
+ #
+ # GNU 'C' compiler Linux build with threads, largefiles, async I/O
+ #
+-linux-ia64: iozone_linux-ia64.o libbif.o libasync.o fileop_linux-ia64.o pit_server.o
++linux-ia64: iozone_linux-ia64.o fileop_linux-ia64.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux-ia64.o libbif.o libasync.o \
+ -lrt -lpthread -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-ia64.o -o fileop
+@@ -202,7 +202,7 @@
+ #
+ # GNU 'C' compiler Linux build for powerpc chip with threads, largefiles, async I/O
+ #
+-linux-powerpc64: iozone_linux-powerpc64.o libbif.o libasync.o fileop_linux-ppc64.o pit_server-linux-powerpc64.o
++linux-powerpc64: iozone_linux-powerpc64.o fileop_linux-ppc64.o pit_server-linux-powerpc64.o
+ $(CC) -O3 -Dunix -DHAVE_ANSIC_C -DSHARED_MEM -DASYNC_IO \
+ -D_LARGEFILE64_SOURCE -Dlinux \
+ iozone_linux-powerpc64.o libasync.o libbif.o -lpthread \
+@@ -213,7 +213,7 @@
+ #
+ # GNU 'C' compiler Linux build with threads, largefiles, async I/O
+ #
+-linux-arm: iozone_linux-arm.o libbif.o libasync.o fileop_linux-arm.o pit_server.o
++linux-arm: iozone_linux-arm.o fileop_linux-arm.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux-arm.o libbif.o libasync.o \
+ -lrt -lpthread -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-arm.o -o fileop
+@@ -222,7 +222,7 @@
+ #
+ # GNU 'C' compiler Linux build with threads, largefiles, async I/O
+ #
+-linux-AMD64: iozone_linux-AMD64.o libbif.o libasync.o fileop_linux-AMD64.o pit_server.o
++linux-AMD64: iozone_linux-AMD64.o fileop_linux-AMD64.o pit_server.o
+ $(CC) -O3 $(LDFLAGS) iozone_linux-AMD64.o libbif.o libasync.o \
+ -lrt -lpthread -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-AMD64.o -o fileop
+@@ -231,7 +231,7 @@
+ #
+ # GNU 'C' compiler Linux build with S/390, threads, largfiles, async I/O
+ #
+-linux-S390: iozone_linux-s390.o libbif.o libasync.o fileop_linux-s390.o pit_server.o
++linux-S390: iozone_linux-s390.o fileop_linux-s390.o pit_server.o
+ $(CC) -O2 $(LDFLAGS) -lpthread -lrt iozone_linux-s390.o \
+ libbif.o libasync.o -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-s390.o -o fileop
+@@ -240,7 +240,7 @@
+ #
+ # GNU 'C' compiler Linux build with S/390, threads, largfiles, async I/O
+ #
+-linux-S390X: iozone_linux-s390x.o libbif.o libasync.o fileop_linux-s390x.o pit_server.o
++linux-S390X: iozone_linux-s390x.o fileop_linux-s390x.o pit_server.o
+ $(CC) -O2 $(LDFLAGS) -lpthread -lrt iozone_linux-s390x.o \
+ libbif.o libasync.o -o iozone
+ $(CC) -O3 -Dlinux fileop_linux-s390x.o -o fileop
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_465.bb b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_465.bb
new file mode 100644
index 000000000..2864a4d7f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_465.bb
@@ -0,0 +1,117 @@
+SUMMARY = "Filesystem and Disk Benchmarking Tool"
+HOMEPAGE = "http://www.iozone.org/"
+AUTHOR = "Don Capps <don.capps2@verizon.net>, William D. Norcott <wnorcott@us.oracle.com>"
+SECTION = "console/tests"
+LICENSE = "iozone3"
+LIC_FILES_CHKSUM = "file://iozone.c;beginline=37;endline=48;md5=7331260091868dcad0f9edea735b5f4b \
+ file://iozone.c;beginline=260;endline=266;md5=77f9ee51e45b57a7e7519c4fa0b4f00b \
+"
+SRC_URI = "http://www.iozone.org/src/current/${BPN}_${PV}.tar \
+ file://parallelism.patch \
+ file://copyright.txt \
+"
+SRC_URI[md5sum] = "c924e5e46fb1cf8145f420e8e57eb954"
+SRC_URI[sha256sum] = "2e3d72916e7d7340a7c505fc0c3d28553fcc5ff2daf41d811368e55bd4e6a293"
+
+S = "${WORKDIR}/${BPN}_${PV}/src/current/"
+
+#
+# All other arches can use the default OEMAKE except those
+# explicitly listed below. Another, the iozone3 Makefile
+# needs to be told about the cross-compiler explicitly here.
+#
+EXTRA_OEMAKE_powerpc = "linux-powerpc CC='${CC}' GCC='${CC}'"
+EXTRA_OEMAKE_powerpc64 = "linux-powerpc64 CC='${CC}' GCC='${CC}'"
+EXTRA_OEMAKE_x86-64 = "linux-AMD64 CC='${CC}' GCC='${CC}'"
+EXTRA_OEMAKE_arm = "linux-arm CC='${CC}' GCC='${CC}'"
+EXTRA_OEMAKE = "linux CC='${CC}' GCC='${CC}'"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+ install -d ${D}${bindir} \
+ ${D}${mandir}/man1 \
+ ${D}${datadir}/doc/${BPN}/examples
+
+ install -m 0755 ${S}/iozone ${D}${bindir}
+ install -m 0755 ${S}/fileop ${D}${bindir}
+ install -m 0644 ${WORKDIR}/${BPN}_${PV}/docs/iozone.1 ${D}${mandir}/man1/
+ install -m 0644 ${WORKDIR}/copyright.txt ${D}${datadir}/doc/${BPN}/
+
+ install -m 0644 ${S}/*.dem ${D}${datadir}/doc/${BPN}/examples
+ install -m 0644 ${S}/client_list ${D}${datadir}/doc/${BPN}/examples
+ install -m 0644 ${S}/Gnuplot.txt ${D}${datadir}/doc/${BPN}/examples
+
+ install -m 0755 ${S}/Generate_Graphs ${D}${datadir}/doc/${BPN}/examples
+ install -m 0755 ${S}/gengnuplot.sh ${D}${datadir}/doc/${BPN}/examples
+ install -m 0755 ${S}/report.pl ${D}${datadir}/doc/${BPN}/examples
+
+ install -m 0644 ${WORKDIR}/${BPN}_${PV}/docs/Iozone_ps.gz ${D}${datadir}/doc/${BPN}/
+ install -m 0644 ${WORKDIR}/${BPN}_${PV}/docs/IOzone_msword_98.pdf ${D}${datadir}/doc/${BPN}/
+ install -m 0644 ${WORKDIR}/${BPN}_${PV}/docs/Run_rules.doc ${D}${datadir}/doc/${BPN}/
+}
+
+FILES_${PN} += "${datadir}/doc/${PN}/copyright.txt"
+
+# LICENSE:
+#
+# Copyright 1991, 1992, 1994, 1998, 1999, 2002 William D. Norcott
+#
+# License to freely use and distribute this software is hereby granted
+# by the author, subject to the condition that this copyright notice
+# remains intact. The author retains the exclusive right to publish
+# derivative works based on this work, including, but not limited to
+# revised versions of this work.
+#
+
+#
+# Below is author reply to question about distributing iozone3 in
+# OpenEmbedded:
+#
+# ========================================================================
+#
+# Marcin,
+#
+# Re-distribution is permitted as long as the copyright is
+# maintained and the source code is not changed. I do not
+# see a problem with your mods to enable fileop for Linux-arm,
+# as these mods have been returned to the Iozone folks,
+# and they have been accepted for inclusion in the next
+# release :-)
+#
+# Thank you for your contribution,
+# Don Capps
+#
+# ----- Original Message -----
+# From: "Marcin Juszkiewicz" <firma@hrw.one.pl>
+# To: "Don Capps" <don.capps2@verizon.net>; "William D. Norcott"
+# <wnorcott@us.oracle.com>
+# Sent: Sunday, October 29, 2006 4:55 PM
+# Subject: iozone3 263 patch for arm and License question
+#
+#
+# > Morning
+# >
+# > I want to include iozone3 in OpenEmbedded [1] metadata to give it for
+# > other developers. Currently OE is used to build few distributions for
+# > misc platforms: ARM, SH3, SH4, x86, PowerPC and different types of
+# > machines (PDA, settopbox, devboards, desktops, thin clients, routers).
+# >
+# > According to your distribution of derivations is forbidden. Packaging
+# > iozone3 in OpenEmbedded will not involve any source code changes. But
+# > when I was building it for ARM I discovered that fileop binary was not
+# > built - so I created patch for it (attached). Not yet tested it on target
+# > device.
+# >
+# > Thus, I seek your written permission via e-mail to distribute a package of
+# > the unmodified source code and also a package of the pre-compiled binary.
+# > Your copyright statement will be included in the package.
+# >
+# >
+# > 1. http://www.openembedded.org/
+# >
+# > Regards
+# > --
+# > JID: hrw-jabber.org
+# > OpenEmbedded developer/consultant
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf2/iperf2_2.0.10.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf2/iperf2_2.0.10.bb
new file mode 100644
index 000000000..1322d0788
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf2/iperf2_2.0.10.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Iperf is a tool to measure maximum TCP bandwidth, allowing the tuning of various parameters and UDP characteristics"
+HOMEPAGE = "https://sourceforge.net/projects/iperf2/"
+SECTION = "console/network"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e136a7b2560d80bcbf0d9b3e1356ecff"
+
+SRC_URI = " ${SOURCEFORGE_MIRROR}/iperf2/iperf-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "097cf0754bc1afa165975c06a91e6906"
+SRC_URI[sha256sum] = "7fe4348dcca313b74e0aa9c34a8ccd713b84a5615b8578f4aa94cedce9891ef2"
+
+S = "${WORKDIR}/iperf-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--exec-prefix=${STAGING_DIR_HOST}${layout_exec_prefix}"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6', '', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0002-Remove-pg-from-profile_CFLAGS.patch b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0002-Remove-pg-from-profile_CFLAGS.patch
new file mode 100644
index 000000000..06eb41ac0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0002-Remove-pg-from-profile_CFLAGS.patch
@@ -0,0 +1,31 @@
+From 6db0e28f906bc3784019dfb5bb011237a8034fda Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 13:00:16 -0700
+Subject: [PATCH 2/2] Remove -pg from profile_CFLAGS
+
+musl fails to link with missing gcrt1.o
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 23b0c72..6268145 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -49,9 +49,9 @@ iperf3_LDFLAGS = -g
+ iperf3_profile_SOURCES = main.c \
+ $(libiperf_la_SOURCES)
+
+-iperf3_profile_CFLAGS = -pg -g
++iperf3_profile_CFLAGS = -g
+ iperf3_profile_LDADD = libiperf.la
+-iperf3_profile_LDFLAGS = -pg -g
++iperf3_profile_LDFLAGS = -g
+
+ # Specify the sources and various flags for the test cases
+ t_timer_SOURCES = t_timer.c
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/automake-foreign.patch b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/automake-foreign.patch
new file mode 100644
index 000000000..06c394e5c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/automake-foreign.patch
@@ -0,0 +1,17 @@
+Pass the 'foreign' option to automake to enable iperf3 to build.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Chunrong Guo <b40290@freescale.com>
+
+--- a/configure.ac 2015-10-19 02:49:30.471867352 -0500
++++ b/configure.ac 2015-10-19 02:46:36.207873572 -0500
+@@ -33,7 +33,7 @@
+
+
+ # Initialize the automake system
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+ AM_MAINTAINER_MODE
+ AM_CONFIG_HEADER(src/iperf_config.h)
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.2.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.2.bb
new file mode 100644
index 000000000..2ed08110f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.2.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Network benchmark tool"
+DESCRIPTION = "\
+iperf is a tool for active measurements of the maximum achievable bandwidth \
+on IP networks. It supports tuning of various parameters related to timing, \
+protocols, and buffers. For each test it reports the bandwidth, loss, and \
+other parameters."
+HOMEPAGE = "http://software.es.net/iperf/"
+SECTION = "console/network"
+BUGTRACKER = "https://github.com/esnet/iperf/issues"
+AUTHOR = "ESNET <info@es.net>, Lawrence Berkeley National Laboratory <websupport@lbl.gov>"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d098223e44bdd19585315ee75cd9d2d7"
+
+DEPENDS = "openssl"
+
+SRC_URI = "git://github.com/esnet/iperf.git \
+ file://automake-foreign.patch \
+ file://0002-Remove-pg-from-profile_CFLAGS.patch \
+ "
+
+SRCREV = "88d907f7fb58bfab5d086c5da60c922e1c582c92"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGECONFIG[lksctp] = "ac_cv_header_netinet_sctp_h=yes,ac_cv_header_netinet_sctp_h=no,lksctp-tools"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+EXTRA_OECONF = "--with-openssl=${RECIPE_SYSROOT}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libc-bench/libc-bench_20110206.bb b/meta-openembedded/meta-oe/recipes-benchmark/libc-bench/libc-bench_20110206.bb
new file mode 100644
index 000000000..f534c73b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libc-bench/libc-bench_20110206.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Tests to compare standard functions of different libc implementations"
+DESCRIPTION = "libc-bench is a set of time- and memory-efficiency tests to compare \
+implementations of various C/POSIX standard library functions."
+HOMEPAGE = "http://www.etalabs.net/libc-bench.html"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://Makefile;md5=e12f113da27dfe9cfb6c2c537da8d8df"
+
+SRC_URI = "http://www.etalabs.net/releases/${BPN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "f763de90f95fe68e4e03e5b6f49698ac"
+SRC_URI[sha256sum] = "6825260aa5f15f4fbc7957ec578e9c859cbbe210e025ec74c4a0d05677523794"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/libc-bench ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch
new file mode 100644
index 000000000..3082d7ef5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch
@@ -0,0 +1,43 @@
+From a85fc43243f8bfad12d306a4a0e230fb8b3e828a Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28495@freescale.com>
+Date: Wed, 21 Aug 2013 15:44:57 +0800
+Subject: [PATCH] run_test.py: not use hard coded path ../obj/hugeadm
+
+Hard coded path makes the script impossible to run out of source tree.
+After 'make install', we can use hugeadm utility under DESTDIR.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Ting Liu <b28495@freescale.com>
+---
+ tests/run_tests.py | 12 +++++++++++-
+ 1 files changed, 11 insertions(+), 1 deletions(-)
+
+diff --git a/tests/run_tests.py b/tests/run_tests.py
+index d9a6b35..a9bab8f 100755
+--- a/tests/run_tests.py
++++ b/tests/run_tests.py
+@@ -232,9 +232,19 @@ def get_pagesizes():
+ Use libhugetlbfs' hugeadm utility to get a list of page sizes that have
+ active mount points and at least one huge page allocated to the pool.
+ """
++ local_env = os.environ.copy()
++ local_env["PATH"] = "../obj:%s" % local_env.get("PATH", "")
+ sizes = set()
+ out = ""
+- (rc, out) = bash("../obj/hugeadm --page-sizes")
++ try:
++ p = subprocess.Popen("hugeadm --page-sizes", shell=True, env=local_env, stdout=subprocess.PIPE)
++ rc = p.wait()
++ except KeyboardInterrupt:
++ return sizes
++ except OSError:
++ return sizes
++ out = p.stdout.read().strip()
++
+ if rc != 0 or out == "": return sizes
+
+ for size in out.split("\n"): sizes.add(int(size))
+--
+1.7.3.4
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/Force-text-segment-alignment-to-0x08000000-for-i386-.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/Force-text-segment-alignment-to-0x08000000-for-i386-.patch
new file mode 100644
index 000000000..ce6974d7c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/Force-text-segment-alignment-to-0x08000000-for-i386-.patch
@@ -0,0 +1,92 @@
+From 3c6f8d0e3c0694f79244ec6ad5ad9ba3ca26bc0a Mon Sep 17 00:00:00 2001
+From: Yang Shi <yang.shi@linaro.org>
+Date: Mon, 7 Dec 2015 14:12:13 -0800
+Subject: [PATCH] Force text segment alignment to 0x08000000 for i386 with gold
+ linker
+
+Upstream-Status: Backport
+
+When build libhugetlbfs tests with gold linker for i386, the below error occurs:
+
+i586-oe-linux-gcc -m32 -march=i586 -Wl,-O1 -Wl,--hash-style=gnu
+-Wl,--as-needed
+--sysroot=/home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/qemux86 -I..
+-O2
+-Wall -g -o obj32/linkhuge_rw.o -c linkhuge_rw.c
+| i586-oe-linux-gcc -m32 -march=i586 -Wl,-O1 -Wl,--hash-style=gnu
+-Wl,--as-needed
+--sysroot=/home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/qemux86
+-B./obj32
+-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,noexecstack -ldl
+-L../obj32
+-o obj32/linkhuge_rw -Wl,--no-as-needed -lpthread -ldl -lhugetlbfs_privutils
+-Wl,--hugetlbfs-align obj32/linkhuge_rw.o obj32/testutils.o
+| i586-oe-linux-ld: internal error in do_write, at
+/home/jenkins/oe/world/shr-core/tmp-glibc/work/x86_64-oe-linux/binutils-cross-i586/2.25-r0/git/gold/output.cc:464
+| collect2: error: ld returned 1 exit status
+
+But, it works well with GNU linker. --hugetlbfs-align flag passes
+"-zcommon-page-size=$SLICE_SIZE -zmax-page-size=$SLICE_SIZE", that are supported by gold linker too.
+But, it looks gold linker deal with them in a different way from gnu linker for i586.
+
+The readelf shows the below result with GNU linker:
+
+Elf file type is EXEC (Executable file)
+Entry point 0x8048fbd
+There are 8 program headers, starting at offset 52
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000034 0x08000034 0x08000034 0x00100 0x00100 R E 0x4
+ INTERP 0x048134 0x08048134 0x08048134 0x00013 0x00013 R 0x1
+ [Requesting program interpreter: /lib/ld-linux.so.2]
+ LOAD 0x000000 0x08000000 0x08000000 0x5a5bc 0x5a5bc R E 0x400000
+ LOAD 0x05a5bc 0x0845a5bc 0x0845a5bc 0x1028c 0x202cc RW 0x400000
+ DYNAMIC 0x05a5d0 0x0845a5d0 0x0845a5d0 0x000e8 0x000e8 RW 0x4
+ NOTE 0x048148 0x08048148 0x08048148 0x00044 0x00044 R 0x4
+ GNU_EH_FRAME 0x059e5c 0x08059e5c 0x08059e5c 0x0009c 0x0009c R 0x4
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
+
+"--relax" linker option doesn't solve this problem.
+Forced textsegment alignment to 0x08000000 with gold linker, the build will pass and
+readelf shows the same result with GNU linker:
+
+Elf file type is EXEC (Executable file)
+Entry point 0x8048fbd
+There are 8 program headers, starting at offset 52
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000034 0x08000034 0x08000034 0x00100 0x00100 R E 0x4
+ INTERP 0x048134 0x08048134 0x08048134 0x00013 0x00013 R 0x1
+ [Requesting program interpreter: /lib/ld-linux.so.2]
+ LOAD 0x000000 0x08000000 0x08000000 0x5a5bc 0x5a5bc R E 0x400000
+ LOAD 0x05a5bc 0x0845a5bc 0x0845a5bc 0x1028c 0x202cc RW 0x400000
+ DYNAMIC 0x05a5d0 0x0845a5d0 0x0845a5d0 0x000e8 0x000e8 RW 0x4
+ NOTE 0x048148 0x08048148 0x08048148 0x00044 0x00044 R 0x4
+ GNU_EH_FRAME 0x059e5c 0x08059e5c 0x08059e5c 0x0009c 0x0009c R 0x4
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
+
+The fix just have impact on hugelink_rw test case, which needs --hugetlbfs-align flag.
+
+Signed-off-by: Yang Shi <yang.shi@linaro.org>
+Signed-off-by: Eric B Munson <emunson@mgebm.net>
+---
+ ld.hugetlbfs | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/ld.hugetlbfs b/ld.hugetlbfs
+index 4417442..32bc6fb 100755
+--- a/ld.hugetlbfs
++++ b/ld.hugetlbfs
+@@ -98,6 +98,7 @@ if [ "$HTLB_ALIGN" == "slice" ]; then
+ # otherwise it will be NULL.
+ case "$EMU" in
+ armelf*_linux_eabi) HTLBOPTS="$HTLBOPTS -Ttext-segment=$SLICE_SIZE" ;;
++ elf_i386) HTLBOPTS="$HTLBOPTS -Ttext-segment=0x08000000" ;;
+ esac
+ fi
+
+--
+2.0.2
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-avoid-search-host-library-path-for-cros.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-avoid-search-host-library-path-for-cros.patch
new file mode 100644
index 000000000..b3fd84312
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-avoid-search-host-library-path-for-cros.patch
@@ -0,0 +1,99 @@
+From 0a2877400a086e9d6ddd32a80462b7a931921dc2 Mon Sep 17 00:00:00 2001
+From: Chunrong Guo <B40290@freescale.com>
+Date: Sun, 8 Sep 2013 23:21:49 -0500
+Subject: [PATCH] libhugetlbfs: avoid search host library path for cross
+ compilation
+
+Upstream-Status: Inappropriate [oe-core specific]
+
+Signed-off-by: Chunrong Guo <B40290@freescale.com>
+---
+ ldscripts/elf32ppclinux.xB | 2 +-
+ ldscripts/elf32ppclinux.xBDT | 2 +-
+ ldscripts/elf64ppc.xB | 2 +-
+ ldscripts/elf64ppc.xBDT | 2 +-
+ ldscripts/elf_x86_64.xB | 2 +-
+ ldscripts/elf_x86_64.xBDT | 2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/ldscripts/elf32ppclinux.xB b/ldscripts/elf32ppclinux.xB
+index 28ad88d..33d482d 100644
+--- a/ldscripts/elf32ppclinux.xB
++++ b/ldscripts/elf32ppclinux.xB
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
+ "elf32-powerpc")
+ OUTPUT_ARCH(powerpc:common)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT(-lhugetlbfs);
+ PHDRS
+ {
+diff --git a/ldscripts/elf32ppclinux.xBDT b/ldscripts/elf32ppclinux.xBDT
+index 497882b..823475e 100644
+--- a/ldscripts/elf32ppclinux.xBDT
++++ b/ldscripts/elf32ppclinux.xBDT
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
+ "elf32-powerpc")
+ OUTPUT_ARCH(powerpc:common)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT(-lhugetlbfs);
+ PHDRS
+ {
+diff --git a/ldscripts/elf64ppc.xB b/ldscripts/elf64ppc.xB
+index 1a9c1ab..8cc557d 100644
+--- a/ldscripts/elf64ppc.xB
++++ b/ldscripts/elf64ppc.xB
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc",
+ "elf64-powerpc")
+ OUTPUT_ARCH(powerpc:common64)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT(-lhugetlbfs);
+ PHDRS
+ {
+diff --git a/ldscripts/elf64ppc.xBDT b/ldscripts/elf64ppc.xBDT
+index 5477294..53e0749 100644
+--- a/ldscripts/elf64ppc.xBDT
++++ b/ldscripts/elf64ppc.xBDT
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc",
+ "elf64-powerpc")
+ OUTPUT_ARCH(powerpc:common64)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT( -lhugetlbfs );
+ PHDRS
+ {
+diff --git a/ldscripts/elf_x86_64.xB b/ldscripts/elf_x86_64.xB
+index ed21a2c..ba50e9f 100644
+--- a/ldscripts/elf_x86_64.xB
++++ b/ldscripts/elf_x86_64.xB
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",
+ "elf64-x86-64")
+ OUTPUT_ARCH(i386:x86-64)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/x86_64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/x86_64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT(-lhugetlbfs);
+ /* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+diff --git a/ldscripts/elf_x86_64.xBDT b/ldscripts/elf_x86_64.xBDT
+index 1855202..c62d245 100644
+--- a/ldscripts/elf_x86_64.xBDT
++++ b/ldscripts/elf_x86_64.xBDT
+@@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",
+ "elf64-x86-64")
+ OUTPUT_ARCH(i386:x86-64)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/x86_64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
++/*SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/x86_64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");*/
+ INPUT(-lhugetlbfs);
+ /* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+--
+1.7.9.7
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-elf_i386-avoid-search-host-library-path.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-elf_i386-avoid-search-host-library-path.patch
new file mode 100644
index 000000000..15664884b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/libhugetlbfs-elf_i386-avoid-search-host-library-path.patch
@@ -0,0 +1,40 @@
+From 889e52753d30179ba4ac940023cb4ed561436ab8 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 4 Nov 2014 00:49:11 -0800
+Subject: [PATCH] libhugetlbfs/elf_i386: avoid search host library path for cross compilation
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ ldscripts/elf_i386.xB | 1 -
+ ldscripts/elf_i386.xBDT | 1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/ldscripts/elf_i386.xB b/ldscripts/elf_i386.xB
+index 43fe51c..eae0fa8 100644
+--- a/ldscripts/elf_i386.xB
++++ b/ldscripts/elf_i386.xB
+@@ -3,7 +3,6 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386",
+ "elf32-i386")
+ OUTPUT_ARCH(i386)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/i486-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
+ INPUT(-lhugetlbfs);
+ /* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+diff --git a/ldscripts/elf_i386.xBDT b/ldscripts/elf_i386.xBDT
+index d72aebe..3bac1b1 100644
+--- a/ldscripts/elf_i386.xBDT
++++ b/ldscripts/elf_i386.xBDT
+@@ -3,7 +3,6 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386",
+ "elf32-i386")
+ OUTPUT_ARCH(i386)
+ ENTRY(_start)
+-SEARCH_DIR("/usr/i486-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
+ INPUT(-lhugetlbfs);
+ /* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch
new file mode 100644
index 000000000..07a99719b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch
@@ -0,0 +1,23 @@
+From 355c014573de7f95202cc7c819f81f0f230e4a1a Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28495@freescale.com>
+Date: Mon, 18 Jun 2012 16:37:05 +0800
+Subject: [PATCH] skip checking LIB32 and LIB64 if they point to the same place
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Ting Liu <b28495@freescale.com>
+---
+
+diff --git a/Makefile b/Makefile
+index 91502e1..bfb3414 100644
+--- a/Makefile
++++ b/Makefile
+@@ -167,7 +167,6 @@ REALLIB32 = $(realpath $(PREFIX)/$(LIB32))
+ REALLIB64 = $(realpath $(PREFIX)/$(LIB64))
+ ifneq ($(realpath $(PREFIX)),)
+ ifeq ($(REALLIB32),$(REALLIB64))
+-$(error LIB32 ($(PREFIX)/$(LIB32) to $(REALLIB32)) and LIB64 ($(PREFIX)/$(LIB64) to $(REALLIB64)) are resolving to the same place. Manually specify LIB32 and LIB64. e.g. make PREFIX=$(PREFIX) LIB32=lib32 LIB64=lib64)
+ endif
+ endif
+
+--
+1.9.2
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/tests-Makefile-install-static-4G-edge-testcases.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/tests-Makefile-install-static-4G-edge-testcases.patch
new file mode 100644
index 000000000..249f6e1e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/tests-Makefile-install-static-4G-edge-testcases.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Submitted
+
+TESTS_64 is empty, install will fail due to missing file operand
+
+Signed-off-by: Ting Liu <b28495@freescale.com>
+
+--- a/tests/Makefileold 2013-10-12 02:32:55.262391998 -0500
++++ b/tests/Makefile 2013-10-12 02:33:45.929394722 -0500
+@@ -292,7 +292,7 @@
+ $(INSTALL) -m 755 wrapper-utils.sh $(DESTDIR)$(INST_TESTSDIR64)/obj64
+ $(INSTALL) -m 755 $(HELPERS:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64
+ $(INSTALL) -m 755 $(HELPER_LIBS:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64
+- $(INSTALL) -m 755 $(TESTS_64:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64
++ $(INSTALL) -m 755 $(TESTS_64_STATIC:%=obj64/%_static) $(DESTDIR)$(INST_TESTSDIR64)/obj64
+ $(INSTALL) -m 755 run_tests.py $(DESTDIR)$(INST_TESTSDIR64)
+
+ install: $(OBJDIRS:%=%/install)
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
new file mode 100644
index 000000000..a63494a62
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
@@ -0,0 +1,74 @@
+SUMMARY = "A library which provides easy access to huge pages of memory"
+HOMEPAGE = "https://github.com/libhugetlbfs/libhugetlbfs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LGPL-2.1;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+DEPENDS = "sysfsutils perl"
+RDEPENDS_${PN} += "bash perl python python-io python-lang python-subprocess python-resource ${PN}-perl"
+RDEPENDS_${PN}-tests += "bash"
+
+PV = "2.20"
+PE = "1"
+
+SRCREV = "e44180072b796c0e28e53c4d01ef6279caaa2a99"
+SRC_URI = " \
+ git://github.com/libhugetlbfs/libhugetlbfs.git;protocol=https \
+ file://skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch \
+ file://libhugetlbfs-avoid-search-host-library-path-for-cros.patch \
+ file://tests-Makefile-install-static-4G-edge-testcases.patch \
+ file://0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch \
+ file://libhugetlbfs-elf_i386-avoid-search-host-library-path.patch \
+ file://Force-text-segment-alignment-to-0x08000000-for-i386-.patch \
+"
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = "(i.86|x86_64|powerpc|powerpc64|aarch64|arm).*-linux*"
+
+LIBARGS = "LIB32=${baselib} LIB64=${baselib}"
+LIBHUGETLBFS_ARCH = "${TARGET_ARCH}"
+LIBHUGETLBFS_ARCH_powerpc = "ppc"
+LIBHUGETLBFS_ARCH_powerpc64 = "ppc64"
+EXTRA_OEMAKE = "'ARCH=${LIBHUGETLBFS_ARCH}' 'OPT=${CFLAGS}' 'CC=${CC}' ${LIBARGS} BUILDTYPE=NATIVEONLY V=2"
+PARALLEL_MAKE = ""
+CFLAGS += "-fexpensive-optimizations -frename-registers -fomit-frame-pointer -g0"
+
+export HUGETLB_LDSCRIPT_PATH="${S}/ldscripts"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+#The CUSTOM_LDSCRIPTS doesn't work with the gold linker
+inherit cpan-base
+do_configure() {
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then
+ sed -i 's/CUSTOM_LDSCRIPTS = yes/CUSTOM_LDSCRIPTS = no/' Makefile
+ fi
+
+ # fixup perl module directory hardcoded to perl5
+ sed -i 's/perl5/perl/g' Makefile
+
+ # fixup to install perl module under $(LIBDIR)/perl/${@get_perl_version(d)}/TLBC
+ # to avoid below error
+ # Can't locate TLBC/OpCollect.pm in @INC
+ sed -i '/^PMDIR/ s:perl:perl/${@get_perl_version(d)}:g' Makefile
+}
+
+do_install() {
+ oe_runmake PREFIX=${prefix} DESTDIR=${D} \
+ INST_TESTSDIR32=${libdir}/libhugetlbfs/tests \
+ INST_TESTSDIR64=${libdir}/libhugetlbfs/tests \
+ install-tests
+}
+
+
+PACKAGES =+ "${PN}-perl ${PN}-tests "
+FILES_${PN} += "${libdir}/*.so"
+FILES_${PN}-dev = "${includedir}"
+FILES_${PN}-dbg += "${libdir}/libhugetlbfs/tests/obj32/.debug ${libdir}/libhugetlbfs/tests/obj64/.debug"
+FILES_${PN}-perl = "${libdir}/perl"
+FILES_${PN}-tests += "${libdir}/libhugetlbfs/tests"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/linpack/linpack_1.0.bb b/meta-openembedded/meta-oe/recipes-benchmark/linpack/linpack_1.0.bb
new file mode 100644
index 000000000..aed95cdaa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/linpack/linpack_1.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "LINPACK Benchmarks are a measure of a system's floating point computing power"
+SUMMARY = "LINPACK is a software library for performing numerical linear algebra on digital computers"
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM ="file://${WORKDIR}/linpacknew.c;beginline=1;endline=23;md5=aa025e3bc44190c71e4c5e3b084fed87"
+
+SRC_URI = "http://www.netlib.org/benchmark/linpackc.new;downloadfilename=linpacknew.c"
+SRC_URI[md5sum] = "1c5d0b6a31264685d2e651c920e3cdf4"
+SRC_URI[sha256sum] = "a63f2ec86512959f1fd926bfafb85905b2d7b7402942ffae3af374d48745e97e"
+
+S = "${WORKDIR}"
+
+do_compile () {
+ ${CC} ${CFLAGS} ${LDFLAGS} -o linpack linpacknew.c -lm
+}
+
+do_install () {
+ install -Dm 0755 linpack ${D}${bindir}/linpack
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-Check-for-musl-define-guard-before-redefining-sockle.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-Check-for-musl-define-guard-before-redefining-sockle.patch
new file mode 100644
index 000000000..d7169495f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-Check-for-musl-define-guard-before-redefining-sockle.patch
@@ -0,0 +1,27 @@
+From ac1657e11cbb0545bdf4d1124def8c013958ed7e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 18:08:51 -0700
+Subject: [PATCH] Check for musl define guard before redefining socklen_t
+
+musl uses __DEFINED_socklen_t so check for that as well
+along with HAVE_socklen_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/bench.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/bench.h b/src/bench.h
+index 597d068..2ebdf5a 100644
+--- a/src/bench.h
++++ b/src/bench.h
+@@ -77,7 +77,7 @@ typedef long long int64;
+ #endif /* HAVE_int64_t */
+ #endif /* HAVE_int64 */
+
+-#ifndef HAVE_socklen_t
++#if !defined(HAVE_socklen_t) && !defined(__DEFINED_socklen_t)
+ typedef int socklen_t;
+ #endif
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-lat_http.c-Add-printf-format.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-lat_http.c-Add-printf-format.patch
new file mode 100644
index 000000000..943b3ec88
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0001-lat_http.c-Add-printf-format.patch
@@ -0,0 +1,24 @@
+From 7c05fa5353ad91acae6e5e8a01f65d54935ef778 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 14:39:10 -0700
+Subject: [PATCH] lat_http.c: Add printf format
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/lat_http.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lat_http.c b/src/lat_http.c
+index c630d59..28d04f7 100644
+--- a/src/lat_http.c
++++ b/src/lat_http.c
+@@ -27,7 +27,7 @@ http(char *server, char *file, int prog)
+ sock = tcp_connect(server, prog, SOCKOPT_REUSE);
+ sprintf(buf, "GET /%s HTTP/1.0\r\n\r\n\n", file);
+ if (debug) {
+- printf(buf);
++ printf("%s", buf);
+ }
+ write(sock, buf, strlen(buf));
+ while ((n = read(sock, buf, XFERSIZE)) > 0) {
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0002-build-Adjust-CFLAGS-LDFLAGS-to-append-values-passed-.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0002-build-Adjust-CFLAGS-LDFLAGS-to-append-values-passed-.patch
new file mode 100644
index 000000000..353d80b3b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/0002-build-Adjust-CFLAGS-LDFLAGS-to-append-values-passed-.patch
@@ -0,0 +1,73 @@
+From b27c253bfb78fa3c5f416e6caee101098a4b58cc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 18:09:46 -0700
+Subject: [PATCH] build: Adjust CFLAGS/LDFLAGS to append values passed from env
+
+For musl we have to pass additional arguments via cflags and ldflags
+to link in librirpc, make room for those changes to take effect
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ scripts/build | 2 +-
+ src/Makefile | 14 +++++++-------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/scripts/build b/scripts/build
+index 34a1371..3786741 100755
+--- a/scripts/build
++++ b/scripts/build
+@@ -18,7 +18,7 @@ done
+
+ trap 'rm -f ${BASE}$$.s ${BASE}$$.c ${BASE}$$.o ${BASE}$$; exit 1' 1 2 15
+
+-LDLIBS=-lm
++LDLIBS+=-lm
+
+ # check for HP-UX's ANSI compiler
+ echo "main(int ac, char *av[]) { int i; }" > ${BASE}$$.c
+diff --git a/src/Makefile b/src/Makefile
+index d9efd54..96467d7 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -112,8 +112,8 @@ LIBOBJS= $O/lib_tcp.o $O/lib_udp.o $O/lib_unix.o $O/lib_timing.o \
+ $O/lib_sched.o
+
+ lmbench: $(UTILS)
+- @env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="$(CC)" OS="$(OS)" ../scripts/build all
+- -@env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="k$(MAKEFLAGS)" CC="$(CC)" OS="$(OS)" ../scripts/build opt
++ @env CFLAGS+=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="$(CC)" OS="$(OS)" ../scripts/build all
++ -@env CFLAGS+=-O MAKE="$(MAKE)" MAKEFLAGS="k$(MAKEFLAGS)" CC="$(CC)" OS="$(OS)" ../scripts/build opt
+
+ results: lmbench
+ @env OS="${OS}" ../scripts/config-run
+@@ -137,7 +137,7 @@ os: lmbench
+ @env OS="${OS}" BENCHMARK_HARDWARE=NO BENCHMARK_OS=YES ../scripts/results
+
+ install: lmbench
+- @env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build install-target
++ @env CFLAGS+=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build install-target
+
+ install-target:
+ if [ ! -d $(BASE) ]; then mkdir $(BASE); fi
+@@ -155,16 +155,16 @@ all: $(EXES) $O/lmbench
+ opt: $(OPT_EXES)
+ asm: $(ASMS)
+ $(ASMS):
+- $(CC) -S $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ `basename $@ .s`.c
++ $(CC) -S $(CFLAGS) $(CPPFLAGS) -o $@ `basename $@ .s`.c $(LDFLAGS)
+
+ Wall:
+- @env CFLAGS="-g -O -Wall" MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build all opt
++ @env CFLAGS+="-g -O -Wall" MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build all opt
+
+ debug:
+- @env CFLAGS="-g -O -DDEBUG" MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build all opt
++ @env CFLAGS+="-g -O -DDEBUG" MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build all opt
+
+ assembler:
+- @env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build asm
++ @env CFLAGS+=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}" ../scripts/build asm
+
+
+ tag:
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/fix-lmbench-memory-check-failure.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/fix-lmbench-memory-check-failure.patch
new file mode 100644
index 000000000..cbab5c424
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/fix-lmbench-memory-check-failure.patch
@@ -0,0 +1,215 @@
+From 65180976c9963432d166b47a0b692260a69c0d47 Mon Sep 17 00:00:00 2001
+From: Qingming Su <qingming.su@windriver.com>
+Date: Tue, 19 Aug 2014 05:16:17 -0400
+Subject: [PATCH] lmbench: Can't proceed on some targets
+
+lmbench can't proceed on some targets. The memory check fails because the
+memory latency of each page is longer then 10us, which is a time limit set
+in the original memsize.c.
+
+The memory latency is very different on different targets due to the
+hardware and current system load. The targets with slower memory
+chips or heavy system load need much longer time to read or write
+the memory.
+
+This fix changes the fixed time limit of 10us to a specific value calculated
+from the runtime target.
+
+Also set an upper limit of memory size used for lmbench testing. The memory
+check sometimes fails if the target has a large amount of memory, for
+example more than 4G.
+
+Signed-off-by: Qingming Su <qingming.su@windriver.com>
+Signed-off-by: Fupan Li <fupan.li@windriver.com>
+
+Add and reword above comments
+
+Upstream-status: inappropriate [ configuration ]
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+---
+ scripts/config-run | 12 +++++++---
+ src/Makefile | 4 ++--
+ src/memsize.c | 66 +++++++++++++++++++++++++++++++++++-------------------
+ 3 files changed, 54 insertions(+), 28 deletions(-)
+
+diff --git a/scripts/config-run b/scripts/config-run
+index 918cbdf..096ed12 100755
+--- a/scripts/config-run
++++ b/scripts/config-run
+@@ -197,6 +197,12 @@ The bigger the range, the more accurate the results, but larger sizes
+ take somewhat longer to run the benchmark.
+
+ EOF
++
++# By default, use 512M memory as the upper limit for lmbench test
++if [ $MB -gt 512 ];then
++MB=512
++fi
++
+ echo $ECHON "MB [default $MB]: $ECHOC"
+ read TMP
+ if [ X$TMP != X ]
+@@ -687,10 +693,10 @@ case $MAIL in
+ ;;
+ esac
+
+-INFO=`../scripts/info`
++INFO=`../scripts/hostinfo`
+ if [ $MAIL = yes ]
+ then if [ ! -f $INFO ]
+- then cp ../scripts/info-template $INFO
++ then cp ../scripts/hostinfo-template $INFO
+ chmod +w $INFO
+ REUSE=no
+ else
+@@ -733,7 +739,7 @@ EOF
+ then EDITOR=$TMP
+ fi
+ if [ X$EDITOR != "none" ]
+- then $EDITOR `../scripts/info`
++ then $EDITOR `../scripts/hostinfo`
+ fi
+ fi
+ fi
+diff --git a/src/Makefile b/src/Makefile
+index c7e4e3c..d9efd54 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -50,7 +50,7 @@ TARGET=`../scripts/target`
+ BINDIR=../bin/$(OS)
+ CONFIG=../bin/$(OS)/`../scripts/config`
+ UTILS=../scripts/target ../scripts/os ../scripts/gnu-os ../scripts/compiler \
+- ../scripts/info ../scripts/info-template ../scripts/version \
++ ../scripts/hostinfo ../scripts/hostinfo-template ../scripts/version \
+ ../scripts/config ../scripts/config-run ../scripts/results \
+ ../scripts/lmbench ../scripts/make ../scripts/build
+ INSTALL=cp
+@@ -240,7 +240,7 @@ $O/getopt.o : getopt.c $(INCS)
+ $(COMPILE) -c getopt.c -o $O/getopt.o
+
+ $(UTILS) :
+- -cd ../scripts; make get
++ -cd ../scripts; cp info hostinfo; cp info-template hostinfo-template
+
+ # Do not remove the next line, $(MAKE) depend needs it
+ # MAKEDEPEND follows
+diff --git a/src/memsize.c b/src/memsize.c
+index eb25a09..82d7faf 100644
+--- a/src/memsize.c
++++ b/src/memsize.c
+@@ -14,9 +14,12 @@ char *id = "$Id$\n";
+
+ #define CHK(x) if ((x) == -1) { perror("x"); exit(1); }
+
+-#ifndef TOO_LONG
+-#define TOO_LONG 10 /* usecs */
+-#endif
++//#ifndef TOO_LONG
++//#define TOO_LONG 10 /* usecs */
++//#endif
++
++#define MEMORY_SIZE_1MB (1024 * 1024)
++#define MEMORY_SIZE_8MB (8 * 1024 * 1024)
+
+ int alarm_triggered = 0;
+
+@@ -35,10 +38,10 @@ main(int ac, char **av)
+ size_t delta;
+
+ if (ac == 2) {
+- max = size = bytes(av[1]) * 1024 * 1024;
++ max = size = bytes(av[1]) * MEMORY_SIZE_1MB;
+ }
+- if (max < 1024 * 1024) {
+- max = size = 1024 * 1024 * 1024;
++ if (max < MEMORY_SIZE_1MB) {
++ max = size = 1024 * MEMORY_SIZE_1MB;
+ }
+ /*
+ * Binary search down and then binary search up
+@@ -48,7 +51,7 @@ main(int ac, char **av)
+ }
+ /* delta = size / (2 * 1024 * 1024) */
+ for (delta = (size >> 21); delta > 0; delta >>= 1) {
+- uint64 sz = (uint64)size + (uint64)delta * 1024 * 1024;
++ uint64 sz = (uint64)size + (uint64)delta * MEMORY_SIZE_1MB;
+ size_t check = sz;
+ if (max < sz) continue;
+ if (check < sz || !test_malloc(sz)) break;
+@@ -66,41 +69,58 @@ timeit(char *where, size_t size)
+ {
+ int sum = 0;
+ size_t n;
+- size_t s_prev;
++ size_t s_prev = MEMORY_SIZE_8MB;
+ size_t range;
+- size_t incr = 1024 * 1024;
++ size_t incr = MEMORY_SIZE_1MB;
+ size_t pagesize = getpagesize();
+- unsigned long long s;
+-
+- if (size < 1024*1024 - 16*1024) {
+- fprintf(stderr, "Bad size\n");
+- return;
+- }
++ size_t time_each_page = 0;
++ size_t too_long = 0;
++ unsigned long long s;
++
++ if (pagesize < MEMORY_SIZE_1MB)
++ range = MEMORY_SIZE_1MB;
++ else
++ range = MEMORY_SIZE_8MB;
++
++ incr = MEMORY_SIZE_1MB;
++
++ if (size < range) {
++ fprintf(stderr, "Bad size\n");
++ return;
++ }
++
++ //Touch range of memory, get the average time (usec) of operating each memory page on this system
++ start(0);
++ touchRange(where, range, pagesize);
++ sum = stop(0, 0);
++
++ if ((time_each_page = sum * pagesize / range) < 1)
++ time_each_page = 1;
++ //Set the uper limit of time spending on one page
++ too_long = 10 * time_each_page;
+
+- range = 1024 * 1024;
+- incr = 1024 * 1024;
+- touchRange(where, range, pagesize);
+ for (range += incr; range <= size; range += incr) {
+ n = range / pagesize;
+- set_alarm(n * TOO_LONG);
++ set_alarm(n * too_long);
+ touchRange(where + range - incr, incr, pagesize);
+ clear_alarm();
+- set_alarm(n * TOO_LONG);
++ set_alarm(n * too_long);
+ start(0);
+ touchRange(where, range, pagesize);
+ sum = stop(0, 0);
+ clear_alarm();
+- if ((sum / n) > TOO_LONG || alarm_triggered) {
++ if ((sum / n) > too_long || alarm_triggered) {
+ size = range - incr;
++ fprintf(stderr, "Error! Memory testing timeout! Touch one page of memory needs more than %d (usecs)\n ", too_long);
+ break;
+ }
+- for (s = 8 * 1024 * 1024; s <= range; s_prev = s, s *= 2)
++ for (s = s_prev; s <= range; s_prev = s, s *= 2)
+ if (s < s_prev) break;
+ incr = s / 8;
+ if (range < size && size < range + incr) {
+ incr = size - range;
+ }
+- fprintf(stderr, "%dMB OK\r", (int)(range/(1024*1024)));
++ fprintf(stderr, "%dMB OK\r", (int)(range/MEMORY_SIZE_1MB));
+ }
+ fprintf(stderr, "\n");
+ printf("%d\n", (int)(size>>20));
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/lmbench_result_html_report.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/lmbench_result_html_report.patch
new file mode 100644
index 000000000..30708c81d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/lmbench_result_html_report.patch
@@ -0,0 +1,69 @@
+From b21ca9f3911628fb66f308c6916485bbbcfb29a4 Mon Sep 17 00:00:00 2001
+From: Lin Yu <lin.yu@windriver.com>
+Date: Tue, 19 Aug 2014 05:16:16 -0400
+Subject: [PATCH] lmbench: Fix "make html" graph failure
+
+The html-list perl script cannot parse the first line of the result
+files about the lmbench version.
+
+Additional fixes are to make the result's html pages easier to understand.
+
+Signed-off-by: Lin Yu <lin.yu@windriver.com>
+Signed-off-by: Fupan Li <fupan.li@windriver.com>
+
+Reworded patch description.
+
+Upstream-status: inappropriate [ configuration ]
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+---
+ results/Makefile | 1 +
+ scripts/html-list | 7 ++-----
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/results/Makefile b/results/Makefile
+index 0935376..1ef9a15 100644
+--- a/results/Makefile
++++ b/results/Makefile
+@@ -186,6 +186,7 @@ paper:
+ # scratch makes you want a Ghz machine.
+ html: dirs
+ -make clean
++ make ps
+ #$(SCRIPTS)bghtml $(BG)
+ $(SCRIPTS)html-list $(LIST)
+ $(MK) LIST="$(LIST)" summary > HTML/summary.out 2> HTML/summary.errs
+diff --git a/scripts/html-list b/scripts/html-list
+index 9850461..6383115 100755
+--- a/scripts/html-list
++++ b/scripts/html-list
+@@ -14,7 +14,7 @@ open(H, ">HTML/specific.html");
+ print H <<EOF;
+ <title>LMBENCH System Results</title>
+ <h1>LMBENCH System Results</h1>
+-<h2><a href=summary>Summary of results</a></h2>
++<h2><a href=summary.out>Summary of results</a></h2>
+ <hr>
+ EOF
+
+@@ -47,7 +47,7 @@ foreach $os (@os) {
+ open(F, $file);
+ $_ = <F>;
+ close(F);
+- next unless /lmbench1.[01]/;
++ next unless /lmbench[0-9]+.[01]/;
+ chop;
+ $title = $_;
+ #s/.lmbench1.? results for //;
+@@ -103,10 +103,7 @@ EOF
+ if $i < $#os;
+ print S<<EOF;
+ <h4>$title</h4>
+-<a href=../$doc{$what}>Information on this benchmark</a> (Not up to date)
+ <p><IMG SRC="${what}${scale}$N.gif">\n<p>
+-<a href=../lmbench.html>
+-<img align=middle src="../gifs/arrows/b_arrow.gif">LMBENCH table of contents</a>
+ <a href=specific.html>
+ <img align=middle src=\"../gifs/graph.gif\">System results table of contents</a>
+ <p>
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/obey-ranlib.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/obey-ranlib.patch
new file mode 100644
index 000000000..fa5e6dbda
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/obey-ranlib.patch
@@ -0,0 +1,36 @@
+From 182a5d3dba3f440bbf35551da6d21ab1c990eb58 Mon Sep 17 00:00:00 2001
+From: Noor Ahsan <noor_ahsan@mentor.com>
+Date: Mon, 29 Aug 2011 16:17:51 +0000
+Subject: [PATCH] lmbench: Add version 3.0-a9 (initial recipe)
+
+In some cases the host may have too old of a ranlib to work. Since it's
+not exactly a great idea to not be using the cross ranlib anyhow, fix the
+Makefile so we can override ranlib and then override it
+
+Upstream-Status: Inappropriate [build system specific change]
+
+---
+ src/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 4962815..c7a8c79 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -38,6 +38,7 @@ CC=`../scripts/compiler`
+ MAKE=`../scripts/make`
+ AR=ar
+ ARCREATE=cr
++RANLIB=ranlib
+
+ # base of installation location
+ BASE=/usr/local
+@@ -217,7 +218,7 @@ $O/lmbench : ../scripts/lmbench version.h
+ $O/lmbench.a: $(LIBOBJS)
+ /bin/rm -f $O/lmbench.a
+ $(AR) $(ARCREATE) $O/lmbench.a $(LIBOBJS)
+- -ranlib $O/lmbench.a
++ -$(RANLIB) $O/lmbench.a
+
+ $O/lib_timing.o : lib_timing.c $(INCS)
+ $(COMPILE) -c lib_timing.c -o $O/lib_timing.o
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-config-script.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-config-script.patch
new file mode 100644
index 000000000..44bc7bbcd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-config-script.patch
@@ -0,0 +1,22 @@
+From aca1a59d888421c1fc553229b8049be47e8b3ddf Mon Sep 17 00:00:00 2001
+From: Chunrong Guo <b40290@freescale.com>
+Date: Fri, 1 Mar 2013 09:50:42 +0000
+Subject: [PATCH] lmbench: update config script
+
+Upstream-Status: Pending
+
+---
+ scripts/config | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/config b/scripts/config
+index b58cb60..25d9d77 100755
+--- a/scripts/config
++++ b/scripts/config
+@@ -3,5 +3,5 @@
+ UNAME=`uname -n 2>/dev/null`
+ if [ X$UNAME = X ]
+ then echo CONFIG
+-else echo CONFIG.$UNAME
++else echo ../scripts/CONFIG.$UNAME
+ fi
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-results-script.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-results-script.patch
new file mode 100644
index 000000000..31c4aecbb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/update-results-script.patch
@@ -0,0 +1,170 @@
+From 4955021bc283be404df62b97b86af3943efd29de Mon Sep 17 00:00:00 2001
+From: Noor Ahsan <noor_ahsan@mentor.com>
+Date: Mon, 29 Aug 2011 16:17:51 +0000
+Subject: [PATCH] lmbench: Add version 3.0-a9 (initial recipe)
+
+Now that we have our binaries in /usr/bin rather than the normal
+lmbench hierarchy we need to update the scripts as well to behave well here.
+
+Upstream-Status: Inappropriate [This is related to the OE-specific behavior
+of installing into /usr/bin, etc, rather than dumping everything into
+/usr/share/lmbench or similar]
+
+---
+ scripts/config-run | 40 ++++++++++++++++++++--------------------
+ scripts/results | 8 +++-----
+ 2 files changed, 23 insertions(+), 25 deletions(-)
+
+diff --git a/scripts/config-run b/scripts/config-run
+index a2d5ba4..918cbdf 100755
+--- a/scripts/config-run
++++ b/scripts/config-run
+@@ -132,20 +132,20 @@ export LMBENCH_SCHED
+ ############################################################################
+ echo $L; echo "";
+ echo "Hang on, we are calculating your timing granularity."
+-../bin/$OS/msleep 250
+-ENOUGH=`../bin/$OS/enough`
++msleep 250
++ENOUGH=`enough`
+ export ENOUGH
+ echo "OK, it looks like you can time stuff down to $ENOUGH usec resolution."
+ echo ""
+ echo "Hang on, we are calculating your timing overhead."
+-../bin/$OS/msleep 250
+-TIMING_O=`../bin/$OS/timing_o`
++msleep 250
++TIMING_O=`timing_o`
+ export TIMING_O
+ echo "OK, it looks like your gettimeofday() costs $TIMING_O usecs."
+ echo ""
+ echo "Hang on, we are calculating your loop overhead."
+-../bin/$OS/msleep 250
+-LOOP_O=`../bin/$OS/loop_o`
++msleep 250
++LOOP_O=`loop_o`
+ export LOOP_O
+ echo "OK, it looks like your benchmark loop costs $LOOP_O usecs."
+ echo ""
+@@ -177,7 +177,7 @@ then
+ fi
+ if [ X$MB = X ]
+ then $ECHON "Probing system for available memory: $ECHOC"
+- MB=`../bin/$OS/memsize 4096`
++ MB=`memsize 4096`
+ fi
+ TOTAL_MEM=$MB
+ MB=`echo \( $MB \* 7 \) / 10 | bc 2>/dev/null`
+@@ -205,9 +205,9 @@ fi
+ # Certain machines tend to barf when you try and bcopy 8MB.
+ # Figure out how much we can use.
+ echo "Checking to see if you have $MB MB; please wait for a moment..."
+-MB=`../bin/$OS/memsize $MB`
+-MB=`../bin/$OS/memsize $MB`
+-MB=`../bin/$OS/memsize $MB`
++MB=`memsize $MB`
++MB=`memsize $MB`
++MB=`memsize $MB`
+ if [ `expr $SYNC_MAX \* $MB` -gt `expr $TOTAL_MEM` ]
+ then
+ MB=`expr $TOTAL_MEM / $SYNC_MAX`
+@@ -223,8 +223,8 @@ then echo Warning: you have only ${MB}MB available memory.
+ fi
+
+ echo "Hang on, we are calculating your cache line size."
+-../bin/$OS/msleep 250
+-LINE_SIZE=`../bin/$OS/lm_line -M ${MB}M`
++msleep 250
++LINE_SIZE=`lm_line -M ${MB}M`
+ export LINE_SIZE
+ echo "OK, it looks like your cache line is $LINE_SIZE bytes."
+ echo ""
+@@ -479,7 +479,7 @@ EOF
+ then
+ for i in $disks
+ do if [ -r $i ]
+- then ../bin/$OS/flushdisk $i
++ then flushdisk $i
+ if [ $? -eq 1 ]
+ then echo "Must be root to run disk benchmarks."
+ echo "Root is needed to flush the buffer cache"
+@@ -584,7 +584,7 @@ fi
+ echo $L
+ echo ""
+ echo "Calculating mhz, please wait for a moment..."
+-MHZ=`../bin/$OS/mhz`
++MHZ=`mhz`
+ cat<<EOF
+ I think your CPU mhz is
+
+@@ -689,9 +689,9 @@ esac
+
+ INFO=`../scripts/info`
+ if [ $MAIL = yes ]
+-then if [ ! -f ../bin/$OS/$INFO ]
+- then cp ../scripts/info-template ../bin/$OS/$INFO
+- chmod +w ../bin/$OS/$INFO
++then if [ ! -f $INFO ]
++ then cp ../scripts/info-template $INFO
++ chmod +w $INFO
+ REUSE=no
+ else
+ REUSE=view
+@@ -705,7 +705,7 @@ then if [ ! -f ../bin/$OS/$INFO ]
+ ;;
+ [Vv]*) REUSE=view
+ echo $L
+- more ../bin/$OS/$INFO
++ more $INFO
+ echo $L
+ ;;
+ *) REUSE=yes
+@@ -733,7 +733,7 @@ EOF
+ then EDITOR=$TMP
+ fi
+ if [ X$EDITOR != "none" ]
+- then $EDITOR ../bin/$OS/`../scripts/info`
++ then $EDITOR `../scripts/info`
+ fi
+ fi
+ fi
+@@ -750,7 +750,7 @@ EOF
+
+ VERSION=`../scripts/version`
+
+-C=../bin/$OS/`../scripts/config`
++C=`../scripts/config`
+ echo DISKS=\"$DISKS\" > $C
+ echo DISK_DESC=\"$DISK_DESC\" >> $C
+ echo OUTPUT=$OUTPUT >> $C
+diff --git a/scripts/results b/scripts/results
+index cd07c15..d5aa558 100755
+--- a/scripts/results
++++ b/scripts/results
+@@ -8,11 +8,11 @@ RESULTS=results/$OS
+ BASE=../$RESULTS/`uname -n`
+ EXT=0
+
+-if [ ! -f "../bin/$OS/$CONFIG" ]
++if [ ! -f "$CONFIG" ]
+ then echo "No config file?"
+ exit 1
+ fi
+-. ../bin/$OS/$CONFIG
++. $CONFIG
+
+ if [ ! -d ../$RESULTS ]
+ then mkdir -p ../$RESULTS
+@@ -23,11 +23,9 @@ do EXT=`expr $EXT + 1`
+ RESULTS=$BASE.$EXT
+ done
+
+-cd ../bin/$OS
+-PATH=.:${PATH}; export PATH
+ export SYNC_MAX
+ export OUTPUT
+-lmbench $CONFIG 2>../${RESULTS}
++lmbench $CONFIG 2>${RESULTS}
+
+ if [ X$MAIL = Xyes ]
+ then echo Mailing results
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/use-base_libdir-instead-of-hardcoded-lib.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/use-base_libdir-instead-of-hardcoded-lib.patch
new file mode 100644
index 000000000..c6e9465ac
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench-3.0-a9/use-base_libdir-instead-of-hardcoded-lib.patch
@@ -0,0 +1,30 @@
+From 73fdc58ca4eb9e2f24d854b3af3a4e5daac5a33e Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28495@freescale.com>
+Date: Fri, 22 Nov 2013 15:20:08 +0800
+Subject: [PATCH] use base_libdir instead of hardcoded /lib
+
+Upstream Status: Inappropriate [configuration]
+
+Signed-off-by: Ting Liu <b28495@freescale.com>
+
+---
+ src/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index c7a8c79..c7e4e3c 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -143,10 +143,10 @@ install-target:
+ if [ ! -d $(BASE) ]; then mkdir $(BASE); fi
+ if [ ! -d $(BASE)/bin ]; then mkdir $(BASE)/bin; fi
+ if [ ! -d $(BASE)/include ]; then mkdir $(BASE)/include; fi
+- if [ ! -d $(BASE)/lib ]; then mkdir $(BASE)/lib; fi
++ if [ ! -d $(BASE)$(base_libdir) ]; then mkdir $(BASE)$(base_libdir); fi
+ cp $(EXES) $(BASE)/bin
+ cp $(INCS) $(BASE)/include
+- cp $O/lmbench.a $(BASE)/lib/libmbench.a
++ cp $O/lmbench.a $(BASE)$(base_libdir)
+ cd ../doc; env MAKEFLAGS="$(MAKEFLAGS)" make CC="${CC}" OS="${OS}" BASE="$(BASE)" install
+
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/0001-avoid-gcc-optimize-away-the-loops.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/0001-avoid-gcc-optimize-away-the-loops.patch
new file mode 100644
index 000000000..b964bef1f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/0001-avoid-gcc-optimize-away-the-loops.patch
@@ -0,0 +1,80 @@
+From 25738bb9c75f94b451201acfd6bcab13bdeee512 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Thu, 5 May 2016 09:52:01 +0800
+Subject: [PATCH] [PATCH] avoid gcc optimize-away the loops
+
+Upstream-Status: pending
+
+Change expression used in do_integer_mul and do_uint64_mul
+benchmarks so GCC doesn't optimize-away the loops, other
+things are same:
+- TEN(r *= s;); r -= t;
++ i = 0;
++ while ( i++ < 10)
++ r *= s;
++ r -= t;
+
+and TEN is macro:
+ #define TEN(a) a a a a a a a a a a
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ src/lat_ops.c | 30 +++++++++++++++++++++++++-----
+ 1 file changed, 25 insertions(+), 5 deletions(-)
+
+diff --git a/src/lat_ops.c b/src/lat_ops.c
+index d343ff3..457072b 100644
+--- a/src/lat_ops.c
++++ b/src/lat_ops.c
+@@ -126,11 +126,23 @@ do_integer_mul(iter_t iterations, void* cookie)
+ struct _state *pState = (struct _state*)cookie;
+ register int r = pState->N + 37431;
+ register int s = pState->N + 4;
+- register int t = r * s * s * s * s * s * s * s * s * s * s - r;
++ register int t = r;
++ int i = 0;
++
++ while ( i++ < 10)
++ t *= s;
++ t -= r;
+
+ while (iterations-- > 0) {
+- TEN(r *= s;); r -= t;
+- TEN(r *= s;); r -= t;
++ i = 0;
++ while ( i++ < 10)
++ r *= s;
++ r -= t;
++
++ i = 0;
++ while ( i++ < 10)
++ r *= s;
++ r -= t;
+ }
+ use_int(r);
+ }
+@@ -207,13 +219,21 @@ do_int64_mul(iter_t iterations, void* cookie)
+ register int64 r = (int64)pState->N + 37420;
+ register int64 s = (int64)pState->N + 4;
+ register int64 t;
++ int i = 0;
+
+ r += (int64)(pState->N + 6)<<32;
+ t = r * s * s * s * s * s * s * s * s * s * s - r;
+
+ while (iterations-- > 0) {
+- TEN(r *= s;); r -= t;
+- TEN(r *= s;); r -= t;
++ i = 0;
++ while ( i++ < 10)
++ r *= s;
++ r -= t;
++
++ i = 0;
++ while ( i++ < 10)
++ r *= s;
++ r -= t;
+ }
+ use_int((int)r);
+ }
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/lmbench-run b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/lmbench-run
new file mode 100644
index 000000000..e904c75e4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/lmbench-run
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Wrapper script for lmbench written for the
+# Debian GNU/Linux distribution by
+# Javier Fernandez-Sanguino.
+# Distributed under the GPL
+SHAREDIR=/usr/share/lmbench/
+BINDIR=/usr/lib/lmbench/
+SCRIPTSDIR=$SHAREDIR/scripts
+RESULTSDIR=$SHAREDIR/results
+CONFIG=/var/lib/lmbench/config/`$SCRIPTSDIR/config`
+runuid=`id -u`
+
+[ $runuid -gt 0 ] && {
+ echo "You must run this as the root user"
+ exit 0
+}
+cd $SCRIPTSDIR
+[ ! -f $CONFIG ] && ./config-run
+./results
+
+echo "Benchmark run finished...."
+echo "Remember you can find the results of the benchmark "
+echo "under $RESULTSDIR"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/rename-line-binary.patch b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/rename-line-binary.patch
new file mode 100644
index 000000000..b42ee7d0f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/rename-line-binary.patch
@@ -0,0 +1,30 @@
+From 16823f5c3d3d5adad0b70e9055c08cb4e18d255b Mon Sep 17 00:00:00 2001
+From: Noor Ahsan <noor_ahsan@mentor.com>
+Date: Mon, 29 Aug 2011 16:17:51 +0000
+Subject: [PATCH] lmbench: Add version 3.0-a9 (initial recipe)
+
+Both lmbench and util-linux-ng packages provide own /usr/bin/line binaries.
+Even though the binaries name is the same, their functionality is different.
+This patch renames lmbench's line binary as lm_line to avoid conflicts with
+util-linux-ng. script/config-run is also modified (patch) to call lm_line
+instead of line.
+
+Upstream-Status: Inappropriate [build system specific change]
+
+---
+ scripts/config-run | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/config-run b/scripts/config-run
+index f620c15..a2d5ba4 100755
+--- a/scripts/config-run
++++ b/scripts/config-run
+@@ -224,7 +224,7 @@ fi
+
+ echo "Hang on, we are calculating your cache line size."
+ ../bin/$OS/msleep 250
+-LINE_SIZE=`../bin/$OS/line -M ${MB}M`
++LINE_SIZE=`../bin/$OS/lm_line -M ${MB}M`
+ export LINE_SIZE
+ echo "OK, it looks like your cache line is $LINE_SIZE bytes."
+ echo ""
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb
new file mode 100644
index 000000000..03b3721ca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb
@@ -0,0 +1,88 @@
+SUMMARY = "Tools for performance analysis"
+HOMEPAGE = "http://lmbench.sourceforge.net/"
+SECTION = "console/utils"
+LICENSE = "GPLv2 & GPL-2.0-with-lmbench-restriction"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
+ file://COPYING-2;md5=8e9aee2ccc75d61d107e43794a25cdf9"
+
+inherit autotools-brokensep
+
+DEPENDS_append_libc-musl = " libtirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDLIBS_append_libc-musl = " -ltirpc "
+
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lmbench/lmbench-${PV}.tgz \
+ file://lmbench-run \
+ file://rename-line-binary.patch \
+ file://update-results-script.patch \
+ file://obey-ranlib.patch \
+ file://update-config-script.patch \
+ file://use-base_libdir-instead-of-hardcoded-lib.patch \
+ file://lmbench_result_html_report.patch \
+ file://fix-lmbench-memory-check-failure.patch \
+ file://0001-avoid-gcc-optimize-away-the-loops.patch \
+ file://0001-lat_http.c-Add-printf-format.patch \
+ file://0001-Check-for-musl-define-guard-before-redefining-sockle.patch \
+ file://0002-build-Adjust-CFLAGS-LDFLAGS-to-append-values-passed-.patch \
+ "
+SRC_URI[md5sum] = "b3351a3294db66a72e2864a199d37cbf"
+SRC_URI[sha256sum] = "cbd5777d15f44eab7666dcac418054c3c09df99826961a397d9acf43d8a2a551"
+
+EXTRA_OEMAKE = 'CC="${CC}" AR="${AR}" RANLIB="${RANLIB}" CFLAGS="${CFLAGS}" \
+ LDFLAGS="${LDFLAGS}" LDLIBS="${LDLIBS}" LD="${LD}" OS="${TARGET_SYS}" \
+ TARGET="${TARGET_OS}" BASE="${prefix}" MANDIR="${mandir}"'
+
+do_configure() {
+ :
+}
+
+do_compile () {
+ for CONFIG_SITE_ITEM in $CONFIG_SITE; do
+ . $CONFIG_SITE_ITEM
+ done
+ if [ X"$ac_cv_uint" = X"yes" ]; then
+ CFLAGS="${CFLAGS} -DHAVE_uint"
+ fi
+ install -d ${S}/bin/${TARGET_SYS}
+ oe_runmake -C src
+}
+
+do_install () {
+ install -d ${D}${sysconfdir}/default/volatiles \
+ ${D}${bindir} ${D}${mandir} ${D}${libdir}/lmbench \
+ ${D}${datadir}/lmbench/scripts
+
+ echo "d root root 0755 ${localstatedir}/run/${BPN} none" \
+ > ${D}${sysconfdir}/default/volatiles/99_lmbench
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/${BPN} - - - -" \
+ > ${D}${sysconfdir}/tmpfiles.d/lmbench.conf
+ fi
+
+ oe_runmake BASE="${D}${prefix}" MANDIR="${D}${mandir}" \
+ -C src install
+ mv ${D}${bindir}/line ${D}${bindir}/lm_line
+ install -m 0755 ${WORKDIR}/lmbench-run ${D}${bindir}/
+ sed -i -e 's,^SHAREDIR=.*$,SHAREDIR=${datadir}/${BPN},;' \
+ -e 's,^BINDIR=.*$,BINDIR=${libdir}/${BPN},;' \
+ -e 's,^CONFIG=.*$,CONFIG=`$SCRIPTSDIR/config`,;' \
+ ${D}${bindir}/lmbench-run
+ install -m 0755 ${S}/scripts/lmbench ${D}${bindir}
+ install -m 0755 ${S}/scripts/* ${D}${datadir}/lmbench/scripts
+}
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" ]; then
+ if command -v systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/lmbench.conf
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+RDEPENDS_${PN} = "perl"
+FILES_${PN} += "${datadir}/lmbench ${libdir}/lmbench"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/memtester/files/Makefile.patch b/meta-openembedded/meta-oe/recipes-benchmark/memtester/files/Makefile.patch
new file mode 100644
index 000000000..971e52ac7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/memtester/files/Makefile.patch
@@ -0,0 +1,28 @@
+From 9a950b14b9f7767d83e5faac2e1e8203c500e2c2 Mon Sep 17 00:00:00 2001
+From: Rod Whitby <rod@whitby.id.au>
+Date: Tue, 25 Oct 2011 18:43:50 -0500
+Subject: [PATCH] memtester: Added patch to Makefile to change no-longer-supported 'head -1' syntax to 'head -n 1'.
+
+Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
+---
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a271bf5..6bccff3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -32,8 +32,8 @@ install: all
+ auto-ccld.sh: \
+ conf-cc conf-ld warn-auto.sh
+ ( cat warn-auto.sh; \
+- echo CC=\'`head -1 conf-cc`\'; \
+- echo LD=\'`head -1 conf-ld`\' \
++ echo CC=\'`head -n 1 conf-cc`\'; \
++ echo LD=\'`head -n 1 conf-ld`\' \
+ ) > auto-ccld.sh
+
+ compile: \
+--
+1.7.0.4
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/memtester/memtester_4.3.0.bb b/meta-openembedded/meta-oe/recipes-benchmark/memtester/memtester_4.3.0.bb
new file mode 100644
index 000000000..0964c0487
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/memtester/memtester_4.3.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Utility to test for faulty memory subsystem"
+HOMEPAGE = "http://pyropus.ca/software/memtester/"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "http://pyropus.ca/software/memtester/old-versions/${BP}.tar.gz"
+SRC_URI += "file://Makefile.patch"
+
+SRC_URI[md5sum] = "598f41b7308e1f736164bca3ab84ddbe"
+SRC_URI[sha256sum] = "f9dfe2fd737c38fad6535bbab327da9a21f7ce4ea6f18c7b3339adef6bf5fd88"
+
+do_compile () {
+ echo '${CC} ${CFLAGS} -DPOSIX -c' > conf-cc
+ echo '${CC} ${LDFLAGS}' > conf-ld
+ oe_runmake
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man8
+ install -m 0755 memtester ${D}${bindir}/
+ install -m 0755 memtester.8 ${D}${mandir}/man8/
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/Makefile-add-more-dependencies-to-pointer.h.patch b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/Makefile-add-more-dependencies-to-pointer.h.patch
new file mode 100644
index 000000000..abdb4344b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/Makefile-add-more-dependencies-to-pointer.h.patch
@@ -0,0 +1,23 @@
+Makefile: add more dependencies to pointer.h
+
+Upstream-Status: Inappropriate [no upstream]
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 915866d..edd9ea2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -122,7 +122,7 @@ emfloat.o: emfloat.h emfloat.c nmglobal.h pointer.h Makefile
+ pointer.h: Makefile
+ touch pointer.h ;
+
+-misc.o: misc.h misc.c Makefile
++misc.o: misc.h misc.c nmglobal.h pointer.h Makefile
+ $(CC) $(MACHINE) $(DEFINES) $(CFLAGS)\
+ -c misc.c
+
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/nbench_32bits.patch b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/nbench_32bits.patch
new file mode 100644
index 000000000..1b8a4dc08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte/nbench_32bits.patch
@@ -0,0 +1,46 @@
+From 81f4043a6787060029ef20eed21cdcf3e50337df Mon Sep 17 00:00:00 2001
+From: Chase Maupin <Chase.Maupin@ti.com>
+Date: Tue, 28 Feb 2012 14:58:35 -0600
+Subject: [PATCH] nbench: modify Makefile for 32bit
+
+* Patch taken from OE classic git repository as of commit id
+ ad42bf9065928b2902d7d9534709d3ccea7ec956 and was added by:
+ * Marcin Juszkiewicz <marcin@juszkiewicz.com.pl>
+* Notes from original patch were:
+
+BYTE Magazine's native benchmarks (also called BYTEmark) designed to
+expose the capabilities of a system's CPU, FPU and memory system.
+
+http://www.tux.org/~mayer/linux/
+
+Recipe from old Atmel overlay.
+
+Upstream-Status: Inappropriate [no upstream]
+
+Signed-off-by: Chase Maupin <chase.maupin@ti.com>
+---
+ Makefile | 8 ++------
+ 1 files changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 5045c77..915866d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -119,12 +119,8 @@ emfloat.o: emfloat.h emfloat.c nmglobal.h pointer.h Makefile
+ $(CC) $(MACHINE) $(DEFINES) $(CFLAGS)\
+ -c emfloat.c
+
+-pointer.h: pointer Makefile
+- $(CC) $(MACHINE) $(DEFINES) $(CFLAGS)\
+- -o pointer pointer.c
+- rm -f pointer.h
+- if [ "4" = `./pointer` ] ; then touch pointer.h ;\
+- else echo "#define LONG64" >pointer.h ; fi
++pointer.h: Makefile
++ touch pointer.h ;
+
+ misc.o: misc.h misc.c Makefile
+ $(CC) $(MACHINE) $(DEFINES) $(CFLAGS)\
+--
+1.7.0.4
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte_2.2.3.bb b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte_2.2.3.bb
new file mode 100644
index 000000000..da2cb4b32
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/nbench-byte/nbench-byte_2.2.3.bb
@@ -0,0 +1,28 @@
+SUMMARY = "A CPU benchmark utility"
+DESCRIPTION = "BYTE Magazine's native benchmarks (also called BYTEmark) \
+designed to expose the capabilities of a system's CPU, FPU, \
+and memory system."
+HOMEPAGE = "http://www.tux.org/~mayer/linux/"
+LICENSE = "nbench-byte"
+LIC_FILES_CHKSUM = "file://README;beginline=57;endline=66;md5=020ef579f8fa5746b7e307a54707834f"
+SECTION = "console/utils"
+
+SRC_URI = "https://fossies.org/linux/misc/${BP}.tar.gz \
+ file://nbench_32bits.patch \
+ file://Makefile-add-more-dependencies-to-pointer.h.patch"
+
+SRC_URI[md5sum] = "285dfab361080759d477ea1fe7d3093a"
+SRC_URI[sha256sum] = "723dd073f80e9969639eb577d2af4b540fc29716b6eafdac488d8f5aed9101ac"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+TARGET_CC_ARCH += "${CFLAGS} ${LDFLAGS}"
+do_compile() {
+ oe_runmake
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0644 NNET.DAT ${D}${bindir}/
+ install -m 0755 nbench ${D}${bindir}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_7.8.0.bb b/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_7.8.0.bb
new file mode 100644
index 000000000..1f90a7125
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_7.8.0.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Phoronix Test Suite"
+DESCRIPTION = "The Phoronix Test Suite is designed to carry out both qualitative \
+and quantitative benchmarks in a clean, reproducible, and easy-to-use manner."
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+SECTION = "console/tests"
+
+SRC_URI = "http://www.phoronix-test-suite.com/releases/${BP}.tar.gz"
+SRC_URI[md5sum] = "850843bd9252823e7e24bc0849773000"
+SRC_URI[sha256sum] = "cd6c869841f28e4ac1e8a5e4cda05fafce9a523a6b4f0f3a47805efd30494d88"
+
+S = "${WORKDIR}/phoronix-test-suite"
+
+inherit systemd allarch
+
+do_install() {
+ DESTDIR=${D} ./install-sh ${exec_prefix}
+
+ if [ "${systemd_unitdir}" != "/usr/lib/systemd" ]; then
+ install -d ${D}/${systemd_unitdir}/system/
+ mv ${D}/usr/lib/systemd/system/* ${D}/${systemd_unitdir}/system/
+ rm -rf ${D}/usr/lib/
+ fi
+}
+
+# It is not advisable to enable these services by default since they can cause
+# continual target reboots if they encounter network problems.
+#
+SYSTEMD_AUTO_ENABLE = "disable"
+SYSTEMD_SERVICE_${PN} = "phoromatic-client.service phoromatic-server.service"
+
+RDEPENDS_${PN} += "bash python php-cli"
+
+FILES_${PN} += " \
+ ${datadir}/phoronix-test-suite \
+ ${datadir}/appdata/phoronix-test-suite.appdata.xml \
+ ${datadir}/icons/hicolor/48x48/apps/phoronix-test-suite.png \
+ ${datadir}/icons/hicolor/64x64/mimetypes/application-x-openbenchmarking.png \
+ ${datadir}/mime/packages/openbenchmarking-mime.xml \
+ ${systemd_unitdir}/* \
+"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/sysbench/sysbench_0.4.12.bb b/meta-openembedded/meta-oe/recipes-benchmark/sysbench/sysbench_0.4.12.bb
new file mode 100644
index 000000000..708c71f4f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/sysbench/sysbench_0.4.12.bb
@@ -0,0 +1,26 @@
+SUMMARY = "System performance benchmark"
+HOMEPAGE = "http://github.com/akopytov/sysbench"
+SECTION = "console/tests"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit autotools
+
+# The project has moved from Sourceforge to Launchpad, to Github. Use the source tarball from
+# Launchpad until the next release is available from Github.
+SRC_URI = "https://launchpad.net/ubuntu/+archive/primary/+files/${BPN}_${PV}.orig.tar.gz"
+
+SRC_URI[md5sum] = "3a6d54fdd3fe002328e4458206392b9d"
+SRC_URI[sha256sum] = "83fa7464193e012c91254e595a89894d8e35b4a38324b52a5974777e3823ea9e"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'largefile', d)}"
+PACKAGECONFIG[largefile] = "--enable-largefile,--disable-largefile,,"
+PACKAGECONFIG[aio] = "--enable-aio,--disable-aio,libaio,"
+PACKAGECONFIG[mysql] = "--with-mysql \
+ --with-mysql-includes=${STAGING_INCDIR}/mysql \
+ --with-mysql-libs=${STAGING_LIBDIR}, \
+ --without-mysql,mysql5"
+
+do_configure_prepend() {
+ touch ${S}/NEWS ${S}/AUTHORS
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tinymembench/tinymembench_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/tinymembench/tinymembench_git.bb
new file mode 100644
index 000000000..8cb59da73
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tinymembench/tinymembench_git.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "A simple memory benchmark program, which tries to measure the \
+peak bandwidth of sequential memory accesses and the latency of random memory \
+accesses. Bandwidth is measured by running different assembly code for the \
+aligned memory blocks and attempting different prefetch strategies"
+HOMEPAGE = "https://github.com/ssvb/tinymembench/wiki"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://main.c;endline=22;md5=879b9bbb60851454885b5fa47eb6b345"
+
+PV = "0.4.0+git${SRCPV}"
+
+SRCREV = "2c789849709d837b4bd114c11ed2d9bdc65afbc6"
+SRC_URI = "git://github.com/ssvb/tinymembench.git"
+
+S = "${WORKDIR}/git"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m755 tinymembench ${D}${bindir}/
+}
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:66: Error: instruction not supported in Thumb16 mode -- `subs r1,r1,#16'
+#| {standard input}:69: Error: instruction not supported in Thumb16 mode -- `subs r1,r1,#16'
+#| {standard input}:82: Error: selected processor does not support Thumb mode `mla r3,r4,r3,r5'
+#| {standard input}:82: Error: unshifted register required -- `and r8,r7,r3,lsr#16'
+ARM_INSTRUCTION_SET = "arm"
+#
+# Does not work for 64bit mips.
+#
+COMPATIBLE_HOST = "^(?!mips64).*"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Drop-inline-of-crc32-function-to-fix-build-using-GCC.patch b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Drop-inline-of-crc32-function-to-fix-build-using-GCC.patch
new file mode 100644
index 000000000..5aebb956c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Drop-inline-of-crc32-function-to-fix-build-using-GCC.patch
@@ -0,0 +1,30 @@
+From 5429ab90eb33eb243fa7b9cd247e0490d72b9da5 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Wed, 9 Sep 2015 15:04:45 +0000
+Subject: [PATCH] Drop 'inline' of crc32 function to fix build using GCC 5.2
+Organization: O.S. Systems Software LTDA.
+
+Upstream-Status: Pending
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ crc32.h | 1 -
+ crc32.o | Bin 748 -> 2056 bytes
+ 2 files changed, 1 deletion(-)
+
+diff --git a/crc32.h b/crc32.h
+index 62b3433..8fc62b6 100644
+--- a/crc32.h
++++ b/crc32.h
+@@ -18,7 +18,6 @@
+ #ifndef CRC32_H
+ #define CRC32_H
+
+-inline
+ unsigned long crc32( const void* const buffer,
+ unsigned long length,
+ unsigned long crc);
+
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Specify-printf-formats.patch b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Specify-printf-formats.patch
new file mode 100644
index 000000000..cfd34f02a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/0001-Specify-printf-formats.patch
@@ -0,0 +1,49 @@
+From b08e61ef64eece23ce8ffa2784cd3c4f70b6169e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 08:08:56 -0700
+Subject: [PATCH] Specify printf formats
+
+Fixes
+tiotest.c:555:4: error: format not a string literal and no format arguments [-Werror=format-security]
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tiotest.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tiotest.c b/tiotest.c
+index 6b3d0c3..3e6166a 100644
+--- a/tiotest.c
++++ b/tiotest.c
+@@ -91,7 +91,7 @@ inline void checkIntZero(int value, char *mess)
+ {
+ if (value <= 0)
+ {
+- printf(mess);
++ printf("%s",mess);
+ printf("Try 'tiotest -h' for more information.\n");
+ exit(1);
+ }
+@@ -101,7 +101,7 @@ inline void checkLong(long value, char *mess)
+ {
+ if (value < 0)
+ {
+- printf(mess);
++ printf("%s", mess);
+ printf("Try 'tiotest -h' for more information\n");
+ exit(1);
+ }
+@@ -552,7 +552,7 @@ void do_test( ThreadTest *test, int testCase, int sequential,
+ if(args.debugLevel > 4)
+ {
+ printf("Created %d threads\n", i);
+- fprintf(stderr, debugMessage);
++ fprintf(stderr, "%s", debugMessage);
+ fflush(stderr);
+ }
+
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/avoid-glibc-clashes.patch b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/avoid-glibc-clashes.patch
new file mode 100644
index 000000000..321d29983
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/avoid-glibc-clashes.patch
@@ -0,0 +1,57 @@
+From: Otavio Salvador <otavio@ossystems.com.br>
+Subject: [PATCH] Avoid aligned allocation function name clashes
+
+glibc added new methods for aligned allocation and it clashes with the
+local version used by 'tiobench'. To fix it, we prefix the methods
+with '_'.
+
+Upstream-Status: Pending
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ tiotest.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tiotest.c b/tiotest.c
+index 38f54e7..6b3d0c3 100644
+--- a/tiotest.c
++++ b/tiotest.c
+@@ -31,7 +31,7 @@ static const char* versionStr = "tiotest v0.3.3 (C) 1999-2000 Mika Kuoppala <mik
+ */
+ ArgumentOptions args;
+
+-static void * aligned_alloc(ssize_t size)
++static void * _aligned_alloc(ssize_t size)
+ {
+ caddr_t a;
+ a = mmap((caddr_t )0, size,
+@@ -41,7 +41,7 @@ static void * aligned_alloc(ssize_t size)
+ return a;
+ }
+
+-static int aligned_free(caddr_t a, ssize_t size)
++static int _aligned_free(caddr_t a, ssize_t size)
+ {
+ return munmap(a, size);
+ }
+@@ -281,7 +281,7 @@ void initialize_test( ThreadTest *d )
+ pthread_attr_setscope(&(d->threads[i].thread_attr),
+ PTHREAD_SCOPE_SYSTEM);
+
+- d->threads[i].buffer = aligned_alloc( d->threads[i].blockSize );
++ d->threads[i].buffer = _aligned_alloc( d->threads[i].blockSize );
+ if( d->threads[i].buffer == NULL )
+ {
+ perror("Error allocating memory");
+@@ -383,7 +383,7 @@ void cleanup_test( ThreadTest *d )
+ {
+ if (!args.rawDrives)
+ unlink(d->threads[i].fileName);
+- aligned_free( d->threads[i].buffer, d->threads[i].blockSize );
++ _aligned_free( d->threads[i].buffer, d->threads[i].blockSize );
+ d->threads[i].buffer = 0;
+
+ pthread_attr_destroy( &(d->threads[i].thread_attr) );
+--
+1.7.7
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/tiobench-makefile.patch b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/tiobench-makefile.patch
new file mode 100644
index 000000000..f820c7e33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench-0.3.3/tiobench-makefile.patch
@@ -0,0 +1,49 @@
+Adapt tiobench to OE
+Author: Ludovic Desroches <ludovic.desroches@atmel.com>
+
+Upstream-Status: Inappropriate [not author]
+
+Index: Makefile
+===================================================================
+--- a/Makefile 2011-05-26 07:48:46.341400974 +0200
++++ b/Makefile 2011-05-30 06:32:38.091401358 +0200
+@@ -1,8 +1,9 @@
+ # Makefile for tiotest
+
+-CC=gcc
++CC?=gcc
+ #CFLAGS=-O3 -fomit-frame-pointer -Wall
+ CFLAGS=-O2 -Wall
++LDFLAGS?=
+
+ #DEFINES=-DUSE_MMAP
+ #-DUSE_MADVISE
+@@ -14,16 +15,16 @@
+
+ #DEFINES=
+
+-LINK=gcc
++LINK?=$(CC)
+ EXE=tiotest
+ PROJECT=tiobench
+ # do it once instead of each time referenced
+ VERSION=$(shell egrep "tiotest v[0-9]+.[0-9]+" tiotest.c | cut -d " " -f 7 | sed "s/v//g")
+ DISTNAME=$(PROJECT)-$(VERSION)
+ INSTALL=install
+-PREFIX=/usr/local
++PREFIX?=/usr/local
+ BINDIR=$(PREFIX)/bin
+-DOCDIR=/usr/local/doc/$(DISTNAME)
++DOCDIR=$(PREFIX)/share/doc/$(DISTNAME)
+
+ all: $(EXE)
+
+@@ -34,7 +35,7 @@
+ $(CC) -c $(CFLAGS) $(DEFINES) tiotest.c -o tiotest.o
+
+ $(EXE): tiotest.o crc32.o
+- $(LINK) -o $(EXE) tiotest.o crc32.o -lpthread
++ $(LINK) -o $(EXE) tiotest.o crc32.o -lpthread $(LDFLAGS)
+ @echo
+ @echo "./tiobench.pl --help for usage options"
+ @echo
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench_0.3.3.bb b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench_0.3.3.bb
new file mode 100644
index 000000000..427ce67d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/tiobench/tiobench_0.3.3.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Threaded I/O tester"
+HOMEPAGE = "http://sourceforge.net/projects/tiobench/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
+
+PR = "r1"
+
+SRC_URI = "\
+ http://sourceforge.net/projects/tiobench/files/tiobench/${PV}/${BP}.tar.gz \
+ file://tiobench-makefile.patch \
+ file://avoid-glibc-clashes.patch \
+ file://0001-Drop-inline-of-crc32-function-to-fix-build-using-GCC.patch \
+ file://0001-Specify-printf-formats.patch \
+"
+SRC_URI[md5sum] = "bf485bf820e693c79e6bd2a38702a128"
+SRC_URI[sha256sum] = "8ad011059a35ac70cdb5e3d3999ceee44a8e8e9078926844b0685b7ea9db2bcc"
+
+EXTRA_OEMAKE = "PREFIX=${D}/usr"
+
+do_install() {
+ oe_runmake install
+}
+
+RDEPENDS_${PN} = "\
+ perl \
+ perl-module-exporter-heavy \
+ perl-module-getopt-long \
+ perl-module-overload \
+ perl-module-strict \
+"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/whetstone/whetstone_1.2.bb b/meta-openembedded/meta-oe/recipes-benchmark/whetstone/whetstone_1.2.bb
new file mode 100644
index 000000000..8fad04e36
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/whetstone/whetstone_1.2.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Whetstone benchmark is a synthetic benchmark for evaluating the performance of computers"
+SUMMARY = "CPU benchmark to measure floating point performance"
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM ="file://${WORKDIR}/whetstone.c;beginline=1;endline=52;md5=c795edc15e7e1d92ca8f88ad718449f5"
+
+SRC_URI = "http://www.netlib.org/benchmark/whetstone.c"
+SRC_URI[md5sum] = "d8eb2cd7104bb5a12d614ac6d3f1f9fb"
+SRC_URI[sha256sum] = "333e4ceca042c146f63eec605573d16ae8b07166cbc44a17bec1ea97c6f1efbf"
+
+S = "${WORKDIR}"
+
+do_compile () {
+ ${CC} ${CFLAGS} ${LDFLAGS} -Ofast -o whetstone whetstone.c -lm
+}
+
+do_install () {
+ install -Dm 0755 whetstone ${D}${bindir}/whetstone
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/acpitool/acpitool_0.5.1.bb b/meta-openembedded/meta-oe/recipes-bsp/acpitool/acpitool_0.5.1.bb
new file mode 100644
index 000000000..bc9669d0f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/acpitool/acpitool_0.5.1.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Acpitool is a Linux ACPI client. It simply reads /proc/acpi or /sys/class entries \
+and presents the output in a meaningfull, human-readable format."
+HOMEPAGE = "http://freeunix.dyndns.org:8088/site2/acpitool.shtml"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://nchc.dl.sourceforge.net/project/${BPN}/${BPN}/${PV}/${BP}.tar.bz2 \
+ "
+
+inherit autotools
+
+SRC_URI[md5sum] = "9e4ec55201be0be71ffbc56d38b42b57"
+SRC_URI[sha256sum] = "004fb6cd43102918b6302cf537a2db7ceadda04aef2e0906ddf230f820dad34f"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils/0001-dont-unset-cflags.patch b/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils/0001-dont-unset-cflags.patch
new file mode 100644
index 000000000..fb2f07f07
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils/0001-dont-unset-cflags.patch
@@ -0,0 +1,30 @@
+--- git.old/Makefile 2012-04-17 13:29:46.280435340 +0200
++++ git/Makefile 2012-04-17 13:31:13.664433470 +0200
+@@ -77,17 +77,7 @@ INSTALL_PROGRAM = ${INSTALL}
+ INSTALL_DATA = ${INSTALL} -m 644
+ INSTALL_SCRIPT = ${INSTALL_PROGRAM}
+
+-# If you are running a cross compiler, you may want to set this
+-# to something more interesting, like "arm-linux-". If you want
+-# to compile vs uClibc, that can be done here as well.
+-CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
+-CC = $(CROSS)gcc
+-LD = $(CROSS)gcc
+-AR = $(CROSS)ar
+-STRIP = $(CROSS)strip
+-RANLIB = $(CROSS)ranlib
+-HOSTCC = gcc
+-
++HOSTCC = $(BUILD_CC)
+
+ # Now we set up the build system
+ #
+@@ -95,7 +85,7 @@ HOSTCC = gcc
+ # set up PWD so that older versions of make will work with our build.
+ PWD = $(shell pwd)
+
+-export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS
++export CFLAGS LDFLAGS LIB_OBJS
+
+ # check if compiler option is supported
+ cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils_008.bb b/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils_008.bb
new file mode 100644
index 000000000..88fcc0200
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/cpufrequtils/cpufrequtils_008.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "To make access to the Linux kernel cpufreq subsystem easier for users and cpufreq userspace tools, a cpufrequtils package was created"
+
+inherit gettext
+
+DEPENDS = "libtool-cross"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRCREV = "a2f0c39d5f21596bb9f5223e895c0ff210b265d0"
+# SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/cpufreq/cpufrequtils.git
+
+SRC_URI = "git://github.com/emagii/cpufrequtils.git \
+ file://0001-dont-unset-cflags.patch \
+"
+
+EXTRA_OEMAKE_append = " ${@['', 'NLS=false']['${USE_NLS}' == 'no']} "
+
+PR = "r5"
+
+S = "${WORKDIR}/git"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+EXTRA_OEMAKE = "V=1 CROSS=${TARGET_PREFIX} LIBTOOL='${HOST_SYS}-libtool --tag cc' STRIPCMD=echo 'CP=cp'"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake -e install DESTDIR=${D}
+ rm -f ${D}${libdir}/libcpufreq.so.0 ${D}${libdir}/libcpufreq.so
+ ln -s libcpufreq.so.0.0.0 ${D}${libdir}/libcpufreq.so.0
+ ln -s libcpufreq.so.0.0.0 ${D}${libdir}/libcpufreq.so
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb
new file mode 100644
index 000000000..2c0914d30
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Userspace helper for Linux kernel EDAC drivers"
+HOMEPAGE = "https://github.com/grondo/edac-utils"
+SECTION = "Applications/System"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = " sysfsutils"
+
+SRCREV = "f9aa96205f610de39a79ff43c7478b7ef02e3138"
+PV = "0.18+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://github.com/grondo/edac-utils \
+ file://make-init-script-be-able-to-automatically-load-EDAC-.patch \
+ file://add-restart-to-initscript.patch \
+ file://edac.service \
+"
+
+inherit autotools-brokensep systemd
+
+do_configure_prepend () {
+ touch ${S}/ChangeLog
+ ${S}/bootstrap
+}
+
+RDEPENDS_${PN}_x86 = "dmidecode"
+RDEPENDS_${PN}_x86-64 = "dmidecode"
+RDEPENDS_${PN}_arm = "dmidecode"
+RDEPENDS_${PN}_aarch64 = "dmidecode"
+RDEPENDS_${PN}_powerpc = "dmidecode"
+RDEPENDS_${PN}_powerpc64 = "dmidecode"
+RDEPENDS_${PN}_append = " \
+ perl-module-file-basename perl-module-file-find perl-module-getopt-long perl-module-posix \
+ perl-module-overload \
+ perl-module-overloading \
+ perl-module-file-glob \
+"
+
+do_install_append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/edac.service ${D}/${systemd_unitdir}/system
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}/${systemd_unitdir}/system/edac.service
+}
+
+SYSTEMD_SERVICE_${PN} = "edac.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/add-restart-to-initscript.patch b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/add-restart-to-initscript.patch
new file mode 100644
index 000000000..87051da90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/add-restart-to-initscript.patch
@@ -0,0 +1,33 @@
+From 3ade837f64de0cfe2aed5bc52f7919760f350531 Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Fri, 7 Mar 2014 00:57:12 -0500
+Subject: [PATCH] edac: add restart to initscript
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ src/etc/edac.init.in | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/etc/edac.init.in b/src/etc/edac.init.in
+index adf76ee..007a519 100644
+--- a/src/etc/edac.init.in
++++ b/src/etc/edac.init.in
+@@ -155,8 +155,12 @@ case "$1" in
+ status)
+ service_status
+ ;;
++ restart)
++ service_stop
++ service_start
++ ;;
+ *)
+- COMMANDS="start|stop|status"
++ COMMANDS="start|stop|status|restart"
+ echo "Usage: $0 {${COMMANDS}}"
+ exit 2
+ ;;
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/edac.service b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/edac.service
new file mode 100644
index 000000000..f6b211e91
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/edac.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Initialize EDAC Drivers For Machine Hardware
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/edac-ctl --register-labels
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/make-init-script-be-able-to-automatically-load-EDAC-.patch b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/make-init-script-be-able-to-automatically-load-EDAC-.patch
new file mode 100644
index 000000000..fddc25f60
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/files/make-init-script-be-able-to-automatically-load-EDAC-.patch
@@ -0,0 +1,98 @@
+make init script be able to automatically load EDAC module.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ src/etc/edac.init.in | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 47 insertions(+), 2 deletions(-)
+
+diff --git a/src/etc/edac.init.in b/src/etc/edac.init.in
+index 7a51da9..5b568c4 100644
+--- a/src/etc/edac.init.in
++++ b/src/etc/edac.init.in
+@@ -42,7 +42,6 @@ for dir in "$sysconfdir/default" "$sysconfdir/sysconfig"; do
+ [ -f "$dir/$SERVICE" ] && . "$dir/$SERVICE"
+ done
+
+-
+ ###############################################################################
+
+ service_start ()
+@@ -52,6 +51,46 @@ service_start ()
+ # Assume that if EDAC_DRIVER is not set, then EDAC is configured
+ # automatically, thus return successfully, but don't do anything.
+ #
++ if [ ! -f /etc/edac/edac-driver ]; then
++ [ -d /sys/bus/edac/devices/mc/mc0 ] && \
++ echo `lsmod | grep _edac | cut -d" " -f1` > /etc/edac/edac-driver
++ fi
++
++ [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
++
++ if [ -z "$EDAC_DRIVER" ]; then
++
++ DRIVER_PATH=/lib/modules/`uname -r`/kernel/drivers/edac
++ oldpath=`pwd`
++ if [ -d $DRIVER_PATH ]; then
++
++ cd $DRIVER_PATH
++
++ for i in $(/bin/ls | /usr/bin/cut -d. -f1) ; do
++ /sbin/modprobe $i 2>/dev/null
++ if [ -d /sys/bus/edac/devices/mc/mc0 ]; then
++ echo $i> /etc/edac/edac-driver
++ EDAC_DRIVER=$i
++ break
++ fi
++ /sbin/modprobe -r $i 2>/dev/null
++ done
++
++ cd "$oldpath"
++
++
++ if [ -z "$EDAC_DRIVER" ]; then
++ echo "This board may not support EDAC, or EDAC module may not be compiled in"
++ exit
++ fi
++
++ else
++ echo "This board may not support EDAC, or EDAC module may not be compiled in"
++ exit
++ fi
++
++ fi
++
+ if [ -n "$EDAC_DRIVER" ]; then
+ echo -n "Starting ${SERVICE}: "
+ modprobe $EDAC_DRIVER
+@@ -76,12 +115,15 @@ service_start ()
+ service_stop ()
+ {
+ echo -n "Disabling ${SERVICE}: "
++
++ [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
++
+ if [ -n "$EDAC_DRIVER" ]; then
+ modprobe -r $EDAC_DRIVER
+ STATUS=$?
+ [ $STATUS -eq 0 ] && echo success || echo failure
+ else
+- echo "Not supported for this configuration."
++ echo "Not supported for this configuration, or EDAC Module is not loaded."
+ STATUS=6
+ fi
+ }
+@@ -92,6 +134,9 @@ service_status ()
+ {
+ # Print the current status of the service. Required by LSB.
+ #
++ [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
++ [ -z "$EDAC_DRIVER" ] && STATUS=1 && exit
++
+ edac-ctl --status
+ STATUS=0
+ }
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efibootmgr/efibootmgr_0.15.bb b/meta-openembedded/meta-oe/recipes-bsp/efibootmgr/efibootmgr_0.15.bb
new file mode 100644
index 000000000..9cc62a959
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efibootmgr/efibootmgr_0.15.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Linux user-space application to modify the EFI Boot Manager."
+SUMMARY = "EFI Boot Manager"
+HOMEPAGE = "https://github.com/rhinstaller/efibootmgr"
+SECTION = "base"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+DEPENDS = "pciutils zlib efivar"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+SRCREV = "5c14da22802576a99ebb854f7aa174f796f7b031"
+SRC_URI = "git://github.com/rhinstaller/efibootmgr.git;protocol=https \
+ "
+S = "${WORKDIR}/git"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE = "'EFIDIR=/' 'CC=${CC}' 'CFLAGS=${CFLAGS} -I${S}/src/include `pkg-config --cflags efivar`'"
+
+CFLAGS_append_toolchain-clang = " -Wno-error"
+do_install () {
+ install -D -p -m0755 ${B}/src/efibootmgr ${D}/${sbindir}/efibootmgr
+}
+
+CLEANBROKEN = "1"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-dp.h-Add-Wunknown-attributes-when-using-clang.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-dp.h-Add-Wunknown-attributes-when-using-clang.patch
new file mode 100644
index 000000000..b4ce132a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-dp.h-Add-Wunknown-attributes-when-using-clang.patch
@@ -0,0 +1,33 @@
+From d65c325dd8681edf2ee3332eeb0a547229c7ffb5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 24 Aug 2017 15:54:47 -0700
+Subject: [PATCH] efivar-dp.h: Add -Wunknown-attributes when using clang
+
+change !dp check to a comparision against NULL to silent clang warning
+nonnull parameter 'dp' will evaluate to 'true' on first encounter
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/include/efivar/efivar-dp.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/include/efivar/efivar-dp.h b/src/include/efivar/efivar-dp.h
+index 3a509b7..c140e8d 100644
+--- a/src/include/efivar/efivar-dp.h
++++ b/src/include/efivar/efivar-dp.h
+@@ -783,9 +783,14 @@ extern int efidp_append_instance(const_efidp dp, const_efidp dpi, efidp *out);
+ * though older or other compilers might just ignore that attribute if they
+ * don't support it. Ugh.
+ */
++#pragma GCC diagnostic push
+ #if defined(__GNUC__) && __GNUC__ >= 6
+ #pragma GCC diagnostic ignored "-Wnonnull-compare"
+ #endif
++#if defined(__clang__)
++#pragma GCC diagnostic ignored "-Wunknown-attributes"
++#pragma GCC diagnostic ignored "-Wpointer-bool-conversion"
++#endif
+
+ static inline int16_t
+ __attribute__((__artificial__))
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-fix-for-cross-compile.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-fix-for-cross-compile.patch
new file mode 100644
index 000000000..251e50c90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-efivar-fix-for-cross-compile.patch
@@ -0,0 +1,32 @@
+From a9115d9e6f0f62d6bb735ce3698858d1f89f8d73 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Fri, 25 Sep 2015 18:14:31 +0800
+Subject: [PATCH] efivar: fix for cross compile
+
+It builds and calls elf file makeguids to generate a header file which
+doesn't work for cross compile. Fix it.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+Upstream-Status: Pending
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ src/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 0c16597..dcc7fc8 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -40,8 +40,8 @@ abicheck : $(patsubst %.so,%.abicheck,$(LIBTARGETS))
+ ./guid-symbols.c : include/efivar/efivar-guids.h
+ ./guids.bin : include/efivar/efivar-guids.h
+ ./names.bin : include/efivar/efivar-guids.h
+-include/efivar/efivar-guids.h : makeguids guids.txt
+- ./makeguids guids.txt guids.bin names.bin \
++include/efivar/efivar-guids.h : guids.txt
++ makeguids guids.txt guids.bin names.bin \
+ guid-symbols.c include/efivar/efivar-guids.h
+
+ makeguids : CPPFLAGS+=-DEFIVAR_BUILD_ENVIRONMENT
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-makeguids-Do-not-use-__bswap_constant_-16-32-macros.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-makeguids-Do-not-use-__bswap_constant_-16-32-macros.patch
new file mode 100644
index 000000000..2a6eb065f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0001-makeguids-Do-not-use-__bswap_constant_-16-32-macros.patch
@@ -0,0 +1,35 @@
+From dd4291265b7b3d7d7ffa1d8adf32781ae25dbfeb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 00:29:42 -0700
+Subject: [PATCH] makeguids: Do not use __bswap_constant_{16|32} macros
+
+not available on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/makeguids.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/makeguids.c b/src/makeguids.c
+index da2f5f7..daf821a 100644
+--- a/src/makeguids.c
++++ b/src/makeguids.c
+@@ -155,13 +155,13 @@ main(int argc, char *argv[])
+ #if BYTE_ORDER == BIG_ENDIAN\n\
+ #define cpu_to_be32(n) (n)\n\
+ #define cpu_to_be16(n) (n)\n\
+-#define cpu_to_le32(n) (__bswap_constant_32(n))\n\
+-#define cpu_to_le16(n) (__bswap_constant_16(n))\n\
++#define cpu_to_le32(n) ((uint32_t) ((n)>>24 | (n)>>8&0xff00 | (n)<<8&0xff0000 | (n)<<24))\n\
++#define cpu_to_le16(n) ((uint16_t) ((n)<<8 | (n)>>8))\n\
+ #else\n\
+ #define cpu_to_le32(n) (n)\n\
+ #define cpu_to_le16(n) (n)\n\
+-#define cpu_to_be32(n) (__bswap_constant_32(n))\n\
+-#define cpu_to_be16(n) (__bswap_constant_16(n))\n\
++#define cpu_to_be32(n) ((uint32_t) ((n)>>24 | (n)>>8&0xff00 | (n)<<8&0xff0000 | (n)<<24))\n\
++#define cpu_to_be16(n) ((uint16_t) ((n)<<8 | (n)>>8))\n\
+ #endif\n\
+ """);
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0003-efivar-fix-for-cross-compile.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0003-efivar-fix-for-cross-compile.patch
new file mode 100644
index 000000000..83105fe0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0003-efivar-fix-for-cross-compile.patch
@@ -0,0 +1,42 @@
+From dea4a55714249b2734a36701120fd22c91c64ec2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sat, 7 May 2016 02:06:47 -0400
+Subject: [PATCH] Makefile: fix efivar.pc not found
+
+It fixes efivar.pc not found:
+...
+| install -d -m 755 efivar/0.23-r0/image/usr/lib/pkgconfig/
+| install -m 644 efivar.pc efivar/0.23-r0/image/usr/lib/pkgconfig/
+; install -m 644 efiboot.pc efivar/0.23-r0/image/usr/lib/pkgconfig/
+;
+| install: cannot stat 'efivar.pc': No such file or directory
+| install: cannot stat 'efiboot.pc': No such file or directory
+| make[1]: *** [install] Error 1
+| make[1]: Leaving directory `efivar/0.23-r0/git/src'
+| make: *** [install] Error 2
+| ERROR: oe_runmake failed
+...
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ src/Makefile | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index dcc7fc8..691aa8a 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -94,7 +94,9 @@ install : all
+ ln -fs $(x).1.$(VERSION) $(DESTDIR)$(libdir)/$(x) ;\
+ )
+ $(INSTALL) -d -m 755 $(DESTDIR)$(PCDIR)
+- $(foreach x, $(PCTARGETS), $(INSTALL) -m 644 $(x) $(DESTDIR)$(PCDIR) ;)
++ $(foreach x, $(PCTARGETS), $(INSTALL) -m 644 $(TOPDIR)/src/$(x).in $(DESTDIR)$(PCDIR)/$(x) ;\
++ sed -i -e "s:@@LIBDIR@@:$(libdir):g" -e "s:@@VERSION@@:$(VERSION):g" \
++ $(DESTDIR)$(PCDIR)/$(x); )
+ $(INSTALL) -d -m 755 $(DESTDIR)$(includedir)/efivar
+ $(foreach x, $(wildcard $(TOPDIR)/src/include/efivar/*.h), $(INSTALL) -m 644 $(x) $(DESTDIR)$(includedir)/efivar/$(notdir $(x));)
+ $(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0004-fix-unknow-option-for-gold-linker.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0004-fix-unknow-option-for-gold-linker.patch
new file mode 100644
index 000000000..96d0c6b3b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/0004-fix-unknow-option-for-gold-linker.patch
@@ -0,0 +1,35 @@
+From b3d35e7dd27a755df5acbe050837885914dbb28b Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 10 May 2016 11:34:50 -0400
+Subject: [PATCH] fix unknow option for gold linker
+
+- Revert the following patch, since oe-core work with gcc 5
+...
+commit 3055a3797f16693dfdd855fa68bc57fd900dc408
+Author: Peter Jones <pjones@redhat.com>
+Date: Mon Feb 15 14:15:40 2016 -0500
+
+ Make gcc.specs work with gcc 6 / binutils 2.26
+
+ Apparently binutils 2.26 gets real picky about "ld -PIC" vs "ld -fPIC".
+
+ Signed-off-by: Peter Jones <pjones@redhat.com>
+...
+
+- Remove unknown option '--add-needed'
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ gcc.specs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: git/gcc.specs
+===================================================================
+--- git.orig/gcc.specs
++++ git/gcc.specs
+@@ -14,4 +14,4 @@
+ + %{!shared:%{!static:%{!r:-pie}}} %{static:-Wl,-no-fatal-warnings -Wl,-static -static -Wl,-z,relro,-z,now}
+
+ *link:
+-+ %{!static:--fatal-warnings} --no-undefined-version --no-allow-shlib-undefined --add-needed -z now --build-id %{!static:%{!shared:-pie}} %{shared:-z relro} %{static:%<pie}
+++ %{!static:--fatal-warnings} --no-undefined-version --no-allow-shlib-undefined -z now --build-id %{!static:%{!shared:-pie}} %{shared:-z relro} %{static:%<pie}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/allow-multi-definitions-for-native.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/allow-multi-definitions-for-native.patch
new file mode 100644
index 000000000..f88af1fe1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/allow-multi-definitions-for-native.patch
@@ -0,0 +1,32 @@
+From c801dcb03d42eb533a9bead0b397d7ce4fc5a6fe Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 10 Aug 2016 17:49:50 +0800
+Subject: [PATCH] allow multi definitions for native
+
+Upstream-Status: Pending
+
+It fails to create .so file when build efivar-native:
+
+| lib.o:(*IND*+0x0): multiple definition of `efi_set_variable'
+| lib.o:lib.c:(.text+0xa0): first defined here
+
+Add link option '-z muldefs' to fix it.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ Make.rules | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Make.rules b/Make.rules
+index 88b9aa7..799332f 100644
+--- a/Make.rules
++++ b/Make.rules
+@@ -20,6 +20,7 @@ include $(TOPDIR)/Make.version
+ $(CCLD) $(ccldflags) $(CPPFLAGS) $(SOFLAGS) \
+ -Wl,-soname,$@.1 \
+ -Wl,--version-script=$(MAP) \
++ -Wl,-z,muldefs \
+ -o $@ $^ $(LDLIBS)
+
+ %.abixml : %.so
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/fix-compile-failure-with-host-gcc-4.6.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/fix-compile-failure-with-host-gcc-4.6.patch
new file mode 100644
index 000000000..dbc9a5755
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/fix-compile-failure-with-host-gcc-4.6.patch
@@ -0,0 +1,43 @@
+From 3edce6a0019bcb90febc1f654b5b2e2bad5c59bd Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 26 May 2016 21:50:01 -0400
+Subject: [PATCH] fix compile failure with older host gcc (<=4.6)
+
+While host gcc version is 4.6.3 in ubuntu 1204, it
+did not recognize -std=gnu11 and -Wmaybe-uninitialized.
+
+While host gcc version is 4.4.7 in centos6, it
+did not recognize -std=gnu11, -Wmaybe-uninitialized,
+and -flto.
+
+For native build, use -std=gnu99 to replace -std=gnu11,
+and directly remove -Wmaybe-uninitialized and -flto.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ gcc.specs | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gcc.specs b/gcc.specs
+index 45d43d1..f1c6944 100644
+--- a/gcc.specs
++++ b/gcc.specs
+@@ -2,13 +2,13 @@
+ + -D_GNU_SOURCE
+
+ *efivar_cpp_options:
+- -Werror -Wall -std=gnu11 -Wextra
++ -Werror -Wall -std=gnu99 -Wextra
+
+ *cpp_options:
+ + %(efivar_cpp_options)
+
+ *cc1_options:
+-+ %(efivar_cpp_options) -Wmaybe-uninitialized -fno-merge-constants -fvisibility=hidden %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}}
+++ %(efivar_cpp_options) -fno-merge-constants -fvisibility=hidden %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}}
+
+ *self_spec:
+ + %{!shared:%{!static:%{!r:-pie}}} %{static:-Wl,-no-fatal-warnings -Wl,-static -static -Wl,-z,relro,-z,now}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/musl-strndupa.patch b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/musl-strndupa.patch
new file mode 100644
index 000000000..5864ac63e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar/musl-strndupa.patch
@@ -0,0 +1,25 @@
+From 8000b9afc858472912aace985004b44f8eb467e0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 18 Aug 2017 09:49:49 -0700
+Subject: [PATCH] support musl
+
+Upstream-Status: Pending
+---
+ src/linux.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/linux.c b/src/linux.c
+index 34ed479..1304f2b 100644
+--- a/src/linux.c
++++ b/src/linux.c
+@@ -40,6 +40,10 @@
+ #include <efivar.h>
+ #include <efiboot.h>
+
++#if !defined(__GLIBC__)
++#define strndupa(x,s) strncpy(alloca(strlen(x)+1),x,s)
++#endif
++
+ #include "dp.h"
+ #include "linux.h"
+ #include "util.h"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar_0.31.bb b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar_0.31.bb
new file mode 100644
index 000000000..9d4cdc97b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/efivar/efivar_0.31.bb
@@ -0,0 +1,50 @@
+SUMMARY = "Tools to manipulate UEFI variables"
+DESCRIPTION = "efivar provides a simple command line interface to the UEFI variable facility"
+HOMEPAGE = "https://github.com/rhinstaller/efivar"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393"
+
+DEPENDS = "popt"
+DEPENDS_append_class-target = " efivar-native"
+
+inherit pkgconfig
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+SRCREV = "11324799c68193116e1dd5f94b416591bd324f90"
+SRC_URI = "git://github.com/rhinstaller/efivar.git \
+ file://allow-multi-definitions-for-native.patch \
+ file://0001-makeguids-Do-not-use-__bswap_constant_-16-32-macros.patch \
+ file://musl-strndupa.patch \
+ file://0001-efivar-dp.h-Add-Wunknown-attributes-when-using-clang.patch \
+ "
+SRC_URI_append_class-target = " file://0001-efivar-fix-for-cross-compile.patch \
+ file://0003-efivar-fix-for-cross-compile.patch \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'file://0004-fix-unknow-option-for-gold-linker.patch', '', d)} \
+ "
+SRC_URI_append_class-native = " file://fix-compile-failure-with-host-gcc-4.6.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+# Setting CROSS_COMPILE breaks pkgconfig, so just set AR
+EXTRA_OEMAKE = "AR=${TARGET_PREFIX}gcc-ar"
+
+do_compile_prepend() {
+ sed -i -e s:-Werror::g ${S}/gcc.specs
+}
+
+do_compile_class-native() {
+ oe_runmake -C src makeguids
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+do_install_class-native() {
+ install -D -m 0755 ${B}/src/makeguids ${D}${bindir}/makeguids
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-platform-Add-riscv-to-known-platforms.patch b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-platform-Add-riscv-to-known-platforms.patch
new file mode 100644
index 000000000..7ba69a917
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-platform-Add-riscv-to-known-platforms.patch
@@ -0,0 +1,37 @@
+From d2a28dcdbd1051d2f48320e2eda3393581fe0519 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Mar 2018 23:08:29 -0700
+Subject: [PATCH] platform: Add riscv to known platforms
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted [https://review.coreboot.org/#/c/flashrom/+/25260/]
+ platform.h | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/platform.h b/platform.h
+index b2fdcd0..2cadbb3 100644
+--- a/platform.h
++++ b/platform.h
+@@ -69,6 +69,9 @@
+ #elif defined (__m68k__)
+ #define __FLASHROM_ARCH__ "m68k"
+ #define IS_M68K 1
++#elif defined (__riscv)
++ #define __FLASHROM_ARCH__ "riscv"
++ #define IS_RISCV 1
+ #elif defined (__sh__)
+ #define __FLASHROM_ARCH__ "sh"
+ #define IS_SH 1
+@@ -77,7 +80,7 @@
+ #define IS_S390 1
+ #endif
+
+-#if !(IS_X86 || IS_MIPS || IS_PPC || IS_ARM || IS_SPARC || IS_ALPHA || IS_HPPA || IS_M68K || IS_SH || IS_S390)
++#if !(IS_X86 || IS_MIPS || IS_PPC || IS_ARM || IS_SPARC || IS_ALPHA || IS_HPPA || IS_M68K || IS_RISCV || IS_SH || IS_S390)
+ #error Unknown architecture
+ #endif
+
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/sst26.patch b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/sst26.patch
new file mode 100644
index 000000000..46a01529f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/sst26.patch
@@ -0,0 +1,198 @@
+--- flashrom-0.9.9.orig/chipdrivers.h
++++ flashrom-0.9.9/chipdrivers.h
+@@ -103,6 +103,7 @@
+ int spi_prettyprint_status_register_sst25(struct flashctx *flash);
+ int spi_prettyprint_status_register_sst25vf016(struct flashctx *flash);
+ int spi_prettyprint_status_register_sst25vf040b(struct flashctx *flash);
++int spi_disable_blockprotect_sst26_global_unprotect(struct flashctx *flash);
+
+ /* sfdp.c */
+ int probe_spi_sfdp(struct flashctx *flash);
+--- flashrom-0.9.9.orig/flashchips.c
++++ flashrom-0.9.9/flashchips.c
+@@ -12564,6 +12564,120 @@
+
+ {
+ .vendor = "SST",
++ .name = "SST26VF016B(A)",
++ .bustype = BUS_SPI,
++ .manufacture_id = SST_ID,
++ .model_id = SST_SST26VF016B,
++ .total_size = 2048,
++ .page_size = 256,
++ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
++ .tested = TEST_OK_PREW,
++ .probe = probe_spi_rdid,
++ .probe_timing = TIMING_ZERO,
++ .block_erasers =
++ {
++ {
++ .eraseblocks = { {4 * 1024, 512} },
++ .block_erase = spi_block_erase_20,
++ }, {
++ .eraseblocks = {
++ {8 * 1024, 4},
++ {32 * 1024, 1},
++ {64 * 1024, 30},
++ {32 * 1024, 1},
++ {8 * 1024, 4},
++ },
++ .block_erase = spi_block_erase_d8,
++ }, {
++ .eraseblocks = { {2 * 1024 * 1024, 1} },
++ .block_erase = spi_block_erase_c7,
++ },
++ },
++ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
++ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
++ .write = spi_chip_write_256, /* Multi I/O supported */
++ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
++ .voltage = {2700, 3600},
++ },
++ {
++ .vendor = "SST",
++ .name = "SST26VF032B(A)",
++ .bustype = BUS_SPI,
++ .manufacture_id = SST_ID,
++ .model_id = SST_SST26VF032B,
++ .total_size = 4096,
++ .page_size = 256,
++ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
++ .tested = TEST_UNTESTED,
++ .probe = probe_spi_rdid,
++ .probe_timing = TIMING_ZERO,
++ .block_erasers =
++ {
++ {
++ .eraseblocks = { {4 * 1024, 1024} },
++ .block_erase = spi_block_erase_20,
++ }, {
++ .eraseblocks = {
++ {8 * 1024, 4},
++ {32 * 1024, 1},
++ {64 * 1024, 62},
++ {32 * 1024, 1},
++ {8 * 1024, 4},
++ },
++ .block_erase = spi_block_erase_d8,
++ }, {
++ .eraseblocks = { {4 * 1024 * 1024, 1} },
++ .block_erase = spi_block_erase_c7,
++ },
++ },
++ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
++ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
++ .write = spi_chip_write_256, /* Multi I/O supported */
++ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
++ .voltage = {2700, 3600},
++ },
++
++
++ {
++ .vendor = "SST",
++ .name = "SST26VF064B(A)",
++ .bustype = BUS_SPI,
++ .manufacture_id = SST_ID,
++ .model_id = SST_SST26VF064B,
++ .total_size = 8192,
++ .page_size = 256,
++ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
++ .tested = TEST_OK_PREW,
++ .probe = probe_spi_rdid,
++ .probe_timing = TIMING_ZERO,
++ .block_erasers =
++ {
++ {
++ .eraseblocks = { {4 * 1024, 2048} },
++ .block_erase = spi_block_erase_20,
++ }, {
++ .eraseblocks = {
++ {8 * 1024, 4},
++ {32 * 1024, 1},
++ {64 * 1024, 126},
++ {32 * 1024, 1},
++ {8 * 1024, 4},
++ },
++ .block_erase = spi_block_erase_d8,
++ }, {
++ .eraseblocks = { {8 * 1024 * 1024, 1} },
++ .block_erase = spi_block_erase_c7,
++ },
++ },
++ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
++ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
++ .write = spi_chip_write_256, /* Multi I/O supported */
++ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
++ .voltage = {2700, 3600},
++ },
++
++ {
++ .vendor = "SST",
+ .name = "SST25WF512",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+--- flashrom-0.9.9.orig/flashchips.h
++++ flashrom-0.9.9/flashchips.h
+@@ -697,6 +697,8 @@
+ #define SST_SST25VF064C 0x254B
+ #define SST_SST26VF016 0x2601
+ #define SST_SST26VF032 0x2602
++#define SST_SST26VF016B 0x2641
++#define SST_SST26VF032B 0x2642
+ #define SST_SST26VF064B 0x2643
+ #define SST_SST27SF512 0xA4
+ #define SST_SST27SF010 0xA5
+--- flashrom-0.9.9.orig/linux_spi.c
++++ flashrom-0.9.9/linux_spi.c
+@@ -141,6 +141,16 @@
+ return 0;
+ }
+
++static void print_hex(const char *msg, const void *buf, size_t len)
++{
++ size_t i;
++ msg_pspew("%s:\n", msg);
++ for (i = 0; i < len; i++) {
++ msg_pspew(" %02x", ((uint8_t *)buf)[i]);
++ }
++ msg_pspew("\n");
++}
++
+ static int linux_spi_send_command(struct flashctx *flash, unsigned int writecnt,
+ unsigned int readcnt,
+ const unsigned char *txbuf,
+@@ -172,10 +182,12 @@
+ else
+ iocontrol_code = SPI_IOC_MESSAGE(2);
+
++ print_hex("Write", txbuf, writecnt);
+ if (ioctl(fd, iocontrol_code, msg) == -1) {
+ msg_cerr("%s: ioctl: %s\n", __func__, strerror(errno));
+ return -1;
+ }
++ if (readcnt) print_hex("Got", rxbuf, readcnt);
+ return 0;
+ }
+
+--- flashrom-0.9.9.orig/spi25_statusreg.c
++++ flashrom-0.9.9/spi25_statusreg.c
+@@ -196,6 +196,19 @@
+ return spi_disable_blockprotect_generic(flash, 0x3C, 0, 0, 0xFF);
+ }
+
++int spi_disable_blockprotect_sst26_global_unprotect(struct flashctx *flash)
++{
++ int result = spi_write_enable(flash);
++ if (result)
++ return result;
++
++ static const unsigned char cmd[] = { 0x98 }; /* ULBPR */
++ result = spi_send_command(flash, sizeof(cmd), 0, cmd, NULL);
++ if (result)
++ msg_cerr("ULBPR failed\n");
++ return result;
++}
++
+ /* A common block protection disable that tries to unset the status register bits masked by 0x0C (BP0-1) and
+ * protected/locked by bit #7. Useful when bits 4-5 may be non-0). */
+ int spi_disable_blockprotect_bp1_srwd(struct flashctx *flash)
diff --git a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.0.bb b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.0.bb
new file mode 100644
index 000000000..9eac876ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips"
+LICENSE = "GPLv2"
+HOMEPAGE = "http://flashrom.org"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "pciutils libusb libusb-compat"
+
+SRC_URI = "https://download.flashrom.org/releases/flashrom-${PV}.tar.bz2 \
+ file://sst26.patch \
+ file://0001-platform-Add-riscv-to-known-platforms.patch \
+ "
+SRC_URI[md5sum] = "42d999990c735d88653627cefcc13b9a"
+SRC_URI[sha256sum] = "3702fa215ba5fb5af8e54c852d239899cfa1389194c1e51cb2a170c4dc9dee64"
+
+inherit pkgconfig
+
+do_install() {
+ oe_runmake PREFIX=${prefix} DESTDIR=${D} install
+}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/fancontrol b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/fancontrol
new file mode 100644
index 000000000..1f03a2bf2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/fancontrol
@@ -0,0 +1,2 @@
+# fancontrol configuration file.
+# Place your device specific configuration in this file.
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord
new file mode 100644
index 000000000..a58362e43
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord
@@ -0,0 +1,16 @@
+# configuration for hardware sensors monitoring daemon
+# in intervals use suffix "m" for minutes, "s" for seconds, "h" for hours
+# 0 means turning facility off
+
+# interval between scanning alarms
+INTERVAL=1m
+
+# interval between logging
+LOG_INTERVAL=20m
+
+# interval between RRD logging
+# RRD_INTERVAL=1m
+
+# RRD db location
+# RRD_LOGFILE=/var/log/sensors.rrd
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.cgi b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.cgi
new file mode 100644
index 000000000..b1aad05b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.cgi
@@ -0,0 +1,10 @@
+#!/usr/bin/rrdcgi
+
+<html>
+<head>
+<title>sensord</title>
+</head>
+<body>
+Generate a valid sensord.cgi script and install it in your BSP.
+</body>
+</html>
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.conf b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.conf
new file mode 100644
index 000000000..6b48cf604
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensord.conf
@@ -0,0 +1,16 @@
+# Default sensord configuration file
+# Syntax: sensord {options} {chips}
+# -i, --interval <time> -- interval between scanning alarms (default 60s)
+# -l, --log-interval <time> -- interval between logging sensors (default 30m)
+# -t, --rrd-interval <time> -- interval between updating RRD file (default 5m)
+# -T, --rrd-no-average -- switch RRD in non-average mode
+# -r, --rrd-file <file> -- RRD file (default <none>)
+# -c, --config-file <file> -- configuration file
+# -p, --pid-file <file> -- PID file (default /var/run/sensord.pid)
+# -f, --syslog-facility <f> -- syslog facility to use (default local4)
+# -g, --rrd-cgi <img-dir> -- output an RRD CGI script and exit
+# -a, --load-average -- include load average in RRD file
+# -d, --debug -- display some debug information
+# -v, --version -- display version and exit
+# -h, --help -- display help and exit
+SENSORD_ARGS="-i60s -l30m -t1m -r/var/lib/sensord.rrd -a"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensors.conf b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensors.conf
new file mode 100644
index 000000000..bb8c93de6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config/sensors.conf
@@ -0,0 +1,2 @@
+# sensors configuration file.
+# Place your device specific configuration in this file.
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config_1.0.bb b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config_1.0.bb
new file mode 100644
index 000000000..b0091d657
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors-config_1.0.bb
@@ -0,0 +1,63 @@
+SUMMARY = "lm_sensors configuration files"
+DESCRIPTION = "Hardware health monitoring configuration files"
+HOMEPAGE = "http://www.lm-sensors.org/"
+LICENSE = "MIT-X"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "file://fancontrol \
+ file://sensord.cgi \
+ file://sensord.conf \
+ file://sensors.conf \
+ file://sensord \
+"
+S = "${WORKDIR}"
+
+RDEPENDS_${PN}-dev = ""
+
+do_install() {
+ # Install fancontrol configuration file
+ install -d ${D}${sysconfdir}/sysconfig
+ install -m 0644 ${WORKDIR}/fancontrol ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/sensord ${D}${sysconfdir}/sysconfig
+ # Install libsensors configuration file
+ install -d ${D}${sysconfdir}/sensors.d
+ install -m 0644 ${WORKDIR}/sensors.conf ${D}${sysconfdir}/sensors.d
+
+ # Install sensord configuration file
+ install -m 0644 ${WORKDIR}/sensord.conf ${D}${sysconfdir}
+
+ # Install sensord.cgi script and create world-writable
+ # web-accessible sensord directory
+ install -d ${D}/www/pages/cgi-bin
+ install -m 0755 ${WORKDIR}/sensord.cgi ${D}/www/pages/cgi-bin
+ install -d -m a=rwxs ${D}/www/pages/sensord
+}
+
+# libsensors configuration
+PACKAGES =+ "${PN}-libsensors"
+
+# sensord logging daemon configuration
+PACKAGES =+ "${PN}-sensord"
+
+# fancontrol script configuration
+PACKAGES =+ "${PN}-fancontrol"
+
+# sensord web cgi support
+PACKAGES =+ "${PN}-cgi"
+RRECOMMENDS_${PN}-cgi = "lighttpd lighttpd-module-cgi"
+RDEPENDS_${PN}-cgi = "${PN}-sensord rrdtool"
+FILES_${PN}-cgi = "/www/*"
+
+# libsensors configuration file
+FILES_${PN}-libsensors = "${sysconfdir}/sensors.d/sensors.conf"
+
+# sensord logging daemon configuration files
+FILES_${PN}-sensord = "\
+ ${sysconfdir}/sensord.conf \
+ ${sysconfdir}/sysconfig/sensord \
+"
+
+# fancontrol script configuration file
+FILES_${PN}-fancontrol = "${sysconfdir}/fancontrol"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-lmsensors-sensors-detect-print-a-special-message-whe.patch b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-lmsensors-sensors-detect-print-a-special-message-whe.patch
new file mode 100644
index 000000000..abf6e752a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-lmsensors-sensors-detect-print-a-special-message-whe.patch
@@ -0,0 +1,40 @@
+From c4428260e7685ebaf5c26c6ecaae5a56849853e8 Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Tue, 6 Sep 2016 14:04:29 +0800
+Subject: [PATCH] lmsensors: sensors-detect: print a special message when there
+ isn't enough cpu info
+
+When running sensors-detect, if there isn't enough information in
+/proc/cpuinfo for this arch (e.g. ppc64), "Use of uninitialized value
+in concatenation (.) or string at /usr/sbin/sensors-detect line 2867"
+and incomplete "# Processor: (//)" will be printed.
+Here print out a prompt for such a case.
+
+Upstream-Status: Pending
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ prog/detect/sensors-detect | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect
+index 3c2b44f..5f62405 100755
+--- a/prog/detect/sensors-detect
++++ b/prog/detect/sensors-detect
+@@ -2864,7 +2864,12 @@ sub initialize_cpu_list
+ sub print_cpu_info
+ {
+ my $cpu = $cpu[0];
+- print "# Processor: $cpu->{'model name'} ($cpu->{'cpu family'}/$cpu->{model}/$cpu->{stepping})\n";
++ if ( $cpu->{'model name'} && $cpu->{'cpu family'} && $cpu->{model} && $cpu->{stepping} ) {
++ print "# Processor: $cpu->{'model name'} ($cpu->{'cpu family'}/$cpu->{model}/$cpu->{stepping})\n";
++ }
++ else {
++ print "# Processor: There isn't enough cpu info for this arch!!!\n";
++ }
+ }
+
+ # @i2c_adapters is a list of references to hashes, one hash per I2C/SMBus
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-prog-Do-not-limit-sys-io.h-header-include-to-just-gl.patch b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-prog-Do-not-limit-sys-io.h-header-include-to-just-gl.patch
new file mode 100644
index 000000000..fb3878dc3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/0001-prog-Do-not-limit-sys-io.h-header-include-to-just-gl.patch
@@ -0,0 +1,88 @@
+From 727524453f115ddc05109e9bbb3d0e60a7db9185 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 15:05:50 -0700
+Subject: [PATCH] prog: Do not limit sys/io.h header include to just glibc
+
+musl provides it too.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ prog/dump/isadump.c | 6 ------
+ prog/dump/isaset.c | 6 ------
+ prog/dump/superio.c | 5 -----
+ prog/dump/util.c | 5 -----
+ 4 files changed, 22 deletions(-)
+
+diff --git a/prog/dump/isadump.c b/prog/dump/isadump.c
+index e0e6f00..8794537 100644
+--- a/prog/dump/isadump.c
++++ b/prog/dump/isadump.c
+@@ -36,13 +36,7 @@
+ #include "util.h"
+ #include "superio.h"
+
+-
+-/* To keep glibc2 happy */
+-#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 0
+ #include <sys/io.h>
+-#else
+-#include <asm/io.h>
+-#endif
+
+ #ifdef __powerpc__
+ unsigned long isa_io_base = 0; /* XXX for now */
+diff --git a/prog/dump/isaset.c b/prog/dump/isaset.c
+index e743755..85a4f64 100644
+--- a/prog/dump/isaset.c
++++ b/prog/dump/isaset.c
+@@ -32,13 +32,7 @@
+ #include <string.h>
+ #include "util.h"
+
+-
+-/* To keep glibc2 happy */
+-#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 0
+ #include <sys/io.h>
+-#else
+-#include <asm/io.h>
+-#endif
+
+ #ifdef __powerpc__
+ unsigned long isa_io_base = 0; /* XXX for now */
+diff --git a/prog/dump/superio.c b/prog/dump/superio.c
+index 64ef27b..906fe55 100644
+--- a/prog/dump/superio.c
++++ b/prog/dump/superio.c
+@@ -20,12 +20,7 @@
+ */
+
+ #include <stdlib.h>
+-
+-#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 0
+ #include <sys/io.h>
+-#else
+-#include <asm/io.h>
+-#endif
+
+ #include "superio.h"
+
+diff --git a/prog/dump/util.c b/prog/dump/util.c
+index 874c1b9..197fa64 100644
+--- a/prog/dump/util.c
++++ b/prog/dump/util.c
+@@ -11,12 +11,7 @@
+ #include <stdio.h>
+ #include "util.h"
+
+-/* To keep glibc2 happy */
+-#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 0
+ #include <sys/io.h>
+-#else
+-#include <asm/io.h>
+-#endif
+
+ /* Return 1 if we should continue, 0 if we should abort */
+ int user_ack(int def)
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/fancontrol.init b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/fancontrol.init
new file mode 100644
index 000000000..4433020b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/fancontrol.init
@@ -0,0 +1,47 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: fancontrol
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop: $local_fs
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: fancontrol initscript
+# Description: Starts and controls the fancontrol daemon
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+DESC="fan control daemon"
+NAME="fancontrol"
+FANCONTROL=`which $NAME`
+PIDFILE="/var/run/fancontrol.pid"
+
+# Exit if the package is not installed
+[ -x "$FANCONTROL" ] || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: $NAME... "
+ start-stop-daemon -S -p $PIDFILE -b -x $FANCONTROL
+ echo "done."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: $NAME... "
+ start-stop-daemon -K -p $PIDFILE
+ echo "done."
+ ;;
+ restart)
+ echo "Restarting $DESC: $NAME... "
+ $0 stop
+ $0 start
+ echo "done."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/sensord.init b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/sensord.init
new file mode 100644
index 000000000..5a09cd3cf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors/sensord.init
@@ -0,0 +1,49 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: sensord
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop: $local_fs
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: sensord initscript
+# Description: Starts the sensord logging daemon
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+DESC="sensors logging daemon"
+NAME="sensord"
+SENSORD=`which $NAME`
+
+. /etc/init.d/functions || exit 1
+. /etc/sensord.conf || exit 1
+
+# Exit if the package is not installed
+[ -x "$SENSORD" ] || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: $NAME... "
+ start-stop-daemon -S -x $SENSORD -- $SENSORD_ARGS
+ echo "done."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: $NAME... "
+ start-stop-daemon -K -x $SENSORD
+ echo "done."
+ ;;
+ restart)
+ echo "Restarting $DESC: $NAME... "
+ $0 stop
+ $0 start
+ echo "done."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.4.0.bb b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.4.0.bb
new file mode 100644
index 000000000..454a69f40
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.4.0.bb
@@ -0,0 +1,140 @@
+SUMMARY = "lm_sensors"
+DESCRIPTION = "Hardware health monitoring applications"
+HOMEPAGE = "http://www.lm-sensors.org/"
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "sysfsutils virtual/libiconv bison-native flex-native rrdtool"
+
+SRC_URI = "https://github.com/groeck/lm-sensors/archive/V3-4-0.tar.gz \
+ file://fancontrol.init \
+ file://sensord.init \
+ file://0001-lmsensors-sensors-detect-print-a-special-message-whe.patch \
+ file://0001-prog-Do-not-limit-sys-io.h-header-include-to-just-gl.patch \
+"
+SRC_URI[md5sum] = "1e9f117cbfa11be1955adc96df71eadb"
+SRC_URI[sha256sum] = "e334c1c2b06f7290e3e66bdae330a5d36054701ffd47a5dde7a06f9a7402cb4e"
+
+inherit update-rc.d systemd
+
+RDEPENDS_${PN}-dev = ""
+
+INITSCRIPT_PACKAGES = "${PN}-fancontrol ${PN}-sensord"
+INITSCRIPT_NAME_${PN}-fancontrol = "fancontrol"
+INITSCRIPT_NAME_${PN}-sensord = "sensord"
+INITSCRIPT_PARAMS_${PN}-fancontrol = "defaults 66"
+INITSCRIPT_PARAMS_${PN}-sensord = "defaults 67"
+
+SYSTEMD_PACKAGES = "${PN}-sensord"
+SYSTEMD_SERVICE_${PN}-sensord = "sensord.service lm_sensors.service fancontrol.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+S = "${WORKDIR}/lm-sensors-3-4-0"
+
+EXTRA_OEMAKE = 'EXLDFLAGS="${LDFLAGS}" \
+ MACHINE=${TARGET_ARCH} PREFIX=${prefix} MANDIR=${mandir} \
+ LIBDIR=${libdir} \
+ CC="${CC}" AR="${AR}"'
+
+do_compile() {
+ sed -i -e 's:^# \(PROG_EXTRA\):\1:' ${S}/Makefile
+ # Respect LDFLAGS
+ sed -i -e 's/\$(LIBDIR)$/\$(LIBDIR) \$(LDFLAGS)/g' ${S}/Makefile
+ sed -i -e 's/\$(LIBSHSONAME) -o/$(LIBSHSONAME) \$(LDFLAGS) -o/g' \
+ ${S}/lib/Module.mk
+ oe_runmake user PROG_EXTRA="sensors sensord"
+}
+
+do_install() {
+ oe_runmake user_install DESTDIR=${D}
+ install -m 0755 ${S}/prog/sensord/sensord ${D}${sbindir}
+ install -m 0644 ${S}/prog/sensord/sensord.8 ${D}${mandir}/man8
+
+ # Install directory
+ install -d ${D}${sysconfdir}/init.d
+
+ # Install fancontrol init script
+ install -m 0755 ${WORKDIR}/fancontrol.init \
+ ${D}${sysconfdir}/init.d/fancontrol
+
+ # Install sensord init script
+ install -m 0755 ${WORKDIR}/sensord.init ${D}${sysconfdir}/init.d/sensord
+
+ # Insall sensord service script
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${S}/prog/init/*.service ${D}${systemd_unitdir}/system
+ fi
+}
+
+# libsensors packages
+PACKAGES =+ "${PN}-libsensors ${PN}-libsensors-dbg ${PN}-libsensors-dev ${PN}-libsensors-staticdev ${PN}-libsensors-doc"
+
+# sensors command packages
+PACKAGES =+ "${PN}-sensors ${PN}-sensors-dbg ${PN}-sensors-doc"
+
+# sensord logging daemon
+PACKAGES =+ "${PN}-sensord ${PN}-sensord-dbg ${PN}-sensord-doc"
+
+# fancontrol script
+PACKAGES =+ "${PN}-fancontrol ${PN}-fancontrol-doc"
+
+# sensors-detect script
+PACKAGES =+ "${PN}-sensorsdetect ${PN}-sensorsdetect-doc"
+
+# sensors-conf-convert script
+PACKAGES =+ "${PN}-sensorsconfconvert ${PN}-sensorsconfconvert-doc"
+
+# pwmconfig script
+PACKAGES =+ "${PN}-pwmconfig ${PN}-pwmconfig-doc"
+
+# isadump and isaset helper program
+PACKAGES =+ "${PN}-isatools ${PN}-isatools-dbg ${PN}-isatools-doc"
+
+# libsensors files
+FILES_${PN}-libsensors = "${libdir}/libsensors.so.* ${sysconfdir}/sensors3.conf ${sysconfdir}/sensors.d"
+FILES_${PN}-libsensors-dbg = "${libdir}/.debug ${prefix}/src/debug"
+FILES_${PN}-libsensors-dev = "${libdir}/libsensors.so ${includedir}"
+FILES_${PN}-libsensors-staticdev = "${libdir}/libsensors.a"
+FILES_${PN}-libsensors-doc = "${mandir}/man3"
+RRECOMMENDS_${PN}-libsensors = "lmsensors-config-libsensors"
+
+# sensors command files
+FILES_${PN}-sensors = "${bindir}/sensors"
+FILES_${PN}-sensors-dbg = "${bindir}/.debug/sensors"
+FILES_${PN}-sensors-doc = "${mandir}/man1 ${mandir}/man5"
+RDEPENDS_${PN}-sensors = "${PN}-libsensors"
+
+# sensord logging daemon
+FILES_${PN}-sensord = "${sbindir}/sensord ${sysconfdir}/init.d/sensord ${systemd_unitdir}/system/sensord.service"
+FILES_${PN}-sensord-dbg = "${bindir}/.debug/sensord"
+FILES_${PN}-sensord-doc = "${mandir}/man8/sensord.8"
+RDEPENDS_${PN}-sensord = "${PN}-sensors rrdtool"
+RRECOMMENDS_${PN}-sensord = "lmsensors-config-sensord"
+
+# fancontrol script files
+FILES_${PN}-fancontrol = "${sbindir}/fancontrol ${sysconfdir}/init.d/fancontrol"
+FILES_${PN}-fancontrol-doc = "${mandir}/man8/fancontrol.8"
+RDEPENDS_${PN}-fancontrol = "bash"
+RRECOMMENDS_${PN}-fancontrol = "lmsensors-config-fancontrol"
+
+# sensors-detect script files
+FILES_${PN}-sensorsdetect = "${sbindir}/sensors-detect"
+FILES_${PN}-sensorsdetect-doc = "${mandir}/man8/sensors-detect.8"
+RDEPENDS_${PN}-sensorsdetect = "${PN}-sensors perl perl-modules"
+
+# sensors-conf-convert script files
+FILES_${PN}-sensorsconfconvert = "${bindir}/sensors-conf-convert"
+FILES_${PN}-sensorsconfconvert-doc = "${mandir}/man8/sensors-conf-convert.8"
+RDEPENDS_${PN}-sensorsconfconvert = "${PN}-sensors perl perl-modules"
+
+# pwmconfig script files
+FILES_${PN}-pwmconfig = "${sbindir}/pwmconfig"
+FILES_${PN}-pwmconfig-doc = "${mandir}/man8/pwmconfig.8"
+RDEPENDS_${PN}-pwmconfig = "${PN}-fancontrol"
+
+# isadump and isaset helper program files
+FILES_${PN}-isatools = "${sbindir}/isa*"
+FILES_${PN}-isatools-dbg = "${sbindir}/.debug/isa*"
+FILES_${PN}-isatools-doc = "${mandir}/man8/isa*"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lssci/lsscsi_0.28.bb b/meta-openembedded/meta-oe/recipes-bsp/lssci/lsscsi_0.28.bb
new file mode 100644
index 000000000..4b8cbaf09
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/lssci/lsscsi_0.28.bb
@@ -0,0 +1,12 @@
+SUMMARY = "The lsscsi command lists information about SCSI devices in Linux"
+HOMEPAGE = "http://sg.danny.cz/scsi/lsscsi.html"
+LICENSE = "GPLv2"
+SECTION = "base"
+LIC_FILES_CHKSUM="file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "http://sg.danny.cz/scsi/${BP}.tgz"
+
+SRC_URI[md5sum] = "4a39e3b09cd422e2cae3edbaf56b3176"
+SRC_URI[sha256sum] = "025d009a1af42bc5b2fca664c44c9ecdfd754356e4a44f5c6aced2420afadd50"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/COPYING b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/COPYING
new file mode 100644
index 000000000..63f529381
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/COPYING
@@ -0,0 +1,2 @@
+This is a blank COPYING file, and should be filled in by original author in future.
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/pointercal
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/pointercal
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarm/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarm/pointercal
new file mode 100644
index 000000000..abd84ca4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarm/pointercal
@@ -0,0 +1 @@
+8313 4 -8526 7 8334 -82604 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv6/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv6/pointercal
new file mode 100644
index 000000000..abd84ca4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv6/pointercal
@@ -0,0 +1 @@
+8313 4 -8526 7 8334 -82604 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv7/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv7/pointercal
new file mode 100644
index 000000000..abd84ca4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuarmv7/pointercal
@@ -0,0 +1 @@
+8313 4 -8526 7 8334 -82604 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemumips/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemumips/pointercal
new file mode 100644
index 000000000..abd84ca4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemumips/pointercal
@@ -0,0 +1 @@
+8313 4 -8526 7 8334 -82604 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuppc/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuppc/pointercal
new file mode 100644
index 000000000..c2d6e37bf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemuppc/pointercal
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86-64/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86-64/pointercal
new file mode 100644
index 000000000..640053d39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86-64/pointercal
@@ -0,0 +1 @@
+1280 0 1002 0 960 328 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86/pointercal b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86/pointercal
new file mode 100644
index 000000000..640053d39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal/qemux86/pointercal
@@ -0,0 +1 @@
+1280 0 1002 0 960 328 65536
diff --git a/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal_0.0.bb b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal_0.0.bb
new file mode 100644
index 000000000..fcfd0386d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/pointercal/pointercal_0.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Touchscreen calibration data"
+SECTION = "base"
+PR = "r11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4b5fcfc87fb615860d398b5e38685edf"
+
+SRC_URI = "file://pointercal \
+ file://COPYING"
+
+S = "${WORKDIR}"
+
+do_install() {
+ # Only install file if it has a contents
+ if [ -s ${S}/pointercal ]; then
+ install -d ${D}${sysconfdir}/
+ install -m 0644 ${S}/pointercal ${D}${sysconfdir}/
+ fi
+}
+
+ALLOW_EMPTY_${PN} = "1"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+INHIBIT_DEFAULT_DEPS = "1"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammu-smsdrc b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammu-smsdrc
new file mode 100644
index 000000000..da413c2d3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammu-smsdrc
@@ -0,0 +1,80 @@
+# This is a sample Gammu SMSD configuration file. It's required for gammu-smsd,
+# see gammu-smsdrc(5) for documentation.
+
+# Gammu configuration, this section is like section "gammu" in "gammurc" file,
+# see gammurc(5) for documentation.
+[gammu]
+device = /dev/ttyUSB0
+model = at115200
+#connection = dlr3
+#synchronizetime = yes
+#logfile = gammulog # this is not used at all in SMSD mode
+#logformat = textall
+#use_locking = yes
+#gammuloc = gammu.us
+#startinfo = yes
+
+# When uncomment this section and insert numbers here, smsd will process
+# incoming sms only from numbers written here (incoming sms from all other
+# numbers will be deleted)
+#[include_numbers]
+#number1 = 1234
+
+# When uncomment this section and insert numbers here, smsd will process
+# incoming sms from all numbers not written here (incoming sms from numbers
+# written here will be deleted). This is "black" list.
+# Note: after using "include_numbers" section this one will be ignored
+#[exclude_numbers]
+#number1 = 1234
+
+# General SMSD settings, see gammu-smsdrc(5) for detailed description.
+[smsd]
+# SMSD service to use, one of FILES, MYSQL, PGSQL, DBI
+service = files
+# PIN for SIM card
+PIN = 0000
+# File (or stderr, syslog, eventlog) where information will be logged
+logfile = smsdlog
+# Amount of information being logged, each bit mean one level
+debuglevel = 0
+# Configuration for using more phones on same database
+#phoneid = MyPhone1
+# Script to be executed when new message has been received
+#runonreceive = /some/script
+# Commication frequency settings
+commtimeout = 30
+sendtimeout = 30
+#receivefrequency = 0
+
+# Phone communication settings
+#checksecurity = 1
+#resetfrequency = 0
+
+# Delivery report configuration
+#deliveryreport = no
+#deliveryreportdelay = 10
+
+# Ignoring broken SMSC
+#skipsmscnumber = +48602123456
+
+# Database backends congfiguration
+user = gammu
+password = gammupassword
+pc = localhost
+# pc can also contain port or socket path after colon (eg. localhost:/path/to/socket)
+database = sms
+
+# DBI configuration
+driver = sqlite
+# driverspath = /usr/lib/dbd/
+# Database directory for sqlite
+# dbdir = /var/lib/smsd
+
+# Files backend configuration
+inboxpath = /var/spool/sms/inbox/
+outboxpath = /var/spool/sms/outbox/
+sentsmspath = /var/spool/sms/sent/
+errorsmspath = /var/spool/sms/error/
+inboxformat = detail
+transmitformat = auto
+outboxformat = detail
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammurc b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammurc
new file mode 100644
index 000000000..b55d739fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu/gammurc
@@ -0,0 +1,173 @@
+; This is a sample ~/.gammurc file.
+; In Unix/Linux copy it into your home directory and name it .gammurc
+; or into /etc and name it gammurc
+; In Win32 copy it into directory with Gammu.exe and name gammurc
+; More about parameters later
+; Anything behind ; or # is comment.
+; -----------------------------------------------------------------------------
+
+[gammu]
+
+device = /dev/ttyUSB0
+connection = at115200
+; Do not use model configuration unless you really need it
+;model = 6110
+;synchronizetime = yes
+;logfile = gammulog
+;logformat = textall
+;use_locking = yes
+;gammuloc = locfile
+;startinfo = yes
+;gammucoding = utf8
+;usephonedb = yes
+
+;[gammu1]
+
+;device = com8:
+;model = 6110
+;connection = fbusblue
+;synchronizetime = yes
+;logfile = gammulog
+;logformat = textall
+;use_locking = yes
+;gammuloc = locfile
+;startinfo = yes
+;gammucoding = utf8
+
+; Step 1. Please find required Connection parameter and look into assigned
+; with it device type. With some Connection you must set concrete model
+
+; ================================================================ cables =====
+; New Nokia protocol for FBUS/DAU9P
+; Connection "fbus", device type serial
+; New Nokia protocol for DLR3/DLR3P
+; Connection "fbusdlr3"/"dlr3", device type serial
+; New Nokia protocol for DKU2 (and phone with USB converter on phone mainboard
+; like 6230)
+; Connection "dku2phonet"/"dku2", device type dku2 on Windows
+; Connection "fbususb" on Linux
+; New Nokia protocol for DKU5 (and phone without USB converter on phone
+; mainboard like 5100)
+; Connection "dku5fbus"/"dku5", device type dku5
+; New Nokia protocol for PL2303 USB cable (and phone without USB converter
+; on phone mainboard like 5100)
+; Connection "fbuspl2303", device type usb
+; Old Nokia protocol for MBUS/DAU9P
+; Connection "mbus", device type serial
+; Variants:
+; You can modify a bit behaviour of connection using additional flags
+; specified just after connection name like connection-variant.
+; If you're using ARK3116 cable (or any other which does not like dtr
+; handling), you might need -nodtr variant of connection, eg. dlr3-nodtr.
+; If cable you use is not powered over DTR/RTS, try using -nopower variant of
+; connection, eg. fbus-nopower.
+; -----------------------------------------------------------------------------
+; AT commands for DLR3, DKU5 or other AT compatible cable (8 bits, None
+; parity, no flow control, 1 stop bit). Used with Nokia, Alcatel, Siemens, etc.
+; Connection "at19200"/"at115200"/.., device type serial
+; AT commands for DKU2 cable
+; Connection "dku2at", device type dku2
+; ============================================================== infrared =====
+; Nokia protocol for infrared with Nokia 6110/6130/6150
+; Connection "fbusirda"/"infrared", device type serial
+; Nokia protocol for infrared with other Nokia models
+; Connection "irdaphonet"/"irda", device type irda
+; -----------------------------------------------------------------------------
+; AT commands for infrared. Used with Nokia, Alcatel, Siemens, etc.
+; Connection "irdaat", device type irda
+; -----------------------------------------------------------------------------
+; OBEX for infrared
+; Connection "irdaobex", device type irda.
+; ============================================================= Bluetooth =====
+; Nokia protocol with serial device set in BT stack (WidComm, other) from
+; adequate service and Nokia 6210
+; Connection "fbusblue", device type serial
+; Nokia protocol with serial device set in BT stack (WidComm, other) from
+; adequate service and other Nokia models
+; Connection "phonetblue", device type serial
+; -----------------------------------------------------------------------------
+; Nokia protocol for Bluetooth stack with Nokia 6210
+; Connection "bluerffbus", device type BT
+; Nokia protocol for Bluetooth stack with DCT4 Nokia models, which don't inform
+; about services correctly (6310, 6310i with firmware lower than 5.50, 8910,..)
+; Connection "bluerfphonet", device type BT
+; Nokia protocol for Bluetooth stack with other DCT4 Nokia models
+; Connection "bluephonet", device type BT
+; -----------------------------------------------------------------------------
+; AT commands for Bluetooth stack and 6210 / DCT4 Nokia models, which don't
+; inform about BT services correctly (6310, 6310i with firmware lower
+; than 5.50, 8910,..)
+; Connection "bluerfat", device type BT
+; AT commands for Bluetooth stack with other phones (Siemens, other Nokia,etc.)
+; Connection "blueat", device type BT
+; -----------------------------------------------------------------------------
+; OBEX for Bluetooth stack with DCT4 Nokia models, which don't inform about
+; BT services correctly (6310, 6310i with firmware lower than 5.50, 8910,...)
+; Connection "bluerfobex", device type BT
+; OBEX for Bluetooth stack with other phones (Siemens, other Nokia, etc.)
+; Connection "blueobex", device type BT.
+; -----------------------------------------------------------------------------
+; Connection "bluerfgnapbus", device type BT, model "gnap"
+; Connection "irdagnapbus", device type irda, model "gnap"
+
+; Step2. According to device type from Step1 and used OS set Port parameter
+
+; -----------------------------------------------------------------------------
+; Port type | "Port" parameter in Windows/DOS | "Port" parameter in Linux/Unix
+; ----------|---------------------------------|--------------------------------
+; serial | "com*:" | "/dev/ttyS*"
+; | (example "com1:") | (example "/dev/ttyS1")
+; | | or "/dev/tts/**" (with DevFS)
+; | | virtual serial ports like
+; | | "/dev/ircomm*" or "/dev/rfcomm*"
+; ----------|---------------------------------|--------------------------------
+; irda | ignored (can be empty) | ignored (can be empty)
+; ----------|---------------------------------|--------------------------------
+; BT | Bluetooth device address (example "00:11:22:33:44:55").
+; | Optionally you can also include channel after slash
+; | (example "00:11:22:33:44:55/12"). Can be also empty.
+; ----------|---------------------------------|--------------------------------
+; dku2 | ignored (can be empty) | /dev/ttyUSB* or /dev/ttyACM*
+; ----------|---------------------------------|--------------------------------
+; dku5 | ignored (can be empty) | connection with it not possible
+; ----------|---------------------------------|--------------------------------
+; usb | connection with it not possible | "/dev/ttyUSB*"
+
+; Step3. Set other config parameters
+
+; -----------------------------------------------------------------------------
+; Parameter name | Description
+; ----------------|------------------------------------------------------------
+; Model | Should not be used unless you have a good reason to do so.
+; | If Gammu doesn't recognize your phone model, put it here.
+; | Example values: "6110", "6150", "6210", "8210"
+; SynchronizeTime | if you want to set time from computer to phone during
+; | starting connection. Do not rather use this option when
+; | when to reset phone during connection (in some phones need
+; | to set time again after restart)
+; GammuLoc | name of localisation file
+; StartInfo | this option allow to set, that you want (setting "yes")
+; | to see message on the phone screen or phone should enable
+; | light for a moment during starting connection. Phone
+; | WON'T beep during starting connection with this option.
+; GammuCoding | forces using specified codepage (in win32 - for example
+; | "1250" will force CP1250) or UTF8 (in Linux - "utf8")
+; ----------------|------------------------------------------------------------
+; Logfile | Use, when want to have logfile from communication.
+; Logformat | What debug info and format should be used:
+; | "nothing" - no debug level (default)
+; | "text" - transmission dump in text format
+; | "textall" - all possible info in text format
+; | "errors" - errors in text format
+; | "binary" - transmission dump in binary format
+; ----------------|------------------------------------------------------------
+; Features | Custom features for phone. This can be used as override
+; | when values coded in common/gsmphones.c are bad or
+; | missing. Consult include/gammu-info.h for possible values
+; | (all Feature values without leading F_ prefix).
+; | Please report correct values to Gammu authors.
+; ----------------|------------------------------------------------------------
+; Use_Locking | under Unix/Linux use "yes", if want to lock used device
+; | to prevent using it by other applications. In win32 ignored
+
+; vim: et ts=4 sw=4 sts=4 tw=78 spell spelllang=en_us
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb
new file mode 100644
index 000000000..44411751e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb
@@ -0,0 +1,68 @@
+SUMMARY = "GNU All Mobile Managment Utilities"
+SECTION = "console/network"
+DEPENDS = "cmake-native virtual/libiconv libdbi mysql5 glib-2.0 udev libgudev unixodbc"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a17cb0a873d252440acfdf9b3d0e7fbf"
+HOMEPAGE = "http://www.gammu.org/"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}/${PV}/${BP}.tar.bz2 \
+ file://gammurc \
+ file://gammu-smsdrc \
+"
+
+SRC_URI[md5sum] = "8ea16c6b3cc48097a8e62311fe0e25b9"
+SRC_URI[sha256sum] = "de67caa102aa4c8fbed5300e5a0262e40411c4cc79f4379a8d34eed797968fc3"
+
+inherit distutils cmake gettext
+
+do_install_append() {
+ # these files seem to only be used by symbian and trigger QA warnings
+ rm -rf ${D}/usr/share/gammu
+ #install default configuration files
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/gammurc ${D}${sysconfdir}/gammurc
+ install -m 0644 ${WORKDIR}/gammu-smsdrc ${D}${sysconfdir}/gammu-smsdrc
+}
+
+EXTRA_OECONF = " \
+ --enable-shared \
+ --enable-backup \
+ --enable-protection \
+"
+
+EXTRA_OECMAKE = " \
+ -DWITH_CURL=OFF \
+ -DWITH_BLUETOOTH=OFF \
+ -DWITH_NOKIA_SUPPORT=OFF \
+ -DWITH_IRDA=OFF \
+ -DWITH_PYTHON=OFF \
+ -DWITH_MySQL=ON \
+ -DWITH_Postgres=OFF \
+"
+
+PACKAGES =+ "${PN}-smsd libgammu libgsmsd python-${PN}"
+
+FILES_${PN} = "${bindir}/gammu ${bindir}/jadmaker ${sysconfdir}/bash_completion.d/gammu \
+ ${bindir}/gammu-detect ${sysconfdir}/gammurc"
+CONFFILES_${PN} = "${sysconfdir}/gammurc"
+FILES_${PN}-smsd = "${bindir}/gammu-smsd* ${sysconfdir}/gammu-smsdrc"
+CONFFILES_${PN}-smsd = "${sysconfdir}/gammu-smsdrc"
+FILES_${PN}-dev += "${bindir}/gammu-config ${libdir}/*.so"
+FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug ${PYTHON_SITEPACKAGES_DIR}/gammu/.debug"
+FILES_libgammu = "${libdir}/libGammu.so.*"
+FILES_libgsmsd = "${libdir}/libgsmsd.so.*"
+FILES_python-${PN} = "${PYTHON_SITEPACKAGES_DIR}/gammu/*.??"
+
+RDEPENDS_${PN} += "bash"
+RDEPENDS_${PN}-dev += "bash"
+
+# Fails to build with thumb-1 (qemuarm)
+# gammu-1.32.0/libgammu/service/sms/gsmems.c:542:1: internal compiler error: in patch_jump_insn, at cfgrtl.c:1275
+# | }
+# | ^
+# | Please submit a full bug report,
+# | with preprocessed source if appropriate.
+# | See <http://gcc.gnu.org/bugs.html> for instructions.
+# | make[2]: *** [libgammu/CMakeFiles/libGammu.dir/service/sms/gsmems.o] Error 1
+# | make[2]: *** Waiting for unfinished jobs....
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
new file mode 100644
index 000000000..5535a3c5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
@@ -0,0 +1,177 @@
+From 044ae35c5694c39a4aca2a33502cc3897e88f79e Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 14 Jul 2017 15:15:35 +0200
+Subject: [PATCH 1/7] hostapd: Avoid key reinstallation in FT handshake
+
+Do not reinstall TK to the driver during Reassociation Response frame
+processing if the first attempt of setting the TK succeeded. This avoids
+issues related to clearing the TX/RX PN that could result in reusing
+same PN values for transmitted frames (e.g., due to CCM nonce reuse and
+also hitting replay protection on the receiver) and accepting replayed
+frames on RX side.
+
+This issue was introduced by the commit
+0e84c25434e6a1f283c7b4e62e483729085b78d2 ('FT: Fix PTK configuration in
+authenticator') which allowed wpa_ft_install_ptk() to be called multiple
+times with the same PTK. While the second configuration attempt is
+needed with some drivers, it must be done only if the first attempt
+failed.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/ap/ieee802_11.c | 16 +++++++++++++---
+ src/ap/wpa_auth.c | 11 +++++++++++
+ src/ap/wpa_auth.h | 3 ++-
+ src/ap/wpa_auth_ft.c | 10 ++++++++++
+ src/ap/wpa_auth_i.h | 1 +
+ 5 files changed, 37 insertions(+), 4 deletions(-)
+
+diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
+index 4e04169..333035f 100644
+--- a/src/ap/ieee802_11.c
++++ b/src/ap/ieee802_11.c
+@@ -1841,6 +1841,7 @@ static int add_associated_sta(struct hostapd_data *hapd,
+ {
+ struct ieee80211_ht_capabilities ht_cap;
+ struct ieee80211_vht_capabilities vht_cap;
++ int set = 1;
+
+ /*
+ * Remove the STA entry to ensure the STA PS state gets cleared and
+@@ -1848,9 +1849,18 @@ static int add_associated_sta(struct hostapd_data *hapd,
+ * FT-over-the-DS, where a station re-associates back to the same AP but
+ * skips the authentication flow, or if working with a driver that
+ * does not support full AP client state.
++ *
++ * Skip this if the STA has already completed FT reassociation and the
++ * TK has been configured since the TX/RX PN must not be reset to 0 for
++ * the same key.
+ */
+- if (!sta->added_unassoc)
++ if (!sta->added_unassoc &&
++ (!(sta->flags & WLAN_STA_AUTHORIZED) ||
++ !wpa_auth_sta_ft_tk_already_set(sta->wpa_sm))) {
+ hostapd_drv_sta_remove(hapd, sta->addr);
++ wpa_auth_sm_event(sta->wpa_sm, WPA_DRV_STA_REMOVED);
++ set = 0;
++ }
+
+ #ifdef CONFIG_IEEE80211N
+ if (sta->flags & WLAN_STA_HT)
+@@ -1873,11 +1883,11 @@ static int add_associated_sta(struct hostapd_data *hapd,
+ sta->flags & WLAN_STA_VHT ? &vht_cap : NULL,
+ sta->flags | WLAN_STA_ASSOC, sta->qosinfo,
+ sta->vht_opmode, sta->p2p_ie ? 1 : 0,
+- sta->added_unassoc)) {
++ set)) {
+ hostapd_logger(hapd, sta->addr,
+ HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_NOTICE,
+ "Could not %s STA to kernel driver",
+- sta->added_unassoc ? "set" : "add");
++ set ? "set" : "add");
+
+ if (sta->added_unassoc) {
+ hostapd_drv_sta_remove(hapd, sta->addr);
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index 3587086..707971d 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1745,6 +1745,9 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event)
+ #else /* CONFIG_IEEE80211R */
+ break;
+ #endif /* CONFIG_IEEE80211R */
++ case WPA_DRV_STA_REMOVED:
++ sm->tk_already_set = FALSE;
++ return 0;
+ }
+
+ #ifdef CONFIG_IEEE80211R
+@@ -3250,6 +3253,14 @@ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm)
+ }
+
+
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm)
++{
++ if (!sm || !wpa_key_mgmt_ft(sm->wpa_key_mgmt))
++ return 0;
++ return sm->tk_already_set;
++}
++
++
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+ struct rsn_pmksa_cache_entry *entry)
+ {
+diff --git a/src/ap/wpa_auth.h b/src/ap/wpa_auth.h
+index 0de8d97..97461b0 100644
+--- a/src/ap/wpa_auth.h
++++ b/src/ap/wpa_auth.h
+@@ -267,7 +267,7 @@ void wpa_receive(struct wpa_authenticator *wpa_auth,
+ u8 *data, size_t data_len);
+ enum wpa_event {
+ WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,
+- WPA_REAUTH_EAPOL, WPA_ASSOC_FT
++ WPA_REAUTH_EAPOL, WPA_ASSOC_FT, WPA_DRV_STA_REMOVED
+ };
+ void wpa_remove_ptk(struct wpa_state_machine *sm);
+ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event);
+@@ -280,6 +280,7 @@ int wpa_auth_pairwise_set(struct wpa_state_machine *sm);
+ int wpa_auth_get_pairwise(struct wpa_state_machine *sm);
+ int wpa_auth_sta_key_mgmt(struct wpa_state_machine *sm);
+ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm);
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm);
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+ struct rsn_pmksa_cache_entry *entry);
+ struct rsn_pmksa_cache_entry *
+diff --git a/src/ap/wpa_auth_ft.c b/src/ap/wpa_auth_ft.c
+index 42242a5..e63b99a 100644
+--- a/src/ap/wpa_auth_ft.c
++++ b/src/ap/wpa_auth_ft.c
+@@ -780,6 +780,14 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+ return;
+ }
+
++ if (sm->tk_already_set) {
++ /* Must avoid TK reconfiguration to prevent clearing of TX/RX
++ * PN in the driver */
++ wpa_printf(MSG_DEBUG,
++ "FT: Do not re-install same PTK to the driver");
++ return;
++ }
++
+ /* FIX: add STA entry to kernel/driver here? The set_key will fail
+ * most likely without this.. At the moment, STA entry is added only
+ * after association has been completed. This function will be called
+@@ -792,6 +800,7 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+
+ /* FIX: MLME-SetProtection.Request(TA, Tx_Rx) */
+ sm->pairwise_set = TRUE;
++ sm->tk_already_set = TRUE;
+ }
+
+
+@@ -898,6 +907,7 @@ static int wpa_ft_process_auth_req(struct wpa_state_machine *sm,
+
+ sm->pairwise = pairwise;
+ sm->PTK_valid = TRUE;
++ sm->tk_already_set = FALSE;
+ wpa_ft_install_ptk(sm);
+
+ buflen = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+diff --git a/src/ap/wpa_auth_i.h b/src/ap/wpa_auth_i.h
+index 72b7eb3..7fd8f05 100644
+--- a/src/ap/wpa_auth_i.h
++++ b/src/ap/wpa_auth_i.h
+@@ -65,6 +65,7 @@ struct wpa_state_machine {
+ struct wpa_ptk PTK;
+ Boolean PTK_valid;
+ Boolean pairwise_set;
++ Boolean tk_already_set;
+ int keycount;
+ Boolean Pair;
+ struct wpa_key_replay_counter {
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
new file mode 100644
index 000000000..4e57bcaa5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
@@ -0,0 +1,253 @@
+From c623cc973de525f7411dffe438e957ba86ef4733 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Wed, 12 Jul 2017 16:03:24 +0200
+Subject: [PATCH 2/7] Prevent reinstallation of an already in-use group key
+
+Track the current GTK and IGTK that is in use and when receiving a
+(possibly retransmitted) Group Message 1 or WNM-Sleep Mode Response, do
+not install the given key if it is already in use. This prevents an
+attacker from trying to trick the client into resetting or lowering the
+sequence counter associated to the group key.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/common/wpa_common.h | 11 +++++
+ src/rsn_supp/wpa.c | 116 ++++++++++++++++++++++++++++++------------------
+ src/rsn_supp/wpa_i.h | 4 ++
+ 3 files changed, 87 insertions(+), 44 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index af1d0f0..d200285 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -217,6 +217,17 @@ struct wpa_ptk {
+ size_t tk_len;
+ };
+
++struct wpa_gtk {
++ u8 gtk[WPA_GTK_MAX_LEN];
++ size_t gtk_len;
++};
++
++#ifdef CONFIG_IEEE80211W
++struct wpa_igtk {
++ u8 igtk[WPA_IGTK_MAX_LEN];
++ size_t igtk_len;
++};
++#endif /* CONFIG_IEEE80211W */
+
+ /* WPA IE version 1
+ * 00-50-f2:1 (OUI:OUI type)
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 3c47879..95bd7be 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -714,6 +714,15 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+ const u8 *_gtk = gd->gtk;
+ u8 gtk_buf[32];
+
++ /* Detect possible key reinstallation */
++ if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++ os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++ "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
++ gd->keyidx, gd->tx, gd->gtk_len);
++ return 0;
++ }
++
+ wpa_hexdump_key(MSG_DEBUG, "WPA: Group Key", gd->gtk, gd->gtk_len);
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "WPA: Installing GTK to the driver (keyidx=%d tx=%d len=%d)",
+@@ -748,6 +757,9 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+ }
+ os_memset(gtk_buf, 0, sizeof(gtk_buf));
+
++ sm->gtk.gtk_len = gd->gtk_len;
++ os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++
+ return 0;
+ }
+
+@@ -854,6 +866,48 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ }
+
+
++#ifdef CONFIG_IEEE80211W
++static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
++ const struct wpa_igtk_kde *igtk)
++{
++ size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
++ u16 keyidx = WPA_GET_LE16(igtk->keyid);
++
++ /* Detect possible key reinstallation */
++ if (sm->igtk.igtk_len == len &&
++ os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++ "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
++ keyidx);
++ return 0;
++ }
++
++ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++ "WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
++ keyidx, MAC2STR(igtk->pn));
++ wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
++ if (keyidx > 4095) {
++ wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++ "WPA: Invalid IGTK KeyID %d", keyidx);
++ return -1;
++ }
++ if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
++ broadcast_ether_addr,
++ keyidx, 0, igtk->pn, sizeof(igtk->pn),
++ igtk->igtk, len) < 0) {
++ wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++ "WPA: Failed to configure IGTK to the driver");
++ return -1;
++ }
++
++ sm->igtk.igtk_len = len;
++ os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++
++ return 0;
++}
++#endif /* CONFIG_IEEE80211W */
++
++
+ static int ieee80211w_set_keys(struct wpa_sm *sm,
+ struct wpa_eapol_ie_parse *ie)
+ {
+@@ -864,30 +918,14 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+ if (ie->igtk) {
+ size_t len;
+ const struct wpa_igtk_kde *igtk;
+- u16 keyidx;
++
+ len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+ if (ie->igtk_len != WPA_IGTK_KDE_PREFIX_LEN + len)
+ return -1;
++
+ igtk = (const struct wpa_igtk_kde *) ie->igtk;
+- keyidx = WPA_GET_LE16(igtk->keyid);
+- wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG, "WPA: IGTK keyid %d "
+- "pn %02x%02x%02x%02x%02x%02x",
+- keyidx, MAC2STR(igtk->pn));
+- wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK",
+- igtk->igtk, len);
+- if (keyidx > 4095) {
+- wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+- "WPA: Invalid IGTK KeyID %d", keyidx);
+- return -1;
+- }
+- if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+- broadcast_ether_addr,
+- keyidx, 0, igtk->pn, sizeof(igtk->pn),
+- igtk->igtk, len) < 0) {
+- wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+- "WPA: Failed to configure IGTK to the driver");
++ if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+ return -1;
+- }
+ }
+
+ return 0;
+@@ -2307,7 +2345,7 @@ void wpa_sm_deinit(struct wpa_sm *sm)
+ */
+ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ {
+- int clear_ptk = 1;
++ int clear_keys = 1;
+
+ if (sm == NULL)
+ return;
+@@ -2333,11 +2371,11 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ /* Prepare for the next transition */
+ wpa_ft_prepare_auth_request(sm, NULL);
+
+- clear_ptk = 0;
++ clear_keys = 0;
+ }
+ #endif /* CONFIG_IEEE80211R */
+
+- if (clear_ptk) {
++ if (clear_keys) {
+ /*
+ * IEEE 802.11, 8.4.10: Delete PTK SA on (re)association if
+ * this is not part of a Fast BSS Transition.
+@@ -2347,6 +2385,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+ sm->tptk_set = 0;
+ os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++ os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++ os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+ }
+
+ #ifdef CONFIG_TDLS
+@@ -2877,6 +2919,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+ os_memset(sm->pmk, 0, sizeof(sm->pmk));
+ os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+ os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++ os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++ os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+ os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+ os_memset(sm->pmk_r0, 0, sizeof(sm->pmk_r0));
+@@ -2949,29 +2995,11 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+ os_memset(&gd, 0, sizeof(gd));
+ #ifdef CONFIG_IEEE80211W
+ } else if (subelem_id == WNM_SLEEP_SUBELEM_IGTK) {
+- struct wpa_igtk_kde igd;
+- u16 keyidx;
+-
+- os_memset(&igd, 0, sizeof(igd));
+- keylen = wpa_cipher_key_len(sm->mgmt_group_cipher);
+- os_memcpy(igd.keyid, buf + 2, 2);
+- os_memcpy(igd.pn, buf + 4, 6);
+-
+- keyidx = WPA_GET_LE16(igd.keyid);
+- os_memcpy(igd.igtk, buf + 10, keylen);
+-
+- wpa_hexdump_key(MSG_DEBUG, "Install IGTK (WNM SLEEP)",
+- igd.igtk, keylen);
+- if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+- broadcast_ether_addr,
+- keyidx, 0, igd.pn, sizeof(igd.pn),
+- igd.igtk, keylen) < 0) {
+- wpa_printf(MSG_DEBUG, "Failed to install the IGTK in "
+- "WNM mode");
+- os_memset(&igd, 0, sizeof(igd));
++ const struct wpa_igtk_kde *igtk;
++
++ igtk = (const struct wpa_igtk_kde *) (buf + 2);
++ if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+ return -1;
+- }
+- os_memset(&igd, 0, sizeof(igd));
+ #endif /* CONFIG_IEEE80211W */
+ } else {
+ wpa_printf(MSG_DEBUG, "Unknown element id");
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index f653ba6..afc9e37 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -31,6 +31,10 @@ struct wpa_sm {
+ u8 rx_replay_counter[WPA_REPLAY_COUNTER_LEN];
+ int rx_replay_counter_set;
+ u8 request_counter[WPA_REPLAY_COUNTER_LEN];
++ struct wpa_gtk gtk;
++#ifdef CONFIG_IEEE80211W
++ struct wpa_igtk igtk;
++#endif /* CONFIG_IEEE80211W */
+
+ struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
new file mode 100644
index 000000000..e39bbf63d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
@@ -0,0 +1,187 @@
+From a6caab8060ab60876e233306f5c586451169eba1 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:12:24 +0300
+Subject: [PATCH 3/7] Extend protection of GTK/IGTK reinstallation of WNM-Sleep
+ Mode cases
+
+This extends the protection to track last configured GTK/IGTK value
+separately from EAPOL-Key frames and WNM-Sleep Mode frames to cover a
+corner case where these two different mechanisms may get used when the
+GTK/IGTK has changed and tracking a single value is not sufficient to
+detect a possible key reconfiguration.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/rsn_supp/wpa.c | 53 +++++++++++++++++++++++++++++++++++++---------------
+ src/rsn_supp/wpa_i.h | 2 ++
+ 2 files changed, 40 insertions(+), 15 deletions(-)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 95bd7be..7a2c68d 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -709,14 +709,17 @@ struct wpa_gtk_data {
+
+ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+ const struct wpa_gtk_data *gd,
+- const u8 *key_rsc)
++ const u8 *key_rsc, int wnm_sleep)
+ {
+ const u8 *_gtk = gd->gtk;
+ u8 gtk_buf[32];
+
+ /* Detect possible key reinstallation */
+- if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
+- os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++ if ((sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++ os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) ||
++ (sm->gtk_wnm_sleep.gtk_len == (size_t) gd->gtk_len &&
++ os_memcmp(sm->gtk_wnm_sleep.gtk, gd->gtk,
++ sm->gtk_wnm_sleep.gtk_len) == 0)) {
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
+ gd->keyidx, gd->tx, gd->gtk_len);
+@@ -757,8 +760,14 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+ }
+ os_memset(gtk_buf, 0, sizeof(gtk_buf));
+
+- sm->gtk.gtk_len = gd->gtk_len;
+- os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++ if (wnm_sleep) {
++ sm->gtk_wnm_sleep.gtk_len = gd->gtk_len;
++ os_memcpy(sm->gtk_wnm_sleep.gtk, gd->gtk,
++ sm->gtk_wnm_sleep.gtk_len);
++ } else {
++ sm->gtk.gtk_len = gd->gtk_len;
++ os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++ }
+
+ return 0;
+ }
+@@ -852,7 +861,7 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ (wpa_supplicant_check_group_cipher(sm, sm->group_cipher,
+ gtk_len, gtk_len,
+ &gd.key_rsc_len, &gd.alg) ||
+- wpa_supplicant_install_gtk(sm, &gd, key_rsc))) {
++ wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0))) {
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "RSN: Failed to install GTK");
+ os_memset(&gd, 0, sizeof(gd));
+@@ -868,14 +877,18 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+
+ #ifdef CONFIG_IEEE80211W
+ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+- const struct wpa_igtk_kde *igtk)
++ const struct wpa_igtk_kde *igtk,
++ int wnm_sleep)
+ {
+ size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+ u16 keyidx = WPA_GET_LE16(igtk->keyid);
+
+ /* Detect possible key reinstallation */
+- if (sm->igtk.igtk_len == len &&
+- os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++ if ((sm->igtk.igtk_len == len &&
++ os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) ||
++ (sm->igtk_wnm_sleep.igtk_len == len &&
++ os_memcmp(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++ sm->igtk_wnm_sleep.igtk_len) == 0)) {
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
+ keyidx);
+@@ -900,8 +913,14 @@ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+ return -1;
+ }
+
+- sm->igtk.igtk_len = len;
+- os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++ if (wnm_sleep) {
++ sm->igtk_wnm_sleep.igtk_len = len;
++ os_memcpy(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++ sm->igtk_wnm_sleep.igtk_len);
++ } else {
++ sm->igtk.igtk_len = len;
++ os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++ }
+
+ return 0;
+ }
+@@ -924,7 +943,7 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+ return -1;
+
+ igtk = (const struct wpa_igtk_kde *) ie->igtk;
+- if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++ if (wpa_supplicant_install_igtk(sm, igtk, 0) < 0)
+ return -1;
+ }
+
+@@ -1574,7 +1593,7 @@ static void wpa_supplicant_process_1_of_2(struct wpa_sm *sm,
+ if (wpa_supplicant_rsc_relaxation(sm, key->key_rsc))
+ key_rsc = null_rsc;
+
+- if (wpa_supplicant_install_gtk(sm, &gd, key_rsc) ||
++ if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0) ||
+ wpa_supplicant_send_2_of_2(sm, key, ver, key_info) < 0)
+ goto failed;
+ os_memset(&gd, 0, sizeof(gd));
+@@ -2386,8 +2405,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ sm->tptk_set = 0;
+ os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+ os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++ os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+ os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++ os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+ }
+
+@@ -2920,8 +2941,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+ os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+ os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+ os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++ os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+ os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++ os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+ os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+@@ -2986,7 +3009,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+
+ wpa_hexdump_key(MSG_DEBUG, "Install GTK (WNM SLEEP)",
+ gd.gtk, gd.gtk_len);
+- if (wpa_supplicant_install_gtk(sm, &gd, key_rsc)) {
++ if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 1)) {
+ os_memset(&gd, 0, sizeof(gd));
+ wpa_printf(MSG_DEBUG, "Failed to install the GTK in "
+ "WNM mode");
+@@ -2998,7 +3021,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+ const struct wpa_igtk_kde *igtk;
+
+ igtk = (const struct wpa_igtk_kde *) (buf + 2);
+- if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++ if (wpa_supplicant_install_igtk(sm, igtk, 1) < 0)
+ return -1;
+ #endif /* CONFIG_IEEE80211W */
+ } else {
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index afc9e37..9a54631 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -32,8 +32,10 @@ struct wpa_sm {
+ int rx_replay_counter_set;
+ u8 request_counter[WPA_REPLAY_COUNTER_LEN];
+ struct wpa_gtk gtk;
++ struct wpa_gtk gtk_wnm_sleep;
+ #ifdef CONFIG_IEEE80211W
+ struct wpa_igtk igtk;
++ struct wpa_igtk igtk_wnm_sleep;
+ #endif /* CONFIG_IEEE80211W */
+
+ struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0004-Prevent-installation-of-an-all-zero-TK.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0004-Prevent-installation-of-an-all-zero-TK.patch
new file mode 100644
index 000000000..510362510
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0004-Prevent-installation-of-an-all-zero-TK.patch
@@ -0,0 +1,82 @@
+From abf941647f2dc33b0b59612f525e1b292331cc9f Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 29 Sep 2017 04:22:51 +0200
+Subject: [PATCH 4/7] Prevent installation of an all-zero TK
+
+Properly track whether a PTK has already been installed to the driver
+and the TK part cleared from memory. This prevents an attacker from
+trying to trick the client into installing an all-zero TK.
+
+This fixes the earlier fix in commit
+ad00d64e7d8827b3cebd665a0ceb08adabf15e1e ('Fix TK configuration to the
+driver in EAPOL-Key 3/4 retry case') which did not take into account
+possibility of an extra message 1/4 showing up between retries of
+message 3/4.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/common/wpa_common.h | 1 +
+ src/rsn_supp/wpa.c | 5 ++---
+ src/rsn_supp/wpa_i.h | 1 -
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index d200285..1021ccb 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -215,6 +215,7 @@ struct wpa_ptk {
+ size_t kck_len;
+ size_t kek_len;
+ size_t tk_len;
++ int installed; /* 1 if key has already been installed to driver */
+ };
+
+ struct wpa_gtk {
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 7a2c68d..0550a41 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -510,7 +510,6 @@ static void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
+ os_memset(buf, 0, sizeof(buf));
+ }
+ sm->tptk_set = 1;
+- sm->tk_to_set = 1;
+
+ kde = sm->assoc_wpa_ie;
+ kde_len = sm->assoc_wpa_ie_len;
+@@ -615,7 +614,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+ enum wpa_alg alg;
+ const u8 *key_rsc;
+
+- if (!sm->tk_to_set) {
++ if (sm->ptk.installed) {
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "WPA: Do not re-install same PTK to the driver");
+ return 0;
+@@ -659,7 +658,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+
+ /* TK is not needed anymore in supplicant */
+ os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
+- sm->tk_to_set = 0;
++ sm->ptk.installed = 1;
+
+ if (sm->wpa_ptk_rekey) {
+ eloop_cancel_timeout(wpa_sm_rekey_ptk, sm, NULL);
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 9a54631..41f371f 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -24,7 +24,6 @@ struct wpa_sm {
+ struct wpa_ptk ptk, tptk;
+ int ptk_set, tptk_set;
+ unsigned int msg_3_of_4_ok:1;
+- unsigned int tk_to_set:1;
+ u8 snonce[WPA_NONCE_LEN];
+ u8 anonce[WPA_NONCE_LEN]; /* ANonce from the last 1/4 msg */
+ int renew_snonce;
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
new file mode 100644
index 000000000..b0e1df314
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
@@ -0,0 +1,67 @@
+From 804b9d72808cddd822e7dcec4d60f40c1aceda82 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:32:57 +0300
+Subject: [PATCH 5/7] Fix PTK rekeying to generate a new ANonce
+
+The Authenticator state machine path for PTK rekeying ended up bypassing
+the AUTHENTICATION2 state where a new ANonce is generated when going
+directly to the PTKSTART state since there is no need to try to
+determine the PMK again in such a case. This is far from ideal since the
+new PTK would depend on a new nonce only from the supplicant.
+
+Fix this by generating a new ANonce when moving to the PTKSTART state
+for the purpose of starting new 4-way handshake to rekey PTK.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/ap/wpa_auth.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index 707971d..bf10cc1 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1901,6 +1901,21 @@ SM_STATE(WPA_PTK, AUTHENTICATION2)
+ }
+
+
++static int wpa_auth_sm_ptk_update(struct wpa_state_machine *sm)
++{
++ if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) {
++ wpa_printf(MSG_ERROR,
++ "WPA: Failed to get random data for ANonce");
++ sm->Disconnect = TRUE;
++ return -1;
++ }
++ wpa_hexdump(MSG_DEBUG, "WPA: Assign new ANonce", sm->ANonce,
++ WPA_NONCE_LEN);
++ sm->TimeoutCtr = 0;
++ return 0;
++}
++
++
+ SM_STATE(WPA_PTK, INITPMK)
+ {
+ u8 msk[2 * PMK_LEN];
+@@ -2458,9 +2473,12 @@ SM_STEP(WPA_PTK)
+ SM_ENTER(WPA_PTK, AUTHENTICATION);
+ else if (sm->ReAuthenticationRequest)
+ SM_ENTER(WPA_PTK, AUTHENTICATION2);
+- else if (sm->PTKRequest)
+- SM_ENTER(WPA_PTK, PTKSTART);
+- else switch (sm->wpa_ptk_state) {
++ else if (sm->PTKRequest) {
++ if (wpa_auth_sm_ptk_update(sm) < 0)
++ SM_ENTER(WPA_PTK, DISCONNECTED);
++ else
++ SM_ENTER(WPA_PTK, PTKSTART);
++ } else switch (sm->wpa_ptk_state) {
+ case WPA_PTK_INITIALIZE:
+ break;
+ case WPA_PTK_DISCONNECT:
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0006-TDLS-Reject-TPK-TK-reconfiguration.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0006-TDLS-Reject-TPK-TK-reconfiguration.patch
new file mode 100644
index 000000000..72c7d51e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0006-TDLS-Reject-TPK-TK-reconfiguration.patch
@@ -0,0 +1,135 @@
+From 7fd26db2d8147ed662db192c41d7bc15752a601d Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 11:03:15 +0300
+Subject: [PATCH 6/7] TDLS: Reject TPK-TK reconfiguration
+
+Do not try to reconfigure the same TPK-TK to the driver after it has
+been successfully configured. This is an explicit check to avoid issues
+related to resetting the TX/RX packet number. There was already a check
+for this for TPK M2 (retries of that message are ignored completely), so
+that behavior does not get modified.
+
+For TPK M3, the TPK-TK could have been reconfigured, but that was
+followed by immediate teardown of the link due to an issue in updating
+the STA entry. Furthermore, for TDLS with any real security (i.e.,
+ignoring open/WEP), the TPK message exchange is protected on the AP path
+and simple replay attacks are not feasible.
+
+As an additional corner case, make sure the local nonce gets updated if
+the peer uses a very unlikely "random nonce" of all zeros.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/rsn_supp/tdls.c | 38 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/src/rsn_supp/tdls.c b/src/rsn_supp/tdls.c
+index e424168..9eb9738 100644
+--- a/src/rsn_supp/tdls.c
++++ b/src/rsn_supp/tdls.c
+@@ -112,6 +112,7 @@ struct wpa_tdls_peer {
+ u8 tk[16]; /* TPK-TK; assuming only CCMP will be used */
+ } tpk;
+ int tpk_set;
++ int tk_set; /* TPK-TK configured to the driver */
+ int tpk_success;
+ int tpk_in_progress;
+
+@@ -192,6 +193,20 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+ u8 rsc[6];
+ enum wpa_alg alg;
+
++ if (peer->tk_set) {
++ /*
++ * This same TPK-TK has already been configured to the driver
++ * and this new configuration attempt (likely due to an
++ * unexpected retransmitted frame) would result in clearing
++ * the TX/RX sequence number which can break security, so must
++ * not allow that to happen.
++ */
++ wpa_printf(MSG_INFO, "TDLS: TPK-TK for the peer " MACSTR
++ " has already been configured to the driver - do not reconfigure",
++ MAC2STR(peer->addr));
++ return -1;
++ }
++
+ os_memset(rsc, 0, 6);
+
+ switch (peer->cipher) {
+@@ -209,12 +224,15 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+ return -1;
+ }
+
++ wpa_printf(MSG_DEBUG, "TDLS: Configure pairwise key for peer " MACSTR,
++ MAC2STR(peer->addr));
+ if (wpa_sm_set_key(sm, alg, peer->addr, -1, 1,
+ rsc, sizeof(rsc), peer->tpk.tk, key_len) < 0) {
+ wpa_printf(MSG_WARNING, "TDLS: Failed to set TPK to the "
+ "driver");
+ return -1;
+ }
++ peer->tk_set = 1;
+ return 0;
+ }
+
+@@ -696,7 +714,7 @@ static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+ peer->cipher = 0;
+ peer->qos_info = 0;
+ peer->wmm_capable = 0;
+- peer->tpk_set = peer->tpk_success = 0;
++ peer->tk_set = peer->tpk_set = peer->tpk_success = 0;
+ peer->chan_switch_enabled = 0;
+ os_memset(&peer->tpk, 0, sizeof(peer->tpk));
+ os_memset(peer->inonce, 0, WPA_NONCE_LEN);
+@@ -1159,6 +1177,7 @@ skip_rsnie:
+ wpa_tdls_peer_free(sm, peer);
+ return -1;
+ }
++ peer->tk_set = 0; /* A new nonce results in a new TK */
+ wpa_hexdump(MSG_DEBUG, "TDLS: Initiator Nonce for TPK handshake",
+ peer->inonce, WPA_NONCE_LEN);
+ os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
+@@ -1751,6 +1770,19 @@ static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
+ }
+
+
++static int tdls_nonce_set(const u8 *nonce)
++{
++ int i;
++
++ for (i = 0; i < WPA_NONCE_LEN; i++) {
++ if (nonce[i])
++ return 1;
++ }
++
++ return 0;
++}
++
++
+ static int wpa_tdls_process_tpk_m1(struct wpa_sm *sm, const u8 *src_addr,
+ const u8 *buf, size_t len)
+ {
+@@ -2004,7 +2036,8 @@ skip_rsn:
+ peer->rsnie_i_len = kde.rsn_ie_len;
+ peer->cipher = cipher;
+
+- if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0) {
++ if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0 ||
++ !tdls_nonce_set(peer->inonce)) {
+ /*
+ * There is no point in updating the RNonce for every obtained
+ * TPK M1 frame (e.g., retransmission due to timeout) with the
+@@ -2020,6 +2053,7 @@ skip_rsn:
+ "TDLS: Failed to get random data for responder nonce");
+ goto error;
+ }
++ peer->tk_set = 0; /* A new nonce results in a new TK */
+ }
+
+ #if 0
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
new file mode 100644
index 000000000..d0978c797
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
@@ -0,0 +1,85 @@
+From a42eb67c42f845faf266b0633d52e17f2a82f511 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 12:06:37 +0300
+Subject: [PATCH 7/7] FT: Do not allow multiple Reassociation Response frames
+
+The driver is expected to not report a second association event without
+the station having explicitly request a new association. As such, this
+case should not be reachable. However, since reconfiguring the same
+pairwise or group keys to the driver could result in nonce reuse issues,
+be extra careful here and do an additional state check to avoid this
+even if the local driver ends up somehow accepting an unexpected
+Reassociation Response frame.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+Upstream-Status: Backport
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/rsn_supp/wpa.c | 3 +++
+ src/rsn_supp/wpa_ft.c | 8 ++++++++
+ src/rsn_supp/wpa_i.h | 1 +
+ 3 files changed, 12 insertions(+)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 0550a41..2a53c6f 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -2440,6 +2440,9 @@ void wpa_sm_notify_disassoc(struct wpa_sm *sm)
+ #ifdef CONFIG_TDLS
+ wpa_tdls_disassoc(sm);
+ #endif /* CONFIG_TDLS */
++#ifdef CONFIG_IEEE80211R
++ sm->ft_reassoc_completed = 0;
++#endif /* CONFIG_IEEE80211R */
+
+ /* Keys are not needed in the WPA state machine anymore */
+ wpa_sm_drop_sa(sm);
+diff --git a/src/rsn_supp/wpa_ft.c b/src/rsn_supp/wpa_ft.c
+index 205793e..d45bb45 100644
+--- a/src/rsn_supp/wpa_ft.c
++++ b/src/rsn_supp/wpa_ft.c
+@@ -153,6 +153,7 @@ static u8 * wpa_ft_gen_req_ies(struct wpa_sm *sm, size_t *len,
+ u16 capab;
+
+ sm->ft_completed = 0;
++ sm->ft_reassoc_completed = 0;
+
+ buf_len = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+ 2 + sm->r0kh_id_len + ric_ies_len + 100;
+@@ -681,6 +682,11 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+ return -1;
+ }
+
++ if (sm->ft_reassoc_completed) {
++ wpa_printf(MSG_DEBUG, "FT: Reassociation has already been completed for this FT protocol instance - ignore unexpected retransmission");
++ return 0;
++ }
++
+ if (wpa_ft_parse_ies(ies, ies_len, &parse) < 0) {
+ wpa_printf(MSG_DEBUG, "FT: Failed to parse IEs");
+ return -1;
+@@ -781,6 +787,8 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+ return -1;
+ }
+
++ sm->ft_reassoc_completed = 1;
++
+ if (wpa_ft_process_gtk_subelem(sm, parse.gtk, parse.gtk_len) < 0)
+ return -1;
+
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 41f371f..56f88dc 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -128,6 +128,7 @@ struct wpa_sm {
+ size_t r0kh_id_len;
+ u8 r1kh_id[FT_R1KH_ID_LEN];
+ int ft_completed;
++ int ft_reassoc_completed;
+ int over_the_ds_in_progress;
+ u8 target_ap[ETH_ALEN]; /* over-the-DS target AP */
+ int set_ptk_after_assoc;
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/defconfig b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/defconfig
new file mode 100644
index 000000000..278964017
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/defconfig
@@ -0,0 +1,145 @@
+# Example hostapd build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cass, these lines should use += in order not
+# to override previous values of the variables.
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for wired authenticator
+CONFIG_DRIVER_WIRED=y
+
+# Driver interface for madwifi driver
+#CONFIG_DRIVER_MADWIFI=y
+#CFLAGS += -I../../madwifi # change to the madwifi source directory
+
+# Driver interface for Prism54 driver
+CONFIG_DRIVER_PRISM54=y
+
+# Driver interface for drivers using the nl80211 kernel interface
+CONFIG_DRIVER_NL80211=y
+CONFIG_LIBNL32=y
+# driver_nl80211.c requires a rather new libnl (version 1.1) which may not be
+# shipped with your distribution yet. If that is the case, you need to build
+# newer libnl version and point the hostapd build to use it.
+#LIBNL=/usr/src/libnl
+#CFLAGS += -I$(LIBNL)/include
+#LIBS += -L$(LIBNL)/lib
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+
+# Driver interface for no driver (e.g., RADIUS server only)
+#CONFIG_DRIVER_NONE=y
+
+# IEEE 802.11F/IAPP
+CONFIG_IAPP=y
+
+# WPA2/IEEE 802.11i RSN pre-authentication
+CONFIG_RSN_PREAUTH=y
+
+# PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
+CONFIG_PEERKEY=y
+
+# IEEE 802.11w (management frame protection)
+# This version is an experimental implementation based on IEEE 802.11w/D1.0
+# draft and is subject to change since the standard has not yet been finalized.
+# Driver support is also needed for IEEE 802.11w.
+#CONFIG_IEEE80211W=y
+
+# Integrated EAP server
+CONFIG_EAP=y
+
+# EAP-MD5 for the integrated EAP server
+CONFIG_EAP_MD5=y
+
+# EAP-TLS for the integrated EAP server
+CONFIG_EAP_TLS=y
+
+# EAP-MSCHAPv2 for the integrated EAP server
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-PEAP for the integrated EAP server
+CONFIG_EAP_PEAP=y
+
+# EAP-GTC for the integrated EAP server
+CONFIG_EAP_GTC=y
+
+# EAP-TTLS for the integrated EAP server
+CONFIG_EAP_TTLS=y
+
+# EAP-SIM for the integrated EAP server
+#CONFIG_EAP_SIM=y
+
+# EAP-AKA for the integrated EAP server
+#CONFIG_EAP_AKA=y
+
+# EAP-AKA' for the integrated EAP server
+# This requires CONFIG_EAP_AKA to be enabled, too.
+#CONFIG_EAP_AKA_PRIME=y
+
+# EAP-PAX for the integrated EAP server
+#CONFIG_EAP_PAX=y
+
+# EAP-PSK for the integrated EAP server (this is _not_ needed for WPA-PSK)
+#CONFIG_EAP_PSK=y
+
+# EAP-SAKE for the integrated EAP server
+#CONFIG_EAP_SAKE=y
+
+# EAP-GPSK for the integrated EAP server
+#CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+#CONFIG_EAP_GPSK_SHA256=y
+
+# EAP-FAST for the integrated EAP server
+# Note: Default OpenSSL package does not include support for all the
+# functionality needed for EAP-FAST. If EAP-FAST is enabled with OpenSSL,
+# the OpenSSL library must be patched (openssl-0.9.9-session-ticket.patch)
+# to add the needed functions.
+#CONFIG_EAP_FAST=y
+
+# Wi-Fi Protected Setup (WPS)
+CONFIG_WPS=y
+# Enable UPnP support for external WPS Registrars
+#CONFIG_WPS_UPNP=y
+
+# EAP-IKEv2
+#CONFIG_EAP_IKEV2=y
+
+# Trusted Network Connect (EAP-TNC)
+#CONFIG_EAP_TNC=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# RADIUS authentication server. This provides access to the integrated EAP
+# server from external hosts using RADIUS.
+CONFIG_RADIUS_SERVER=y
+
+# Build IPv6 support for RADIUS operations
+CONFIG_IPV6=y
+
+# IEEE Std 802.11r-2008 (Fast BSS Transition)
+#CONFIG_IEEE80211R=y
+
+# Use the hostapd's IEEE 802.11 authentication (ACL), but without
+# the IEEE 802.11 Management capability (e.g., madwifi or FreeBSD/net80211)
+CONFIG_DRIVER_RADIUS_ACL=y
+
+# IEEE 802.11n (High Throughput) support
+CONFIG_IEEE80211N=y
+
+# Remove debugging code that is printing out debug messages to stdout.
+# This can be used to reduce the size of the hostapd considerably if debugging
+# code is not needed.
+#CONFIG_NO_STDOUT_DEBUG=y
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd.service b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd.service
new file mode 100644
index 000000000..151c0504f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/hostapd.pid
+ExecStart=@SBINDIR@/hostapd @SYSCONFDIR@/hostapd.conf -P /run/hostapd.pid -B
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/init b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/init
new file mode 100644
index 000000000..8ba4e0794
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/init
@@ -0,0 +1,58 @@
+#!/bin/sh
+DAEMON=/usr/sbin/hostapd
+NAME=hostapd
+DESC="HOSTAP Daemon"
+ARGS="/etc/hostapd.conf -B"
+
+test -f $DAEMON || exit 0
+
+set -e
+
+# source function library
+. /etc/init.d/functions
+
+delay_stop() {
+ count=0
+ while [ $count -lt 9 ] ; do
+ if pidof $DAEMON >/dev/null; then
+ sleep 1
+ else
+ return 0
+ fi
+ count=`expr $count + 1`
+ done
+ echo "Failed to stop $DESC."
+ return 1
+}
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -x $DAEMON -- $ARGS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K --oknodo -x $DAEMON
+ echo "$NAME."
+ ;;
+ restart)
+ $0 stop
+ delay_stop && $0 start
+ ;;
+ reload)
+ echo -n "Reloading $DESC: "
+ killall -HUP $(basename ${DAEMON})
+ echo "$NAME."
+ ;;
+ status)
+ status $DAEMON
+ exit $?
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb
new file mode 100644
index 000000000..250add875
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb
@@ -0,0 +1,58 @@
+SUMMARY = "User space daemon for extended IEEE 802.11 management"
+HOMEPAGE = "http://w1.fi/hostapd/"
+SECTION = "kernel/userland"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://hostapd/README;md5=8aa4e8c78b59b12016c4cb2d0a8db350"
+
+DEPENDS = "libnl openssl"
+
+SRC_URI = " \
+ http://w1.fi/releases/hostapd-${PV}.tar.gz \
+ file://defconfig \
+ file://init \
+ file://hostapd.service \
+ file://0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch \
+ file://0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch \
+ file://0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch \
+ file://0004-Prevent-installation-of-an-all-zero-TK.patch \
+ file://0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch \
+ file://0006-TDLS-Reject-TPK-TK-reconfiguration.patch \
+ file://0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch \
+"
+
+SRC_URI[md5sum] = "eaa56dce9bd8f1d195eb62596eab34c7"
+SRC_URI[sha256sum] = "01526b90c1d23bec4b0f052039cc4456c2fd19347b4d830d1d58a0a6aea7117d"
+
+S = "${WORKDIR}/hostapd-${PV}"
+B = "${WORKDIR}/hostapd-${PV}/hostapd"
+
+inherit update-rc.d systemd pkgconfig distro_features_check
+
+CONFLICT_DISTRO_FEATURES = "openssl-no-weak-ciphers"
+
+INITSCRIPT_NAME = "hostapd"
+
+SYSTEMD_SERVICE_${PN} = "hostapd.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
+
+do_configure_append() {
+ install -m 0644 ${WORKDIR}/defconfig ${B}/.config
+}
+
+do_compile() {
+ export CFLAGS="-MMD -O2 -Wall -g"
+ export EXTRA_CFLAGS="${CFLAGS}"
+ make V=1
+}
+
+do_install() {
+ install -d ${D}${sbindir} ${D}${sysconfdir}/init.d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${B}/hostapd.conf ${D}${sysconfdir}
+ install -m 0755 ${B}/hostapd ${D}${sbindir}
+ install -m 0755 ${B}/hostapd_cli ${D}${sbindir}
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/hostapd
+ install -m 0644 ${WORKDIR}/hostapd.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SBINDIR@,${sbindir},g' -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/hostapd.service
+}
+
+CONFFILES_${PN} += "${sysconfdir}/hostapd.conf"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.0.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.0.4.bb
new file mode 100644
index 000000000..10b04bb52
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.0.4.bb
@@ -0,0 +1,18 @@
+SUMMARY = "ncurses IRC client"
+DESCRIPTION = "Irssi is an ncurses IRC client"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55fdc1113306167d6ea2561404ce02f8"
+
+DEPENDS = "glib-2.0 ncurses openssl"
+
+SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[md5sum] = "46d4ac2a7ab472e5dc800e5d7bd9a879"
+SRC_URI[sha256sum] = "b85c07dbafe178213eccdc69f5f8f0ac024dea01c67244668f91ec1c06b986ca"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--with-textui \
+ --with-proxy \
+ --with-bot \
+ --with-perl=no \
+ --enable-true-color"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/0001-aclocal-Add-parameter-to-disable-keyutils-detection.patch b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/0001-aclocal-Add-parameter-to-disable-keyutils-detection.patch
new file mode 100644
index 000000000..cbd5d71fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/0001-aclocal-Add-parameter-to-disable-keyutils-detection.patch
@@ -0,0 +1,32 @@
+From a9e4057bfda190ad365b503af058b460ab8c7616 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 1 Oct 2013 22:22:57 +0200
+Subject: [PATCH] aclocal: Add parameter to disable keyutils detection
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ aclocal.m4 | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index d6d1279..80ce604 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -1679,12 +1679,16 @@ fi
+ dnl
+ dnl If libkeyutils exists (on Linux) include it and use keyring ccache
+ AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
++AC_ARG_ENABLE([keyutils],
++AC_HELP_STRING([--disable-keyutils],don't enable using keyutils for keyring ccache @<:@enabled@:>@), , enable_keyutils=yes)
++if test "$enable_keyutils" = yes; then
+ AC_CHECK_HEADERS([keyutils.h],
+ AC_CHECK_LIB(keyutils, add_key,
+ [dnl Pre-reqs were found
+ AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
+ LIBS="-lkeyutils $LIBS"
+ ]))
++fi
+ ])dnl
+ dnl
+ dnl If libkeyutils supports persistent keyrings, use them
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/crosscompile_nm.patch b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/crosscompile_nm.patch
new file mode 100644
index 000000000..d3e693751
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/crosscompile_nm.patch
@@ -0,0 +1,29 @@
+Modifies export-check.pl to use look for $ENV{'NM'} before
+defaulting to using 'nm'
+
+Upstream-Status: Pending
+
+Signed-off-by: Amy Fong <amy.fong@windriver.com>
+---
+
+ export-check.pl | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+Index: src/util/export-check.pl
+===================================================================
+--- src.orig/util/export-check.pl
++++ src/util/export-check.pl
+@@ -38,7 +38,12 @@
+ my($exfile, $libfile) = @ARGV;
+
+ @missing = ();
+-open NM, "nm -Dg --defined-only $libfile |" || die "can't run nm on $libfile: $!";
++if (defined($ENV{'NM'})) {
++ $nm = $ENV{'NM'};
++} else {
++ $nm = "nm";
++}
++open NM, "$nm -Dg --defined-only $libfile |" || die "can't run nm on $libfile: $!";
+ open EXPORT, "< $exfile" || die "can't read $exfile: $!";
+
+ @export = <EXPORT>;
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/debian-suppress-usr-lib-in-krb5-config.patch b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/debian-suppress-usr-lib-in-krb5-config.patch
new file mode 100644
index 000000000..f0182ee5d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/debian-suppress-usr-lib-in-krb5-config.patch
@@ -0,0 +1,48 @@
+Subject: [PATCH] debian: suppress /usr/lib in krb5-config
+
+Upstream-Status: Pending
+
+Handel multi-arch suppressions
+
+The patch is from debian.
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ src/build-tools/krb5-config.in | 14 +++++++++-----
+ 1 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/src/build-tools/krb5-config.in b/src/build-tools/krb5-config.in
+index f6184da..637bad7 100755
+--- a/src/build-tools/krb5-config.in
++++ b/src/build-tools/krb5-config.in
+@@ -138,6 +138,7 @@ if test -n "$do_help"; then
+ echo " [--defktname] Show built-in default keytab name"
+ echo " [--defcktname] Show built-in default client keytab name"
+ echo " [--cflags] Compile time CFLAGS"
++ echo " [--deps] Include dependent libraries"
+ echo " [--libs] List libraries required to link [LIBRARIES]"
+ echo "Libraries:"
+ echo " krb5 Kerberos 5 application"
+@@ -209,11 +210,14 @@ fi
+
+ if test -n "$do_libs"; then
+ # Assumes /usr/lib is the standard library directory everywhere...
+- if test "$libdir" = /usr/lib; then
+- libdirarg=
+- else
+- libdirarg="-L$libdir"
+- fi
++ case $libdir in
++ /usr/lib*)
++ libdirarg=
++ ;;
++ *)
++ libdirarg="-L$libdir"
++ ;;
++ esac
+ # Ugly gross hack for our build tree
+ lib_flags=`echo $CC_LINK | sed -e 's/\$(CC)//' \
+ -e 's/\$(PURE)//' \
+--
+1.7.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-admin-server b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-admin-server
new file mode 100644
index 000000000..e097353c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-admin-server
@@ -0,0 +1,4 @@
+# Automatically generated. If you change anything in this file other than the
+# values of DAEMON_ARGS, first run dpkg-reconfigure
+# krb5-admin-server and disable managing the kadmin configuration with
+# debconf. Otherwise, changes will be overwritten.
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-kdc b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-kdc
new file mode 100644
index 000000000..310bfcf8a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/default/krb5-kdc
@@ -0,0 +1,5 @@
+# Automatically generated. Only the value of DAEMON_ARGS will be preserved.
+# If you change anything in this file other than DAEMON_ARGS, first run
+# dpkg-reconfigure krb5-kdc and disable managing the KDC configuration with
+# debconf. Otherwise, changes will be overwritten.
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-admin-server b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-admin-server
new file mode 100755
index 000000000..79238d4f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-admin-server
@@ -0,0 +1,140 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: krb5-admin-server
+# Required-Start: $local_fs $remote_fs $network $syslog
+# Required-Stop: $local_fs $remote_fs $network $syslog
+# Should-Start: krb5-kdc
+# Should-Stop: krb5-kdc
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: MIT Kerberos KDC administrative daemon
+# Description: Starts, stops, or restarts the MIT Kerberos KDC
+# administrative daemon (kadmind). This daemon answers
+# requests from kadmin clients and allows administrators
+# to create, delete, and modify principals in the KDC
+# database.
+### END INIT INFO
+
+# Author: Sam Hartman <hartmans@mit.edu>
+# Author: Russ Allbery <rra@debian.org>
+#
+# Based on the /etc/init.d/skeleton template as found in initscripts version
+# 2.86.ds1-15.
+
+# June, 2012: Adopted for yocto <amy.fong@windriver.com>
+
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+DESC="Kerberos administrative servers"
+NAME=kadmind
+DAEMON=/usr/sbin/$NAME
+DAEMON_ARGS=""
+SCRIPTNAME=/etc/init.d/krb5-admin-server
+DEFAULT=/etc/default/krb5-admin-server
+
+# Exit if the package is not installed.
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration if it is present.
+[ -r "$DEFAULT" ] && . "$DEFAULT"
+
+# Get the setting of VERBOSE and other rcS variables.
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+
+. /etc/init.d/functions
+
+ADMIN_SERVER_LOG=/var/log/kadmind.log
+[ -f $ADMIN_SERVER_LOG ] && (test ! -x /sbin/restorecon \
+ || /sbin/restorecon -F $ADMIN_SERVER_LOG)
+
+# Return
+# 0 if daemon has been started
+# 1 if daemon was already running
+# 2 if daemon could not be started
+do_start()
+{
+ start-stop-daemon --start --quiet --startas $DAEMON --name $NAME --test \
+ > /dev/null || return 1
+ start-stop-daemon --start --quiet --startas $DAEMON --name $NAME \
+ -- $DAEMON_ARGS || return 2
+}
+
+# Return
+# 0 if daemon has been stopped
+# 1 if daemon was already stopped
+# 2 if daemon could not be stopped
+# other if a failure occurred
+do_stop()
+{
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ return "$RETVAL"
+}
+
+
+case "$1" in
+ start)
+ if [ "$RUN_KADMIND" = false ] ; then
+ if [ "$VERBOSE" != no ] ; then
+ echo "Not starting $DESC per configuration"
+ fi
+ exit 0
+ fi
+ [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && echo 0 ;;
+ 2) [ "$VERBOSE" != no ] && echo 1 ;;
+ esac
+ ;;
+
+ stop)
+ [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && echo 0 ;;
+ 2) [ "$VERBOSE" != no ] && echo 1 ;;
+ esac
+ ;;
+
+ restart|force-reload)
+ if [ "$RUN_KADMIND" = false ] ; then
+ if [ "$VERBOSE" != no ] ; then
+ echo "Not restarting $DESC per configuration"
+ fi
+ exit 0
+ fi
+ echo "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) [ "$VERBOSE" != no ] && echo 0 ;;
+ *) [ "$VERBOSE" != no ] && echo 1 ;;
+ esac
+ ;;
+ *)
+ echo 1
+ ;;
+ esac
+ ;;
+
+ status)
+ pidofproc "$DAEMON" >/dev/null
+ status=$?
+ if [ $status -eq 0 ]; then
+ echo "$NAME is running."
+ else
+ echo "$NAME is not running."
+ fi
+ exit $status
+ ;;
+
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-kdc b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-kdc
new file mode 100755
index 000000000..865d1b970
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/etc/init.d/krb5-kdc
@@ -0,0 +1,133 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: krb5-kdc
+# Required-Start: $local_fs $remote_fs $network $syslog
+# Required-Stop: $local_fs $remote_fs $network $syslog
+# X-Start-Before: $x-display-manager
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: MIT Kerberos KDC
+# Description: Starts, stops, or restarts the MIT Kerberos KDC. This
+# daemon responds to ticket requests from Kerberos
+# clients.
+### END INIT INFO
+
+# Author: Sam Hartman <hartmans@mit.edu>
+# Author: Russ Allbery <rra@debian.org>
+#
+# Based on the /etc/init.d/skeleton template as found in initscripts version
+# 2.86.ds1-15.
+
+# June, 2012: Adopted for yocto <amy.fong@windriver.com>
+
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+DESC="Kerberos KDC"
+NAME=krb5kdc
+DAEMON=/usr/sbin/$NAME
+DAEMON_ARGS=""
+SCRIPTNAME=/etc/init.d/krb5-kdc
+
+# Exit if the package is not installed.
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration if it is present.
+[ -r /etc/default/krb5-kdc ] && . /etc/default/krb5-kdc
+
+# Get the setting of VERBOSE and other rcS variables.
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+
+. /etc/init.d/functions
+
+# Return
+# 0 if daemon has been started
+# 1 if daemon was already running
+# 2 if daemon could not be started
+do_start_kdc()
+{
+ start-stop-daemon --start --quiet --startas $DAEMON --name $NAME --test \
+ > /dev/null || return 1
+ start-stop-daemon --start --quiet --startas $DAEMON --name $NAME \
+ -- $DAEMON_ARGS || return 2
+}
+
+
+# Return
+# 0 if daemon has been stopped
+# 1 if daemon was already stopped
+# 2 if daemon could not be stopped
+# other if a failure occurred
+do_stop_kdc()
+{
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ return "$RETVAL"
+}
+
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
+ do_start_kdc
+ case "$?" in
+ 0|1)
+ [ "$VERBOSE" != no ] && echo 0
+ ;;
+ 2)
+ [ "$VERBOSE" != no ] && echo 1
+ ;;
+ esac
+ ;;
+
+ stop)
+ [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
+ do_stop_kdc
+ case "$?" in
+ 0|1)
+ [ "$VERBOSE" != no ] && echo "krb524d"
+ ;;
+ 2)
+ [ "$VERBOSE" != no ] && echo 1
+ ;;
+ esac
+ ;;
+
+ restart|force-reload)
+ echo "Restarting $DESC" "$NAME"
+ do_stop_kdc
+ case "$?" in
+ 0|1)
+ do_start_kdc
+ case "$?" in
+ 0)
+ echo 0
+ ;;
+ 1|2)
+ echo 1
+ ;;
+ esac
+ ;;
+ *)
+ echo 1
+ ;;
+ esac
+ ;;
+
+ status)
+ pidofproc "$DAEMON" >/dev/null
+ status=$?
+ if [ $status -eq 0 ]; then
+ echo "$NAME is running."
+ else
+ echo "$NAME is not running."
+ fi
+ exit $status
+ ;;
+
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-admin-server.service b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-admin-server.service
new file mode 100644
index 000000000..21939a1f0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-admin-server.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=MIT Kerberos KDC administrative daemon
+After=syslog.target network.target
+ConditionPathExists=/etc/krb5.conf
+
+[Service]
+Type=forking
+ExecStartPre=/bin/sh -c "test ! -f /var/log/kadmind.log || test ! -x /sbin/restorecon || /sbin/restorecon -F /var/log/kadmind.log"
+ExecStart=/usr/sbin/kadmind
+EnvironmentFile=-/etc/default/krb5-admin-server
+SuccessExitStatus=1 2 SIGKILL
+TimeoutStopSec=30
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-kdc.service b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-kdc.service
new file mode 100644
index 000000000..bf37c45ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5/krb5-kdc.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=MIT Kerberos KDC
+After=syslog.target network.target
+ConditionPathExists=/etc/krb5.conf
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/krb5kdc
+EnvironmentFile=-/etc/default/krb5-kdc
+SuccessExitStatus=1 2 SIGKILL
+TimeoutStopSec=30
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb
new file mode 100644
index 000000000..f95240f54
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb
@@ -0,0 +1,188 @@
+SUMMARY = "A network authentication protocol"
+DESCRIPTION = "Kerberos is a system for authenticating users and services on a network. \
+ Kerberos is a trusted third-party service. That means that there is a \
+ third party (the Kerberos server) that is trusted by all the entities on \
+ the network (users and services, usually called "principals"). \
+ . \
+ This is the MIT reference implementation of Kerberos V5. \
+ . \
+ This package contains the Kerberos key server (KDC). The KDC manages all \
+ authentication credentials for a Kerberos realm, holds the master keys \
+ for the realm, and responds to authentication requests. This package \
+ should be installed on both master and slave KDCs."
+
+HOMEPAGE = "http://web.mit.edu/Kerberos/"
+SECTION = "console/network"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${S}/../NOTICE;md5=59b8da652f07186b44782a8454574f30"
+DEPENDS = "ncurses util-linux e2fsprogs e2fsprogs-native openssl"
+
+inherit autotools-brokensep binconfig perlnative systemd update-rc.d
+
+SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+SRC_URI = "http://web.mit.edu/kerberos/dist/${BPN}/${SHRT_VER}/${BP}.tar.gz \
+ file://0001-aclocal-Add-parameter-to-disable-keyutils-detection.patch \
+ file://debian-suppress-usr-lib-in-krb5-config.patch;striplevel=2 \
+ file://crosscompile_nm.patch \
+ file://etc/init.d/krb5-kdc \
+ file://etc/init.d/krb5-admin-server \
+ file://etc/default/krb5-kdc \
+ file://etc/default/krb5-admin-server \
+ file://krb5-kdc.service \
+ file://krb5-admin-server.service \
+"
+SRC_URI[md5sum] = "23c5e9f07642db4a67f7a5b6168b1319"
+SRC_URI[sha256sum] = "faeb125f83b0fb4cdb2f99f088140631bb47d975982de0956d18c85842969e08"
+
+CVE_PRODUCT = "kerberos"
+
+S = "${WORKDIR}/${BP}/src"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libedit] = "--with-libedit,--without-libedit,libedit"
+PACKAGECONFIG[openssl] = "--with-crypto-impl=openssl,,openssl"
+PACKAGECONFIG[keyutils] = "--enable-keyutils,--disable-keyutils,keyutils"
+PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+
+EXTRA_OECONF += " --without-tcl --with-system-et --disable-rpath"
+CACHED_CONFIGUREVARS += "krb5_cv_attr_constructor_destructor=yes ac_cv_func_regcomp=yes \
+ ac_cv_printf_positional=yes ac_cv_file__etc_environment=yes \
+ ac_cv_file__etc_TIMEZONE=no"
+
+CFLAGS_append = " -fPIC -DDESTRUCTOR_ATTR_WORKS=1 -I${STAGING_INCDIR}/et"
+CFLAGS_append_riscv64 = " -D_REENTRANT -pthread"
+LDFLAGS_append = " -pthread"
+
+do_configure() {
+ gnu-configize --force
+ autoreconf
+ oe_runconf
+}
+
+do_install_append() {
+ rm -rf ${D}/${localstatedir}/run
+ rm -f ${D}${bindir}/sclient
+ rm -f ${D}${bindir}/sim_client
+ rm -f ${D}${bindir}/uuclient
+ rm -f ${D}${sbindir}/krb5-send-pr
+ rm -f ${D}${sbindir}/sim_server
+ rm -f ${D}${sbindir}/sserver
+ rm -f ${D}${sbindir}/uuserver
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ mkdir -p ${D}/${sysconfdir}/init.d ${D}/${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/etc/init.d/* ${D}/${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/etc/default/* ${D}/${sysconfdir}/default
+
+ mkdir -p ${D}/${sysconfdir}/default/volatiles
+ echo "d root root 0755 ${localstatedir}/run/krb5kdc none" \
+ > ${D}${sysconfdir}/default/volatiles/87_krb5
+
+ echo "RUN_KADMIND=true" >> ${D}/${sysconfdir}/default/krb5-admin-server
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/krb5kdc - - - -" \
+ > ${D}${sysconfdir}/tmpfiles.d/krb5.conf
+
+ mkdir -p ${D}/${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/etc/default/* ${D}/${sysconfdir}/default
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/krb5-admin-server.service ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/krb5-kdc.service ${D}${systemd_system_unitdir}
+ fi
+}
+
+PACKAGES =+ "${PN}-admin-server \
+ ${PN}-gss-samples \
+ ${PN}-k5tls \
+ ${PN}-kdc \
+ ${PN}-kdc-ldap \
+ ${PN}-kpropd \
+ ${PN}-otp \
+ ${PN}-pkinit \
+ ${PN}-user \
+ libgssapi-krb5 \
+ libgssrpc \
+ libk5crypto \
+ libkadm5clnt-mit \
+ libkadm5srv-mit \
+ libkdb5 \
+ libkrad \
+ libkrb5 \
+ libkrb5support \
+ libverto"
+
+FILES_${PN} = "${libdir}/krb5/plugins/preauth/test.so"
+FILES_${PN}-doc += "${datadir}/examples"
+FILES_${PN}-dbg += "${libdir}/krb5/plugins/*/.debug"
+
+FILES_${PN}-admin-server = "${sbindir}/kadmin.local \
+ ${sbindir}/kadmind \
+ ${sbindir}/kprop \
+ ${sysconfdir}/default/krb5-admin-server \
+ ${sysconfdir}/init.d/krb5-admin-server \
+ ${systemd_system_unitdir}/krb5-admin-server.service"
+
+FILES_${PN}-gss-samples = "${bindir}/gss-client \
+ ${sbindir}/gss-server"
+
+FILES_${PN}-k5tls = "${libdir}/krb5/plugins/tls/k5tls.so"
+
+FILES_${PN}-kdc = "${libdir}/krb5/plugins/kdb/db2.so \
+ ${localstatedir}/krb5kdc \
+ ${sbindir}/kdb5_util \
+ ${sbindir}/kproplog \
+ ${sbindir}/krb5kdc \
+ ${sysconfdir}/default/krb5-kdc \
+ ${sysconfdir}/default/volatiles/87_krb5 \
+ ${sysconfdir}/init.d/krb5-kdc \
+ ${sysconfdir}/tmpfiles.d/krb5.conf \
+ ${systemd_system_unitdir}/krb5-kdc.service"
+
+FILES_${PN}-kdc-ldap = "${libdir}/krb5/libkdb_ldap${SOLIBS} \
+ ${libdir}/krb5/plugins/kdb/kldap.so \
+ ${sbindir}/kdb5_ldap_util"
+
+FILES_${PN}-kpropd = "${sbindir}/kpropd"
+FILES_${PN}-otp = "${libdir}/krb5/plugins/preauth/otp.so"
+FILES_${PN}-pkinit = "${libdir}/krb5/plugins/preauth/pkinit.so"
+FILES_${PN}-user = "${bindir}/k*"
+
+FILES_libgssapi-krb5 = "${libdir}/libgssapi_krb5${SOLIBS}"
+FILES_libgssrpc = "${libdir}/libgssrpc${SOLIBS}"
+FILES_libk5crypto = "${libdir}/libk5crypto${SOLIBS}"
+FILES_libkadm5clnt-mit = "${libdir}/libkadm5clnt_mit${SOLIBS}"
+FILES_libkadm5srv-mit = "${libdir}/libkadm5srv_mit${SOLIBS}"
+FILES_libkdb5 = "${libdir}/libkdb5${SOLIBS}"
+FILES_libkrad = "${libdir}/libkrad${SOLIBS}"
+FILES_libkrb5 = "${libdir}/libkrb5${SOLIBS} \
+ ${libdir}/krb5/plugins/authdata \
+ ${libdir}/krb5/plugins/libkrb5"
+FILES_libkrb5support = "${libdir}/libkrb5support${SOLIBS}"
+FILES_libverto = "${libdir}/libverto${SOLIBS}"
+
+RDEPENDS_${PN}-kadmin-server = "${PN}-kdc"
+RDEPENDS_${PN}-kpropd = "${PN}-kdc"
+
+INITSCRIPT_PACKAGES = "${PN}-admin-server ${PN}-kdc"
+INITSCRIPT_NAME_${PN}-admin-server = "krb5-admin-server"
+INITSCRIPT_NAME_${PN}-kdc = "krb5-kdc"
+
+SYSTEMD_PACKAGES = "${PN}-admin-server ${PN}-kdc"
+SYSTEMD_SERVICE_${PN}-admin-server = "krb5-admin-server.service"
+SYSTEMD_SERVICE_${PN}-kdc = "krb5-kdc.service"
+
+pkg_postinst_${PN}-kdc () {
+ if [ -z "$D" ]; then
+ if command -v systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/krb5.conf
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb
new file mode 100644
index 000000000..5e0f3a5ed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A full-featured and high-performance event loop that is loosely \
+modelled after libevent."
+HOMEPAGE = "http://software.schmorp.de/pkg/libev.html"
+LICENSE = "BSD-2-Clause | GPL-2.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d6ad416afd040c90698edcdf1cbee347"
+
+SRC_URI = "http://dist.schmorp.de/libev/Attic/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "94459a5a22db041dec6f98424d6efe54"
+SRC_URI[sha256sum] = "973593d3479abdf657674a55afe5f78624b0e440614e2b8cb3a07f16d4d7f821"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit autotools
+
+EXTRA_OECONF += "--with-pic"
+
+do_install_append() {
+ # Avoid conflicting with libevent. The provided compatibility layer is
+ # still basic so drop it for now.
+ rm ${D}${includedir}/event.h
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/configure-fix-largefile.patch b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/configure-fix-largefile.patch
new file mode 100644
index 000000000..679a8b597
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/configure-fix-largefile.patch
@@ -0,0 +1,38 @@
+Fix configure error in large file checks on 64-bit architectures
+
+ configure:17888: checking for native large file support
+ configure:17891: error: in `/home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libimobiledevice/1.1.4-r0/libimobiledevice-1.1.4':
+ configure:17893: error: cannot run test program while cross compiling
+
+configure.ac was using AC_SYS_LARGEFILE macro as is typical, but then
+there was an extra runtime check added beyond that:
+check if off_t is 8 bytes (64 bits) long.
+If that runtime check passed, _FILE_OFFSET_BITS was defined as 64.
+
+Runtime checks need to go away for cross compiling, and luckily this extra
+check was not serving any useful purpose. Note that off_t was *already*
+64 bits, *without* setting _FILE_OFFSET_BITS, which makes _FILE_OFFSET_BITS
+unneeded for large file support.
+
+If AC_SYS_LARGEFILE macro sets ac_cv_sys_file_offset_bits=no,
+just leave _FILE_OFFSET_BITS undefined!
+
+--- libimobiledevice-1.1.4/configure.ac.old 2015-07-15 01:38:50.900143927 -0700
++++ libimobiledevice-1.1.4/configure.ac 2015-07-15 01:39:13.300144430 -0700
+@@ -174,16 +174,6 @@
+ if test "$enable_largefile" != no; then
+ if test "$ac_cv_sys_file_offset_bits" != 'no'; then
+ LFS_CFLAGS="$LFS_CFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+- else
+- AC_MSG_CHECKING(for native large file support)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([#include <unistd.h>
+- int main (int argc, char **argv)
+- {
+- exit(!(sizeof(off_t) == 8));
+- }])],
+- [ac_cv_sys_file_offset_bits=64; AC_DEFINE(_FILE_OFFSET_BITS,64)
+- AC_MSG_RESULT(yes)],
+- [AC_MSG_RESULT(no)])
+ fi
+ if test "$ac_cv_sys_large_files" != 'no'; then
+ LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES=1"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch
new file mode 100644
index 000000000..9a7895fd4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch
@@ -0,0 +1,31 @@
+Fix link error with gcc 5 toolchains
+
+ afc.c:258: error: undefined reference to 'debug_buffer'
+ collect2: error: ld returned 1 exit status
+
+debug.h header was declaring things inline without providing a definition.
+Files that included this header then failed to link against the corresponding
+external symbol in debug.c, because the linker took the 'inline' keyword
+seriously rather than ignoring it.
+
+--- libimobiledevice-1.1.4/src/debug.h.orig 2015-10-03 16:24:08.758740386 -0700
++++ libimobiledevice-1.1.4/src/debug.h 2015-10-03 16:24:22.706740355 -0700
+@@ -44,14 +44,14 @@
+ #define debug_plist(a)
+ #endif
+
+-LIBIMOBILEDEVICE_INTERNAL inline void debug_info_real(const char *func,
++LIBIMOBILEDEVICE_INTERNAL void debug_info_real(const char *func,
+ const char *file,
+ int line,
+ const char *format, ...);
+
+-LIBIMOBILEDEVICE_INTERNAL inline void debug_buffer(const char *data, const int length);
+-LIBIMOBILEDEVICE_INTERNAL inline void debug_buffer_to_file(const char *file, const char *data, const int length);
+-LIBIMOBILEDEVICE_INTERNAL inline void debug_plist_real(const char *func,
++LIBIMOBILEDEVICE_INTERNAL void debug_buffer(const char *data, const int length);
++LIBIMOBILEDEVICE_INTERNAL void debug_buffer_to_file(const char *file, const char *data, const int length);
++LIBIMOBILEDEVICE_INTERNAL void debug_plist_real(const char *func,
+ const char *file,
+ int line,
+ plist_t plist);
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb
new file mode 100644
index 000000000..32aca96fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb
@@ -0,0 +1,23 @@
+SUMMARY = "A protocol library to access an iPhone or iPod Touch in Linux"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
+ file://COPYING.LESSER;md5=6ab17b41640564434dda85c06b7124f7 \
+"
+
+HOMEPAGE ="http://www.libimobiledevice.org/"
+
+DEPENDS = "libplist usbmuxd libtasn1 gnutls libgcrypt"
+
+SRC_URI = " \
+ http://www.libimobiledevice.org/downloads/libimobiledevice-${PV}.tar.bz2 \
+ file://configure-fix-largefile.patch \
+ file://inline-without-definition.patch \
+"
+
+SRC_URI[md5sum] = "3f28cbc6a2e30d34685049c0abde5183"
+SRC_URI[sha256sum] = "67499cfaa6172f566ee6b0783605acffe484fb7ddc3b09881ab7ac58667ee5b8"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --without-cython "
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch
new file mode 100644
index 000000000..92e657c00
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch
@@ -0,0 +1,73 @@
+Check for clang compiler since we need to disable
+unused-function warning for clang, at same time
+pass werror when checking for compiler options if
+werror is enabled so spurious options do not get
+enabled. Only the ones that are supported by given
+compiler are accepted.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: libmbim-1.14.0/m4/compiler-warnings.m4
+===================================================================
+--- libmbim-1.14.0.orig/m4/compiler-warnings.m4
++++ libmbim-1.14.0/m4/compiler-warnings.m4
+@@ -2,10 +2,30 @@ AC_DEFUN([LIBMBIM_COMPILER_WARNINGS],
+ [AC_ARG_ENABLE(more-warnings,
+ AS_HELP_STRING([--enable-more-warnings], [Possible values: no/yes/error]),
+ set_more_warnings="$enableval",set_more_warnings=error)
++
++# Clang throws a lot of warnings when it does not understand a flag. Disable
++# this warning for now so other warnings are visible.
++AC_MSG_CHECKING([if compiling with clang])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
++#ifndef __clang__
++ not clang
++#endif
++ ]])],
++ [CLANG=yes],
++ [CLANG=no]
++)
++AC_MSG_RESULT([$CLANG])
++AS_IF([test "x$CLANG" = "xyes"], [CLANG_FLAGS=-Wno-error=unused-function])
++CFLAGS="$CFLAGS $CLANG_FLAGS"
++LDFLAGS="$LDFLAGS $CLANG_FLAGS"
++
+ AC_MSG_CHECKING(for more warnings)
+ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
+ AC_MSG_RESULT(yes)
+ CFLAGS="-Wall -std=gnu89 $CFLAGS"
++ if test "x$set_more_warnings" = xerror; then
++ WERROR="-Werror"
++ fi
+
+ for option in -Wmissing-declarations -Wmissing-prototypes \
+ -Wdeclaration-after-statement -Wstrict-prototypes \
+@@ -17,22 +37,23 @@ if test "$GCC" = "yes" -a "$set_more_war
+ -Wmissing-include-dirs -Waggregate-return \
+ -Wformat-security; do
+ SAVE_CFLAGS="$CFLAGS"
+- CFLAGS="$CFLAGS $option"
++ CFLAGS="$CFLAGS $option $WERROR"
+ AC_MSG_CHECKING([whether gcc understands $option])
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ if test $has_option = no; then
+ CFLAGS="$SAVE_CFLAGS"
++ else
++ CFLAGS="$SAVE_CFLAGS $option"
+ fi
+ AC_MSG_RESULT($has_option)
+ unset has_option
+ unset SAVE_CFLAGS
+ done
++ CFLAGS="$CFLAGS $WERROR"
+ unset option
+- if test "x$set_more_warnings" = xerror; then
+- CFLAGS="$CFLAGS -Werror"
+- fi
++ unset WERROR
+ else
+ AC_MSG_RESULT(no)
+ fi
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb
new file mode 100644
index 000000000..f89ef9d57
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "libmbim is library for talking to WWAN devices by MBIM protocol"
+DESCRIPTION = "libmbim is a glib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libmbim/"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+"
+
+DEPENDS = "glib-2.0 glib-2.0-native libgudev"
+
+inherit autotools pkgconfig bash-completion
+
+SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
+ file://clang.patch \
+"
+SRC_URI[md5sum] = "2ed809e65c85353d3ab59e372890e549"
+SRC_URI[sha256sum] = "ca8d52a95a18cbabae8f15f83f1572316e888b6504f946e6645d24405127ab5b"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules
new file mode 100644
index 000000000..4cd27c762
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules
@@ -0,0 +1,999 @@
+# UDEV-style hotplug map for libmtp
+# Put this file in /etc/udev/rules.d
+
+ACTION!="add", GOTO="libmtp_rules_end"
+ENV{MAJOR}!="?*", GOTO="libmtp_rules_end"
+SUBSYSTEM=="usb", GOTO="libmtp_usb_rules"
+GOTO="libmtp_rules_end"
+
+LABEL="libmtp_usb_rules"
+
+# Some sensitive devices we surely don't wanna probe
+# Color instruments
+ATTR{idVendor}=="0670", GOTO="libmtp_rules_end"
+ATTR{idVendor}=="0765", GOTO="libmtp_rules_end"
+ATTR{idVendor}=="085c", GOTO="libmtp_rules_end"
+ATTR{idVendor}=="0971", GOTO="libmtp_rules_end"
+# Canon scanners that look like MTP devices (PID 0x22nn)
+ATTR{idVendor}=="04a9", ATTR{idProduct}=="22*", GOTO="libmtp_rules_end"
+# Canon digital camera (EOS 3D) that looks like MTP device (PID 0x3113)
+ATTR{idVendor}=="04a9", ATTR{idProduct}=="3113", GOTO="libmtp_rules_end"
+# Sensitive Atheros devices that look like MTP devices
+ATTR{idVendor}=="0cf3", GOTO="libmtp_rules_end"
+# Sensitive Atmel JTAG programmers
+ATTR{idVendor}=="03eb", GOTO="libmtp_rules_end"
+# Creative ZEN Vision
+ATTR{idVendor}=="041e", ATTR{idProduct}=="411f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative Portable Media Center
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4123", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Xtra (MTP mode)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4128", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Dell DJ (2nd generation)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="412f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Micro (MTP mode)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Touch (MTP mode)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4131", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Dell Dell Pocket DJ (MTP mode)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN MicroPhoto (alternate version)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Sleek (MTP mode)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN MicroPhoto
+ATTR{idVendor}=="041e", ATTR{idProduct}=="413c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Sleek Photo
+ATTR{idVendor}=="041e", ATTR{idProduct}=="413d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Vision:M
+ATTR{idVendor}=="041e", ATTR{idProduct}=="413e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN V
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4150", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Vision:M (DVP-HD0004)
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN V Plus
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4152", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Vision W
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN V 2GB
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN Mozaic
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN X-Fi
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4162", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Creative ZEN X-Fi 3
+ATTR{idVendor}=="041e", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# ZiiLABS Zii EGG
+ATTR{idVendor}=="041e", ATTR{idProduct}=="6000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-900
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="0409", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung I550W Phone
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="04a4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Jet S8000
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="4f1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-920 (501d)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="501d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-920 (5022)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-925GS
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5024", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-820
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="502e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-925(-GS)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="502f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-J70J
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5033", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-Z5
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="503c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-T7J
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5047", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-U2J (YP-U2JXB/XAA)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5054", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-F2J
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5057", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-K5
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="505a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-U3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="507d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-T9
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="507f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-K3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5081", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-P2
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5083", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-T10
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="508a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-S5
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="508b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-S3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5091", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-U4
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5093", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-R1
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="510f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-Q1
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-M1
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-P3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="511a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-Q2
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="511d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-U5
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5121", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-R0
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5125", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-Q3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YP-Z3
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung YH-999 Portable Media Center/SGH-A707/SGH-L760V/SGH-U900/Verizon Intensity/Fascinate
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="5a0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung M7600 Beat/GT-S8300T/SGH-F490/S8300
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6642", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung X830 Mobile Phone
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung U600 Mobile Phone
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6709", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung F250 Mobile Phone
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6727", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Juke (SCH-U470)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6734", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung GT-B2700
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6752", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung SAMSUNG Trance
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6763", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung GT-S8500
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6819", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Galaxy models (MTP+ADB)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Galaxy Y
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="685e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Galaxy models (MTP)
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Galaxy models Kies mode
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="6877", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung Vibrant SGH-T959/Captivate/Media player mode
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="68a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung GT-B2710/Xcover 271
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="68af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Samsung GT-S5230
+ATTR{idVendor}=="04e8", ATTR{idProduct}=="e20c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft/Intel Bandon Portable Media Center
+ATTR{idVendor}=="045e", ATTR{idProduct}=="00c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft Windows Phone
+ATTR{idVendor}=="045e", ATTR{idProduct}=="04ec", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft Windows MTP Simulator
+ATTR{idVendor}=="045e", ATTR{idProduct}=="0622", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft Zune HD
+ATTR{idVendor}=="045e", ATTR{idProduct}=="063e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft Kin 1
+ATTR{idVendor}=="045e", ATTR{idProduct}=="0640", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft/Sharp/nVidia Kin TwoM
+ATTR{idVendor}=="045e", ATTR{idProduct}=="0641", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Microsoft Zune
+ATTR{idVendor}=="045e", ATTR{idProduct}=="0710", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# JVC Alneo XA-HD500
+ATTR{idVendor}=="04f1", ATTR{idProduct}=="6105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips HDD6320/00 or HDD6330/17
+ATTR{idVendor}=="0471", ATTR{idProduct}=="014b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips HDD14XX,HDD1620 or HDD1630/17
+ATTR{idVendor}=="0471", ATTR{idProduct}=="014c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips HDD085/00 or HDD082/17
+ATTR{idVendor}=="0471", ATTR{idProduct}=="014d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA9200
+ATTR{idVendor}=="0471", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips SA1115/55
+ATTR{idVendor}=="0471", ATTR{idProduct}=="0164", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear Audio
+ATTR{idVendor}=="0471", ATTR{idProduct}=="0165", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips Shoqbox
+ATTR{idVendor}=="0471", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips PSA610
+ATTR{idVendor}=="0471", ATTR{idProduct}=="0181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips HDD6320
+ATTR{idVendor}=="0471", ATTR{idProduct}=="01eb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA6014/SA6015/SA6024/SA6025/SA6044/SA6045
+ATTR{idVendor}=="0471", ATTR{idProduct}=="084e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA5145
+ATTR{idVendor}=="0471", ATTR{idProduct}=="0857", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA6125/SA6145/SA6185
+ATTR{idVendor}=="0471", ATTR{idProduct}=="2002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA3345
+ATTR{idVendor}=="0471", ATTR{idProduct}=="2004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips SA5285
+ATTR{idVendor}=="0471", ATTR{idProduct}=="2022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear ViBE SA1VBE04
+ATTR{idVendor}=="0471", ATTR{idProduct}=="2075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear Muse
+ATTR{idVendor}=="0471", ATTR{idProduct}=="2077", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear ViBE SA1VBE04/08
+ATTR{idVendor}=="0471", ATTR{idProduct}=="207b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear Aria
+ATTR{idVendor}=="0471", ATTR{idProduct}=="207c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear SA1VBE08KX/78
+ATTR{idVendor}=="0471", ATTR{idProduct}=="208e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear VIBE SA2VBE[08|16]K/02
+ATTR{idVendor}=="0471", ATTR{idProduct}=="20b7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear Ariaz
+ATTR{idVendor}=="0471", ATTR{idProduct}=="20b9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips GoGear Vibe/02
+ATTR{idVendor}=="0471", ATTR{idProduct}=="20e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Philips PSA235
+ATTR{idVendor}=="0471", ATTR{idProduct}=="7e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A500 (ID1)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A500 (ID2)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A501
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3344", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A100 (ID1)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3348", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A100 (ID2)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3349", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A700
+ATTR{idVendor}=="0502", ATTR{idProduct}=="3378", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A200 (ID1)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="337c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A200 (ID2)
+ATTR{idVendor}=="0502", ATTR{idProduct}=="337d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer Iconia TAB A510
+ATTR{idVendor}=="0502", ATTR{idProduct}=="338a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Acer E350 Liquid Gallant Duo
+ATTR{idVendor}=="0502", ATTR{idProduct}=="33c3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa m230/m240
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7400", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa m200-tcc (MTP mode)
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7401", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa c150
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7410", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa e200/e250/e260/e270/e280
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7420", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa e260/e280 v2
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7422", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa m240/m250
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7430", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Clip
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7432", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Clip v2
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7434", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa c240/c250
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7450", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa c250 v2
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7452", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Express
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7460", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Connect
+ATTR{idVendor}=="0781", ATTR{idProduct}=="7480", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa View
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Fuze
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Fuze v2
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74c2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Clip+
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74d0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Fuze+
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74e0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SanDisk Sansa Clip Zip
+ATTR{idVendor}=="0781", ATTR{idProduct}=="74e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver H300 Series MTP
+ATTR{idVendor}=="1006", ATTR{idProduct}=="3004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver Portable Media Center
+ATTR{idVendor}=="1006", ATTR{idProduct}=="4002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver Portable Media Center
+ATTR{idVendor}=="1006", ATTR{idProduct}=="4003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T7 Volcano
+ATTR{idVendor}=="1042", ATTR{idProduct}=="1143", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver iFP-880
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T10
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1113", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T20 FM
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1114", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T20
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver U10
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1116", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T10a
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1117", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T20
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T30
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1119", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T10 2GB
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1120", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver N12
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1122", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver Clix2
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1126", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver Clix
+ATTR{idVendor}=="4102", ATTR{idProduct}=="112a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver X20
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T60
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1134", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver E100
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1141", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver E100 v2/Lplayer
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1142", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver Spinn
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1147", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver E50
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver T5
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver E30
+ATTR{idVendor}=="4102", ATTR{idProduct}=="1167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver H10 20GB
+ATTR{idVendor}=="4102", ATTR{idProduct}=="2101", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver H10 5GB
+ATTR{idVendor}=="4102", ATTR{idProduct}=="2102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# iRiver H10 5.6GB
+ATTR{idVendor}=="4102", ATTR{idProduct}=="2105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Dell, Inc DJ Itty
+ATTR{idVendor}=="413c", ATTR{idProduct}=="4500", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Dell, Inc Dell Streak 7
+ATTR{idVendor}=="413c", ATTR{idProduct}=="b10b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat MEGF-40
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat
+ATTR{idVendor}=="0930", ATTR{idProduct}=="000c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat P20
+ATTR{idVendor}=="0930", ATTR{idProduct}=="000f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat S
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat P10
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat V30
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0014", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat U
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat MEU202
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0018", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat T
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0019", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat MEU201
+ATTR{idVendor}=="0930", ATTR{idProduct}=="001a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Gigabeat MET401
+ATTR{idVendor}=="0930", ATTR{idProduct}=="001d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Excite AT300
+ATTR{idVendor}=="0930", ATTR{idProduct}=="0963", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Toshiba Thrive AT100/AT105
+ATTR{idVendor}=="0930", ATTR{idProduct}=="7100", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos Gmini XS100
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1207", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos XS202 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1208", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 104 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="120a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 204 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="120c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 404 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1301", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 404CAM (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 504 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 604 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 604WIFI (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="130b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 704 mobile dvr
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="130d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 704TV (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="130f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 405 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 605 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1313", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 605F (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1315", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 705 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1319", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos TV+ (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="131b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 105 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="131d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 405HDD (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1321", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 5 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1331", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 5 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1333", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 7 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos SPOD (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 5S IT (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1351", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 5H IT (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1357", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos Arnova Childpad
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1458", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 8o G9 (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1508", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 8o G9 Turbo (MTP mode)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1509", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 80G9
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1518", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 101 G9
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1528", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 101 G9 (v2)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1529", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 101 G9 Turbo 250 HD
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1538", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 101 G9 Turbo
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1539", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 70it2 (mode 1)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1568", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Archos 70it2 (mode 2)
+ATTR{idVendor}=="0e79", ATTR{idProduct}=="1569", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Dunlop MP3 player 1GB / EGOMAN MD223AFD
+ATTR{idVendor}=="10d6", ATTR{idProduct}=="2200", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Memorex or iRiver MMP 8585/8586 or iRiver E200
+ATTR{idVendor}=="10d6", ATTR{idProduct}=="2300", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sirius Stiletto
+ATTR{idVendor}=="18f6", ATTR{idProduct}=="0102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sirius Stiletto 2
+ATTR{idVendor}=="18f6", ATTR{idProduct}=="0110", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Canon Ixus Digital 700 (PTP/MTP mode)
+ATTR{idVendor}=="04a9", ATTR{idProduct}=="30f2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Canon PowerShot A640 (PTP/MTP mode)
+ATTR{idVendor}=="04a9", ATTR{idProduct}=="3139", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Canon PowerShot SX20IS (PTP/MTP mode)
+ATTR{idVendor}=="04a9", ATTR{idProduct}=="31e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N81 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="000a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 6120c Classic Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="002e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N96 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 6500c Classic Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="003c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 3110c Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="005f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 3109c Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0065", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5310 XpressMusic
+ATTR{idVendor}=="0421", ATTR{idProduct}=="006c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N95 Mobile Phone 8GB
+ATTR{idVendor}=="0421", ATTR{idProduct}=="006e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N82 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0074", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N78 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0079", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 6220 Classic
+ATTR{idVendor}=="0421", ATTR{idProduct}=="008d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N85 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0092", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 6210 Navigator
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0098", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E71
+ATTR{idVendor}=="0421", ATTR{idProduct}=="00e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E66
+ATTR{idVendor}=="0421", ATTR{idProduct}=="00e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5320 XpressMusic
+ATTR{idVendor}=="0421", ATTR{idProduct}=="00ea", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5800 XpressMusic
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0154", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5800 XpressMusic v2
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0155", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5800 XpressMusic v3
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0159", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E63
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0179", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N79
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E71x
+ATTR{idVendor}=="0421", ATTR{idProduct}=="01a1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E52
+ATTR{idVendor}=="0421", ATTR{idProduct}=="01cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 3710
+ATTR{idVendor}=="0421", ATTR{idProduct}=="01ee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N97-1
+ATTR{idVendor}=="0421", ATTR{idProduct}=="01f4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N97
+ATTR{idVendor}=="0421", ATTR{idProduct}=="01f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5130 XpressMusic
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0209", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E72
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0221", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5530
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N97 mini
+ATTR{idVendor}=="0421", ATTR{idProduct}=="026b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia X6
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0274", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 6600i
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0297", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 2710
+ATTR{idVendor}=="0421", ATTR{idProduct}=="02c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5230
+ATTR{idVendor}=="0421", ATTR{idProduct}=="02e2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N8
+ATTR{idVendor}=="0421", ATTR{idProduct}=="02fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N8 (Ovi mode)
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0302", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E7
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0334", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia E7 (Ovi mode)
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia C7
+ATTR{idVendor}=="0421", ATTR{idProduct}=="03c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia C7 (ID2)
+ATTR{idVendor}=="0421", ATTR{idProduct}=="03cd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N950
+ATTR{idVendor}=="0421", ATTR{idProduct}=="03d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 3250 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0462", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N93 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0478", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5500 Sport Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="047e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N91 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="0485", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5700 XpressMusic Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5300 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5200 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N73 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04d1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N75 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04e1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N93i Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N95 Mobile Phone
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N80 Internet Edition (Media Player)
+ATTR{idVendor}=="0421", ATTR{idProduct}=="04f1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia N9
+ATTR{idVendor}=="0421", ATTR{idProduct}=="051a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia 5530 Xpressmusic
+ATTR{idVendor}=="05c6", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nokia/Verizon 6205 Balboa/Verizon Music Phone
+ATTR{idVendor}=="05c6", ATTR{idProduct}=="3196", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Logik LOG DAX MP3 and DAB Player
+ATTR{idVendor}=="13d1", ATTR{idProduct}=="7002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Technika MP-709
+ATTR{idVendor}=="13d1", ATTR{idProduct}=="7017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson EM28 Series
+ATTR{idVendor}=="069b", ATTR{idProduct}=="0774", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson / RCA Opal / Lyra MC4002
+ATTR{idVendor}=="069b", ATTR{idProduct}=="0777", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson Lyra MC5104B (M51 Series)
+ATTR{idVendor}=="069b", ATTR{idProduct}=="077c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson RCA H106
+ATTR{idVendor}=="069b", ATTR{idProduct}=="301a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson scenium E308
+ATTR{idVendor}=="069b", ATTR{idProduct}=="3028", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Thomson / RCA Lyra HC308A
+ATTR{idVendor}=="069b", ATTR{idProduct}=="3035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# FOMA F903iX HIGH-SPEED
+ATTR{idVendor}=="04c5", ATTR{idProduct}=="1140", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# NormSoft, Inc. Pocket Tunes
+ATTR{idVendor}=="1703", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# NormSoft, Inc. Pocket Tunes 4
+ATTR{idVendor}=="1703", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# TrekStor Vibez 8/12GB
+ATTR{idVendor}=="066f", ATTR{idProduct}=="842a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Medion MD8333
+ATTR{idVendor}=="066f", ATTR{idProduct}=="8550", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Medion MD8333
+ATTR{idVendor}=="066f", ATTR{idProduct}=="8588", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Medion MD99000 (P9514)/Olivetti Olipad 110
+ATTR{idVendor}=="0408", ATTR{idProduct}=="b009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Medion Lifetab P9514
+ATTR{idVendor}=="0408", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Maxfield G-Flash NG 1GB
+ATTR{idVendor}=="066f", ATTR{idProduct}=="846c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SigmaTel Inc. MTPMSCN Audio Player
+ATTR{idVendor}=="066f", ATTR{idProduct}=="a010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# TrekStor i.Beat Sweez FM
+ATTR{idVendor}=="0402", ATTR{idProduct}=="0611", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# TrekStor i.Beat Organix 2.0
+ATTR{idVendor}=="1e68", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Disney MixMax
+ATTR{idVendor}=="0aa6", ATTR{idProduct}=="6021", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Tevion MD 81488
+ATTR{idVendor}=="0aa6", ATTR{idProduct}=="3011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# MyMusix PD-6070
+ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9601", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio U3 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0701", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio 6 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0711", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio 7 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0751", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio U5 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0761", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio D2 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0801", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio D2+ FW 2.x (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0861", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio D2+ DAB FW 4.x (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0871", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio D2+ FW 3.x (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0881", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio D2+ DMB FW 1.x (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0891", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio S9 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0901", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio 9 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0911", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio J3 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0921", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio X7 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0931", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio C2 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0941", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Cowon iAudio 10 (MTP mode)
+ATTR{idVendor}=="0e21", ATTR{idProduct}=="0952", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Insignia NS-DV45
+ATTR{idVendor}=="19ff", ATTR{idProduct}=="0303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Insignia Sport Player
+ATTR{idVendor}=="19ff", ATTR{idProduct}=="0307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Insignia Pilot 4GB
+ATTR{idVendor}=="19ff", ATTR{idProduct}=="0309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. T54
+ATTR{idVendor}=="043e", ATTR{idProduct}=="7040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. UP3
+ATTR{idVendor}=="043e", ATTR{idProduct}=="70b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. VX8550 V CAST Mobile Phone
+ATTR{idVendor}=="1004", ATTR{idProduct}=="6010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. KC910 Renoir Mobile Phone
+ATTR{idVendor}=="1004", ATTR{idProduct}=="608f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. GR-500 Music Player
+ATTR{idVendor}=="1004", ATTR{idProduct}=="611b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. KM900
+ATTR{idVendor}=="1004", ATTR{idProduct}=="6132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. LG8575
+ATTR{idVendor}=="1004", ATTR{idProduct}=="619a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. V909 G-Slate
+ATTR{idVendor}=="1004", ATTR{idProduct}=="61f9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# LG Electronics Inc. LG-E617G/P700
+ATTR{idVendor}=="1004", ATTR{idProduct}=="631c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-A815/NWZ-A818
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S516
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0326", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S615F/NWZ-S616F/NWZ-S618F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0327", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S716F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="035a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-A826/NWZ-A828/NWZ-A829
+ATTR{idVendor}=="054c", ATTR{idProduct}=="035b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-A726/NWZ-A728/NWZ-A768
+ATTR{idVendor}=="054c", ATTR{idProduct}=="035c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-B135
+ATTR{idVendor}=="054c", ATTR{idProduct}=="036e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-E436F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0385", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-W202
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0388", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S739F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="038c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S638F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="038e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-X1050B/NWZ-X1060B
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0397", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-X1051/NWZ-X1061
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0398", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-B142F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="03d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-E344
+ATTR{idVendor}=="054c", ATTR{idProduct}=="03fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-E445
+ATTR{idVendor}=="054c", ATTR{idProduct}=="03fd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S545
+ATTR{idVendor}=="054c", ATTR{idProduct}=="03fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-A845
+ATTR{idVendor}=="054c", ATTR{idProduct}=="0404", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-W252B
+ATTR{idVendor}=="054c", ATTR{idProduct}=="04bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-B153F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-E354
+ATTR{idVendor}=="054c", ATTR{idProduct}=="04cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-S754
+ATTR{idVendor}=="054c", ATTR{idProduct}=="04cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony NWZ-B163F
+ATTR{idVendor}=="054c", ATTR{idProduct}=="059a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Walkman NWZ-E464
+ATTR{idVendor}=="054c", ATTR{idProduct}=="05a6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony NWZ-S765
+ATTR{idVendor}=="054c", ATTR{idProduct}=="05a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Sony Tablet S
+ATTR{idVendor}=="054c", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony Sony Tablet S1
+ATTR{idVendor}=="054c", ATTR{idProduct}=="05b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Sony DCR-SR75
+ATTR{idVendor}=="054c", ATTR{idProduct}=="1294", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson K850i
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W910
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0076", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W890i
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W760i
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00c6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson C902
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson C702
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W980
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson C905
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W595
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W902
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson T700
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="00fb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W705/W715
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W995
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0112", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson U5
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson U8i
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="013a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson j10i2 (Elm)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson j108i (Cedar)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="014e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson W302
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="10c8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson j10i (Elm)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="d144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson K550i
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="e000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson LT15i (Xperia arc S)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson MT11i Xperia Neo
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson MK16i Xperia
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="015a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST18a Xperia Ray
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson SK17i Xperia Mini Pro
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST15i Xperia Mini
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST17i Xperia Active
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26i Xperia S
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY WT19i Live Walkman
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="016d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST21i Xperia Tipo
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST15i Xperia U
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT22i Xperia P
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26w Xperia Acro S
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="0176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST17i Xperia Active (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26i Xperia S (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST21i Xperia Tipo (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST25i Xperia U (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT22i Xperia P (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26w Xperia Acro S (MTP+UMS mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="4176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson LT15i Xperia Arc (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="514f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson MT11i Xperia Neo (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST17i Xperia Active (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26i Xperia S (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson MK16i Xperia (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="515a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST18i Xperia Ray (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson SK17i Xperia Mini Pro (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson ST15i Xperia Mini (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SonyEricsson SK17i Xperia Mini Pro (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="516d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST21i Xperia Tipo (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST25i Xperia U (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT22i Xperia P (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY LT26w Xperia Acro S (MTP+ADB mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="5176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY MT27i Xperia Sola (MTP+UMS+? mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="a173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# SONY ST27i Xperia Go (MTP+UMS+? mode)
+ATTR{idVendor}=="0fce", ATTR{idProduct}=="a17e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola V3m/V750 verizon
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="2a65", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Xoom 2 Media Edition (ID2)
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="41cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Droid X/MB525 (Defy)
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="41d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Milestone / Verizon Droid
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="41dc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola DROID2
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="42a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Xoom 2 Media Edition
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="4311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola XT912/XT928
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="4362", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola DROID4
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="437f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola IdeaPad K1
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="4811", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola A1200
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="60ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola MTP Test Command Interface
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="6413", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola RAZR2 V8/U9/Z6
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="6415", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Xoom (Factory test)
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Xoom (MTP)
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Xoom (MTP+ADB)
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Motorola Milestone X2
+ATTR{idVendor}=="22b8", ATTR{idProduct}=="70ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Sony) S1
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Barnes & Noble) Nook Color
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="2d02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Asus) TF101 Transformer
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Samsung) Nexus S
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e21", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Asus) Nexus 7 (MTP)
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e41", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Asus) Nexus 7 (MTP+ADB)
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Motorola) Xoom (MZ604)
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Toshiba) Thrive 7/AT105
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="7102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Lenovo) Ideapad K1
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for Medion) MD99000 (P9514)
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for LG Electronics) P990/Optimus (Cyanogen)
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="d109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Google Inc (for LG Electronics) P990/Optimus
+ATTR{idVendor}=="18d1", ATTR{idProduct}=="d10a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Kenwood Media Keg HD10GB7 Sport Player
+ATTR{idVendor}=="0b28", ATTR{idProduct}=="100c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Micro-Star International P610/Model MS-5557
+ATTR{idVendor}=="0db0", ATTR{idProduct}=="5572", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# FOMA D905i
+ATTR{idVendor}=="06d3", ATTR{idProduct}=="21ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Haier Ibiza Rhapsody
+ATTR{idVendor}=="1302", ATTR{idProduct}=="1016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Haier Ibiza Rhapsody
+ATTR{idVendor}=="1302", ATTR{idProduct}=="1017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Panasonic P905i
+ATTR{idVendor}=="04da", ATTR{idProduct}=="2145", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Panasonic P906i
+ATTR{idVendor}=="04da", ATTR{idProduct}=="2158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Polaroid Freescape/MPU-433158
+ATTR{idVendor}=="0546", ATTR{idProduct}=="2035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Pioneer XMP3
+ATTR{idVendor}=="08e4", ATTR{idProduct}=="0148", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Slacker Inc. Slacker Portable Media Player
+ATTR{idVendor}=="1bdc", ATTR{idProduct}=="fabf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Conceptronic CMTD2
+ATTR{idVendor}=="1e53", ATTR{idProduct}=="0005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# O2 Sistemas ZoltarTV
+ATTR{idVendor}=="1e53", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Wyplay Wyplayer
+ATTR{idVendor}=="1e53", ATTR{idProduct}=="0007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Perception Digital, Ltd Gigaware GX400
+ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# RIM BlackBerry Storm/9650
+ATTR{idVendor}=="0fca", ATTR{idProduct}=="8007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Nextar MA715A-8R
+ATTR{idVendor}=="0402", ATTR{idProduct}=="5668", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Coby COBY MP705
+ATTR{idVendor}=="1e74", ATTR{idProduct}=="6512", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPhone
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1290", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPod Touch 1st Gen
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1291", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPhone 3G
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1292", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPod Touch 2nd Gen
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1293", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPhone 3GS
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1294", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple 0x1296
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1296", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple 0x1297
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1297", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple 0x1298
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1298", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPod Touch 3rd Gen
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="1299", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Apple iPad
+ATTR{idVendor}=="05ac", ATTR{idProduct}=="129a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Curitel Communications, Inc. Verizon Wireless Device
+ATTR{idVendor}=="106c", ATTR{idProduct}=="3215", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Pantech Crux
+ATTR{idVendor}=="106c", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF300 Transformer
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c80", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF300 Transformer (USB debug mode)
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c81", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF700 Transformer
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c90", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF201 Transformer Prime (keyboard dock)
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF201 Transformer Prime (tablet only)
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TFXXX Transformer Prime (unknown version)
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d04", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF101 Eeepad Slider
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF101 Eeepad Transformer
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Asus TF101 Eeepad Transformer (debug mode)
+ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Lenovo K1
+ATTR{idVendor}=="17ef", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Lenovo ThinkPad Tablet
+ATTR{idVendor}=="17ef", ATTR{idProduct}=="741c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Lenovo P700
+ATTR{idVendor}=="17ef", ATTR{idProduct}=="7497", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Lenovo Lifetab S9512
+ATTR{idVendor}=="17ef", ATTR{idProduct}=="74cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Huawei Honor U8860
+ATTR{idVendor}=="12d1", ATTR{idProduct}=="1051", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Huawei Mediapad (mode 0)
+ATTR{idVendor}=="12d1", ATTR{idProduct}=="360f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Huawei Mediapad (mode 1)
+ATTR{idVendor}=="12d1", ATTR{idProduct}=="361f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# ZTE V55 ID 1
+ATTR{idVendor}=="19d2", ATTR{idProduct}=="0244", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# ZTE V55 ID 2
+ATTR{idVendor}=="19d2", ATTR{idProduct}=="0245", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# HTC Zopo ZP100 (ID1)
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# HTC EVO 4G LTE
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c93", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# HTC EVO 4G LTE (second ID)
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ca8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Hewlett-Packard HP Touchpad
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Hewlett-Packard HP Touchpad (debug mode)
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# HTC Zopo ZP100 (ID2)
+ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# NEC FOMA N01A
+ATTR{idVendor}=="0409", ATTR{idProduct}=="0242", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# nVidia CM9-Adam
+ATTR{idVendor}=="0955", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Vizio VTAB1008
+ATTR{idVendor}=="0489", ATTR{idProduct}=="e040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Various Viewpia DR/bq Kepler
+ATTR{idVendor}=="2207", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+# Isabella Her Prototype
+ATTR{idVendor}=="0b20", ATTR{idProduct}=="ddee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+
+# Autoprobe vendor-specific, communication and PTP devices
+ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceClass}=="00|02|06|ef|ff", PROGRAM="mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
+
+LABEL="libmtp_rules_end"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch
new file mode 100644
index 000000000..38b45c2a9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch
@@ -0,0 +1,36 @@
+
+Include config.h so we get the defines available for subsequent
+include files
+
+Fixes errors like
+
+| In file included from /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/sysroots/beaglebone/usr/include/string.h:634:0,
+| from /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.c:36:
+| /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.h:29:7: error: expected identifier or '(' before '__extension
+__'
+| char *strndup (const char *s, size_t n);
+| ^
+| /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.c:111:7: error: expected identifier or '(' before '__extensio
+n__'
+| char *strndup (const char *s, size_t n)
+| ^
+| make[2]: *** [libmtp_la-util.lo] Error 1
+
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Pending
+
+Index: libmtp-1.1.5/src/util.c
+===================================================================
+--- libmtp-1.1.5.orig/src/util.c 2011-01-10 05:37:21.000000000 -0800
++++ libmtp-1.1.5/src/util.c 2014-09-03 23:50:44.703563888 -0700
+@@ -22,6 +22,8 @@
+ * Boston, MA 02111-1307, USA.
+ */
+
++#include "config.h"
++
+ /* MSVC does not have these */
+ #ifndef _MSC_VER
+ #include <sys/time.h>
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb
new file mode 100644
index 000000000..798b1707d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb
@@ -0,0 +1,58 @@
+# TODO: include debian's mtp-tools man page (needs xsltproc-native and
+# docbook-xsl-native, or we pregenerate it), add support for doxygen
+# generation fully with -natives
+DESCRIPTION = "libmtp is an Initiator implementation of the Media Transfer \
+Protocol (MTP) in the form of a library suitable primarily for POSIX \
+compliant operating systems"
+SUMMARY = "libmtp is an Initiator implementation of the Media Transfer Protocol (MTP)"
+HOMEPAGE = "http://libmtp.sourceforge.net/"
+LICENSE = "LGPL-2.1+"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=0448d3676bc0de00406af227d341a4d1 \
+ file://src/ptp.c;beginline=3;endline=22;md5=dafe6cfd1782f56471bb94ab06624c1f \
+ file://examples/albums.c;beginline=5;endline=21;md5=84f4e55dfec49e898b7f68a828c15620 \
+"
+
+DEPENDS += "libusb1 gettext-native"
+
+SCM_URI = "git://git.code.sf.net/p/libmtp/code"
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+ file://69-libmtp.rules \
+ file://glibc-2.20.patch \
+"
+SRC_URI[md5sum] = "f80e45c0e6e5798c434bb1c26a7b602d"
+SRC_URI[sha256sum] = "787679171baf8b3cf2fcc03196c705ab4d7cbc969bd71f9d3696be1ce7f1c63a"
+
+# Currently we use a pregenerated rules file produced by mtp-hotplug, rather
+# than having to depend upon libmtp-native or run mtp-hotplug in a postinst.
+do_unpack[vardeps] += "skip_udev_rules_generation"
+do_unpack[postfuncs] += "skip_udev_rules_generation"
+
+skip_udev_rules_generation () {
+ sed -i -e '/^noinst_DATA=/,/util\/mtp-hotplug -H/d' ${S}/Makefile.am
+ cp ${WORKDIR}/69-libmtp.rules ${S}/
+}
+
+inherit autotools pkgconfig lib_package
+
+EXTRA_OECONF += "--disable-rpath"
+
+PACKAGECONFIG ?= "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'largefile$', 'largefile', '', d)} \
+"
+PACKAGECONFIG[doxygen] = "--enable-doxygen,--disable-doxygen"
+PACKAGECONFIG[largefile] = "--enable-largefile,--disable-largefile"
+PACKAGECONFIG[mtpz] = "--enable-mtpz,--disable-mtpz,libgcrypt"
+
+PACKAGES =+ "libmtp-common libmtp-runtime"
+
+RDEPENDS_${PN} += "libmtp-common"
+RRECOMMENDS_${PN} += "libmtp-runtime ${PN}-bin"
+FILES_${PN}-dbg += "${nonarch_base_libdir}/udev/.debug/*"
+FILES_libmtp-common = "${nonarch_base_libdir}/udev/rules.d/*"
+SUMMARY_libmtp-common = "The udev rules file for MTP devices"
+FILES_libmtp-runtime = "${nonarch_base_libdir}/udev/mtp-probe"
+DEPENDS_libmtp-runtime = "libmtp-common"
+SUMMARY_libmtp-runtime = "mtp-probe, used for the MTP udev rules"
+DESCRIPTION_libmtp-runtime = "This package provides mtp-probe, a program to probe newly connected device interfaces from userspace to determine if they are MTP devices, used for udev rules."
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch
new file mode 100644
index 000000000..15aa94e2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch
@@ -0,0 +1,25 @@
+From 94e9a082d76414f82794b0c9817d0c24e3868275 Mon Sep 17 00:00:00 2001
+From: Kylie McClain <somasis@exherbo.org>
+Date: Sat, 21 May 2016 21:24:36 -0400
+Subject: [PATCH] ndptool: Fix compilation on musl libc
+
+FD_ZERO, fd_set, etc are defined within sys/select.h on musl.
+
+Signed-off-by: Kylie McClain <somasis@exherbo.org>
+Signed-off-by: Jiri Pirko <jiri@mellanox.com>
+---
+ utils/ndptool.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/utils/ndptool.c b/utils/ndptool.c
+index 1d96f4c..96479fa 100644
+--- a/utils/ndptool.c
++++ b/utils/ndptool.c
+@@ -28,6 +28,7 @@
+ #include <arpa/inet.h>
+ #include <errno.h>
+ #include <ndp.h>
++#include <sys/select.h>
+
+ enum verbosity_level {
+ VERB1,
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb
new file mode 100644
index 000000000..5148798ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Library for IPv6 Neighbor Discovery Protocol"
+HOMEPAGE = "http://libndp.org/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/jpirko/libndp \
+ file://0001-include-sys-select.h-for-fd_-definitions.patch \
+ "
+# tag for v1.6
+SRCREV = "2f721c4ff519f38f46695a60d9f9d88f35bf3c1d"
+S = "${WORKDIR}/git"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet/0001-Support-musl-libc-remove-support-for-glibc-2.1.patch b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet/0001-Support-musl-libc-remove-support-for-glibc-2.1.patch
new file mode 100644
index 000000000..98008dba9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet/0001-Support-musl-libc-remove-support-for-glibc-2.1.patch
@@ -0,0 +1,58 @@
+From ffd7fab744a9ad2893169a8fb6244074604d5d0d Mon Sep 17 00:00:00 2001
+From: rofl0r <retnyg@gmx.net>
+Date: Tue, 12 Aug 2014 21:51:39 +0200
+Subject: [PATCH] Support musl libc, remove support for glibc < 2.1
+
+Upstream-Status: Backport
+
+The workarounds for glibc < 2.1 (was released february 1999) break the
+build with musl libc.
+
+It is very unlikely that 2.0 or earlier is still in use, and if so,
+1) that's a big security hole
+2) code wouldnt compile anyway since noone tested build in the last decade
+3) user of it wouldn't expect anyway to get bleeding edge sw built on it,
+ so he would just use the latest version that works for him.
+
+Closes #52
+
+Signed-off-by: rofl0r <retnyg@gmx.net>
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+---
+ libnet/src/libnet_link_linux.c | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+diff --git a/src/libnet_link_linux.c b/src/libnet_link_linux.c
+index 054458d..3c6df3c 100644
+--- a/src/libnet_link_linux.c
++++ b/src/libnet_link_linux.c
+@@ -30,26 +30,15 @@
+ #include <sys/time.h>
+
+ #include <net/if.h>
+-#if (__GLIBC__)
+ #include <netinet/if_ether.h>
+ #include <net/if_arp.h>
+-#else
+-#include <linux/if_arp.h>
+-#include <linux/if_ether.h>
+-#endif
+
+ #if (HAVE_PACKET_SOCKET)
+ #ifndef SOL_PACKET
+ #define SOL_PACKET 263
+ #endif /* SOL_PACKET */
+-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
+ #include <netpacket/packet.h>
+ #include <net/ethernet.h> /* the L2 protocols */
+-#else
+-#include <asm/types.h>
+-#include <linux/if_packet.h>
+-#include <linux/if_ether.h> /* The L2 protocols */
+-#endif
+ #endif /* HAVE_PACKET_SOCKET */
+
+ #include "../include/libnet.h"
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb
new file mode 100644
index 000000000..dfc204960
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A packet dissection and creation library"
+# libnet at packetfactory.net is dead
+HOMEPAGE = "https://github.com/sam-github/libnet"
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=3ec839e00408b484d33b472a86b7c266"
+DEPENDS = "libpcap"
+# There are major API changes beween libnet v1.0 and libnet v1.1
+PROVIDES = "libnet-1.2rc2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libnet-dev/${BPN}-${PV}.tar.gz \
+ file://0001-Support-musl-libc-remove-support-for-glibc-2.1.patch \
+ "
+
+SRC_URI[md5sum] = "f051e6e5bdecddb90f77c701c2ca1804"
+SRC_URI[sha256sum] = "72c380785ad44183005e654b47cc12485ee0228d7fa6b0a87109ff7614be4a63"
+
+S = "${WORKDIR}/${BPN}-${PV}"
+
+inherit autotools binconfig
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-Detect-clang.patch b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-Detect-clang.patch
new file mode 100644
index 000000000..7a3429b9d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-Detect-clang.patch
@@ -0,0 +1,85 @@
+From 4cfb728804157e8f3c69e11ba4df449d8f76388f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Oct 2016 04:42:26 +0000
+Subject: [PATCH] Detect clang
+
+Check for clang compiler since we need to disable
+unused-function warning for clang, at same time
+pass werror when checking for compiler options if
+werror is enabled so spurious options do not get
+enabled. Only the ones that are supported by given
+compiler are accepted.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+---
+ m4/compiler-warnings.m4 | 29 +++++++++++++++++++++++++----
+ 1 file changed, 25 insertions(+), 4 deletions(-)
+
+diff --git a/m4/compiler-warnings.m4 b/m4/compiler-warnings.m4
+index de4a8b0..e4ba718 100644
+--- a/m4/compiler-warnings.m4
++++ b/m4/compiler-warnings.m4
+@@ -2,10 +2,30 @@ AC_DEFUN([LIBQMI_COMPILER_WARNINGS],
+ [AC_ARG_ENABLE(more-warnings,
+ AS_HELP_STRING([--enable-more-warnings], [Possible values: no/yes/error]),
+ set_more_warnings="$enableval",set_more_warnings=error)
++
++# Clang throws a lot of warnings when it does not understand a flag. Disable
++# this warning for now so other warnings are visible.
++AC_MSG_CHECKING([if compiling with clang])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
++#ifndef __clang__
++ not clang
++#endif
++ ]])],
++ [CLANG=yes],
++ [CLANG=no]
++)
++AC_MSG_RESULT([$CLANG])
++AS_IF([test "x$CLANG" = "xyes"], [CLANG_FLAGS=-Wno-error=unused-function])
++CFLAGS="$CFLAGS $CLANG_FLAGS"
++LDFLAGS="$LDFLAGS $CLANG_FLAGS"
++
+ AC_MSG_CHECKING(for more warnings)
+ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
+ AC_MSG_RESULT(yes)
+ CFLAGS="-Wall -std=gnu89 $CFLAGS"
++ if test "x$set_more_warnings" = xerror; then
++ WERROR="-Werror"
++ fi
+
+ for option in -Wmissing-declarations -Wmissing-prototypes \
+ -Wdeclaration-after-statement -Wstrict-prototypes \
+@@ -17,22 +37,23 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
+ -Wmissing-include-dirs -Waggregate-return \
+ -Wformat-security -Wtype-limits; do
+ SAVE_CFLAGS="$CFLAGS"
+- CFLAGS="$CFLAGS $option"
++ CFLAGS="$CFLAGS $option $WERROR"
+ AC_MSG_CHECKING([whether gcc understands $option])
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ if test $has_option = no; then
+ CFLAGS="$SAVE_CFLAGS"
++ else
++ CFLAGS="$SAVE_CFLAGS $option"
+ fi
+ AC_MSG_RESULT($has_option)
+ unset has_option
+ unset SAVE_CFLAGS
+ done
++ CFLAGS="$CFLAGS $WERROR"
+ unset option
+- if test "x$set_more_warnings" = xerror; then
+- CFLAGS="$CFLAGS -Werror"
+- fi
++ unset WERROR
+ else
+ AC_MSG_RESULT(no)
+ fi
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb
new file mode 100644
index 000000000..9301cbd5e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "libqmi is a library for talking to WWAN devices by QMI protocol"
+DESCRIPTION = "libqmi is a glib-based library for talking to WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libqmi"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+"
+
+DEPENDS = "glib-2.0 libgudev libmbim glib-2.0-native"
+
+inherit autotools pkgconfig bash-completion
+
+SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
+ file://0001-Detect-clang.patch \
+ "
+SRC_URI[md5sum] = "797e365521df76b77b067e6317618b41"
+SRC_URI[sha256sum] = "21428cd3749c56246565123f707fee51238651a22c60bdc85ebce97388626eb4"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch
new file mode 100644
index 000000000..4d0979710
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch
@@ -0,0 +1,30 @@
+From c9859a38a58996b8767a30e14febc03845f66f95 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Jul 2017 13:10:53 -0700
+Subject: [PATCH] Define 64bit atomic helpers for ppc 32-bit
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/atomic64.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/atomic64.c b/src/atomic64.c
+index f841b39b..35c7c9d8 100644
+--- a/src/atomic64.c
++++ b/src/atomic64.c
+@@ -18,10 +18,10 @@
+ #include <stdbool.h>
+
+ /*
+- * only need these on MIPS, since it lacks hardware 64-bit atomics,
++ * only need these on MIPS & PPC32, since it lacks hardware 64-bit atomics,
+ * unlike x86 and ARM.
+ */
+-#if defined(__mips__) || defined(__mipsel__)
++#if defined(__mips__) || defined(__mipsel__) || defined(__powerpc__)
+
+ static void __spin_lock(volatile int *lock) {
+ while (__sync_lock_test_and_set(lock, 1))
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-implement-64bit-atomic-for-mips.patch b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-implement-64bit-atomic-for-mips.patch
new file mode 100644
index 000000000..84e0772a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/0001-implement-64bit-atomic-for-mips.patch
@@ -0,0 +1,263 @@
+From d7b6df5808e7bef5930b61a82e880699a9f9e208 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Jun 2017 15:39:19 -0700
+Subject: [PATCH] implement 64bit atomic for mips
+
+GCC does not provide 64bit atomics for mips32
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/Makefile.am | 1 +
+ src/atomic64.c | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 229 insertions(+)
+ create mode 100644 src/atomic64.c
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 99aaace0..cbbbbee9 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -27,6 +27,7 @@ libtorrent_la_LIBADD = \
+ utils/libsub_utils.la
+
+ libtorrent_la_SOURCES = \
++ atomic64.c \
+ globals.cc \
+ globals.h \
+ manager.cc \
+diff --git a/src/atomic64.c b/src/atomic64.c
+new file mode 100644
+index 00000000..f841b39b
+--- /dev/null
++++ b/src/atomic64.c
+@@ -0,0 +1,228 @@
++/*===----- atomic64.c - Support functions for 64-bit atomic operations.-----===
++ *
++ * The LLVM Compiler Infrastructure
++ *
++ * This file is dual licensed under the MIT and the University of Illinois Open
++ * Source Licenses. See LICENSE.TXT for details.
++ *
++ *===-----------------------------------------------------------------------===
++ *
++ * atomic64.c defines a set of functions for performing atomic accesses on
++ * 64-bit memory locations. It also implements spinlock synchronization
++ * operations.
++ *
++ *===-----------------------------------------------------------------------===
++ */
++
++#include <stdint.h>
++#include <stdbool.h>
++
++/*
++ * only need these on MIPS, since it lacks hardware 64-bit atomics,
++ * unlike x86 and ARM.
++ */
++#if defined(__mips__) || defined(__mipsel__)
++
++static void __spin_lock(volatile int *lock) {
++ while (__sync_lock_test_and_set(lock, 1))
++ while (*lock) {}
++}
++
++static void __spin_unlock(volatile int *lock) {
++ __sync_lock_release(lock);
++}
++
++/*
++ * Make sure the lock is on its own cache line to prevent false sharing.
++ * Put it inside a struct that is aligned and padded to the typical MIPS
++ * cacheline which is 32 bytes.
++ */
++static struct {
++ int lock;
++ char pad[32 - sizeof(int)];
++} __attribute__((aligned (32))) lock = { 0 };
++
++
++uint64_t __sync_fetch_and_add_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = ret + val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_fetch_and_sub_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = ret - val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_fetch_and_and_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = ret & val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_fetch_and_or_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = ret | val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_fetch_and_xor_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = ret ^ val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_add_and_fetch_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr + val;
++ *ptr = ret;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_sub_and_fetch_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr - val;
++ *ptr = ret;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_and_and_fetch_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr & val;
++ *ptr = ret;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_or_and_fetch_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr | val;
++ *ptr = ret;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_xor_and_fetch_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr ^ val;
++ *ptr = ret;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++bool __sync_bool_compare_and_swap_8(volatile uint64_t *ptr,
++ uint64_t oldval, uint64_t newval) {
++ bool ret = false;
++
++ __spin_lock(&lock.lock);
++
++ if (*ptr == oldval) {
++ *ptr = newval;
++ ret = true;
++ }
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_val_compare_and_swap_8(volatile uint64_t *ptr,
++ uint64_t oldval, uint64_t newval) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ if (ret == oldval)
++ *ptr = newval;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++uint64_t __sync_lock_test_and_set_8(volatile uint64_t *ptr, uint64_t val) {
++ uint64_t ret;
++
++ __spin_lock(&lock.lock);
++
++ ret = *ptr;
++ *ptr = val;
++
++ __spin_unlock(&lock.lock);
++
++ return ret;
++}
++
++void __sync_lock_release_8(volatile uint64_t *ptr) {
++ __spin_lock(&lock.lock);
++
++ *ptr = 0;
++
++ __spin_unlock(&lock.lock);
++}
++
++#endif
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch
new file mode 100644
index 000000000..79d4f29fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch
@@ -0,0 +1,94 @@
+Using AC_RUN_IFELSE prevent people from configuring package for
+cross-compiling. Don't run code while configuring package.
+
+Upstream-Status: Pending
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: libtorrent-0.13.3/scripts/checks.m4
+===================================================================
+--- libtorrent-0.13.3.orig/scripts/checks.m4 2012-05-14 14:17:04.000000000 +0300
++++ libtorrent-0.13.3/scripts/checks.m4 2013-02-10 15:28:37.414445524 +0200
+@@ -95,40 +95,6 @@
+
+ AC_DEFUN([TORRENT_CHECK_KQUEUE_SOCKET_ONLY], [
+ AC_MSG_CHECKING(whether kqueue supports pipes and ptys)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <fcntl.h>
+- #include <stdlib.h>
+- #include <unistd.h>
+- #include <sys/event.h>
+- #include <sys/time.h>
+- int main() {
+- struct kevent ev@<:@2@:>@, ev_out@<:@2@:>@;
+- struct timespec ts = { 0, 0 };
+- int pfd@<:@2@:>@, pty@<:@2@:>@, kfd, n;
+- char buffer@<:@9001@:>@;
+- if (pipe(pfd) == -1) return 1;
+- if (fcntl(pfd@<:@1@:>@, F_SETFL, O_NONBLOCK) == -1) return 2;
+- while ((n = write(pfd@<:@1@:>@, buffer, sizeof(buffer))) == sizeof(buffer));
+- if ((pty@<:@0@:>@=posix_openpt(O_RDWR | O_NOCTTY)) == -1) return 3;
+- if ((pty@<:@1@:>@=grantpt(pty@<:@0@:>@)) == -1) return 4;
+- EV_SET(ev+0, pfd@<:@1@:>@, EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, NULL);
+- EV_SET(ev+1, pty@<:@1@:>@, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL);
+- if ((kfd = kqueue()) == -1) return 5;
+- if ((n = kevent(kfd, ev, 2, NULL, 0, NULL)) == -1) return 6;
+- if (ev_out@<:@0@:>@.flags & EV_ERROR) return 7;
+- if (ev_out@<:@1@:>@.flags & EV_ERROR) return 8;
+- read(pfd@<:@0@:>@, buffer, sizeof(buffer));
+- if ((n = kevent(kfd, NULL, 0, ev_out, 2, &ts)) < 1) return 9;
+- return 0;
+- }
+- ])],
+- [
+- AC_MSG_RESULT(yes)
+- ], [
+- AC_DEFINE(KQUEUE_SOCKET_ONLY, 1, kqueue only supports sockets.)
+- AC_MSG_RESULT(no)
+- ])
+ ])
+
+ AC_DEFUN([TORRENT_WITH_KQUEUE], [
+Index: libtorrent-0.13.3/scripts/common.m4
+===================================================================
+--- libtorrent-0.13.3.orig/scripts/common.m4 2012-05-14 14:17:04.000000000 +0300
++++ libtorrent-0.13.3/scripts/common.m4 2013-02-10 15:27:55.874446741 +0200
+@@ -222,38 +222,10 @@
+
+ AC_DEFUN([TORRENT_CHECK_EXECINFO], [
+ AC_MSG_CHECKING(for execinfo.h)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <execinfo.h>
+- int main() { backtrace((void**)0, 0); backtrace_symbols((char**)0, 0); return 0;}
+- ])],
+- [
+- AC_MSG_RESULT(yes)
+- AC_DEFINE(USE_EXECINFO, 1, Use execinfo.h)
+- ], [
+- AC_MSG_RESULT(no)
+- ])
+ ])
+
+ AC_DEFUN([TORRENT_CHECK_ALIGNED], [
+ AC_MSG_CHECKING(the byte alignment)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <inttypes.h>
+- int main() {
+- char buf@<:@8@:>@ = { 0, 0, 0, 0, 1, 0, 0, 0 };
+- int i;
+- for (i = 1; i < 4; ++i)
+- if (*(uint32_t*)(buf + i) == 0) return -1;
+- return 0;
+- }
+- ])],
+- [
+- AC_MSG_RESULT(none needed)
+- ], [
+- AC_DEFINE(USE_ALIGNED, 1, Require byte alignment)
+- AC_MSG_RESULT(required)
+- ])
+ ])
+
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
new file mode 100644
index 000000000..92e65289a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "libTorrent is a BitTorrent library written in C++ for *nix, \
+with a focus on high performance and good code."
+HOMEPAGE = "http://libtorrent.rakshasa.no/"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+
+DEPENDS = "zlib libsigc++-2.0 openssl cppunit"
+
+SRC_URI = "git://github.com/rakshasa/libtorrent \
+ file://don-t-run-code-while-configuring-package.patch \
+ file://0001-implement-64bit-atomic-for-mips.patch \
+ file://0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch \
+ "
+SRCREV = "c167c5a9e0bcf0df23ae5efd91396aae0e37eb87"
+
+PV = "0.13.6+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--with-zlib=${STAGING_EXECPREFIXDIR}"
+
+do_configure_prepend() {
+ (cd ${S}; ./autogen.sh; cd -)
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb
new file mode 100644
index 000000000..ca4685ab3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "A multi-platform support library with a focus on asynchronous I/O"
+HOMEPAGE = "https://github.com/libuv/libuv"
+BUGTRACKER = "https://github.com/libuv/libuv/issues"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bb5ea0d651f4c3519327171906045775"
+
+S = "${WORKDIR}/git"
+SRCREV = "7452ef4e06a4f99ee26b694c65476401534f2725"
+BRANCH = "v1.x"
+SRC_URI = "git://github.com/libuv/libuv.git;protocol=https;branch=${BRANCH};"
+
+inherit autotools
+
+do_configure() {
+ ${S}/autogen.sh || bbnote "${PN} failed to autogen.sh"
+ oe_runconf
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb
new file mode 100644
index 000000000..100f3a354
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Canonical libwebsockets.org websocket library"
+HOMEPAGE = "https://libwebsockets.org/"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3393a657830d4a118c5a6ed35ba53d0"
+
+DEPENDS = "zlib"
+
+S = "${WORKDIR}/git"
+SRCREV = "73557509bd15f95a1ad081a6f4fab48ff7743215"
+SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;"
+
+inherit cmake pkgconfig
+
+PACKAGECONFIG ?= "libuv client server http2 ssl"
+PACKAGECONFIG[client] = "-DLWS_WITHOUT_CLIENT=OFF,-DLWS_WITHOUT_CLIENT=ON,"
+PACKAGECONFIG[http2] = "-DLWS_WITH_HTTP2=ON,-DLWS_WITH_HTTP2=OFF,"
+PACKAGECONFIG[ipv6] = "-DLWS_IPV6=ON,-DLWS_IPV6=OFF,"
+PACKAGECONFIG[libev] = "-DLWS_WITH_LIBEV=ON,-DLWS_WITH_LIBEV=OFF,libev"
+PACKAGECONFIG[libuv] = "-DLWS_WITH_LIBUV=ON,-DLWS_WITH_LIBUV=OFF,libuv"
+PACKAGECONFIG[server] = "-DLWS_WITHOUT_SERVER=OFF,-DLWS_WITHOUT_SERVER=ON,"
+PACKAGECONFIG[ssl] = "-DLWS_WITH_SSL=ON,-DLWS_WITH_SSL=OFF,openssl"
+PACKAGECONFIG[testapps] = "-DLWS_WITHOUT_TESTAPPS=OFF,-DLWS_WITHOUT_TESTAPPS=ON,"
+
+PACKAGES =+ "${PN}-testapps"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+FILES_${PN}-testapps += "${datadir}/libwebsockets-test-server/*"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0003-include-missing-time.h-for-time_t.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0003-include-missing-time.h-for-time_t.patch
new file mode 100644
index 000000000..96163f654
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0003-include-missing-time.h-for-time_t.patch
@@ -0,0 +1,26 @@
+From b36cafdbcbe2193f5b669e703c608e19e23f80a3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 11:16:42 -0700
+Subject: [PATCH 3/4] include missing time.h for time_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ util.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/util.h b/util.h
+index e912f19..3c634c1 100644
+--- a/util.h
++++ b/util.h
+@@ -22,7 +22,7 @@
+
+ #include "ddt.h"
+ #include "ether.h"
+-
++#include <time.h>
+ /**
+ * Table of human readable strings, one for each port state.
+ */
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch
new file mode 100644
index 000000000..e69927514
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch
@@ -0,0 +1,36 @@
+From 3cd28aa771934d9165ff0d7e19932cde65de3e52 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 11:16:57 -0700
+Subject: [PATCH 4/4] Adjust include header sequence to avoid duplicate
+ definitions on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ raw.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/raw.c b/raw.c
+index f51c829..494ea7f 100644
+--- a/raw.c
++++ b/raw.c
+@@ -18,8 +18,6 @@
+ */
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <linux/filter.h>
+-#include <linux/if_ether.h>
+ #include <net/ethernet.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+@@ -32,6 +30,8 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+
++#include <linux/filter.h>
++#include <linux/if_ether.h>
+ #include <linux/errqueue.h>
+ #include <linux/net_tstamp.h>
+ #include <linux/sockios.h>
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
new file mode 100644
index 000000000..b1d96ae5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
@@ -0,0 +1,37 @@
+From af485c638c61fa883212ea424e676fbf90bee594 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Tue, 1 Jul 2014 17:37:31 -0300
+Subject: [PATCH] build: Allow CC and prefix to be overriden
+
+Upstream-Status: Pending
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/makefile b/makefile
+index 22e7d0d..809cc8f 100644
+--- a/makefile
++++ b/makefile
+@@ -18,7 +18,7 @@
+ KBUILD_OUTPUT =
+
+ DEBUG =
+-CC = $(CROSS_COMPILE)gcc
++CC ?= $(CROSS_COMPILE)gcc
+ VER = -DVER=$(version)
+ CFLAGS = -Wall $(VER) $(incdefs) $(DEBUG) $(EXTRA_CFLAGS)
+ LDLIBS = -lm -lrt $(EXTRA_LDFLAGS)
+@@ -35,7 +35,7 @@ incdefs := $(shell $(srcdir)/incdefs.sh)
+ version := $(shell $(srcdir)/version.sh $(srcdir))
+ VPATH = $(srcdir)
+
+-prefix = /usr/local
++prefix ?= /usr/local
+ sbindir = $(prefix)/sbin
+ mandir = $(prefix)/man
+ man8dir = $(mandir)/man8
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch
new file mode 100644
index 000000000..02dbb2346
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch
@@ -0,0 +1,29 @@
+From 8a4cad5e2f2cbb6a34bdc6e877fe499502b8c4c8 Mon Sep 17 00:00:00 2001
+From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Date: Fri, 23 Dec 2016 18:12:29 +0100
+Subject: [PATCH] linuxptp: no incdefs using host headers
+
+Avoid using host headers via incdefs.sh shell script.
+
+Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+
+ makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/makefile b/makefile
+index 8cdbd15..85174b8 100644
+--- a/makefile
++++ b/makefile
+@@ -33,7 +33,7 @@ OBJECTS = $(OBJ) hwstamp_ctl.o phc2sys.o phc_ctl.o pmc.o pmc_common.o \
+ SRC = $(OBJECTS:.o=.c)
+ DEPEND = $(OBJECTS:.o=.d)
+ srcdir := $(dir $(lastword $(MAKEFILE_LIST)))
+-incdefs := $(shell $(srcdir)/incdefs.sh)
++#incdefs := $(shell $(srcdir)/incdefs.sh)
+ version := $(shell $(srcdir)/version.sh $(srcdir))
+ VPATH = $(srcdir)
+
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_1.8.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_1.8.bb
new file mode 100644
index 000000000..c7b8b2933
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_1.8.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://sourceforge.net/projects/linuxptp/files/v${PV}/linuxptp-${PV}.tgz \
+ file://build-Allow-CC-and-prefix-to-be-overriden.patch \
+ file://no-incdefs-using-host-headers.patch \
+ file://0003-include-missing-time.h-for-time_t.patch \
+ file://0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch \
+ "
+
+SRC_URI[md5sum] = "5688cdfe57932273e1dbf35b3b97b9a0"
+SRC_URI[sha256sum] = "fa8e00f6ec73cefa7bb313dce7f60dfe5eb9e2bde3353594e9ac18edc93e5165"
+
+EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} \
+ EXTRA_CFLAGS='-D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME -DHAVE_POSIX_SPAWN -DHAVE_ONESTEP_SYNC ${CFLAGS}'"
+
+do_install () {
+ install -d ${D}/${bindir}
+ install -p ${S}/ptp4l ${D}/${bindir}
+ install -p ${S}/pmc ${D}/${bindir}
+ install -p ${S}/phc2sys ${D}/${bindir}
+ install -p ${S}/hwstamp_ctl ${D}/${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles
new file mode 100644
index 000000000..0b80e2e47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles
@@ -0,0 +1 @@
+d /run/lirc 0755 root root -
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf
new file mode 100644
index 000000000..d8ddedd8f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf
@@ -0,0 +1,24 @@
+# These are the default options to lircd, if installed as
+# /etc/lirc/lirc_options.conf. See the lircd(8) and lircmd(8)
+# manpages for info on the different options.
+
+[lircd]
+nodaemon = False
+permission = 666
+driver = default
+device = /dev/lirc0
+output = /var/run/lirc/lircd
+pidfile = /var/run/lirc/lircd.pid
+plugindir = /usr/lib/lirc/plugins
+allow-simulate = No
+repeat-max = 600
+#listen = [address:]port
+#connect = host[:port]
+#debug = 5
+#uinput = ...
+#release = ...
+#logfile = ...
+
+[lircmd]
+uinput = False
+nodeamon = False
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf
new file mode 100644
index 000000000..29b03c72a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf
@@ -0,0 +1,315 @@
+# contributed by angelo castello
+#
+# note: this config file has been deduced starting from the
+# raw codes provided to run mode2 utility.
+#
+# brand: futarque
+
+begin remote
+ name futarque
+ bits 8
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8048 3898
+ one 555 1436
+ zero 555 439
+ gap 113123
+ ptrail 555
+ pre_data_bits 8
+ pre_data 0x54
+ pre 570 3890
+
+ begin codes
+ MUTE 0x70
+ EXIT 0xA8
+ POWER 0xF0
+ CHANNEL_UP 0x50
+ CHANNEL_DOWN 0xD0
+ VOLUME_UP 0x30
+ VOLUME_DOWN 0xB0
+ OK 0x98
+ FAVORITES 0x04
+ TEXT 0x68
+ EPG 0xC8
+ BACK 0x48
+ MENU 0x88
+ 1 0x00
+ 2 0x80
+ 3 0x40
+ 4 0xC0
+ 5 0x20
+ 6 0xA0
+ 7 0x60
+ 8 0xE0
+ 9 0x10
+ 0 0x90
+ PAUSE 0x84
+ INFO 0x38
+ RED 0xE8
+ GREEN 0x08
+ YELLOW 0x28
+ BLUE 0x78
+ UP 0xD8
+ DOWN 0xB8
+ REWIND 0x44
+ FASTFORWARD 0x24
+ PLAYPAUSE 0xC4
+ STOP 0x64
+ RECORD 0xA4
+ AUDIO 0xE4
+ TAPE 0x14
+ DVD 0x94
+ CAPITAL_A 0xF8
+ CAPITAL_B 0x54
+ end codes
+
+end remote
+
+# brand: STM PVR-1
+
+begin remote
+ name stm_pvr_1
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 150
+
+ header 9000 4500
+ one 572 1700
+ zero 572 572
+ ptrail 572
+ repeat 9000 2200
+ pre_data_bits 16
+ pre_data 0xFE
+ gap 100000
+
+ begin codes
+ POWER 0x00ff
+ FAVORITES 0x7887
+ MUTE 0x28d7
+ 0 0x708F
+ 1 0xc03f
+ 2 0x40bf
+ 3 0x807f
+ 4 0xe01f
+ 5 0x609f
+ 6 0xa05f
+ 7 0xd02f
+ 8 0x50af
+ 9 0x906f
+ INFO 0x38c7
+ SUBTITLE 0xe817
+ MENU 0x9867
+ EXIT 0x20df
+ EPG 0xa857
+ BACK 0x48b7
+ CURSOR_UP 0x58a7
+ CURSOR_DOWN 0xd827
+ CURSOR_LEFT 0x8877
+ CURSOR_RIGHT 0xb04f
+ OK 0x10ef
+ VOLUME_UP 0x22dd
+ VOLUME_DOWN 0x8a75
+ CHANNEL_UP 0x12ed
+ CHANNEL_DOWN 0x4ab5
+ TEXT 0xf00f
+ RADIO 0x926d
+ ZOOM 0x6897
+ AUDIO 0x08f7
+ RED 0x42bd
+ GREEN 0xa25d
+ YELLOW 0x827d
+ BLUE 0x02fd
+ CUSTOM0 0x52ad
+ CUSTOM1 0x30cf
+ PLAY 0x629d
+ PAUSE 0xb24d
+ PREVIOUS 0xc837
+ NEXT 0xf807
+ REWIND 0x32cd
+ FASTFORWARD 0x0af5
+ AUX 0x7a85
+ CUSTOM3 0xb847
+ PIP 0x3ac5
+ SWAP 0xba45
+ end codes
+
+end remote
+
+# brand: STM DTV-2
+
+begin remote
+
+ name stm_dtv_2
+ flags SHIFT_ENC|CONST_LENGTH
+ bits 13
+ aeps 150
+
+ one 850 850
+ zero 850 850
+ plead 850
+ gap 67800
+ toggle_bit 2
+
+ begin codes
+ POWER 0x100C
+ FAVORITES 0x1015
+ AUX 0x1038
+ 1 0x1001
+ 2 0x1002
+ 3 0x1003
+ 4 0x1004
+ 5 0x1005
+ 6 0x1006
+ 7 0x1007
+ 8 0x1008
+ 9 0x1009
+ PERIOD 0x1024
+ 0 0x103E
+ BACK 0x1023
+ MENU 0x1016
+ INFO 0x100F
+ EPG 0x101E
+ EXIT 0x1018
+ CURSOR_UP 0x1017
+ CURSOR_DOWN 0x101D
+ CURSOR_LEFT 0x1019
+ CURSOR_RIGHT 0x101B
+ OK 0x101A
+ VOLUME_UP 0x1010
+ VOLUME_DOWN 0x1011
+ CHANNEL_UP 0x1020
+ CHANNEL_DOWN 0x1021
+ TEXT 0x102E
+ SUBTITLE 0x103C
+ FREEZE 0x1014
+ ZOOM 0x102B
+ RED 0x1028
+ GREEN 0x102A
+ YELLOW 0x102F
+ BLUE 0x1030
+ CUSTOM10 0x1022
+ INTERNET 0x1027
+ CUSTOM11 0x102C
+ AUDIO 0x1025
+ RECORD 0x102D
+ PLAYPAUSE 0x1029
+ STOP 0x1026
+ CUSTOM1 0x101C
+ MUTE 0x100d
+ CUSTOM12 0x101F
+ PIP 0x100B
+ SWAP 0x100E
+ end codes
+
+end remote
+
+# brand: Comcast
+# model no. of remote control: XR2
+# 32 bits for the pre-date (should be value 0x170F443E)
+# width between pre_bits and data: 12900 microseconds
+#
+# 24 bits for the data (key code)
+# To get key REPEAT, XOR 0x088 with KEY value
+# There are 8 post bits (both should be zero)
+#
+# Gap between keys: 8100 microseconds
+begin remote
+
+ name Xfinity-XR2
+ bits 24
+ flags XMP
+ eps 20
+ aeps 300
+
+ one 0 137
+ zero 250 710
+ ptrail 250
+ pre_data_bits 32
+ pre_data 0x170F443E
+ post_data_bits 8
+ post_data 0x0
+ pre 250 12921
+ gap 81698
+ toggle_bit_mask 0x0
+
+ begin codes
+ 1 0x1E0001
+ 1_repeat 0x168001
+ 2 0x1D0002
+ 2_repeat 0x158002
+ 3 0x1C0003
+ 3_repeat 0x148003
+ 4 0x1B0004
+ 4_repeat 0x138004
+ 5 0x1A0005
+ 5_repeat 0x128005
+ 6 0x190006
+ 6_repeat 0x118006
+ 7 0x180007
+ 7_repeat 0x108007
+ 8 0x170008
+ 8_repeat 0x1F8008
+ 9 0x160009
+ 9_repeat 0x1E8009
+ 0 0x1F0000
+ 0_repeat 0x178000
+ OK 0x180025
+ OK_repeat 0x108025
+ POWER 0x10000F
+ POWER_repeat 0x18800F
+ UP 0x1C0021
+ UP_repeat 0x148021
+ DOWN 0x1B0022
+ DOWN_repeat 0x138022
+ LEFT 0x1A0023
+ LEFT_repeat 0x128023
+ RIGHT 0x190024
+ RIGHT_repeat 0x118024
+ REWIND 0x190033
+ REWIND_repeat 0x118033
+ PLAY 0x1C0030
+ PLAY_repeat 0x148030
+ FASTFORWARD 0x180034
+ FASTFORWARD_repeat 0x108034
+ RECORD 0x170035
+ RECORD_repeat 0x1F8035
+ REPLAY 0x170053
+ REPLAY_repeat 0x1F8053
+ A 0x190060
+ A_repeat 0x118060
+ B 0x180061
+ B_repeat 0x108061
+ C 0x170062
+ C_repeat 0x1F8062
+ D 0x160063
+ D_repeat 0x1E8063
+ PAGE_UP 0x150028
+ PAGE_UP_repeat 0x1D8028
+ PAGE_DOWN 0x140029
+ PAGE_DOWN_repeat 0x1C8029
+ GUIDE 0x160027
+ GUIDE_repeat 0x1E8027
+ MENU 0x1D0020
+ MENU_repeat 0x158020
+ EXIT 0x13002A
+ EXIT_repeat 0x1B802A
+ INFO 0x170026
+ INFO_repeat 0x1F8026
+ LAST 0x190051
+ LAST_repeat 0x118051
+ VOLUME_UP 0x15000A
+ VOLUME_UP_repeat 0x1D800A
+ CHANNEL_UP 0x12000D
+ CHANNEL_UP_repeat 0x1A800D
+ VOLUME_DOWN 0x14000B
+ VOLUME_DOWN_repeat 0x1C800B
+ CHANNEL_DOWN 0x11000E
+ CHANNEL_DOWN_repeat 0x19800E
+ MUTE 0x13000C
+ MUTE_repeat 0x1B800D
+ end codes
+
+end remote
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init
new file mode 100644
index 000000000..8b124af6f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init
@@ -0,0 +1,40 @@
+#! /bin/sh
+#
+# This is an init script for Familiar
+# Copy it to /etc/init.d/lircd and type
+# > update-rc.d lircd defaults 20
+#
+
+
+test -f /usr/sbin/lircd || exit 0
+test -f /etc/lircd.conf || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting lirc daemon: lircd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc0
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping lirc daemon: lircd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
+ echo "."
+ ;;
+ reload|force-reload)
+ start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircd
+ ;;
+ restart)
+ echo -n "Stopping lirc daemon: lircd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
+ sleep 1
+ echo -n "Starting lirc daemon: lircd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc0
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/lircd {start|stop|reload|restart|force-reload}"
+ exit 1
+esac
+
+exit 0
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service
new file mode 100644
index 000000000..c8661368b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=LIRC Infrared Signal Decoder
+After=network.target
+
+[Service]
+Type=forking
+EnvironmentFile=/etc/lirc/lircd.conf
+PIDFile=/run/lirc/lircd.pid
+ExecStartPre=/bin/mkdir -p /run/lirc
+ExecStartPre=/bin/rm -f /dev/lircd
+ExecStartPre=/bin/rm -f /run/lirc/lircd
+ExecStartPre=/bin/ln -s /run/lirc/lircd /dev/lircd
+
+ExecStart=/usr/sbin/lircd --pidfile=/run/lirc/lircd.pid --device=/dev/lirc0
+
+ExecStopPost=/bin/rm -f /dev/lircd
+ExecStopPost=/bin/rm -fR /run/lirc
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init
new file mode 100644
index 000000000..3a8c1a306
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init
@@ -0,0 +1,37 @@
+#! /bin/sh
+#
+# This is an init script for Familiar
+# Copy it to /etc/init.d/lircexecd and type
+# > update-rc.d lircexecd defaults 20
+# It must be started after lircd (and it does alphabetically :-)
+# irexec reads /etc/lircrc by default
+
+
+test -f /usr/bin/irexec || exit 0
+test -f /etc/lircrc || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting lircexec daemon: irexec"
+ start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping lircexec daemon: irexec"
+ start-stop-daemon --stop --quiet --exec /usr/bin/irexec
+ echo "."
+ ;;
+ restart|force-restart)
+ echo -n "Stopping lircexec daemon: irexec"
+ start-stop-daemon --stop --quiet --exec /usr/bin/irexec
+ sleep 1
+ echo -n "Starting lircexec daemon: irexec"
+ start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/lircexec {start|stop|reload|restart|force-restart}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch
new file mode 100644
index 000000000..4feea8034
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch
@@ -0,0 +1,101 @@
+Index: lirc-0.9.4d/daemons/lircrcd.cpp
+===================================================================
+--- lirc-0.9.4d.orig/daemons/lircrcd.cpp
++++ lirc-0.9.4d/daemons/lircrcd.cpp
+@@ -29,10 +29,12 @@
+ #include <sys/un.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <poll.h>
+ #include <syslog.h>
+
+ #include "lirc_client.h"
+ #include "lirc/lirc_log.h"
++#include "lirc/curl_poll.h"
+
+ #define MAX_CLIENTS 100
+ #define WHITE_SPACE " \t"
+Index: lirc-0.9.4d/lib/curl_poll.c
+===================================================================
+--- lirc-0.9.4d.orig/lib/curl_poll.c
++++ lirc-0.9.4d/lib/curl_poll.c
+@@ -36,6 +36,7 @@
+ #include <stdlib.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
++#include <sys/poll.h>
+
+ #include "lirc_log.h"
+ #include "curl_poll.h"
+@@ -67,7 +68,7 @@ static const logchannel_t logchannel = L
+
+ #ifdef HAVE_POLL_FINE
+
+-int curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
++int curl_poll(struct pollfd *ufds, unsigned int nfds, int timeout_ms)
+ {
+ return poll(ufds, nfds, timeout_ms);
+ }
+@@ -112,7 +113,7 @@ static int verify_sock(int s)
+ }
+
+
+-int curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
++int curl_poll(struct pollfd *ufds, unsigned int nfds, int timeout_ms)
+ {
+ struct timeval pending_tv;
+ struct timeval* ptimeout;
+Index: lirc-0.9.4d/lib/curl_poll.h
+===================================================================
+--- lirc-0.9.4d.orig/lib/curl_poll.h
++++ lirc-0.9.4d/lib/curl_poll.h
+@@ -1,5 +1,5 @@
+-#ifndef _POLL_H
+-#define _POLL_H
++#ifndef _LIB_CURL_POLL_H
++#define _LIB_CURL_POLL_H
+ /***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+@@ -29,13 +29,9 @@
+ extern "C" {
+ #endif
+
+-#ifdef HAVE_SYS_POLL_H
+-#include <sys/poll.h>
+-#else
+ #include <poll.h>
+-#endif
+
+-int curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);
++int curl_poll(struct pollfd *ufds, unsigned int nfds, int timeout_ms);
+
+ #ifdef __cplusplus
+ }
+Index: lirc-0.9.4d/lib/lirc/curl_poll.h
+===================================================================
+--- lirc-0.9.4d.orig/lib/lirc/curl_poll.h
++++ lirc-0.9.4d/lib/lirc/curl_poll.h
+@@ -1,5 +1,5 @@
+-#ifndef _POLL_H
+-#define _POLL_H
++#ifndef _LIRC_CURL_POLL_H
++#define _LIRC_CURL_POLL_H
+ /***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+@@ -29,13 +29,9 @@
+ extern "C" {
+ #endif
+
+-#ifdef HAVE_SYS_POLL_H
+-#include <sys/poll.h>
+-#else
+ #include <poll.h>
+-#endif
+
+-int curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);
++int curl_poll(struct pollfd *ufds, unsigned int nfds, int timeout_ms);
+
+ #ifdef __cplusplus
+ }
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb
new file mode 100644
index 000000000..b13163deb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb
@@ -0,0 +1,87 @@
+DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls."
+DESCRIPTION_append_lirc = " This package contains the lirc daemon, libraries and tools."
+DESCRIPTION_append_lirc-exec = " This package contains a daemon that runs programs on IR signals."
+DESCRIPTION_append_lirc-remotes = " This package contains some config files for remotes."
+DESCRIPTION_append_lirc-nslu2example = " This package contains a working config for RC5 remotes and a modified NSLU2."
+HOMEPAGE = "http://www.lirc.org"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+DEPENDS = "libxslt-native alsa-lib libftdi libusb1 libusb-compat jack portaudio-v19"
+
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://prdownloads.sourceforge.net/lirc/lirc-${PV}.tar.bz2 \
+ file://pollfd.patch \
+ file://lircd.service \
+ file://lircd.init \
+ file://lircexec.init \
+ file://lircd.conf \
+ file://lirc_options.conf \
+ file://lirc.tmpfiles \
+"
+SRC_URI[md5sum] = "0d11679cbdd94a5a6da00a8e7231b4bf"
+SRC_URI[sha256sum] = "c68f18c35b489b865c0a741d119b136e8702191538cd3551b977a7af6c4e41ab"
+
+SYSTEMD_PACKAGES = "lirc lirc-exec"
+SYSTEMD_SERVICE_${PN} = "lircd.service lircmd.service lircd-setup.service lircd-uinput.service"
+SYSTEMD_SERVICE_${PN}-exec = "irexec.service"
+SYSTEMD_AUTO_ENABLE_lirc = "enable"
+SYSTEMD_AUTO_ENABLE_lirc-exec = "enable"
+
+inherit autotools pkgconfig systemd python3native
+
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd"
+PACKAGECONFIG[x11] = "--with-x,--with-x=no,libx11,"
+
+PACKAGECONFIG ?= " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', ' systemd', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', ' x11', '', d)} \
+"
+CACHED_CONFIGUREVARS = "HAVE_WORKING_POLL=yes"
+
+#EXTRA_OEMAKE = 'SUBDIRS="lib daemons tools"'
+do_install_append() {
+ install -m 0755 -d ${D}${sysconfdir}
+ install -m 0755 -d ${D}${sysconfdir}/lirc
+ install -m 0755 -d ${D}${systemd_unitdir}/system
+ install -m 0755 -d ${D}${libdir}/tmpfiles.d
+ install -m 0644 ${WORKDIR}/lircd.conf ${D}${sysconfdir}/lirc/
+ install -m 0644 ${WORKDIR}/lirc_options.conf ${D}${sysconfdir}/lirc/
+ install -m 0644 ${WORKDIR}/lircd.service ${D}${systemd_unitdir}/system/
+ install -m 0755 ${WORKDIR}/lircexec.init ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/lirc.tmpfiles ${D}${libdir}/tmpfiles.d/lirc.conf
+ rm -rf ${D}${libdir}/lirc/plugins/*.la
+ rmdir ${D}/var/run/lirc ${D}/var/run
+ chown -R root:root ${D}${datadir}/lirc/contrib
+}
+
+PACKAGES =+ "${PN}-contrib ${PN}-exec ${PN}-plugins ${PN}-python"
+
+RDEPENDS_${PN} = "bash"
+RDEPENDS_${PN}-exec = "${PN}"
+RDEPENDS_${PN}-python = "python"
+
+RRECOMMENDS_lirc = "${PN}-exec ${PN}-plugins"
+
+FILES_${PN}-plugins = "${libdir}/lirc/plugins/*.so ${datadir}/lirc/configs"
+FILES_${PN}-contrib = "${datadir}/lirc/contrib"
+FILES_${PN}-exec = "${bindir}/irexec ${sysconfdir}/lircexec ${systemd_unitdir}/system/irexec.service"
+FILES_${PN} += "${systemd_unitdir}/system/lircexec.init"
+FILES_${PN} += "${systemd_unitdir}/system/lircd.service"
+FILES_${PN} += "${systemd_unitdir}/system/lircd.socket"
+FILES_${PN} += "${libdir}/tmpfiles.d/lirc.conf"
+FILES_${PN}-dbg += "${libdir}/lirc/plugins/.debug"
+FILES_${PN}-python += "${libdir}/python*/site-packages"
+
+
+INITSCRIPT_PACKAGES = "lirc lirc-exec"
+INITSCRIPT_NAME_lirc-exec = "lircexec"
+INITSCRIPT_PARAMS_lirc-exec = "defaults 21"
+
+# this is for distributions that don't use udev
+pkg_postinst_${PN}_append() {
+ if [ ! -c $D/dev/lirc -a ! -f /sbin/udevd ]; then mknod $D/dev/lirc c 61 0; fi
+}
+
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
new file mode 100644
index 000000000..20f388e89
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
@@ -0,0 +1,23 @@
+Description: use pkg-config to detect gnutls
+Debian: http://bugs.debian.org/529835
+Origin: http://groups.google.com/group/loudmouth-dev/browse_thread/thread/3f78255837048daf#
+
+--- a/configure.ac.orig 2009-08-16 20:29:36.000000000 +0200
++++ b/configure.ac 2009-08-16 20:30:43.000000000 +0200
+@@ -146,10 +146,12 @@ AC_ARG_WITH(openssl-libs,
+ enable_ssl=no
+ if test "x$ac_ssl" = "xgnutls"; then
+ dnl Look for GnuTLS
+- AM_PATH_LM_LIBGNUTLS($GNUTLS_REQUIRED, have_libgnutls=yes, have_libgnutls=no)
+- if test "x$have_libgnutls" = "xyes"; then
+- CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+- LIBS="$LIBS $LIBGNUTLS_LIBS"
++ PKG_CHECK_MODULES(GNUTLS, gnutls >= $GNUTLS_REQUIRED, have_gnutls=yes, have_gnutls=no)
++ if test "x$have_gnutls" = "xyes"; then
++ AC_SUBST(ASYNCNS_CFLAGS)
++ AC_SUBST(ASYNCNS_LIBS)
++ CFLAGS="$CFLAGS $GNUTLS_CFLAGS"
++ LIBS="$LIBS $GNUTLS_LIBS"
+ AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
+ enable_ssl=GnuTLS
+ else
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
new file mode 100644
index 000000000..b6c9422e8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
@@ -0,0 +1,10 @@
+--- loudmouth-1.4.3.orig/loudmouth/lm-error.c 2008-10-29 21:48:15.000000000 +0100
++++ loudmouth-1.4.3/loudmouth/lm-error.c 2012-05-06 08:27:07.455739440 +0200
+@@ -19,7 +19,6 @@
+ */
+
+ #include <config.h>
+-#include <glib/gerror.h>
+ #include "lm-error.h"
+
+ /**
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
new file mode 100644
index 000000000..4f1430b9e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
+HOMEPAGE = "http://www.loudmouth-project.org/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c4f38aef94828f6b280e00d1173be689"
+
+DEPENDS = "glib-2.0 libcheck openssl libidn"
+
+inherit gnomebase gtk-doc
+
+PR = "r2"
+
+SRC_URI += "file://04-use-pkg-config-for-gnutls.patch \
+ file://glib-2.32.patch"
+
+SRC_URI[archive.md5sum] = "55339ca42494690c3942ee1465a96937"
+SRC_URI[archive.sha256sum] = "95a93f5d009b71ea8193d994aa11f311bc330a3efe1b7cd74dc48f11c7f929e3"
+GNOME_COMPRESS_TYPE="bz2"
+
+EXTRA_OECONF = "--with-ssl=openssl"
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch
new file mode 100644
index 000000000..a3fb0f3eb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch
@@ -0,0 +1,21 @@
+Fixes errors found bt Clang
+
+| ../../ModemManager-1.6.4/src/mm-bearer-qmi.c:774:50: error: implicit conversion from enumeration type 'MMBearerStatus' to different enumeration type 'MMBearerConnectionStatus' [-Werror,-Wenum-conversion]
+| MMBearerConnectionStatus bearer_status = mm_base_bearer_get_status (MM_BASE_BEARER (self));
+| ~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+| 1 error generated.
+
+
+Index: ModemManager-1.6.4/src/mm-bearer-qmi.c
+===================================================================
+--- ModemManager-1.6.4.orig/src/mm-bearer-qmi.c
++++ ModemManager-1.6.4/src/mm-bearer-qmi.c
+@@ -771,7 +771,7 @@ packet_service_status_indication_cb (Qmi
+ &connection_status,
+ NULL,
+ NULL)) {
+- MMBearerConnectionStatus bearer_status = mm_base_bearer_get_status (MM_BASE_BEARER (self));
++ MMBearerConnectionStatus bearer_status = (MMBearerConnectionStatus)mm_base_bearer_get_status (MM_BASE_BEARER (self));
+
+ if (connection_status == QMI_WDS_CONNECTION_STATUS_DISCONNECTED &&
+ bearer_status != MM_BEARER_CONNECTION_STATUS_DISCONNECTED &&
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb
new file mode 100644
index 000000000..e60cd4b74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb
@@ -0,0 +1,51 @@
+SUMMARY = "ModemManager is a daemon controlling broadband devices/connections"
+DESCRIPTION = "ModemManager is a DBus-activated daemon which controls mobile broadband (2G/3G/4G) devices and connections"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/ModemManager/"
+LICENSE = "GPL-2.0 & LGPL-2.1"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+"
+
+inherit gnomebase gettext systemd vala gobject-introspection bash-completion
+
+DEPENDS = "glib-2.0 libgudev dbus-glib intltool-native"
+
+SRC_URI = "http://www.freedesktop.org/software/ModemManager/ModemManager-${PV}.tar.xz \
+ file://enum-conversion.patch \
+"
+SRC_URI[md5sum] = "06488186c7dd53f8104183b86f7a1568"
+SRC_URI[sha256sum] = "cdd5b4cb1e4d7643643a28ccbfc4bb354bfa9cb89a77ea160ebdf7926171c668"
+
+S = "${WORKDIR}/ModemManager-${PV}"
+
+PACKAGECONFIG ??= "mbim qmi polkit \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,,"
+PACKAGECONFIG[polkit] = "--with-polkit=yes,--with-polkit=no,polkit"
+# Support WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol.
+PACKAGECONFIG[mbim] = "--with-mbim,--enable-mbim=no,libmbim"
+# Support WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol.
+PACKAGECONFIG[qmi] = "--with-qmi,--without-qmi,libqmi"
+
+FILES_${PN} += " \
+ ${datadir}/icons \
+ ${datadir}/polkit-1 \
+ ${datadir}/dbus-1 \
+ ${libdir}/ModemManager \
+ ${systemd_unitdir}/system \
+"
+
+FILES_${PN}-dev += " \
+ ${libdir}/ModemManager/*.la \
+"
+
+FILES_${PN}-staticdev += " \
+ ${libdir}/ModemManager/*.a \
+"
+
+FILES_${PN}-dbg += "${libdir}/ModemManager/.debug"
+
+SYSTEMD_SERVICE_${PN} = "ModemManager.service"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.3.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.3.0.bb
new file mode 100644
index 000000000..9fc8435ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.3.0.bb
@@ -0,0 +1,46 @@
+# NOTE: mosh-server requires a UTF-8 locale, but there's no way to add
+# an explicit dependency for this so you need to ensure this is in your
+# image yourself when you install mosh-server.
+
+SUMMARY = "Remote shell supporting roaming and high-latency connections"
+DESCRIPTION = "Remote terminal application that allows roaming, supports \
+intermittent connectivity, and provides intelligent local echo and line \
+editing of user keystrokes. Mosh is a replacement for SSH. It's more \
+robust and responsive, especially over Wi-Fi, cellular, and \
+long-distance links."
+HOMEPAGE = "http://mosh.mit.edu"
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "protobuf-native protobuf ncurses zlib libio-pty-perl openssl libutempter"
+
+SRC_URI = "http://mosh.mit.edu/mosh-${PV}.tar.gz"
+SRC_URI[md5sum] = "d961276995936953bf2d5a794068b076"
+SRC_URI[sha256sum] = "320e12f461e55d71566597976bd9440ba6c5265fa68fbf614c6f1c8401f93376"
+
+inherit autotools pkgconfig
+
+PACKAGE_BEFORE_PN += "${PN}-server"
+FILES_${PN}-server = "${bindir}/mosh-server"
+
+NEEDED_PERL_MODULES = "\
+ perl-module-socket \
+ perl-module-getopt-long \
+ perl-module-errno \
+ perl-module-io-socket-inet \
+ perl-module-posix \
+"
+
+# mosh uses SSH to authenticate and the client uses OpenSSH-specific features
+RDEPENDS_${PN} += "openssh-ssh ${NEEDED_PERL_MODULES}"
+# The server seemed not to work with dropbear either
+RDEPENDS_${PN}-server += "openssh-sshd ${NEEDED_PERL_MODULES}"
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:2100: Error: instruction not supported in Thumb16 mode -- `adds r4,r4,r4'
+#| {standard input}:2101: Error: instruction not supported in Thumb16 mode -- `adcs r5,r5,r5'
+#| {standard input}:2102: Error: instruction not supported in Thumb16 mode -- `adcs r6,r6,r6'
+#| {standard input}:2103: Error: instruction not supported in Thumb16 mode -- `adcs r7,r7,r7'
+#| {standard input}:2104: Error: selected processor does not support Thumb mode `it cs'
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch
new file mode 100644
index 000000000..a5aa277a0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch
@@ -0,0 +1,35 @@
+From 0be38301249d797ec1f59071cc868ceda6d4720a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com>
+Date: Tue, 12 Apr 2016 12:50:32 +0100
+Subject: [PATCH 1/2] config.mk: allow prefix / mandir / localedir from
+ environment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We want to control them using OE environment variables.
+
+Upstream-Status: Inappropriate [embedded-specific]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+---
+ config.mk | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/config.mk b/config.mk
+index 71f17e5..81d9702 100644
+--- a/config.mk
++++ b/config.mk
+@@ -249,7 +249,7 @@ ifeq ($(WITH_DOCS),yes)
+ endif
+
+ INSTALL?=install
+-prefix=/usr/local
+-mandir=${prefix}/share/man
+-localedir=${prefix}/share/locale
++prefix?=/usr/local
++mandir?=${prefix}/share/man
++localedir?=${prefix}/share/locale
+ STRIP?=strip
+--
+2.15.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch
new file mode 100644
index 000000000..c89dfe6be
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch
@@ -0,0 +1,975 @@
+From d9aeef8d95a325942cc92f4d72415771d75d904c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com>
+Date: Tue, 12 Apr 2016 13:05:10 +0100
+Subject: [PATCH 2/2] uthash: remove in-tree version
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We don't need it as we want to use the version provided by
+meta-oe instead.
+
+Upstream-Status: Inappropriate [embedded-specific]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+---
+ src/uthash.h | 948 -----------------------------------------------------------
+ 1 file changed, 948 deletions(-)
+ delete mode 100644 src/uthash.h
+
+diff --git a/src/uthash.h b/src/uthash.h
+deleted file mode 100644
+index 915a825..0000000
+--- a/src/uthash.h
++++ /dev/null
+@@ -1,948 +0,0 @@
+-/*
+-Copyright (c) 2003-2013, Troy D. Hanson http://troydhanson.github.com/uthash/
+-All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are met:
+-
+- * Redistributions of source code must retain the above copyright
+- notice, this list of conditions and the following disclaimer.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-*/
+-
+-#ifndef UTHASH_H
+-#define UTHASH_H
+-
+-#include <string.h> /* memcmp,strlen */
+-#include <stddef.h> /* ptrdiff_t */
+-#include <stdlib.h> /* exit() */
+-
+-/* These macros use decltype or the earlier __typeof GNU extension.
+- As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+- when compiling c++ source) this code uses whatever method is needed
+- or, for VS2008 where neither is available, uses casting workarounds. */
+-#ifdef _MSC_VER /* MS compiler */
+-#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+-#define DECLTYPE(x) (decltype(x))
+-#else /* VS2008 or older (or VS2010 in C mode) */
+-#define NO_DECLTYPE
+-#define DECLTYPE(x)
+-#endif
+-#else /* GNU, Sun and other compilers */
+-#define DECLTYPE(x) (__typeof(x))
+-#endif
+-
+-#ifdef NO_DECLTYPE
+-#define DECLTYPE_ASSIGN(dst,src) \
+-do { \
+- char **_da_dst = (char**)(&(dst)); \
+- *_da_dst = (char*)(src); \
+-} while(0)
+-#else
+-#define DECLTYPE_ASSIGN(dst,src) \
+-do { \
+- (dst) = DECLTYPE(dst)(src); \
+-} while(0)
+-#endif
+-
+-/* a number of the hash function use uint32_t which isn't defined on win32 */
+-#ifdef _MSC_VER
+-typedef unsigned int uint32_t;
+-typedef unsigned char uint8_t;
+-#else
+-#include <inttypes.h> /* uint32_t */
+-#endif
+-
+-#define UTHASH_VERSION 1.9.8
+-
+-#ifndef uthash_fatal
+-#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
+-#endif
+-#ifndef uthash_malloc
+-#define uthash_malloc(sz) malloc(sz) /* malloc fcn */
+-#endif
+-#ifndef uthash_free
+-#define uthash_free(ptr,sz) free(ptr) /* free fcn */
+-#endif
+-
+-#ifndef uthash_noexpand_fyi
+-#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+-#endif
+-#ifndef uthash_expand_fyi
+-#define uthash_expand_fyi(tbl) /* can be defined to log expands */
+-#endif
+-
+-/* initial number of buckets */
+-#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */
+-#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */
+-#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */
+-
+-/* calculate the element whose hash handle address is hhe */
+-#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+-
+-#define HASH_FIND(hh,head,keyptr,keylen,out) \
+-do { \
+- unsigned _hf_bkt,_hf_hashv; \
+- out=NULL; \
+- if (head) { \
+- HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
+- if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \
+- HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
+- keyptr,keylen,out); \
+- } \
+- } \
+-} while (0)
+-
+-#ifdef HASH_BLOOM
+-#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM)
+-#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0)
+-#define HASH_BLOOM_MAKE(tbl) \
+-do { \
+- (tbl)->bloom_nbits = HASH_BLOOM; \
+- (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
+- if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \
+- memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \
+- (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
+-} while (0)
+-
+-#define HASH_BLOOM_FREE(tbl) \
+-do { \
+- uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+-} while (0)
+-
+-#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8)))
+-#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8)))
+-
+-#define HASH_BLOOM_ADD(tbl,hashv) \
+- HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
+-
+-#define HASH_BLOOM_TEST(tbl,hashv) \
+- HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
+-
+-#else
+-#define HASH_BLOOM_MAKE(tbl)
+-#define HASH_BLOOM_FREE(tbl)
+-#define HASH_BLOOM_ADD(tbl,hashv)
+-#define HASH_BLOOM_TEST(tbl,hashv) (1)
+-#define HASH_BLOOM_BYTELEN 0
+-#endif
+-
+-#define HASH_MAKE_TABLE(hh,head) \
+-do { \
+- (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \
+- sizeof(UT_hash_table)); \
+- if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \
+- memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \
+- (head)->hh.tbl->tail = &((head)->hh); \
+- (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
+- (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
+- (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+- (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
+- HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+- if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \
+- memset((head)->hh.tbl->buckets, 0, \
+- HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+- HASH_BLOOM_MAKE((head)->hh.tbl); \
+- (head)->hh.tbl->signature = HASH_SIGNATURE; \
+-} while(0)
+-
+-#define HASH_ADD(hh,head,fieldname,keylen_in,add) \
+- HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
+-
+-#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+-do { \
+- replaced=NULL; \
+- HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \
+- if (replaced!=NULL) { \
+- HASH_DELETE(hh,head,replaced); \
+- }; \
+- HASH_ADD(hh,head,fieldname,keylen_in,add); \
+-} while(0)
+-
+-#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+-do { \
+- unsigned _ha_bkt; \
+- (add)->hh.next = NULL; \
+- (add)->hh.key = (char*)keyptr; \
+- (add)->hh.keylen = (unsigned)keylen_in; \
+- if (!(head)) { \
+- head = (add); \
+- (head)->hh.prev = NULL; \
+- HASH_MAKE_TABLE(hh,head); \
+- } else { \
+- (head)->hh.tbl->tail->next = (add); \
+- (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+- (head)->hh.tbl->tail = &((add)->hh); \
+- } \
+- (head)->hh.tbl->num_items++; \
+- (add)->hh.tbl = (head)->hh.tbl; \
+- HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
+- (add)->hh.hashv, _ha_bkt); \
+- HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
+- HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
+- HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
+- HASH_FSCK(hh,head); \
+-} while(0)
+-
+-#define HASH_TO_BKT( hashv, num_bkts, bkt ) \
+-do { \
+- bkt = ((hashv) & ((num_bkts) - 1)); \
+-} while(0)
+-
+-/* delete "delptr" from the hash table.
+- * "the usual" patch-up process for the app-order doubly-linked-list.
+- * The use of _hd_hh_del below deserves special explanation.
+- * These used to be expressed using (delptr) but that led to a bug
+- * if someone used the same symbol for the head and deletee, like
+- * HASH_DELETE(hh,users,users);
+- * We want that to work, but by changing the head (users) below
+- * we were forfeiting our ability to further refer to the deletee (users)
+- * in the patch-up process. Solution: use scratch space to
+- * copy the deletee pointer, then the latter references are via that
+- * scratch pointer rather than through the repointed (users) symbol.
+- */
+-#define HASH_DELETE(hh,head,delptr) \
+-do { \
+- unsigned _hd_bkt; \
+- struct UT_hash_handle *_hd_hh_del; \
+- if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
+- uthash_free((head)->hh.tbl->buckets, \
+- (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
+- HASH_BLOOM_FREE((head)->hh.tbl); \
+- uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+- head = NULL; \
+- } else { \
+- _hd_hh_del = &((delptr)->hh); \
+- if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
+- (head)->hh.tbl->tail = \
+- (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+- (head)->hh.tbl->hho); \
+- } \
+- if ((delptr)->hh.prev) { \
+- ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+- (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
+- } else { \
+- DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
+- } \
+- if (_hd_hh_del->next) { \
+- ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \
+- (head)->hh.tbl->hho))->prev = \
+- _hd_hh_del->prev; \
+- } \
+- HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+- HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+- (head)->hh.tbl->num_items--; \
+- } \
+- HASH_FSCK(hh,head); \
+-} while (0)
+-
+-
+-/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+-#define HASH_FIND_STR(head,findstr,out) \
+- HASH_FIND(hh,head,findstr,strlen(findstr),out)
+-#define HASH_ADD_STR(head,strfield,add) \
+- HASH_ADD(hh,head,strfield,strlen(add->strfield),add)
+-#define HASH_REPLACE_STR(head,strfield,add,replaced) \
+- HASH_REPLACE(hh,head,strfield,strlen(add->strfield),add,replaced)
+-#define HASH_FIND_INT(head,findint,out) \
+- HASH_FIND(hh,head,findint,sizeof(int),out)
+-#define HASH_ADD_INT(head,intfield,add) \
+- HASH_ADD(hh,head,intfield,sizeof(int),add)
+-#define HASH_REPLACE_INT(head,intfield,add,replaced) \
+- HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+-#define HASH_FIND_PTR(head,findptr,out) \
+- HASH_FIND(hh,head,findptr,sizeof(void *),out)
+-#define HASH_ADD_PTR(head,ptrfield,add) \
+- HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+-#define HASH_REPLACE_PTR(head,ptrfield,add) \
+- HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+-#define HASH_DEL(head,delptr) \
+- HASH_DELETE(hh,head,delptr)
+-
+-/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+- * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+- */
+-#ifdef HASH_DEBUG
+-#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+-#define HASH_FSCK(hh,head) \
+-do { \
+- unsigned _bkt_i; \
+- unsigned _count, _bkt_count; \
+- char *_prev; \
+- struct UT_hash_handle *_thh; \
+- if (head) { \
+- _count = 0; \
+- for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
+- _bkt_count = 0; \
+- _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+- _prev = NULL; \
+- while (_thh) { \
+- if (_prev != (char*)(_thh->hh_prev)) { \
+- HASH_OOPS("invalid hh_prev %p, actual %p\n", \
+- _thh->hh_prev, _prev ); \
+- } \
+- _bkt_count++; \
+- _prev = (char*)(_thh); \
+- _thh = _thh->hh_next; \
+- } \
+- _count += _bkt_count; \
+- if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+- HASH_OOPS("invalid bucket count %d, actual %d\n", \
+- (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+- } \
+- } \
+- if (_count != (head)->hh.tbl->num_items) { \
+- HASH_OOPS("invalid hh item count %d, actual %d\n", \
+- (head)->hh.tbl->num_items, _count ); \
+- } \
+- /* traverse hh in app order; check next/prev integrity, count */ \
+- _count = 0; \
+- _prev = NULL; \
+- _thh = &(head)->hh; \
+- while (_thh) { \
+- _count++; \
+- if (_prev !=(char*)(_thh->prev)) { \
+- HASH_OOPS("invalid prev %p, actual %p\n", \
+- _thh->prev, _prev ); \
+- } \
+- _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
+- _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \
+- (head)->hh.tbl->hho) : NULL ); \
+- } \
+- if (_count != (head)->hh.tbl->num_items) { \
+- HASH_OOPS("invalid app item count %d, actual %d\n", \
+- (head)->hh.tbl->num_items, _count ); \
+- } \
+- } \
+-} while (0)
+-#else
+-#define HASH_FSCK(hh,head)
+-#endif
+-
+-/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+- * the descriptor to which this macro is defined for tuning the hash function.
+- * The app can #include <unistd.h> to get the prototype for write(2). */
+-#ifdef HASH_EMIT_KEYS
+-#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+-do { \
+- unsigned _klen = fieldlen; \
+- write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+- write(HASH_EMIT_KEYS, keyptr, fieldlen); \
+-} while (0)
+-#else
+-#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+-#endif
+-
+-/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+-#ifdef HASH_FUNCTION
+-#define HASH_FCN HASH_FUNCTION
+-#else
+-#define HASH_FCN HASH_JEN
+-#endif
+-
+-/* The Bernstein hash function, used in Perl prior to v5.6 */
+-#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned _hb_keylen=keylen; \
+- char *_hb_key=(char*)(key); \
+- (hashv) = 0; \
+- while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \
+- bkt = (hashv) & (num_bkts-1); \
+-} while (0)
+-
+-
+-/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+- * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+-#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned _sx_i; \
+- char *_hs_key=(char*)(key); \
+- hashv = 0; \
+- for(_sx_i=0; _sx_i < keylen; _sx_i++) \
+- hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+- bkt = hashv & (num_bkts-1); \
+-} while (0)
+-
+-#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned _fn_i; \
+- char *_hf_key=(char*)(key); \
+- hashv = 2166136261UL; \
+- for(_fn_i=0; _fn_i < keylen; _fn_i++) \
+- hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \
+- bkt = hashv & (num_bkts-1); \
+-} while(0)
+-
+-#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned _ho_i; \
+- char *_ho_key=(char*)(key); \
+- hashv = 0; \
+- for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+- hashv += _ho_key[_ho_i]; \
+- hashv += (hashv << 10); \
+- hashv ^= (hashv >> 6); \
+- } \
+- hashv += (hashv << 3); \
+- hashv ^= (hashv >> 11); \
+- hashv += (hashv << 15); \
+- bkt = hashv & (num_bkts-1); \
+-} while(0)
+-
+-#define HASH_JEN_MIX(a,b,c) \
+-do { \
+- a -= b; a -= c; a ^= ( c >> 13 ); \
+- b -= c; b -= a; b ^= ( a << 8 ); \
+- c -= a; c -= b; c ^= ( b >> 13 ); \
+- a -= b; a -= c; a ^= ( c >> 12 ); \
+- b -= c; b -= a; b ^= ( a << 16 ); \
+- c -= a; c -= b; c ^= ( b >> 5 ); \
+- a -= b; a -= c; a ^= ( c >> 3 ); \
+- b -= c; b -= a; b ^= ( a << 10 ); \
+- c -= a; c -= b; c ^= ( b >> 15 ); \
+-} while (0)
+-
+-#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned _hj_i,_hj_j,_hj_k; \
+- unsigned char *_hj_key=(unsigned char*)(key); \
+- hashv = 0xfeedbeef; \
+- _hj_i = _hj_j = 0x9e3779b9; \
+- _hj_k = (unsigned)keylen; \
+- while (_hj_k >= 12) { \
+- _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+- + ( (unsigned)_hj_key[2] << 16 ) \
+- + ( (unsigned)_hj_key[3] << 24 ) ); \
+- _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+- + ( (unsigned)_hj_key[6] << 16 ) \
+- + ( (unsigned)_hj_key[7] << 24 ) ); \
+- hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+- + ( (unsigned)_hj_key[10] << 16 ) \
+- + ( (unsigned)_hj_key[11] << 24 ) ); \
+- \
+- HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+- \
+- _hj_key += 12; \
+- _hj_k -= 12; \
+- } \
+- hashv += keylen; \
+- switch ( _hj_k ) { \
+- case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \
+- case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \
+- case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \
+- case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \
+- case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \
+- case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \
+- case 5: _hj_j += _hj_key[4]; \
+- case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \
+- case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \
+- case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \
+- case 1: _hj_i += _hj_key[0]; \
+- } \
+- HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+- bkt = hashv & (num_bkts-1); \
+-} while(0)
+-
+-/* The Paul Hsieh hash function */
+-#undef get16bits
+-#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+- || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+-#define get16bits(d) (*((const uint16_t *) (d)))
+-#endif
+-
+-#if !defined (get16bits)
+-#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+- +(uint32_t)(((const uint8_t *)(d))[0]) )
+-#endif
+-#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- unsigned char *_sfh_key=(unsigned char*)(key); \
+- uint32_t _sfh_tmp, _sfh_len = keylen; \
+- \
+- int _sfh_rem = _sfh_len & 3; \
+- _sfh_len >>= 2; \
+- hashv = 0xcafebabe; \
+- \
+- /* Main loop */ \
+- for (;_sfh_len > 0; _sfh_len--) { \
+- hashv += get16bits (_sfh_key); \
+- _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \
+- hashv = (hashv << 16) ^ _sfh_tmp; \
+- _sfh_key += 2*sizeof (uint16_t); \
+- hashv += hashv >> 11; \
+- } \
+- \
+- /* Handle end cases */ \
+- switch (_sfh_rem) { \
+- case 3: hashv += get16bits (_sfh_key); \
+- hashv ^= hashv << 16; \
+- hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \
+- hashv += hashv >> 11; \
+- break; \
+- case 2: hashv += get16bits (_sfh_key); \
+- hashv ^= hashv << 11; \
+- hashv += hashv >> 17; \
+- break; \
+- case 1: hashv += *_sfh_key; \
+- hashv ^= hashv << 10; \
+- hashv += hashv >> 1; \
+- } \
+- \
+- /* Force "avalanching" of final 127 bits */ \
+- hashv ^= hashv << 3; \
+- hashv += hashv >> 5; \
+- hashv ^= hashv << 4; \
+- hashv += hashv >> 17; \
+- hashv ^= hashv << 25; \
+- hashv += hashv >> 6; \
+- bkt = hashv & (num_bkts-1); \
+-} while(0)
+-
+-#ifdef HASH_USING_NO_STRICT_ALIASING
+-/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+- * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+- * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+- *
+- * Note the preprocessor built-in defines can be emitted using:
+- *
+- * gcc -m64 -dM -E - < /dev/null (on gcc)
+- * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+- */
+-#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+-#define MUR_GETBLOCK(p,i) p[i]
+-#else /* non intel */
+-#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0)
+-#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1)
+-#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2)
+-#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3)
+-#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+-#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+-#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+-#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+-#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+-#else /* assume little endian non-intel */
+-#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+-#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+-#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+-#endif
+-#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+- (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
+- (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \
+- MUR_ONE_THREE(p))))
+-#endif
+-#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+-#define MUR_FMIX(_h) \
+-do { \
+- _h ^= _h >> 16; \
+- _h *= 0x85ebca6b; \
+- _h ^= _h >> 13; \
+- _h *= 0xc2b2ae35l; \
+- _h ^= _h >> 16; \
+-} while(0)
+-
+-#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \
+-do { \
+- const uint8_t *_mur_data = (const uint8_t*)(key); \
+- const int _mur_nblocks = (keylen) / 4; \
+- uint32_t _mur_h1 = 0xf88D5353; \
+- uint32_t _mur_c1 = 0xcc9e2d51; \
+- uint32_t _mur_c2 = 0x1b873593; \
+- uint32_t _mur_k1 = 0; \
+- const uint8_t *_mur_tail; \
+- const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \
+- int _mur_i; \
+- for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \
+- _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
+- _mur_k1 *= _mur_c1; \
+- _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+- _mur_k1 *= _mur_c2; \
+- \
+- _mur_h1 ^= _mur_k1; \
+- _mur_h1 = MUR_ROTL32(_mur_h1,13); \
+- _mur_h1 = _mur_h1*5+0xe6546b64; \
+- } \
+- _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \
+- _mur_k1=0; \
+- switch((keylen) & 3) { \
+- case 3: _mur_k1 ^= _mur_tail[2] << 16; \
+- case 2: _mur_k1 ^= _mur_tail[1] << 8; \
+- case 1: _mur_k1 ^= _mur_tail[0]; \
+- _mur_k1 *= _mur_c1; \
+- _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+- _mur_k1 *= _mur_c2; \
+- _mur_h1 ^= _mur_k1; \
+- } \
+- _mur_h1 ^= (keylen); \
+- MUR_FMIX(_mur_h1); \
+- hashv = _mur_h1; \
+- bkt = hashv & (num_bkts-1); \
+-} while(0)
+-#endif /* HASH_USING_NO_STRICT_ALIASING */
+-
+-/* key comparison function; return 0 if keys equal */
+-#define HASH_KEYCMP(a,b,len) memcmp(a,b,len)
+-
+-/* iterate over items in a known bucket to find desired item */
+-#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
+-do { \
+- if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \
+- else out=NULL; \
+- while (out) { \
+- if ((out)->hh.keylen == keylen_in) { \
+- if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \
+- } \
+- if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \
+- else out = NULL; \
+- } \
+-} while(0)
+-
+-/* add an item to a bucket */
+-#define HASH_ADD_TO_BKT(head,addhh) \
+-do { \
+- head.count++; \
+- (addhh)->hh_next = head.hh_head; \
+- (addhh)->hh_prev = NULL; \
+- if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \
+- (head).hh_head=addhh; \
+- if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \
+- && (addhh)->tbl->noexpand != 1) { \
+- HASH_EXPAND_BUCKETS((addhh)->tbl); \
+- } \
+-} while(0)
+-
+-/* remove an item from a given bucket */
+-#define HASH_DEL_IN_BKT(hh,head,hh_del) \
+- (head).count--; \
+- if ((head).hh_head == hh_del) { \
+- (head).hh_head = hh_del->hh_next; \
+- } \
+- if (hh_del->hh_prev) { \
+- hh_del->hh_prev->hh_next = hh_del->hh_next; \
+- } \
+- if (hh_del->hh_next) { \
+- hh_del->hh_next->hh_prev = hh_del->hh_prev; \
+- }
+-
+-/* Bucket expansion has the effect of doubling the number of buckets
+- * and redistributing the items into the new buckets. Ideally the
+- * items will distribute more or less evenly into the new buckets
+- * (the extent to which this is true is a measure of the quality of
+- * the hash function as it applies to the key domain).
+- *
+- * With the items distributed into more buckets, the chain length
+- * (item count) in each bucket is reduced. Thus by expanding buckets
+- * the hash keeps a bound on the chain length. This bounded chain
+- * length is the essence of how a hash provides constant time lookup.
+- *
+- * The calculation of tbl->ideal_chain_maxlen below deserves some
+- * explanation. First, keep in mind that we're calculating the ideal
+- * maximum chain length based on the *new* (doubled) bucket count.
+- * In fractions this is just n/b (n=number of items,b=new num buckets).
+- * Since the ideal chain length is an integer, we want to calculate
+- * ceil(n/b). We don't depend on floating point arithmetic in this
+- * hash, so to calculate ceil(n/b) with integers we could write
+- *
+- * ceil(n/b) = (n/b) + ((n%b)?1:0)
+- *
+- * and in fact a previous version of this hash did just that.
+- * But now we have improved things a bit by recognizing that b is
+- * always a power of two. We keep its base 2 log handy (call it lb),
+- * so now we can write this with a bit shift and logical AND:
+- *
+- * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+- *
+- */
+-#define HASH_EXPAND_BUCKETS(tbl) \
+-do { \
+- unsigned _he_bkt; \
+- unsigned _he_bkt_i; \
+- struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
+- UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+- _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
+- 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+- if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \
+- memset(_he_new_buckets, 0, \
+- 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+- tbl->ideal_chain_maxlen = \
+- (tbl->num_items >> (tbl->log2_num_buckets+1)) + \
+- ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \
+- tbl->nonideal_items = 0; \
+- for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
+- { \
+- _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
+- while (_he_thh) { \
+- _he_hh_nxt = _he_thh->hh_next; \
+- HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \
+- _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
+- if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
+- tbl->nonideal_items++; \
+- _he_newbkt->expand_mult = _he_newbkt->count / \
+- tbl->ideal_chain_maxlen; \
+- } \
+- _he_thh->hh_prev = NULL; \
+- _he_thh->hh_next = _he_newbkt->hh_head; \
+- if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \
+- _he_thh; \
+- _he_newbkt->hh_head = _he_thh; \
+- _he_thh = _he_hh_nxt; \
+- } \
+- } \
+- uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
+- tbl->num_buckets *= 2; \
+- tbl->log2_num_buckets++; \
+- tbl->buckets = _he_new_buckets; \
+- tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
+- (tbl->ineff_expands+1) : 0; \
+- if (tbl->ineff_expands > 1) { \
+- tbl->noexpand=1; \
+- uthash_noexpand_fyi(tbl); \
+- } \
+- uthash_expand_fyi(tbl); \
+-} while(0)
+-
+-
+-/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+-/* Note that HASH_SORT assumes the hash handle name to be hh.
+- * HASH_SRT was added to allow the hash handle name to be passed in. */
+-#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
+-#define HASH_SRT(hh,head,cmpfcn) \
+-do { \
+- unsigned _hs_i; \
+- unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+- struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+- if (head) { \
+- _hs_insize = 1; \
+- _hs_looping = 1; \
+- _hs_list = &((head)->hh); \
+- while (_hs_looping) { \
+- _hs_p = _hs_list; \
+- _hs_list = NULL; \
+- _hs_tail = NULL; \
+- _hs_nmerges = 0; \
+- while (_hs_p) { \
+- _hs_nmerges++; \
+- _hs_q = _hs_p; \
+- _hs_psize = 0; \
+- for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
+- _hs_psize++; \
+- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+- ((void*)((char*)(_hs_q->next) + \
+- (head)->hh.tbl->hho)) : NULL); \
+- if (! (_hs_q) ) break; \
+- } \
+- _hs_qsize = _hs_insize; \
+- while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \
+- if (_hs_psize == 0) { \
+- _hs_e = _hs_q; \
+- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+- ((void*)((char*)(_hs_q->next) + \
+- (head)->hh.tbl->hho)) : NULL); \
+- _hs_qsize--; \
+- } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \
+- _hs_e = _hs_p; \
+- if (_hs_p){ \
+- _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
+- ((void*)((char*)(_hs_p->next) + \
+- (head)->hh.tbl->hho)) : NULL); \
+- } \
+- _hs_psize--; \
+- } else if (( \
+- cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
+- DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
+- ) <= 0) { \
+- _hs_e = _hs_p; \
+- if (_hs_p){ \
+- _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
+- ((void*)((char*)(_hs_p->next) + \
+- (head)->hh.tbl->hho)) : NULL); \
+- } \
+- _hs_psize--; \
+- } else { \
+- _hs_e = _hs_q; \
+- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
+- ((void*)((char*)(_hs_q->next) + \
+- (head)->hh.tbl->hho)) : NULL); \
+- _hs_qsize--; \
+- } \
+- if ( _hs_tail ) { \
+- _hs_tail->next = ((_hs_e) ? \
+- ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
+- } else { \
+- _hs_list = _hs_e; \
+- } \
+- if (_hs_e) { \
+- _hs_e->prev = ((_hs_tail) ? \
+- ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
+- } \
+- _hs_tail = _hs_e; \
+- } \
+- _hs_p = _hs_q; \
+- } \
+- if (_hs_tail){ \
+- _hs_tail->next = NULL; \
+- } \
+- if ( _hs_nmerges <= 1 ) { \
+- _hs_looping=0; \
+- (head)->hh.tbl->tail = _hs_tail; \
+- DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+- } \
+- _hs_insize *= 2; \
+- } \
+- HASH_FSCK(hh,head); \
+- } \
+-} while (0)
+-
+-/* This function selects items from one hash into another hash.
+- * The end result is that the selected items have dual presence
+- * in both hashes. There is no copy of the items made; rather
+- * they are added into the new hash through a secondary hash
+- * hash handle that must be present in the structure. */
+-#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+-do { \
+- unsigned _src_bkt, _dst_bkt; \
+- void *_last_elt=NULL, *_elt; \
+- UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+- ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+- if (src) { \
+- for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+- for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+- _src_hh; \
+- _src_hh = _src_hh->hh_next) { \
+- _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+- if (cond(_elt)) { \
+- _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+- _dst_hh->key = _src_hh->key; \
+- _dst_hh->keylen = _src_hh->keylen; \
+- _dst_hh->hashv = _src_hh->hashv; \
+- _dst_hh->prev = _last_elt; \
+- _dst_hh->next = NULL; \
+- if (_last_elt_hh) { _last_elt_hh->next = _elt; } \
+- if (!dst) { \
+- DECLTYPE_ASSIGN(dst,_elt); \
+- HASH_MAKE_TABLE(hh_dst,dst); \
+- } else { \
+- _dst_hh->tbl = (dst)->hh_dst.tbl; \
+- } \
+- HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+- HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
+- (dst)->hh_dst.tbl->num_items++; \
+- _last_elt = _elt; \
+- _last_elt_hh = _dst_hh; \
+- } \
+- } \
+- } \
+- } \
+- HASH_FSCK(hh_dst,dst); \
+-} while (0)
+-
+-#define HASH_CLEAR(hh,head) \
+-do { \
+- if (head) { \
+- uthash_free((head)->hh.tbl->buckets, \
+- (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
+- HASH_BLOOM_FREE((head)->hh.tbl); \
+- uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+- (head)=NULL; \
+- } \
+-} while(0)
+-
+-#define HASH_OVERHEAD(hh,head) \
+- (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
+- ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
+- (sizeof(UT_hash_table)) + \
+- (HASH_BLOOM_BYTELEN)))
+-
+-#ifdef NO_DECLTYPE
+-#define HASH_ITER(hh,head,el,tmp) \
+-for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \
+- el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL))
+-#else
+-#define HASH_ITER(hh,head,el,tmp) \
+-for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \
+- el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL))
+-#endif
+-
+-/* obtain a count of items in the hash */
+-#define HASH_COUNT(head) HASH_CNT(hh,head)
+-#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0)
+-
+-typedef struct UT_hash_bucket {
+- struct UT_hash_handle *hh_head;
+- unsigned count;
+-
+- /* expand_mult is normally set to 0. In this situation, the max chain length
+- * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+- * the bucket's chain exceeds this length, bucket expansion is triggered).
+- * However, setting expand_mult to a non-zero value delays bucket expansion
+- * (that would be triggered by additions to this particular bucket)
+- * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+- * (The multiplier is simply expand_mult+1). The whole idea of this
+- * multiplier is to reduce bucket expansions, since they are expensive, in
+- * situations where we know that a particular bucket tends to be overused.
+- * It is better to let its chain length grow to a longer yet-still-bounded
+- * value, than to do an O(n) bucket expansion too often.
+- */
+- unsigned expand_mult;
+-
+-} UT_hash_bucket;
+-
+-/* random signature used only to find hash tables in external analysis */
+-#define HASH_SIGNATURE 0xa0111fe1
+-#define HASH_BLOOM_SIGNATURE 0xb12220f2
+-
+-typedef struct UT_hash_table {
+- UT_hash_bucket *buckets;
+- unsigned num_buckets, log2_num_buckets;
+- unsigned num_items;
+- struct UT_hash_handle *tail; /* tail hh in app order, for fast append */
+- ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+-
+- /* in an ideal situation (all buckets used equally), no bucket would have
+- * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+- unsigned ideal_chain_maxlen;
+-
+- /* nonideal_items is the number of items in the hash whose chain position
+- * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+- * hash distribution; reaching them in a chain traversal takes >ideal steps */
+- unsigned nonideal_items;
+-
+- /* ineffective expands occur when a bucket doubling was performed, but
+- * afterward, more than half the items in the hash had nonideal chain
+- * positions. If this happens on two consecutive expansions we inhibit any
+- * further expansion, as it's not helping; this happens when the hash
+- * function isn't a good fit for the key domain. When expansion is inhibited
+- * the hash will still work, albeit no longer in constant time. */
+- unsigned ineff_expands, noexpand;
+-
+- uint32_t signature; /* used only to find hash tables in external analysis */
+-#ifdef HASH_BLOOM
+- uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+- uint8_t *bloom_bv;
+- char bloom_nbits;
+-#endif
+-
+-} UT_hash_table;
+-
+-typedef struct UT_hash_handle {
+- struct UT_hash_table *tbl;
+- void *prev; /* prev element in app order */
+- void *next; /* next element in app order */
+- struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
+- struct UT_hash_handle *hh_next; /* next hh in bucket order */
+- void *key; /* ptr to enclosing struct's key */
+- unsigned keylen; /* enclosing struct's key len */
+- unsigned hashv; /* result of hash-fcn(key) */
+-} UT_hash_handle;
+-
+-#endif /* UTHASH_H */
+--
+2.15.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init
new file mode 100644
index 000000000..d2a27b273
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init
@@ -0,0 +1,89 @@
+#! /bin/sh
+
+# Based on the Debian initscript for mosquitto
+
+### BEGIN INIT INFO
+# Provides: mosquitto
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: mosquitto MQTT v3.1 message broker
+# Description:
+# This is a message broker that supports version 3.1 of the MQ Telemetry
+# Transport (MQTT) protocol.
+#
+# MQTT provides a method of carrying out messaging using a publish/subscribe
+# model. It is lightweight, both in terms of bandwidth usage and ease of
+# implementation. This makes it particularly useful at the edge of the network
+# where a sensor or other simple device may be implemented using an arduino for
+# example.
+### END INIT INFO
+
+set -e
+
+PIDFILE=@LOCALSTATEDIR@/run/mosquitto.pid
+DAEMON=@SBINDIR@/mosquitto
+
+# start and stop the mosquitto MQTT message broker
+
+test -x ${DAEMON} || exit 0
+
+umask 022
+
+. @SYSCONFDIR@/init.d/functions
+
+export PATH="${PATH:+$PATH:}@SBINDIR@:@BASE_SBINDIR@"
+
+case "$1" in
+ start)
+ echo "Starting Mosquitto message broker" "mosquitto"
+ if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ; then
+ exit 0
+ else
+ exit 1
+ fi
+ ;;
+ stop)
+ echo "Stopping Mosquitto message broker" "mosquitto"
+ if start-stop-daemon --stop --quiet --oknodo --pidfile ${PIDFILE}; then
+ rm -f ${PIDFILE}
+ exit 0
+ else
+ exit 1
+ fi
+ ;;
+
+
+ reload|force-reload)
+ if [ -f ${PIDFILE} ] ; then
+ echo "Reloading configuration for mosquitto"
+ pid=`cat ${PIDFILE}`
+ kill -HUP $pid
+ else
+ echo "mosquitto does not seem to be running"
+ fi
+ ;;
+
+ restart)
+ echo "Restarting Mosquitto message broker" "mosquitto"
+ if start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile ${PIDFILE}; then
+ rm -f ${PIDFILE}
+ fi
+ if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c @SYSCONFDIR@/mosquitto/mosquitto.conf ; then
+ exit 0
+ else
+ exit 1
+ fi
+ ;;
+
+ status)
+ status ${DAEMON} && exit 0 || exit $?
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|reload|force-reload|restart|status}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service
new file mode 100644
index 000000000..25f68fae0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Mosquitto - lightweight server implementation of the MQTT and MQTT-SN protocols
+ConditionPathExists=/etc/mosquitto/mosquitto.conf
+After=network.target
+
+[Service]
+Type=simple
+ExecStartPre=/bin/rm -f /var/run/mosquitto.pid
+ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
+ExecReload=/bin/kill -HUP $MAINPID
+PIDFile=/var/run/mosquitto.pid
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb
new file mode 100644
index 000000000..13ce3811d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb
@@ -0,0 +1,83 @@
+SUMMARY = "Open source MQTT v3.1/3.1.1 implemention"
+DESCRIPTION = "Mosquitto is an open source (Eclipse licensed) message broker that implements the MQ Telemetry Transport protocol version 3.1 and 3.1.1. MQTT provides a lightweight method of carrying out messaging using a publish/subscribe model. "
+HOMEPAGE = "http://mosquitto.org/"
+SECTION = "console/network"
+LICENSE = "EPL-1.0 | EDL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62ddc846179e908dc0c8efec4a42ef20 \
+ file://edl-v10;md5=c09f121939f063aeb5235972be8c722c \
+ file://epl-v10;md5=8d383c379e91d20ba18a52c3e7d3a979 \
+ file://notice.html;md5=a00d6f9ab542be7babc2d8b80d5d2a4c \
+"
+DEPENDS = "uthash"
+
+SRC_URI = "http://mosquitto.org/files/source/mosquitto-${PV}.tar.gz \
+ file://0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch \
+ file://0002-uthash-remove-in-tree-version.patch \
+ file://mosquitto.service \
+ file://mosquitto.init \
+"
+
+SRC_URI[md5sum] = "6b0966e93f118bc71ad7b61600a6c2d3"
+SRC_URI[sha256sum] = "156b1fa731d12baad4b8b22f7b6a8af50ba881fc711b81e9919ec103cf2942d1"
+
+inherit systemd update-rc.d useradd
+
+PACKAGECONFIG ??= "ssl uuid"
+
+PACKAGECONFIG[dns-srv] = ",,c-ares"
+PACKAGECONFIG[ssl] = ",,openssl"
+PACKAGECONFIG[uuid] = ",,util-linux"
+EXTRA_OEMAKE = "${@bb.utils.contains('PACKAGECONFIG', 'dns-srv', 'WITH_SRV=yes', 'WITH_SRV=no', d)} \
+ STRIP=/bin/true \
+ WITH_DOCS=no \
+ ${@bb.utils.contains('PACKAGECONFIG', 'ssl', 'WITH_TLS=yes WITH_TLS_PSK=yes', 'WITH_TLS=no WITH_TLS_PSK=no', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'uuid', 'WITH_UUID=yes', 'WITH_UUID=no', d)}"
+
+export LIB_SUFFIX="${@d.getVar('baselib', True).replace('lib', '')}"
+
+do_compile() {
+ oe_runmake PREFIX=${prefix}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+ install -d ${D}${libdir}
+ install -m 0644 lib/libmosquitto.a ${D}${libdir}/
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/mosquitto.service ${D}${systemd_unitdir}/system/
+
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/mosquitto.init ${D}${sysconfdir}/init.d/mosquitto
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
+ -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${sysconfdir}/init.d/mosquitto
+}
+
+PACKAGES += "libmosquitto1 libmosquittopp1 ${PN}-clients"
+
+FILES_${PN} = "${sbindir}/mosquitto \
+ ${bindir}/mosquitto_passwd \
+ ${sysconfdir}/mosquitto \
+ ${sysconfdir}/init.d \
+ ${systemd_unitdir}/system/mosquitto.service \
+"
+
+FILES_libmosquitto1 = "${libdir}/libmosquitto.so.1"
+
+FILES_libmosquittopp1 = "${libdir}/libmosquittopp.so.1"
+
+FILES_${PN}-clients = "${bindir}/mosquitto_pub \
+ ${bindir}/mosquitto_sub \
+"
+
+SYSTEMD_SERVICE_${PN} = "mosquitto.service"
+
+INITSCRIPT_NAME = "mosquitto"
+INITSCRIPT_PARAMS = "defaults 30"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --no-create-home --shell /bin/false \
+ --user-group mosquitto"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch b/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
new file mode 100644
index 000000000..e2c4e9ff6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
@@ -0,0 +1,20 @@
+Submitted By: Armin K. <krejzi at email dot com>
+Date: 2012-07-06
+Initial Package Version: 0.4.6
+Upstream Status: Unknown
+Origin: Self
+Description: Some build fixes.
+
+Index: obex-data-server-0.4.6/src/ods-obex.c
+===================================================================
+--- obex-data-server-0.4.6.orig/src/ods-obex.c
++++ obex-data-server-0.4.6/src/ods-obex.c
+@@ -412,7 +412,7 @@ ods_obex_setup_usbtransport (OdsObexCont
+ goto err;
+ }
+
+- interfaces_num = OBEX_FindInterfaces(obex_context->obex_handle, &obex_intf);
++ interfaces_num = OBEX_EnumerateInterfaces(obex_context->obex_handle);
+ if (intf_num >= interfaces_num) {
+ g_set_error (error, ODS_ERROR, ODS_ERROR_FAILED, "Invalid interface number");
+ goto err;
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server_0.4.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server_0.4.6.bb
new file mode 100644
index 000000000..715b02352
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obex/obex-data-server_0.4.6.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "obex-data-server is a D-Bus service providing high-level OBEX client and server side functionality"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "gtk+ dbus-glib dbus-glib-native imagemagick openobex"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)}"
+
+SRC_URI = "http://tadas.dailyda.com/software/obex-data-server-${PV}.tar.gz \
+ file://obex-data-server-0.4.6-build-fixes-1.patch \
+"
+SRC_URI[md5sum] = "961ca5db6fe9c97024e133cc6203cc4d"
+SRC_URI[sha256sum] = "b399465ddbd6d0217abedd9411d9d74a820effa0a6a142adc448268d3920094f"
+
+inherit distro_features_check autotools-brokensep pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+FILES_${PN} += "${datadir}/dbus-1/"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb
new file mode 100644
index 000000000..1b56685c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "The Openobex project is an open source implementation of the \
+Object Exchange (OBEX) protocol."
+HOMEPAGE = "http://openobex.triq.net"
+SECTION = "libs"
+DEPENDS = "virtual/libusb0"
+DEPENDS_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)}"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
+ file://COPYING.LIB;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}/${PV}/${BP}-Source.tar.gz \
+"
+
+SRC_URI[md5sum] = "f6e0b6cb7dcfd731460a7e9a91429a3a"
+SRC_URI[sha256sum] = "158860aaea52f0fce0c8e4b64550daaae06df2689e05834697b7e8c7d73dd4fc"
+
+inherit cmake pkgconfig
+
+S = "${WORKDIR}/${BP}-Source"
+
+EXTRA_OECONF = " -DCMAKE_SKIP_RPATH=ON "
+EXTRA_OECMAKE += "-DBUILD_DOCUMENTATION=OFF"
+
+#--enable-apps --enable-syslog
+
+ASNEEDED = ""
+
+do_install_append () {
+ rmdir ${D}${bindir}
+}
+
+PACKAGES =+ "openobex-apps"
+FILES_${PN}-apps = "${bindir}/*"
+FILES_${PN} += "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}/openobex-config ${libdir}/cmake"
+DEBIAN_NOAUTONAME_${PN}-apps = "1"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/0001-apps-CMakeLists.txt-Explicitly-link-libbfb-and-libmu.patch b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/0001-apps-CMakeLists.txt-Explicitly-link-libbfb-and-libmu.patch
new file mode 100644
index 000000000..1f6de87c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/0001-apps-CMakeLists.txt-Explicitly-link-libbfb-and-libmu.patch
@@ -0,0 +1,66 @@
+From b8dc608dad7d9fc3a4c16acd0327d97b81c23b95 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 15 Nov 2016 01:32:31 +0000
+Subject: [PATCH] apps/CMakeLists.txt: Explicitly link libbfb and libmulticobex
+
+Transitive linking is disabled now for multicobex and
+obexftp, This ends up with linking errors for apps, therefore
+they are required to be added to link line explicitly.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ apps/CMakeLists.txt | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+Index: obexftp-0.24.2-Source/apps/CMakeLists.txt
+===================================================================
+--- obexftp-0.24.2-Source.orig/apps/CMakeLists.txt
++++ obexftp-0.24.2-Source/apps/CMakeLists.txt
+@@ -5,14 +5,23 @@ add_definitions( -DVERSION="${obexftp_VE
+ add_definitions ( -DHAVE_USB )
+
+ add_executable ( obexftp_app obexftp.c )
+-target_link_libraries ( obexftp_app obexftp )
++target_link_libraries ( obexftp_app
++ PRIVATE multicobex
++ PRIVATE bfb
++ obexftp
++)
+ set_target_properties ( obexftp_app PROPERTIES
+ OUTPUT_NAME obexftp
+ )
+
+
+ add_executable ( obexftpd_app obexftpd.c )
+-target_link_libraries ( obexftpd_app obexftp openobex )
++target_link_libraries ( obexftpd_app
++ PRIVATE multicobex
++ PRIVATE bfb
++ obexftp
++ openobex
++)
+ set_target_properties ( obexftpd_app PROPERTIES
+ OUTPUT_NAME obexftpd
+ )
+Index: obexftp-0.24.2-Source/fuse/CMakeLists.txt
+===================================================================
+--- obexftp-0.24.2-Source.orig/fuse/CMakeLists.txt
++++ obexftp-0.24.2-Source/fuse/CMakeLists.txt
+@@ -13,6 +13,8 @@ if ( Fuse_FOUND )
+ )
+
+ target_link_libraries ( obexfs
++ PRIVATE multicobex
++ PRIVATE bfb
+ obexftp
+ ${Fuse_LIBRARIES}
+ ${EXPAT_LIBRARIES}
+@@ -23,6 +25,8 @@ if ( Fuse_FOUND )
+ )
+
+ target_link_libraries ( obexautofs
++ PRIVATE multicobex
++ PRIVATE bfb
+ obexftp
+ ${Fuse_LIBRARIES}
+ )
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/Remove_some_printf_in_obexftpd.patch b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/Remove_some_printf_in_obexftpd.patch
new file mode 100644
index 000000000..8b73af32e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/Remove_some_printf_in_obexftpd.patch
@@ -0,0 +1,34 @@
+Signed-off-by: Jun Zhu <R01007@freescale.com>
+
+Upstream-Status: Not applicable
+
+diff -Nru obexftp-0.23/apps.orig/obexftpd.c obexftp-0.23/apps/obexftpd.c
+--- obexftp-0.23/apps.orig/obexftpd.c 2013-11-08 10:42:20.816631583 +0800
++++ obexftp-0.23/apps/obexftpd.c 2013-11-08 10:44:18.628634893 +0800
+@@ -639,7 +639,7 @@
+ struct stat statbuf;
+ //char *namebuf = NULL;
+
+- fprintf(stderr, "put_done>>>\n");
++ //fprintf(stderr, "put_done>>>\n");
+ while(OBEX_ObjectGetNextHeader(handle, object, &hi, &hv, &hlen)) {
+ switch(hi) {
+ case OBEX_HDR_BODY:
+@@ -671,7 +671,7 @@
+ }
+ }
+ if(!body) {
+- printf("Got a PUT without a body\n");
++ //printf("Got a PUT without a body\n");
+ OBEX_ObjectSetRsp(object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);
+ }
+ if(!name) {
+@@ -807,7 +807,7 @@
+
+ switch(obex_cmd) {
+ case OBEX_CMD_PUT:
+- fprintf(stderr, "obex_ev_progress: obex_cmd_put\n");
++ //fprintf(stderr, "obex_ev_progress: obex_cmd_put\n");
+ put_done(handle, obj, 0);
+ break;
+ default:
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/make_fuse_swig_optional.patch b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/make_fuse_swig_optional.patch
new file mode 100644
index 000000000..84b143bf5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp/make_fuse_swig_optional.patch
@@ -0,0 +1,24 @@
+Index: obexftp-0.24.2-Source/CMakeLists.txt
+===================================================================
+--- obexftp-0.24.2-Source.orig/CMakeLists.txt
++++ obexftp-0.24.2-Source/CMakeLists.txt
+@@ -58,9 +58,17 @@ add_subdirectory ( bfb )
+ add_subdirectory ( multicobex )
+ add_subdirectory ( obexftp )
+ add_subdirectory ( apps )
+-add_subdirectory ( fuse )
+-add_subdirectory ( swig )
+ add_subdirectory ( doc )
++
++option ( ENABLE_FUSE "Build the obexftp fuse module" OFF )
++if ( ENABLE_FUSE )
++ add_subdirectory ( fuse )
++endif ( ENABLE_FUSE )
++
++option ( ENABLE_SWIG "Build the obexftp swig module" OFF )
++if ( ENABLE_SWIG )
++ add_subdirectory ( swig )
++endif ( ENABLE_SWIG )
+ #examples
+
+ set ( prefix "${CMAKE_INSTALL_PREFIX}" )
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp_0.24.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp_0.24.2.bb
new file mode 100644
index 000000000..b4a914d92
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obexftp/obexftp_0.24.2.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "A tool for transfer files to/from any OBEX enabled device"
+LICENSE = "GPLv2 & PD & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LGPL-2.1.txt;md5=4fbd65380cdd255951079008b364516c \
+ file://GPL-2.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://License.txt;md5=fcbddc3c1debed80dd80da2d3e5f0dc1 \
+ "
+
+DEPENDS += "openobex obexftp-native"
+SRC_URI = "http://downloads.sourceforge.net/openobex/${BP}-Source.tar.gz \
+ file://Remove_some_printf_in_obexftpd.patch \
+ file://0001-apps-CMakeLists.txt-Explicitly-link-libbfb-and-libmu.patch \
+ file://make_fuse_swig_optional.patch \
+"
+SRC_URI[md5sum] = "157a9d1b2ed220203f7084db906de73c"
+SRC_URI[sha256sum] = "d40fb48e0a0eea997b3e582774b29f793919a625d54b87182e31a3f3d1c989a3"
+
+inherit cmake pkgconfig
+
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+PACKAGECONFIG ?= ""
+# fuse support will need meta-filesystems layer
+PACKAGECONFIG[fuse] = "-DENABLE_FUSE=ON,-DENABLE_FUSE=OFF,fuse"
+PACKAGECONFIG[swig] = "-DENABLE_SWIG=ON,-DENABLE_SWIG=OFF,swig"
+
+DEPENDS_remove_class-native = "fuse-native"
+
+S = "${WORKDIR}/${BP}-Source"
+
+EXTRA_OECMAKE += "-DCMAKE_SKIP_RPATH=ON \
+ -DENABLE_PERL=OFF -DENABLE_PYTHON=OFF \
+ -DENABLE_RUBY=OFF -DENABLE_TCL=OFF \
+"
+
+do_compile_class-native () {
+ oe_runmake crctable
+}
+
+do_install_class-native () {
+ install -D -m 0755 ${B}/bfb/crctable ${D}${bindir}/crctable
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/packagegroups/packagegroup-tools-bluetooth.bb b/meta-openembedded/meta-oe/recipes-connectivity/packagegroups/packagegroup-tools-bluetooth.bb
new file mode 100644
index 000000000..f2a16dcf7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/packagegroups/packagegroup-tools-bluetooth.bb
@@ -0,0 +1,37 @@
+# Copyright (C) 2014-2015 Freescale Semiconductor
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SUMMARY = "Set of Bluetooth related tools for inclusion in images"
+DESCRIPTION = "Includes bluetooth specific tools for this version of BlueZ.\
+These tools are used at runtime. \
+Supports BlueZ4 and BlueZ5."
+
+inherit packagegroup
+inherit bluetooth
+
+RDEPENDS_bluez4 = " \
+ obexftp \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'libasound-module-bluez', '', d)} \
+"
+
+RDEPENDS_bluez5 = " \
+ bluez5-noinst-tools \
+ bluez5-obex \
+ bluez5-testtools \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', \
+ 'pulseaudio-module-bluetooth-discover \
+ pulseaudio-module-bluetooth-policy \
+ pulseaudio-module-bluez5-discover \
+ pulseaudio-module-bluez5-device \
+ pulseaudio-module-switch-on-connect \
+ pulseaudio-module-loopback', \
+ '', d)} \
+"
+
+# Install bluez4 tools or bluez5 tools depending on what is specified in the distro.
+# Otherwise install nothing.
+RDEPENDS_${PN} = "${RDEPENDS_${BLUEZ}}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/makefile.patch b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/makefile.patch
new file mode 100644
index 000000000..a31bfaa74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/makefile.patch
@@ -0,0 +1,25 @@
+Disable building some things we don't need
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 33bd2d0..84262bd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -115,7 +115,8 @@ LDFLAGS_AS = -shared -Wl,-soname,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -lpthread
+
+ all: build
+
+-build: | mkdir ${MQTTLIB_C_TARGET} ${MQTTLIB_CS_TARGET} ${MQTTLIB_A_TARGET} ${MQTTLIB_AS_TARGET} ${MQTTVERSION_TARGET} ${SYNC_SAMPLES} ${ASYNC_SAMPLES} ${SYNC_TESTS} ${SYNC_SSL_TESTS} ${ASYNC_TESTS} ${ASYNC_SSL_TESTS}
++build: | mkdir ${MQTTLIB_C_TARGET} ${MQTTLIB_CS_TARGET} ${MQTTLIB_A_TARGET} ${MQTTLIB_AS_TARGET}
++#${MQTTVERSION_TARGET} ${SYNC_SAMPLES} ${ASYNC_SAMPLES} ${SYNC_TESTS} ${SYNC_SSL_TESTS} ${ASYNC_TESTS} ${ASYNC_SSL_TESTS}
+
+ clean:
+ rm -rf ${blddir}/*
+--
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb
new file mode 100644
index 000000000..fec380ce6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Paho MQTT - C libraries for the MQTT and MQTT-SN protocols"
+DESCRIPTION = "Client implementation of open and standard messaging protocols for Machine-to-Machine (M2M) and Internet of Things (IoT)."
+HOMEPAGE = "http://www.eclipse.org/paho/"
+SECTION = "console/network"
+LICENSE = "EPL-1.0 | EDL-1.0"
+
+LIC_FILES_CHKSUM = " \
+ file://edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3 \
+ file://epl-v10;md5=659c8e92a40b6df1d9e3dccf5ae45a08 \
+ file://notice.html;md5=a00d6f9ab542be7babc2d8b80d5d2a4c \
+ file://about.html;md5=dcde438d73cf42393da9d40fabc0c9bc \
+"
+
+SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http"
+
+SRCREV = "e8d34da24ad807f5e698b327d67591fd4b4bfa7e"
+
+DEPENDS = "openssl"
+
+S = "${WORKDIR}/git"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+ install -d ${D}${libdir}
+ oe_libinstall -C build/output -so libpaho-mqtt3a ${D}${libdir}
+ oe_libinstall -C build/output -so libpaho-mqtt3as ${D}${libdir}
+ oe_libinstall -C build/output -so libpaho-mqtt3c ${D}${libdir}
+ oe_libinstall -C build/output -so libpaho-mqtt3cs ${D}${libdir}
+ install -d ${D}${includedir}
+ install -m 644 src/MQTTAsync.h ${D}${includedir}
+ install -m 644 src/MQTTClient.h ${D}${includedir}
+ install -m 644 src/MQTTClientPersistence.h ${D}${includedir}
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils/0001-Include-limits.h-for-PATH_MAX.patch b/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils/0001-Include-limits.h-for-PATH_MAX.patch
new file mode 100644
index 000000000..8bb7e5a18
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils/0001-Include-limits.h-for-PATH_MAX.patch
@@ -0,0 +1,25 @@
+From f7ad9a4471cee2324f216a0d82ba8097ec746c56 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 11:48:12 -0700
+Subject: [PATCH] Include limits.h for PATH_MAX
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/pnstat.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/pnstat.c b/src/pnstat.c
+index 661a5bc..76068e6 100644
+--- a/src/pnstat.c
++++ b/src/pnstat.c
+@@ -35,6 +35,7 @@
+ #include <dirent.h>
+ #include <unistd.h>
+ #include <netinet/tcp.h>
++#include <limits.h>
+
+ struct fd
+ {
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb
new file mode 100644
index 000000000..3c599950f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "This small package provides a few command line tools for Linux Phonet"
+HOMEPAGE = ""
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+SRC_URI = "git://gitorious.org/meego-cellular/phonet-utils.git;branch=master \
+ file://0001-Include-limits.h-for-PATH_MAX.patch \
+ "
+PR = "r2"
+S = "${WORKDIR}/git"
+SRCREV = "4acfa720fd37d178a048fc2be17180137d4a70ea"
+PV = "0.0.0+gitr${SRCPV}"
+
+inherit autotools-brokensep
+
+FILES_${PN} += "${base_libdir}/udev/rules.d/85-phonet-utils.rules"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rabbitmq-c/rabbitmq-c_0.7.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/rabbitmq-c/rabbitmq-c_0.7.0.bb
new file mode 100644
index 000000000..e9846fdea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rabbitmq-c/rabbitmq-c_0.7.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A C-language AMQP client library for use with v2.0+ of the RabbitMQ broker"
+HOMEPAGE = "https://github.com/alanxz/rabbitmq-c"
+LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=6b7424f9db80cfb11fdd5c980b583f53"
+LICENSE = "MIT"
+
+SRC_URI = "git://github.com/alanxz/rabbitmq-c.git"
+SRCREV = "4dde30ce8d984edda540349f57eb7995a87ba9de"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "popt openssl"
+
+EXTRA_OECONF = "--disable-examples --enable-tools --disable-docs"
+
+inherit autotools pkgconfig
+
+PACKAGE_BEFORE_PN += "${PN}-tools"
+FILES_${PN}-tools = "${bindir}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/0001-rfkill-makefile-don-t-use-t-the-OE-install-wrapper-d.patch b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/0001-rfkill-makefile-don-t-use-t-the-OE-install-wrapper-d.patch
new file mode 100644
index 000000000..c6f60d0ed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/0001-rfkill-makefile-don-t-use-t-the-OE-install-wrapper-d.patch
@@ -0,0 +1,30 @@
+From db764080e54f8f998c28ef8dab78da8b8d1d1420 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 11 Feb 2011 10:35:40 +0100
+Subject: [PATCH] rfkill makefile: don't use -t, the OE install wrapper dislikes it
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8d6c700..3652690 100644
+--- a/Makefile
++++ b/Makefile
+@@ -53,10 +53,10 @@ check:
+ install: rfkill rfkill.8.gz
+ @$(NQ) ' INST rfkill'
+ $(Q)$(MKDIR) $(DESTDIR)$(SBINDIR)
+- $(Q)$(INSTALL) -m 755 -t $(DESTDIR)$(SBINDIR) rfkill
++ $(Q)$(INSTALL) -m 755 rfkill $(DESTDIR)$(SBINDIR)
+ @$(NQ) ' INST rfkill.8'
+ $(Q)$(MKDIR) $(DESTDIR)$(MANDIR)/man8/
+- $(Q)$(INSTALL) -m 644 -t $(DESTDIR)$(MANDIR)/man8/ rfkill.8.gz
++ $(Q)$(INSTALL) -m 644 rfkill.8.gz $(DESTDIR)$(MANDIR)/man8/
+
+ clean:
+ $(Q)rm -f rfkill *.o *~ *.gz version.c *-stamp
+--
+1.6.6.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/dont.call.git.rev-parse.on.parent.dir.patch b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/dont.call.git.rev-parse.on.parent.dir.patch
new file mode 100644
index 000000000..2b8368912
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill/dont.call.git.rev-parse.on.parent.dir.patch
@@ -0,0 +1,31 @@
+When WORKDIR is included in some other git checkout, version.sh calls git rev-parse
+and it returns some description from that upper git checkout even when rfkill is
+being built from release tarball.
+
+When returned description doesn't match with expected v0.4, version.sh exits
+without creating version.c
+ # on git builds check that the version number above
+ # is correct...
+ [ "${descr%%-*}" = "v$VERSION" ] || exit 2
+
+and build fails a bit later:
+ | NOTE: make -j 32 -e MAKEFLAGS=
+ | CC rfkill.o
+ | GEN version.c
+ | make: *** [version.c] Error 2
+ | make: *** Waiting for unfinished jobs....
+ | ERROR: oe_runmake failed
+
+Don't try git rev-parse, if there isn't .git in ${S}.
+
+--- a/version.sh 2013-11-15 03:43:12.587744366 -0800
++++ b/version.sh 2013-11-15 03:42:40.699743320 -0800
+@@ -12,7 +12,7 @@
+
+ if test "x$SUFFIX" != 'x'; then
+ v="$VERSION$SUFFIX"
+-elif head=`git rev-parse --verify HEAD 2>/dev/null`; then
++elif test -d .git && head=`git rev-parse --verify HEAD 2>/dev/null`; then
+ git update-index --refresh --unmerged > /dev/null
+ descr=$(git describe 2>/dev/null || echo "v$VERSION")
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill_0.5.bb b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill_0.5.bb
new file mode 100644
index 000000000..3e644760c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rfkill/rfkill_0.5.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Radio enable/disable command line utility"
+HOMEPAGE = "http://linuxwireless.org/en/users/Documentation/rfkill"
+SECTION = "base"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c6036d0eb7edbfced28c4160e5d3fa94"
+
+SRC_URI = "http://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.bz2 \
+ file://0001-rfkill-makefile-don-t-use-t-the-OE-install-wrapper-d.patch \
+ file://dont.call.git.rev-parse.on.parent.dir.patch"
+
+SRC_URI[md5sum] = "b957713a6cfbcd8ac0e94420aeddcf1a"
+SRC_URI[sha256sum] = "3e160cca504a53679f2b3254f31c53a4fb38a021bc50fed8eb57a436d33dfa07"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "rfkill"
+ALTERNATIVE_PRIORITY = "60"
+ALTERNATIVE_LINK_NAME[rfkill] = "${sbindir}/rfkill"
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent/don-t-run-code-while-configuring-package.patch b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent/don-t-run-code-while-configuring-package.patch
new file mode 100644
index 000000000..79d4f29fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent/don-t-run-code-while-configuring-package.patch
@@ -0,0 +1,94 @@
+Using AC_RUN_IFELSE prevent people from configuring package for
+cross-compiling. Don't run code while configuring package.
+
+Upstream-Status: Pending
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: libtorrent-0.13.3/scripts/checks.m4
+===================================================================
+--- libtorrent-0.13.3.orig/scripts/checks.m4 2012-05-14 14:17:04.000000000 +0300
++++ libtorrent-0.13.3/scripts/checks.m4 2013-02-10 15:28:37.414445524 +0200
+@@ -95,40 +95,6 @@
+
+ AC_DEFUN([TORRENT_CHECK_KQUEUE_SOCKET_ONLY], [
+ AC_MSG_CHECKING(whether kqueue supports pipes and ptys)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <fcntl.h>
+- #include <stdlib.h>
+- #include <unistd.h>
+- #include <sys/event.h>
+- #include <sys/time.h>
+- int main() {
+- struct kevent ev@<:@2@:>@, ev_out@<:@2@:>@;
+- struct timespec ts = { 0, 0 };
+- int pfd@<:@2@:>@, pty@<:@2@:>@, kfd, n;
+- char buffer@<:@9001@:>@;
+- if (pipe(pfd) == -1) return 1;
+- if (fcntl(pfd@<:@1@:>@, F_SETFL, O_NONBLOCK) == -1) return 2;
+- while ((n = write(pfd@<:@1@:>@, buffer, sizeof(buffer))) == sizeof(buffer));
+- if ((pty@<:@0@:>@=posix_openpt(O_RDWR | O_NOCTTY)) == -1) return 3;
+- if ((pty@<:@1@:>@=grantpt(pty@<:@0@:>@)) == -1) return 4;
+- EV_SET(ev+0, pfd@<:@1@:>@, EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, NULL);
+- EV_SET(ev+1, pty@<:@1@:>@, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL);
+- if ((kfd = kqueue()) == -1) return 5;
+- if ((n = kevent(kfd, ev, 2, NULL, 0, NULL)) == -1) return 6;
+- if (ev_out@<:@0@:>@.flags & EV_ERROR) return 7;
+- if (ev_out@<:@1@:>@.flags & EV_ERROR) return 8;
+- read(pfd@<:@0@:>@, buffer, sizeof(buffer));
+- if ((n = kevent(kfd, NULL, 0, ev_out, 2, &ts)) < 1) return 9;
+- return 0;
+- }
+- ])],
+- [
+- AC_MSG_RESULT(yes)
+- ], [
+- AC_DEFINE(KQUEUE_SOCKET_ONLY, 1, kqueue only supports sockets.)
+- AC_MSG_RESULT(no)
+- ])
+ ])
+
+ AC_DEFUN([TORRENT_WITH_KQUEUE], [
+Index: libtorrent-0.13.3/scripts/common.m4
+===================================================================
+--- libtorrent-0.13.3.orig/scripts/common.m4 2012-05-14 14:17:04.000000000 +0300
++++ libtorrent-0.13.3/scripts/common.m4 2013-02-10 15:27:55.874446741 +0200
+@@ -222,38 +222,10 @@
+
+ AC_DEFUN([TORRENT_CHECK_EXECINFO], [
+ AC_MSG_CHECKING(for execinfo.h)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <execinfo.h>
+- int main() { backtrace((void**)0, 0); backtrace_symbols((char**)0, 0); return 0;}
+- ])],
+- [
+- AC_MSG_RESULT(yes)
+- AC_DEFINE(USE_EXECINFO, 1, Use execinfo.h)
+- ], [
+- AC_MSG_RESULT(no)
+- ])
+ ])
+
+ AC_DEFUN([TORRENT_CHECK_ALIGNED], [
+ AC_MSG_CHECKING(the byte alignment)
+-
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+- #include <inttypes.h>
+- int main() {
+- char buf@<:@8@:>@ = { 0, 0, 0, 0, 1, 0, 0, 0 };
+- int i;
+- for (i = 1; i < 4; ++i)
+- if (*(uint32_t*)(buf + i) == 0) return -1;
+- return 0;
+- }
+- ])],
+- [
+- AC_MSG_RESULT(none needed)
+- ], [
+- AC_DEFINE(USE_ALIGNED, 1, Require byte alignment)
+- AC_MSG_RESULT(required)
+- ])
+ ])
+
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb
new file mode 100644
index 000000000..c731cf707
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Torrent client"
+HOMEPAGE = "http://libtorrent.rakshasa.no/"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libsigc++-2.0 curl cppunit libtorrent ncurses"
+
+SRC_URI = "git://github.com/rakshasa/rtorrent \
+ file://don-t-run-code-while-configuring-package.patch \
+"
+SRCREV = "226e670decf92e7adaa845a6982aca4f164ea740"
+
+PV = "0.9.6+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+inherit autotools pkgconfig
+
+do_configure_prepend() {
+ (cd ${S}; ./autogen.sh; cd -)
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb
new file mode 100644
index 000000000..708650fb9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A serial to network proxy"
+SECTION = "console/network"
+HOMEPAGE = "http://sourceforge.net/projects/ser2net/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bae3019b4c6dc4138c217864bd04331f"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/ser2net/ser2net/ser2net-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "562274d783534276a9feac913b7d8c4e"
+SRC_URI[sha256sum] = "d846066e27c3072565990745d030357aa0c278f96b7d1d4f59023347c1db8824"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/scripts_no_bash.patch b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/scripts_no_bash.patch
new file mode 100644
index 000000000..49b4d1dda
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/scripts_no_bash.patch
@@ -0,0 +1,51 @@
+From 85602c3e531d39e89dc8cee0c4a592f85006a064 Mon Sep 17 00:00:00 2001
+From: Bill Randle <bill.randle@gmail.com>
+Date: Sun, 31 Dec 2017 09:08:23 -0800
+
+---
+ scripts/sendsms | 2 +-
+ scripts/sms2html | 2 +-
+ scripts/sms2unicode | 2 +-
+ scripts/unicode2sms | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/scripts/sendsms b/scripts/sendsms
+index 512026d..bb56856 100755
+--- a/scripts/sendsms
++++ b/scripts/sendsms
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ # This script send a text sms at the command line by creating
+ # a sms file in the outgoing queue.
+
+diff --git a/scripts/sms2html b/scripts/sms2html
+index ff253e3..946185e 100755
+--- a/scripts/sms2html
++++ b/scripts/sms2html
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ # This script converts a received sms file into a html file.
+
+diff --git a/scripts/sms2unicode b/scripts/sms2unicode
+index 46e2756..2826dc1 100755
+--- a/scripts/sms2unicode
++++ b/scripts/sms2unicode
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ # This script converts a received sms file into a pure unicode text file.
+
+diff --git a/scripts/unicode2sms b/scripts/unicode2sms
+index 2ae86dc..3fccf0d 100755
+--- a/scripts/unicode2sms
++++ b/scripts/unicode2sms
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ # This script converts a pure unicode text file into an sms file for sending.
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/sms_binpath.patch b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/sms_binpath.patch
new file mode 100644
index 000000000..e1d79d332
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3/sms_binpath.patch
@@ -0,0 +1,24 @@
+From 9a4a872dca78ca9cb6bdc228be61f5a4c2d68b1f Mon Sep 17 00:00:00 2001
+From: Kai Ulrich <kaiu@gmx.de>
+Date: Wed, 18 Mar 2015 11:20:53 +0100
+
+---
+ scripts/sms3 | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/sms3 b/scripts/sms3
+index 6b990bf..09c063b 100755
+--- a/scripts/sms3
++++ b/scripts/sms3
+@@ -24,9 +24,9 @@ INFOFILE="/var/run/smsd.working"
+ # Logfile can also be defined in here:
+ LOGFILE="/var/log/smsd.log"
+
+-DAEMON=/usr/local/bin/smsd
++DAEMON=/usr/bin/smsd
+ # A program which turns power off for couple of seconds:
+-RESETMODEMS=/usr/local/bin/smsd_resetmodems
++RESETMODEMS=/usr/bin/smsd_resetmodems
+ NAME=smsd
+ PSOPT="-e"
+ ECHO=echo
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3_3.1.21.bb b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3_3.1.21.bb
new file mode 100644
index 000000000..6e6413b4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/smstools3/smstools3_3.1.21.bb
@@ -0,0 +1,47 @@
+SUMMARY = "SMS Gateway software"
+DESCRIPTION = "The SMS Server Tools 3 is a SMS Gateway software which can send and receive short messages through GSM modems and mobile phones."
+SECTION = "console/network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4d21efa1bb2a186360dde4035f860682"
+HOMEPAGE = "http://smstools3.kekekasvi.com"
+
+SRC_URI = "http://smstools3.kekekasvi.com/packages/${BP}.tar.gz \
+ file://sms_binpath.patch \
+ file://scripts_no_bash.patch"
+
+SRC_URI[md5sum] = "6a9f038fb38a49cc3a4f8f14a88fb8af"
+SRC_URI[sha256sum] = "a26ba4c02b16f6cf13177bffca6c9230dc5fefaeba8e3030cd4e4905f6a92084"
+
+
+S = "${WORKDIR}/${BPN}"
+
+EXTRA_OEMAKE += "LFLAGS='${LDFLAGS}'"
+
+INITSCRIPT_NAME = "sms3"
+INITSCRIPT_PARAMS = "defaults"
+
+inherit update-rc.d
+
+do_install () {
+
+ install -d ${D}${bindir}
+ install -m 755 ${S}/src/smsd "${D}${bindir}/smsd"
+
+ install -m 755 ${S}/scripts/sendsms "${D}${bindir}/sendsms"
+ install -m 755 ${S}/scripts/sms2html "${D}${bindir}/sms2html"
+ install -m 755 ${S}/scripts/sms2unicode "${D}${bindir}/sms2unicode"
+ install -m 755 ${S}/scripts/unicode2sms "${D}${bindir}/unicode2sms"
+
+ install -d ${D}${sysconfdir}
+ install -m 644 ${S}/examples/smsd.conf.easy "${D}${sysconfdir}/smsd.conf"
+
+ install -d "${D}${localstatedir}/spool"
+ install -d "${D}${localstatedir}/spool/sms"
+ install -d "${D}${localstatedir}/spool/sms/incoming"
+ install -d "${D}${localstatedir}/spool/sms/outgoing"
+ install -d "${D}${localstatedir}/spool/sms/checked"
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${S}/scripts/sms3 "${D}${sysconfdir}/init.d/${INITSCRIPT_NAME}"
+
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-glib_0.24.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-glib_0.24.0.bb
new file mode 100644
index 000000000..01c6e3781
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-glib_0.24.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Telepathy Framework glib-base helper library"
+DESCRIPTION = "Telepathy Framework: GLib-based helper library for connection managers"
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+DEPENDS = "glib-2.0 dbus hostpython-runtime-native dbus-native dbus-glib libxslt-native"
+LICENSE = "LGPLv2.1+"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/telepathy-glib/${BP}.tar.gz"
+SRC_URI[md5sum] = "93c429e37750b25dcf8de86bb514664f"
+SRC_URI[sha256sum] = "ae0002134991217f42e503c43dea7817853afc18863b913744d51ffa029818cf"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=e413d83db6ee8f2c8e6055719096a48e"
+
+inherit autotools pkgconfig gettext gobject-introspection
+
+FILES_${PN} += "${datadir}/telepathy \
+ ${datadir}/dbus-1"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle/fix-svc-gtk-doc.h-target.patch b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle/fix-svc-gtk-doc.h-target.patch
new file mode 100644
index 000000000..2cd2c78c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle/fix-svc-gtk-doc.h-target.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Pending
+
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+--- a/extensions/Makefile.am
++++ b/extensions/Makefile.am
+@@ -37,8 +37,8 @@ _gen/all.xml: all.xml $(wildcard $(srcdi
+ --xinclude $(tools_dir)/identity.xsl \
+ $< > $@
+
+-extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl
++extensions.html _gen/svc-gtk-doc.h: _gen/all.xml $(tools_dir)/doc-generator.xsl
+ $(AM_V_GEN)$(XSLTPROC) $(XSLTPROCFLAGS) \
+ $(tools_dir)/doc-generator.xsl \
+ $< > $@
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb
new file mode 100644
index 000000000..ca09f6daf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Telepathy IRC connection manager"
+DESCRIPTION = "Telepathy implementation of the Internet Relay Chat protocols."
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+DEPENDS = "glib-2.0 dbus telepathy-glib openssl libxslt-native"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://src/idle.c;beginline=1;endline=19;md5=b06b1e2594423111a1a7910b0eefc7f9"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
+ file://fix-svc-gtk-doc.h-target.patch"
+SRC_URI[md5sum] = "92a2de5198284cbd3c430b0d1a971a86"
+SRC_URI[sha256sum] = "3013ad4b38d14ee630b8cc8ada5e95ccaa849b9a6fe15d2eaf6d0717d76f2fab"
+
+inherit autotools pkgconfig pythonnative
+
+FILES_${PN} += "${datadir}/telepathy \
+ ${datadir}/dbus-1"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch
new file mode 100644
index 000000000..fcc2f0821
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch
@@ -0,0 +1,27 @@
+From b3da0d8677b7e8467367a303c18551c56ed20e15 Mon Sep 17 00:00:00 2001
+From: Philip Balister <philip@balister.org>
+Date: Tue, 12 Apr 2016 17:30:15 -0400
+Subject: [PATCH] Forcibly disable check for Qt5.
+
+Signed-off-by: Philip Balister <philip@balister.org>
+---
+ build/cmake/DefineOptions.cmake | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/build/cmake/DefineOptions.cmake b/build/cmake/DefineOptions.cmake
+index 62e240f..f8b4493 100644
+--- a/build/cmake/DefineOptions.cmake
++++ b/build/cmake/DefineOptions.cmake
+@@ -52,9 +52,6 @@ CMAKE_DEPENDENT_OPTION(WITH_LIBEVENT "Build with libevent support" ON
+ find_package(Qt4 QUIET COMPONENTS QtCore QtNetwork)
+ CMAKE_DEPENDENT_OPTION(WITH_QT4 "Build with Qt4 support" ON
+ "QT4_FOUND" OFF)
+-find_package(Qt5 QUIET COMPONENTS Core Network)
+-CMAKE_DEPENDENT_OPTION(WITH_QT5 "Build with Qt5 support" ON
+- "Qt5_FOUND" OFF)
+ if(${WITH_QT4} AND ${WITH_QT5} AND ${CMAKE_MAJOR_VERSION} LESS 3)
+ # cmake < 3.0.0 causes conflict when building both Qt4 and Qt5
+ set(WITH_QT4 OFF)
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch
new file mode 100644
index 000000000..7cc8d1739
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch
@@ -0,0 +1,110 @@
+From bc577820ad25795543b31f123e309cdaebc7d6c6 Mon Sep 17 00:00:00 2001
+From: Cody P Schafer <dev@codyps.com>
+Date: Mon, 16 May 2016 15:21:10 -0400
+Subject: [PATCH 1/2] THRIFT-3828 In cmake avoid use of both quoted paths and
+ SYSTEM with include_directories()
+
+This allows us to avoid issues where there are no paths to be added to
+the include path (include_directories() errors when given an empty
+string).
+
+Specifically, gcc-6 requires that libraries stop passing paths like
+'/usr/include' (or they will get libstdc++ build errors), so these paths
+will be empty more often in the future.
+---
+ lib/cpp/CMakeLists.txt | 8 ++++----
+ lib/cpp/test/CMakeLists.txt | 2 +-
+ test/cpp/CMakeLists.txt | 6 +++---
+ tutorial/cpp/CMakeLists.txt | 2 +-
+ 4 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/lib/cpp/CMakeLists.txt b/lib/cpp/CMakeLists.txt
+index 4c7caeb..a716ac3 100755
+--- a/lib/cpp/CMakeLists.txt
++++ b/lib/cpp/CMakeLists.txt
+@@ -24,7 +24,7 @@ else()
+ find_package(Boost 1.53.0 REQUIRED)
+ endif()
+
+-include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
++include_directories(${Boost_INCLUDE_DIRS})
+ include_directories(src)
+
+ # SYSLIBS contains libraries that need to be linked to all lib targets
+@@ -104,7 +104,7 @@ if(OPENSSL_FOUND AND WITH_OPENSSL)
+ src/thrift/transport/TSSLSocket.cpp
+ src/thrift/transport/TSSLServerSocket.cpp
+ )
+- include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}")
++ include_directories(${OPENSSL_INCLUDE_DIR})
+ list(APPEND SYSLIBS "${OPENSSL_LIBRARIES}")
+ endif()
+
+@@ -162,7 +162,7 @@ TARGET_LINK_LIBRARIES_THRIFT(thrift ${SYSLIBS})
+
+ if(WITH_LIBEVENT)
+ find_package(Libevent REQUIRED) # Libevent comes with CMake support form upstream
+- include_directories(SYSTEM ${LIBEVENT_INCLUDE_DIRS})
++ include_directories(${LIBEVENT_INCLUDE_DIRS})
+
+ ADD_LIBRARY_THRIFT(thriftnb ${thriftcppnb_SOURCES})
+ TARGET_LINK_LIBRARIES_THRIFT(thriftnb ${SYSLIBS} ${LIBEVENT_LIBRARIES})
+@@ -171,7 +171,7 @@ endif()
+
+ if(WITH_ZLIB)
+ find_package(ZLIB REQUIRED)
+- include_directories(SYSTEM ${ZLIB_INCLUDE_DIRS})
++ include_directories(${ZLIB_INCLUDE_DIRS})
+
+ ADD_LIBRARY_THRIFT(thriftz ${thriftcppz_SOURCES})
+ TARGET_LINK_LIBRARIES_THRIFT(thriftz ${SYSLIBS} ${ZLIB_LIBRARIES})
+diff --git a/lib/cpp/test/CMakeLists.txt b/lib/cpp/test/CMakeLists.txt
+index 5de9fc4..c956c38 100644
+--- a/lib/cpp/test/CMakeLists.txt
++++ b/lib/cpp/test/CMakeLists.txt
+@@ -20,7 +20,7 @@
+ # Find required packages
+ set(Boost_USE_STATIC_LIBS ON) # Force the use of static boost test framework
+ find_package(Boost 1.53.0 REQUIRED COMPONENTS chrono filesystem system thread unit_test_framework)
+-include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
++include_directories(${Boost_INCLUDE_DIRS})
+
+ #Make sure gen-cpp files can be included
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}")
+diff --git a/test/cpp/CMakeLists.txt b/test/cpp/CMakeLists.txt
+index 2d75f2e..b1409de 100755
+--- a/test/cpp/CMakeLists.txt
++++ b/test/cpp/CMakeLists.txt
+@@ -22,13 +22,13 @@ include(ThriftMacros)
+
+ set(Boost_USE_STATIC_LIBS ON)
+ find_package(Boost 1.53.0 REQUIRED COMPONENTS program_options system filesystem)
+-include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
++include_directories(${Boost_INCLUDE_DIRS})
+
+ find_package(OpenSSL REQUIRED)
+-include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}")
++include_directories(${OPENSSL_INCLUDE_DIR})
+
+ find_package(Libevent REQUIRED) # Libevent comes with CMake support from upstream
+-include_directories(SYSTEM ${LIBEVENT_INCLUDE_DIRS})
++include_directories(${LIBEVENT_INCLUDE_DIRS})
+
+ #Make sure gen-cpp files can be included
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}")
+diff --git a/tutorial/cpp/CMakeLists.txt b/tutorial/cpp/CMakeLists.txt
+index 2b0c143..5ecae17 100644
+--- a/tutorial/cpp/CMakeLists.txt
++++ b/tutorial/cpp/CMakeLists.txt
+@@ -18,7 +18,7 @@
+ #
+
+ find_package(Boost 1.53.0 REQUIRED)
+-include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
++include_directories(${Boost_INCLUDE_DIRS})
+
+ #Make sure gen-cpp files can be included
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}")
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch
new file mode 100644
index 000000000..f13adbb6b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch
@@ -0,0 +1,40 @@
+From f6cad0580e5391c37af7f60adddb71bf1a403dc4 Mon Sep 17 00:00:00 2001
+From: Cody P Schafer <dev@codyps.com>
+Date: Fri, 9 Sep 2016 15:50:26 -0400
+Subject: [PATCH 2/2] THRIFT-3831 in test/cpp explicitly use `signed char`
+
+`char`'s signed-ness is implimentation dependent, and in the case where
+`char` was not signed, we previously recieved errors like
+
+ thrift/0.9.3-r0/git/test/cpp/src/TestClient.cpp:404:15: error: narrowing conversion of '-127' from 'int' to 'char' inside { } [-Wnarrowing]
+
+(This example from gcc-6 on arm)
+---
+ test/cpp/src/TestClient.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp
+index e709899..4a961f8 100644
+--- a/test/cpp/src/TestClient.cpp
++++ b/test/cpp/src/TestClient.cpp
+@@ -383,7 +383,7 @@ int main(int argc, char** argv) {
+ * BINARY TEST
+ */
+ printf("testBinary([-128..127]) = {");
+- const char bin_data[256]
++ const signed char bin_data[256]
+ = {-128, -127, -126, -125, -124, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,
+ -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99,
+ -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84,
+@@ -404,7 +404,7 @@ int main(int argc, char** argv) {
+ 127};
+ try {
+ string bin_result;
+- testClient.testBinary(bin_result, string(bin_data, 256));
++ testClient.testBinary(bin_result, string(reinterpret_cast<const char *>(bin_data), 256));
+ if (bin_result.size() != 256) {
+ printf("}\n*** FAILED ***\n");
+ printf("invalid length: %lu\n", bin_result.size());
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb
new file mode 100644
index 000000000..aa9328371
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb
@@ -0,0 +1,64 @@
+SUMMARY = "Apache Thrift"
+DESCRIPTION = "A software framework, for scalable cross-language services development"
+HOMEPAGE = "https://thrift.apache.org/"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e4ed21f679b2aafef26eac82ab0c2cbf \
+ file://NOTICE;md5=115f49498b66b494b0472658f2bfe80b"
+
+DEPENDS = "thrift-native boost flex-native bison-native openssl"
+
+SRC_URI = "http://mirror.switch.ch/mirror/apache/dist/thrift/${PV}/${BPN}-${PV}.tar.gz \
+ file://0001-Forcibly-disable-check-for-Qt5.patch \
+ file://0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch \
+ file://0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch \
+"
+
+SRC_URI[md5sum] = "88d667a8ae870d5adeca8cb7d6795442"
+SRC_URI[sha256sum] = "b0740a070ac09adde04d43e852ce4c320564a292f26521c46b78e0641564969e"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit pkgconfig cmake pythonnative
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+export BUILD_SYS
+export HOST_SYS
+
+EXTRA_OECMAKE = " \
+ -DBUILD_LIBRARIES=ON \
+ -DBUILD_COMPILER=ON \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_EXAMPLES=OFF \
+ -DBUILD_TUTORIALS=OFF \
+ -DWITH_CPP=ON \
+ -DWITH_JAVA=OFF \
+ -DWITH_STATIC_LIB=ON \
+ -DWITH_SHARED_LIB=ON \
+ -DWITH_OPENSSL=ON \
+ -DWITH_QT4=OFF \
+ -DWITH_QT5=OFF \
+"
+
+PACKAGECONFIG ??= "libevent glib python"
+PACKAGECONFIG[libevent] = "-DWITH_LIBEVENT=ON,-DWITH_LIBEVENT=OFF,libevent,"
+PACKAGECONFIG[python] = "-DWITH_PYTHON=ON,-DWITH_PYTHON=OFF,python,"
+PACKAGECONFIG[glib] = "-DWITH_C_GLIB=ON,-DWITH_C_GLIB=OFF,glib-2.0 ,"
+
+do_install_append () {
+ ln -sf thrift ${D}/${bindir}/thrift-compiler
+}
+
+LEAD_SONAME = "libthrift.so.${PV}"
+
+# thrift packages
+PACKAGE_BEFORE_PN = "${PN}-compiler lib${BPN}"
+FILES_lib${BPN} = "${libdir}/*.so.*"
+FILES_${PN}-compiler = "${bindir}/*"
+
+# The thrift packages just pulls in some default dependencies but is otherwise empty
+RRECOMMENDS_${PN} = "${PN}-compiler lib${BPN}"
+ALLOW_EMPTY_${PN} = "1"
+RRECOMMENDS_${PN}_class-native = ""
+RRECOMMENDS_${PN}_class-nativesdk = ""
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch
new file mode 100644
index 000000000..8e5f4da36
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch
@@ -0,0 +1,26 @@
+From a0ad5128d14b022239445e251cf4a9826e86aa96 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 07:48:31 -0700
+Subject: [PATCH] Add format string to fprintf() call
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/vt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/vt.c b/src/vt.c
+index 795d393..a533d3d 100644
+--- a/src/vt.c
++++ b/src/vt.c
+@@ -499,7 +499,7 @@ static int vt_cmd_dump_candidates(const struct vt_handle *vh,
+ }
+ llen += cmdlen;
+
+- ret = fprintf(vh->vh_stream, e->cmd);
++ ret = fprintf(vh->vh_stream, "%s", e->cmd);
+ if (ret < 0)
+ return ret;
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch
new file mode 100644
index 000000000..8192056d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch
@@ -0,0 +1,49 @@
+From f567740cf64978ac9db014c786b6d0267b244f33 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 4 Mar 2018 22:30:30 -0800
+Subject: [PATCH 1/2] replace SIGCLD with SIGCHLD and include sys/types.h
+
+Fixes
+main.c:129:10: error: 'SIGCLD' undeclared (first use in this function); did you mean 'SIGCHLD'?
+ signal(SIGCLD, sig_child);
+ ^~~~~~
+ SIGCHLD
+
+main.c:125:2: warning: implicit declaration of function 'umask' [-Wimplicit-function-declaration]
+ umask(0);
+ ^~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/main.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/main.c b/src/main.c
+index 3cf4072..cd34196 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -31,6 +31,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/wait.h>
+ #include <sys/param.h>
++#include <sys/types.h>
+ #include <pthread.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+@@ -126,9 +127,9 @@ static void daemon_start(int ignsigcld)
+
+ if (ignsigcld) {
+ #ifdef SIGTSTP
+- signal(SIGCLD, sig_child);
++ signal(SIGCHLD, sig_child);
+ #else
+- signal(SIGCLD, SIG_IGN);
++ signal(SIGCHLD, SIG_IGN);
+ #endif
+ }
+ }
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch
new file mode 100644
index 000000000..90d12da14
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch
@@ -0,0 +1,143 @@
+From 19b6cf8099e1974b5fc39086fc54103b0cbc2658 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 4 Mar 2018 23:01:25 -0800
+Subject: [PATCH 2/2] replace PTHREAD_MUTEX_FAST_NP with PTHREAD_MUTEX_NORMAL
+
+PTHREAD_MUTEX_FAST_NP is not available on non-posix systems
+e.g. musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/ha.c | 2 +-
+ src/icmp6.c | 2 +-
+ src/mh.c | 2 +-
+ src/mn.c | 2 +-
+ src/movement.c | 2 +-
+ src/mpdisc_ha.c | 2 +-
+ src/mpdisc_mn.c | 2 +-
+ src/tqueue.c | 2 +-
+ src/tunnelctl.c | 2 +-
+ 9 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/src/ha.c b/src/ha.c
+index fbdcff0..b2f811e 100644
+--- a/src/ha.c
++++ b/src/ha.c
+@@ -1246,7 +1246,7 @@ int ha_init(void)
+ {
+ pthread_mutexattr_t mattrs;
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&bu_worker_mutex, &mattrs) ||
+ pthread_cond_init(&cond, NULL))
+ return -1;
+diff --git a/src/icmp6.c b/src/icmp6.c
+index 3695135..6460634 100644
+--- a/src/icmp6.c
++++ b/src/icmp6.c
+@@ -243,7 +243,7 @@ int icmp6_init(void)
+ return -1;
+ /* create ICMP listener thread */
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&icmp6_sock.send_mutex, &mattrs) ||
+ pthread_rwlock_init(&handler_lock, NULL) ||
+ pthread_create(&icmp6_listener, NULL, icmp6_listen, NULL))
+diff --git a/src/mh.c b/src/mh.c
+index 60e345e..7928f4c 100644
+--- a/src/mh.c
++++ b/src/mh.c
+@@ -204,7 +204,7 @@ int mh_init(void)
+ return -1;
+
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&mh_sock.send_mutex, &mattrs) ||
+ pthread_rwlock_init(&handler_lock, NULL) ||
+ pthread_create(&mh_listener, NULL, mh_listen, NULL))
+diff --git a/src/mn.c b/src/mn.c
+index 092cfcb..8f7f448 100644
+--- a/src/mn.c
++++ b/src/mn.c
+@@ -1478,7 +1478,7 @@ static struct home_addr_info *hai_copy(struct home_addr_info *conf_hai)
+ if (hai != NULL) {
+ pthread_mutexattr_t mattrs;
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+
+ memcpy(hai, conf_hai, sizeof(struct home_addr_info));
+
+diff --git a/src/movement.c b/src/movement.c
+index d985937..6400448 100644
+--- a/src/movement.c
++++ b/src/movement.c
+@@ -2013,7 +2013,7 @@ int md_init(void)
+ int val;
+
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&iface_lock, &mattrs))
+ return -1;
+
+diff --git a/src/mpdisc_ha.c b/src/mpdisc_ha.c
+index 40ba05f..fd7a90d 100644
+--- a/src/mpdisc_ha.c
++++ b/src/mpdisc_ha.c
+@@ -559,7 +559,7 @@ int mpd_ha_init(void)
+ {
+ pthread_mutexattr_t mattrs;
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&mpa_lock, &mattrs) ||
+ pthread_rwlock_init(&prefix_lock, NULL) ||
+ hash_init(&mpa_hash, DOUBLE_ADDR, MPA_BUCKETS) < 0)
+diff --git a/src/mpdisc_mn.c b/src/mpdisc_mn.c
+index 4873bd6..ada02bd 100644
+--- a/src/mpdisc_mn.c
++++ b/src/mpdisc_mn.c
+@@ -267,7 +267,7 @@ int mpd_mn_init(void)
+ {
+ pthread_mutexattr_t mattrs;
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&mps_lock, &mattrs))
+ return -1;
+ if (hash_init(&mps_hash, DOUBLE_ADDR, MPS_BUCKETS) < 0)
+diff --git a/src/tqueue.c b/src/tqueue.c
+index 2f7aa0b..9c185b8 100644
+--- a/src/tqueue.c
++++ b/src/tqueue.c
+@@ -65,7 +65,7 @@ int taskqueue_init(void)
+ {
+ pthread_mutexattr_t mattrs;
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&mutex, &mattrs) ||
+ pthread_cond_init(&cond, NULL) ||
+ pthread_create(&tq_runner, NULL, runner, NULL))
+diff --git a/src/tunnelctl.c b/src/tunnelctl.c
+index 23fc20b..813b8ec 100644
+--- a/src/tunnelctl.c
++++ b/src/tunnelctl.c
+@@ -433,7 +433,7 @@ int tunnelctl_init(void)
+ return -1;
+
+ pthread_mutexattr_init(&mattrs);
+- pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
++ pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
+ if (pthread_mutex_init(&tnl_lock, &mattrs))
+ return -1;
+
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch
new file mode 100644
index 000000000..dbf008264
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch
@@ -0,0 +1,23 @@
+When "make -j10", the compilation will fail,
+because scan.c has included gram.h, but gram.h was produced
+after scan.c was compiled
+
+So add this dependency to ensure that gram.h is produced
+before scan.c is produced.
+
+Upstream-Status: Inappropriate [upstream is not active]
+
+Signed-off-by: Roy.Li <RongQing.Li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ src/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -81,3 +81,5 @@ CLEANFILES = gram.c gram.h \
+
+ DISTCLEANFILES = $(BUILT_SOURCES)
+ MAINTAINERCLEANFILES = Makefile.in
++
++scan.c: gram.h
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d
new file mode 100755
index 000000000..ebd70a6cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d
@@ -0,0 +1,112 @@
+#!/bin/sh
+#
+# mip6d Start script for the Mobile IPv6 daemon
+#
+# chkconfig: - 55 25
+# description: The mobile IPv6 daemon allows nodes to remain \
+# reachable while moving around in the IPv6 Internet.
+# processname: mip6d
+# config: /etc/mip6d.conf
+# config: /etc/sysconfig/mip6d
+#
+### BEGIN INIT INFO
+# Provides: mipv6-daemon
+# Required-Start: $local_fs $remote_fs $network $named
+# Required-Stop: $local_fs $remote_fs $network
+# Should-Start: $syslog
+# Should-Stop: $network $syslog
+# Default-Start:
+# Default-Stop: 0 1 6
+# Short-Description: Start and stop Mobile IPV6 daemon
+# Description: The mobile IPv6 daemon allows nodes to remain
+# reachable while moving around in the IPv6 Internet.
+### END INIT INFO
+
+# Source function library.
+. /etc/init.d/functions
+
+if [ -f /etc/sysconfig/mip6d ]; then
+ . /etc/sysconfig/mip6d
+fi
+
+mip6d=/usr/sbin/mip6d
+prog="mip6d"
+lockfile=/var/lock/subsys/$prog
+
+start() {
+ [ -x $mip6d ] || exit 5
+ echo -n $"Starting $prog: "
+ start-stop-daemon -S -x ${mip6d} && success || failure
+ retval=$?
+ echo
+ [ $retval -eq 0 ] && touch ${lockfile}
+ return $retval
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ start-stop-daemon -K -x $mip6d
+ retval=$?
+ echo
+ [ $retval -eq 0 ] && rm -f ${lockfile}
+ return $retval
+}
+
+restart() {
+ stop
+ start
+}
+
+reload()
+{
+ echo -n $"Reloading $prog configuration: "
+ killproc $mip6d -HUP
+ retval=$?
+ echo
+ return $retval
+}
+
+force_reload() {
+ restart
+}
+
+rh_status() {
+ status $prog
+}
+
+rh_status_q() {
+ rh_status > /dev/null 2>&1
+}
+
+case "$1" in
+ start)
+ rh_status_q && exit 0
+ $1
+ ;;
+ stop)
+ rh_status_q || exit 0
+ $1
+ ;;
+ restart)
+ $1
+ ;;
+ reload)
+ rh_status_q || exit 7
+ $1
+ ;;
+ force-reload)
+ force_reload
+ ;;
+ status)
+ rh_status
+ ;;
+ condrestart|try-restart)
+ rh_status_q || exit 0
+ restart
+ ;;
+ *)
+ echo $"Usage: $prog {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ exit 2
+esac
+
+exit $?
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service
new file mode 100644
index 000000000..2b5a5b9f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=MIPL Mobile IPv6
+After=network.target
+
+[Service]
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/mip6d
+ExecStart=@SBINDIR@/mip6d $ARGS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb
new file mode 100644
index 000000000..0c120bfd8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Mobile IPv6 and NEMO for Linux"
+DESCRIPTION = "UMIP is an open source implementation of Mobile IPv6 and NEMO \
+Basic Support for Linux. It is released under the GPLv2 license. It supports \
+the following IETF RFC: RFC6275 (Mobile IPv6), RFC3963 (NEMO), RFC3776 and \
+RFC4877 (IPsec and IKEv2)."
+HOMEPAGE = "http://umip.org/"
+SECTION = "System Environment/Base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=073dc31ccb2ebed70db54f1e8aeb4c33"
+DEPENDS = "rpm indent-native"
+
+SRC_URI = "git://github.com/jlanza/umip \
+ file://add-dependency-to-support-parallel-compilation.patch \
+ file://mip6d \
+ file://mip6d.service \
+ file://0001-Add-format-string-to-fprintf-call.patch \
+ file://0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch \
+ file://0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch \
+ "
+SRCREV = "7d67209cd1bba2dd0e183a0fa07eeef07964dd14"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = "--enable-vt"
+
+inherit autotools-brokensep systemd update-rc.d
+
+INITSCRIPT_NAME = "mip6d"
+INITSCRIPT_PARAMS = "start 64 . stop 36 0 1 2 3 4 5 6 ."
+
+SYSTEMD_SERVICE_${PN} = "mip6d.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install_append() {
+ install -D -m 0755 ${WORKDIR}/mip6d ${D}${sysconfdir}/init.d/mip6d
+ install -D -m 0644 ${WORKDIR}/mip6d.service ${D}${systemd_system_unitdir}/mip6d.service
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_system_unitdir}/mip6d.service
+}
+
+RRECOMMENDS_${PN} = "kernel-module-mip6 kernel-module-ipv6"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb
new file mode 100644
index 000000000..4365aa4bc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "This daemon is in charge of multiplexing connections over USB to an iPhone or iPod touch."
+LICENSE = "GPLv3 & GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=ebb5c50ab7cab4baeffba14977030c07 \
+ file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LGPLv2.1;md5=6ab17b41640564434dda85c06b7124f7"
+
+DEPENDS = "udev libusb1"
+
+inherit cmake pkgconfig gitpkgv
+
+PKGV = "${GITPKGVTAG}"
+
+SRCREV = "919587580c5e77f3936f3432115d2e10c7bac7c5"
+SRC_URI = "git://git.sukimashita.com/usbmuxd.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "${base_libdir}/udev/rules.d/"
+
+# fix usbmuxd installing files to /usr/lib64 on 64bit hosts:
+EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[plist] = "-DWANT_PLIST=1,-DWANT_PLIST=0,libplist"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial/typo_pon.wvdial.1.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial/typo_pon.wvdial.1.patch
new file mode 100644
index 000000000..eec5a5d64
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial/typo_pon.wvdial.1.patch
@@ -0,0 +1,20 @@
+Remove warnings found by lintian
+Last-Update: 2011-01-09
+Index: wvdial-1.61/pon.wvdial.1
+===================================================================
+--- wvdial-1.61.orig/pon.wvdial.1 2011-01-09 21:33:03.000000000 +0300
++++ wvdial-1.61/pon.wvdial.1 2011-01-09 21:33:15.000000000 +0300
+@@ -8,13 +8,11 @@
+ .SH DESCRIPTION
+ .B pon.wvdial
+ .br
+-.TR
+ .B poff.wvdial
+ .br
+ .RS
+ Replacement scripts for pon and poff.
+ .RE
+-\."
+ .SH SEE ALSO
+ .BR wvdial (1),
+ .BR pon (1),
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
new file mode 100644
index 000000000..3a71fb979
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
@@ -0,0 +1,32 @@
+HOMEPAGE = "http://www.alumnit.ca/wiki/?WvDial"
+DESCRIPTION = "WvDial is a program that makes it easy to connect your Linux workstation to the Internet."
+
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+inherit pkgconfig
+
+DEPENDS = "wvstreams"
+RDEPENDS_${PN} = "ppp"
+
+SRC_URI = "http://${BPN}.googlecode.com/files/${BP}.tar.bz2 \
+ file://typo_pon.wvdial.1.patch \
+ "
+
+SRC_URI[md5sum] = "37e9a2d664effe4efd44c0e1a20136de"
+SRC_URI[sha256sum] = "99906d9560cbdbc97e1855e7b0a7169f1e11983be3ac539140423f09debced82"
+
+EXTRA_OEMAKE = ""
+export WVLINK="${LD}"
+
+PARALLEL_MAKE = ""
+
+BUILD_CPPFLAGS += "-I${STAGING_INCDIR}/wvstreams"
+
+do_configure() {
+ sed -i 's/LDFLAGS+=-luniconf/LIBS+=-luniconf/' ${S}/Makefile
+}
+
+do_install() {
+ oe_runmake prefix=${D}/usr PPPDIR=${D}/etc/ppp/peers install
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Check-for-limits.h-during-configure.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Check-for-limits.h-during-configure.patch
new file mode 100644
index 000000000..b092ba2fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Check-for-limits.h-during-configure.patch
@@ -0,0 +1,26 @@
+From 7deaf836d1f1b9e4426818584b4267f8c4a095aa Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 21:04:07 -0700
+Subject: [PATCH 1/5] Check for limits.h during configure
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index fe0fa2b..188adfe 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -139,6 +139,8 @@ int main()
+ [Compiler warning on deprecated functions])])
+ CPPFLAGS="$CPPFLAGS_save"
+
++AC_CHECK_HEADERS(limits.h)
++
+ # argp
+ USE_WVSTREAMS_ARGP=0
+ AC_CHECK_HEADERS(argp.h)
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-build-fix-parallel-make.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-build-fix-parallel-make.patch
new file mode 100644
index 000000000..6bc34331d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-build-fix-parallel-make.patch
@@ -0,0 +1,76 @@
+From 90de630f21ac744a37b3adac1bd84654471744ff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 24 Aug 2017 22:30:01 -0700
+Subject: [PATCH 1/2] build: fix parallel make
+
+Imported from Gentoo
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 15 +++++++++++++--
+ wvrules-posix.mk | 7 +++++--
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 72c8bef..5a4cfb2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -131,12 +131,19 @@ utils/tests/%: PRELIBS+=$(LIBWVSTREAMS)
+ # libwvstreams: stream/event handling library
+ #
+ TARGETS += libwvstreams.so
+-TARGETS += crypto/tests/ssltest ipstreams/tests/unixtest
++TARGETS += crypto/tests/ssltest
++crypto/tests/ssltest: $(LIBWVSTREAMS)
++
++TARGETS += ipstreams/tests/unixtest
++ipstreams/tests/unixtest: $(LIBWVSTREAMS)
++
+ TARGETS += crypto/tests/printcert
++crypto/tests/printcert: $(LIBWVSTREAMS)
+
+ ifndef _MACOS
+ ifneq ("$(with_readline)", "no")
+ TARGETS += ipstreams/tests/wsd
++ ipstreams/tests/wsd: $(LIBWVSTREAMS)
+ ipstreams/tests/wsd-LIBS += -lreadline
+ else
+ TEST_SKIP_OBJS += ipstreams/tests/wsd
+@@ -179,7 +186,11 @@ uniconf/tests/%: PRELIBS+=$(LIBUNICONF)
+ #
+ ifneq ("$(with_dbus)", "no")
+ TARGETS += libwvdbus.so
+- TARGETS += dbus/tests/wvdbus dbus/tests/wvdbusd
++ TARGETS += dbus/tests/wvdbus
++ dbus/tests/wvdbus: $(LIBWVDBUS)
++
++ TARGETS += dbus/tests/wvdbusd
++ dbus/tests/wvdbusd: $(LIBWVDBUS)
+ TESTS += $(call tests_cc,dbus/tests)
+ libwvdbus_OBJS += $(call objects,dbus)
+ libwvdbus.so: $(libwvdbus_OBJS) $(LIBWVSTREAMS)
+diff --git a/wvrules-posix.mk b/wvrules-posix.mk
+index f94d2cd..2e99f36 100644
+--- a/wvrules-posix.mk
++++ b/wvrules-posix.mk
+@@ -80,12 +80,15 @@ define wvlink_ar
+ $(AR) s $1
+ endef
+
+-CC: FORCE
++CC:
+ @CC="$(CC)" CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" \
+ $(WVSTREAMS)/gen-cc CC c
+
+-CXX: FORCE
++CXX:
+ @CC="$(CXX)" CFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \
+ $(WVSTREAMS)/gen-cc CXX cc
+
++#All files must depend on the above two rules. This is a godawful hack.
++$(shell find -type f '(' -name '*.c' -o -name '*.cc' ')' ): CC CXX
++
+ wvlink=$(LINK_MSG)$(WVLINK_CC) $(LDFLAGS) $($1-LDFLAGS) -o $1 $(filter %.o %.a %.so, $2) $($1-LIBS) $(XX_LIBS) $(LDLIBS) $(PRELIBS) $(LIBS)
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch
new file mode 100644
index 000000000..59f70e380
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch
@@ -0,0 +1,29 @@
+From 4afff42714a15cb796d3589d87c6fac4558b2c95 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 24 Aug 2017 22:33:32 -0700
+Subject: [PATCH 2/2] wvrules.mk: Use _DEFAULT_SOURCE
+
+Fixes warnings with newer glibc
+warning: "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ wvrules.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/wvrules.mk b/wvrules.mk
+index 877f700..124bffd 100644
+--- a/wvrules.mk
++++ b/wvrules.mk
+@@ -83,7 +83,7 @@ runtests:
+
+ INCFLAGS=$(addprefix -I,$(WVSTREAMS_INC) $(XPATH))
+ CPPFLAGS+=$(INCFLAGS) \
+- -D_BSD_SOURCE -D_GNU_SOURCE $(OSDEFINE) \
++ -D_DEFAULT_SOURCE $(OSDEFINE) \
+ -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \
+ -DUNSTABLE
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvtask-Dont-use-ucontext-on-non-glibc-systems.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvtask-Dont-use-ucontext-on-non-glibc-systems.patch
new file mode 100644
index 000000000..232db9e63
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0002-wvtask-Dont-use-ucontext-on-non-glibc-systems.patch
@@ -0,0 +1,135 @@
+From 0e054339c1422168a7f4a9dcf090268053a33b1f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 21:05:37 -0700
+Subject: [PATCH 2/5] wvtask: Dont use ucontext on non-glibc systems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/wvtask.cc | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/utils/wvtask.cc b/utils/wvtask.cc
+index cdcd544..c0bff7d 100644
+--- a/utils/wvtask.cc
++++ b/utils/wvtask.cc
+@@ -199,7 +199,9 @@ WvTaskMan::WvTaskMan()
+ stacktop = (char *)alloca(0);
+
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&get_stack_return) == 0);
++#endif
+ if (context_return == 0)
+ {
+ // initial setup - start the stackmaster() task (never returns!)
+@@ -265,13 +267,17 @@ int WvTaskMan::run(WvTask &task, int val)
+ state = &old_task->mystate;
+
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(state) == 0);
++#endif
+ int newval = context_return;
+ if (newval == 0)
+ {
+ // saved the state, now run the task.
+ context_return = val;
++#ifdef __GLIBC__
+ setcontext(&task.mystate);
++#endif
+ return -1;
+ }
+ else
+@@ -319,13 +325,17 @@ int WvTaskMan::yield(int val)
+ #endif
+
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&current_task->mystate) == 0);
++#endif
+ int newval = context_return;
+ if (newval == 0)
+ {
+ // saved the task state; now yield to the toplevel.
+ context_return = val;
++#ifdef __GLIBC__
+ setcontext(&toplevel);
++#endif
+ return -1;
+ }
+ else
+@@ -341,7 +351,9 @@ int WvTaskMan::yield(int val)
+ void WvTaskMan::get_stack(WvTask &task, size_t size)
+ {
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&get_stack_return) == 0);
++#endif
+ if (context_return == 0)
+ {
+ assert(magic_number == -WVTASK_MAGIC);
+@@ -371,7 +383,9 @@ void WvTaskMan::get_stack(WvTask &task, size_t size)
+ // initial setup
+ stack_target = &task;
+ context_return = size/1024 + (size%1024 > 0);
++#ifdef __GLIBC__
+ setcontext(&stackmaster_task);
++#endif
+ }
+ else
+ {
+@@ -409,7 +423,9 @@ void WvTaskMan::_stackmaster()
+ assert(magic_number == -WVTASK_MAGIC);
+
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&stackmaster_task) == 0);
++#endif
+ val = context_return;
+ if (val == 0)
+ {
+@@ -419,7 +435,9 @@ void WvTaskMan::_stackmaster()
+ // all current stack allocations) and go back to get_stack
+ // (or the constructor, if that's what called us)
+ context_return = 1;
++#ifdef __GLIBC__
+ setcontext(&get_stack_return);
++#endif
+ }
+ else
+ {
+@@ -474,7 +492,9 @@ void WvTaskMan::do_task()
+
+ // back here from longjmp; someone wants stack space.
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&task->mystate) == 0);
++#endif
+ if (context_return == 0)
+ {
+ // done the setjmp; that means the target task now has
+@@ -510,7 +530,9 @@ void WvTaskMan::do_task()
+ }
+ else
+ {
++#ifdef __GLIBC__
+ assert(getcontext(&task->func_call) == 0);
++#endif
+ task->func_call.uc_stack.ss_size = task->stacksize;
+ task->func_call.uc_stack.ss_sp = task->stack;
+ task->func_call.uc_stack.ss_flags = 0;
+@@ -521,9 +543,11 @@ void WvTaskMan::do_task()
+ (void (*)(void))call_func, 1, task);
+
+ context_return = 0;
++#ifdef __GLIBC__
+ assert(getcontext(&task->func_return) == 0);
+ if (context_return == 0)
+ setcontext(&task->func_call);
++#endif
+ }
+
+ // the task's function terminated.
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0003-wvtask-Check-for-HAVE_LIBC_STACK_END-only-on-glibc-s.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0003-wvtask-Check-for-HAVE_LIBC_STACK_END-only-on-glibc-s.patch
new file mode 100644
index 000000000..f9304197a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0003-wvtask-Check-for-HAVE_LIBC_STACK_END-only-on-glibc-s.patch
@@ -0,0 +1,27 @@
+From f1fc9f4d523dd8b773a4535176547b0619ec05c6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 21:08:57 -0700
+Subject: [PATCH 3/5] wvtask: Check for HAVE_LIBC_STACK_END only on glibc
+ systems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/wvtask.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/wvtask.cc b/utils/wvtask.cc
+index c0bff7d..716344b 100644
+--- a/utils/wvtask.cc
++++ b/utils/wvtask.cc
+@@ -563,7 +563,7 @@ void WvTaskMan::do_task()
+
+ const void *WvTaskMan::current_top_of_stack()
+ {
+-#ifdef HAVE_LIBC_STACK_END
++#if defined(HAVE_LIBC_STACK_END) && defined(__GLIBC__)
+ extern const void *__libc_stack_end;
+ if (use_shared_stack() || current_task == NULL)
+ return __libc_stack_end;
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0004-wvcrash-Replace-use-of-basename-API.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0004-wvcrash-Replace-use-of-basename-API.patch
new file mode 100644
index 000000000..6f3fbffbd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0004-wvcrash-Replace-use-of-basename-API.patch
@@ -0,0 +1,28 @@
+From bfe68126693f9159f7ac66a69217e0b5f43e5781 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 21:11:21 -0700
+Subject: [PATCH 4/5] wvcrash: Replace use of basename API
+
+musl does not have this API
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/wvcrash.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/wvcrash.cc b/utils/wvcrash.cc
+index 0417759..3d160b7 100644
+--- a/utils/wvcrash.cc
++++ b/utils/wvcrash.cc
+@@ -404,7 +404,7 @@ extern void __wvcrash_init_buffers(const char *program_name);
+ void wvcrash_setup(const char *_argv0, const char *_desc)
+ {
+ if (_argv0)
+- argv0 = basename(_argv0);
++ argv0 = strrchr(_argv0, '/') ? strrchr(_argv0, '/')+1 : _argv0;
+ __wvcrash_init_buffers(argv0);
+ if (_desc)
+ {
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0005-check-for-libexecinfo-during-configure.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0005-check-for-libexecinfo-during-configure.patch
new file mode 100644
index 000000000..25e9ee236
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0005-check-for-libexecinfo-during-configure.patch
@@ -0,0 +1,30 @@
+From fd9515f08dcdafea6ae03413fbe5a43a6438fe3e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 21:25:48 -0700
+Subject: [PATCH 5/5] check for libexecinfo during configure
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 188adfe..1ab4d3c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -159,6 +159,12 @@ AC_SEARCH_LIBS([argp_parse], [argp c], [], [
+ USE_WVSTREAMS_ARGP=1
+ fi
+ ])
++
++USE_LIBEXECINFO=0
++AC_SEARCH_LIBS([backtrace], [execinfo], [], [
++USE_LIBEXECINFO=1
++])
++
+ # Function checks
+ AC_HEADER_DIRENT
+
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/04_signed_request.diff b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/04_signed_request.diff
new file mode 100644
index 000000000..5ab633bc3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/04_signed_request.diff
@@ -0,0 +1,13 @@
+Index: wvstreams-4.6/crypto/wvx509.cc
+===================================================================
+--- wvstreams-4.6.orig/crypto/wvx509.cc 2009-07-29 11:58:16.000000000 -0400
++++ wvstreams-4.6/crypto/wvx509.cc 2009-07-29 11:58:43.000000000 -0400
+@@ -325,7 +325,7 @@
+ }
+
+ int verify_result = X509_REQ_verify(certreq, pk);
+- if (verify_result == 0)
++ if (verify_result == 0 || verify_result == -1)
+ {
+ debug(WvLog::Warning, "Self signed request failed");
+ X509_REQ_free(certreq);
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff
new file mode 100644
index 000000000..8e4fd0329
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff
@@ -0,0 +1,41 @@
+Index: wvstreams-4.6.1/crypto/wvx509.cc
+===================================================================
+--- wvstreams-4.6.1.orig/crypto/wvx509.cc 2011-05-20 00:02:38.119136584 +0200
++++ wvstreams-4.6.1/crypto/wvx509.cc 2011-05-20 00:02:26.035136589 +0200
+@@ -1157,7 +1157,7 @@
+
+ if (ext)
+ {
+- X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
++ X509V3_EXT_METHOD *method = (X509V3_EXT_METHOD *)X509V3_EXT_get(ext);
+ if (!method)
+ {
+ WvDynBuf buf;
+Index: wvstreams-4.6.1/ipstreams/wvunixdgsocket.cc
+===================================================================
+--- wvstreams-4.6.1.orig/ipstreams/wvunixdgsocket.cc 2011-05-20 00:02:38.391136584 +0200
++++ wvstreams-4.6.1/ipstreams/wvunixdgsocket.cc 2011-05-20 00:02:35.283136585 +0200
+@@ -1,8 +1,6 @@
+ #include "wvunixdgsocket.h"
+-#ifdef MACOS
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#endif
+
+ WvUnixDGSocket::WvUnixDGSocket(WvStringParm filename, bool _server, int perms)
+ : socketfile(filename)
+Index: wvstreams-4.6.1/streams/wvatomicfile.cc
+===================================================================
+--- wvstreams-4.6.1.orig/streams/wvatomicfile.cc 2011-05-20 00:02:38.223136584 +0200
++++ wvstreams-4.6.1/streams/wvatomicfile.cc 2011-05-20 00:02:31.619136587 +0200
+@@ -10,10 +10,7 @@
+ #include "wvatomicfile.h"
+ #include "wvfileutils.h"
+ #include "wvstrutils.h"
+-
+-#ifdef MACOS
+ #include <sys/stat.h>
+-#endif
+
+ WvAtomicFile::WvAtomicFile(WvStringParm filename, int flags, mode_t create_mode)
+ : tmp_file(WvString::null)
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/06_gcc-4.7.diff b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/06_gcc-4.7.diff
new file mode 100644
index 000000000..a75067a10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/06_gcc-4.7.diff
@@ -0,0 +1,18 @@
+Description: Fix FTBFS with gcc-4.7
+ Small header include change. This is borderlinde cosmetic, but still needed
+ to prevent the FTBFS.
+Author: Paul Tagliamonte <paultag@ubuntu.com>
+Origin: vendor
+Bug-Debian: http://bugs.debian.org/667418
+Last-Update: 2012-04-13
+
+--- wvstreams-4.6.1.orig/utils/wvuid.cc
++++ wvstreams-4.6.1/utils/wvuid.cc
+@@ -33,6 +33,7 @@ wvuid_t wvgetuid()
+
+ #else // not WIN32
+
++#include <unistd.h>
+
+ WvString wv_username_from_uid(wvuid_t uid)
+ {
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/07_buildflags.diff b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/07_buildflags.diff
new file mode 100644
index 000000000..ec99dcd36
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/07_buildflags.diff
@@ -0,0 +1,32 @@
+Index: b/gen-cc
+===================================================================
+--- a/gen-cc
++++ b/gen-cc
+@@ -15,6 +15,11 @@
+ shift
+ shift
+
++ echo $CC \$MODE -o \$BASE.o \$BASE.$EXT \\
++ -MMD -MF \$DEPFILE -MP -MQ \$BASE.o \\
++ $CPPFLAGS \\
++ $CFLAGS \\
++ "\$@"
+ $CC \$MODE -o \$BASE.o \$BASE.$EXT \\
+ -MMD -MF \$DEPFILE -MP -MQ \$BASE.o \\
+ $CPPFLAGS \\
+Index: b/wvrules-posix.mk
+===================================================================
+--- a/wvrules-posix.mk
++++ b/wvrules-posix.mk
+@@ -35,11 +35,6 @@
+ # Default compiler we use for linking
+ WVLINK_CC = $(CXX)
+
+-ifneq ("$(enable_optimization)", "no")
+- CXXFLAGS+=-O2
+- CFLAGS+=-O2
+-endif
+-
+ ifneq ("$(enable_warnings)", "no")
+ CXXFLAGS+=-Wall -Woverloaded-virtual
+ CFLAGS+=-Wall
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/argp.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/argp.patch
new file mode 100644
index 000000000..e85721363
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/argp.patch
@@ -0,0 +1,37 @@
+Check for argp_parse in libargp and then in libc before using internal version
+
+Index: wvstreams-4.6.1/configure.ac
+===================================================================
+--- wvstreams-4.6.1.orig/configure.ac
++++ wvstreams-4.6.1/configure.ac
+@@ -142,20 +142,21 @@ CPPFLAGS="$CPPFLAGS_save"
+ # argp
+ USE_WVSTREAMS_ARGP=0
+ AC_CHECK_HEADERS(argp.h)
+-AC_CHECK_FUNC(argp_parse)
+-if test "$ac_cv_func_argp_parse" != yes \
+- -o "$ac_cv_header_argp_h" != yes ; then
+- (
+- echo
++AC_SEARCH_LIBS([argp_parse], [argp c], [], [
++
++ if test "$ac_cv_func_argp_parse" != yes \
++ -o "$ac_cv_header_argp_h" != yes ; then
++ (
++ echo
+ echo 'configuring argp...'
+ cd argp
+ ./configure --host=$host_cpu-$host_os || exit $?
+ echo 'argp configured.'
+ echo
+- ) || exit $?
+- USE_WVSTREAMS_ARGP=1
+-fi
+-
++ ) || exit $?
++ USE_WVSTREAMS_ARGP=1
++ fi
++])
+ # Function checks
+ AC_HEADER_DIRENT
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/gcc-6.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/gcc-6.patch
new file mode 100644
index 000000000..b084887ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/gcc-6.patch
@@ -0,0 +1,42 @@
+Description: Fix compilation with gcc-6
+Author: Gert Wollny <gw.fossdev@gmail.com>
+Last-Updated: 2016-07-26
+Forwarded: No
+Bug-Debian: https://bugs.debian.org/811659
+Bug-Debian: https://bugs.debian.org/831146
+
+--- a/streams/wvstream.cc
++++ b/streams/wvstream.cc
+@@ -907,9 +907,9 @@
+
+ if (forceable)
+ {
+- si.wants.readable = readcb;
+- si.wants.writable = writecb;
+- si.wants.isexception = exceptcb;
++ si.wants.readable = static_cast<bool>(readcb);
++ si.wants.writable = static_cast<bool>(writecb);
++ si.wants.isexception = static_cast<bool>(exceptcb);
+ }
+ else
+ {
+@@ -1019,7 +1019,8 @@
+
+ IWvStream::SelectRequest WvStream::get_select_request()
+ {
+- return IWvStream::SelectRequest(readcb, writecb, exceptcb);
++ return IWvStream::SelectRequest(static_cast<bool>(readcb), static_cast<bool>(writecb),
++ static_cast<bool>(exceptcb));
+ }
+
+
+@@ -1107,7 +1108,8 @@
+ // inefficient, because if the alarm was expired then pre_select()
+ // returned true anyway and short-circuited the previous select().
+ TRACE("hello-%p\n", this);
+- return !alarm_was_ticking || select(0, readcb, writecb, exceptcb);
++ return !alarm_was_ticking || select(0, static_cast<bool>(readcb),
++ static_cast<bool>(writecb), static_cast<bool>(exceptcb));
+ }
+
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
new file mode 100644
index 000000000..e3d5e7d20
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
@@ -0,0 +1,56 @@
+HOMEPAGE = "http://alumnit.ca/wiki/index.php?page=WvStreams"
+SUMMARY = "WvStreams is a network programming library in C++"
+
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+DEPENDS = "zlib openssl (>= 0.9.8) dbus readline"
+DEPENDS_append_libc-musl = " argp-standalone libexecinfo"
+
+SRC_URI = "http://${BPN}.googlecode.com/files/${BP}.tar.gz \
+ file://04_signed_request.diff \
+ file://05_gcc.diff \
+ file://06_gcc-4.7.diff \
+ file://07_buildflags.diff \
+ file://gcc-6.patch \
+ file://argp.patch \
+ file://0001-Check-for-limits.h-during-configure.patch \
+ file://0002-wvtask-Dont-use-ucontext-on-non-glibc-systems.patch \
+ file://0003-wvtask-Check-for-HAVE_LIBC_STACK_END-only-on-glibc-s.patch \
+ file://0004-wvcrash-Replace-use-of-basename-API.patch \
+ file://0005-check-for-libexecinfo-during-configure.patch \
+ file://0001-build-fix-parallel-make.patch \
+ file://0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch \
+ "
+
+SRC_URI[md5sum] = "2760dac31a43d452a19a3147bfde571c"
+SRC_URI[sha256sum] = "8403f5fbf83aa9ac0c6ce15d97fd85607488152aa84e007b7d0621b8ebc07633"
+
+inherit autotools-brokensep pkgconfig
+
+TARGET_CFLAGS_append = " -fno-tree-dce -fno-optimize-sibling-calls"
+
+LDFLAGS_append = " -Wl,-rpath-link,${CROSS_DIR}/${TARGET_SYS}/lib"
+
+EXTRA_OECONF = " --without-tcl --without-qt --without-pam --without-valgrind"
+
+PACKAGES_prepend = "libuniconf libuniconf-dbg "
+PACKAGES_prepend = "uniconfd uniconfd-dbg "
+PACKAGES_prepend = "libwvstreams-base libwvstreams-base-dbg "
+PACKAGES_prepend = "libwvstreams-extras libwvstreams-extras-dbg "
+PACKAGES_prepend = "${PN}-valgrind "
+
+FILES_libuniconf = "${libdir}/libuniconf.so.*"
+FILES_libuniconf-dbg = "${libdir}/.debug/libuniconf.so.*"
+
+FILES_uniconfd = "${sbindir}/uniconfd ${sysconfdir}/uniconf.conf ${localstatedir}/uniconf"
+FILES_uniconfd-dbg = "${sbindir}/.debug/uniconfd"
+
+FILES_libwvstreams-base = "${libdir}/libwvutils.so.*"
+FILES_libwvstreams-base-dbg = "${libdir}/.debug/libwvutils.so.*"
+
+FILES_libwvstreams-extras = "${libdir}/libwvbase.so.* ${libdir}/libwvstreams.so.*"
+FILES_libwvstreams-extras-dbg = "${libdir}/.debug/libwvbase.so.* ${libdir}/.debug/libwvstreams.so.*"
+
+FILES_${PN}-valgrind = "${libdir}/valgrind/wvstreams.supp"
+RDEPENDS_${PN} += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/0001-Fix-configure.ac.patch b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/0001-Fix-configure.ac.patch
new file mode 100644
index 000000000..af14a1a56
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/0001-Fix-configure.ac.patch
@@ -0,0 +1,23 @@
+uname can not get version of kernel correctly while cross compile
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 523899b..4e6ae0d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -924,7 +924,7 @@ AC_MSG_RESULT([$ARCH ($host_os)])
+ if test "x$ARCH" = "xlinux"; then
+ AC_MSG_CHECKING([for the linux kernel version])
+
+- kernel=`uname -r`
++ kernel="${KERNEL_VERSION}"
+
+ case "${kernel}" in
+ 2.6.*)
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/zabbix-agent.service b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/zabbix-agent.service
new file mode 100644
index 000000000..b18a96f8b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix/zabbix-agent.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Zabbix Monitor Agent
+After=syslog.target network.target
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/zabbix_agentd
+RemainAfterExit=yes
+User=zabbix
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_3.0.9.bb b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_3.0.9.bb
new file mode 100644
index 000000000..bab5a6ae6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_3.0.9.bb
@@ -0,0 +1,75 @@
+SUMMARY = "Open-source monitoring solution for your IT infrastructure"
+DESCRIPTION = "\
+ZABBIX is software that monitors numerous parameters of a network and the \
+health and integrity of servers. ZABBIX uses a flexible notification \
+mechanism that allows users to configure e-mail based alerts for virtually \
+any event. This allows a fast reaction to server problems. ZABBIX offers \
+excellent reporting and data visualisation features based on the stored \
+data. This makes ZABBIX ideal for capacity planning. \
+\
+ZABBIX supports both polling and trapping. All ZABBIX reports and \
+statistics, as well as configuration parameters are accessed through a \
+web-based front end. A web-based front end ensures that the status of \
+your network and the health of your servers can be assessed from any \
+location. Properly configured, ZABBIX can play an important role in \
+monitoring IT infrastructure. This is equally true for small \
+organisations with a few servers and for large companies with a \
+multitude of servers."
+HOMEPAGE = "http://www.zabbix.com/"
+SECTION = "Applications/Internet"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=300e938ad303147fede2294ed78fe02e"
+DEPENDS = "openldap virtual/libiconv"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/${PV}/${BPN}-${PV}.tar.gz \
+ file://0001-Fix-configure.ac.patch \
+ file://zabbix-agent.service \
+"
+
+SRC_URI[md5sum] = "489d21b464277c0d412155c7e5611a8f"
+SRC_URI[sha256sum] = "4445f26c025009681c29c9b350aa6c4ee7b124ddcaf1609ae36c55997bcb8cf2"
+
+inherit autotools-brokensep linux-kernel-base pkgconfig systemd useradd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "zabbix-agent.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "-r zabbix"
+USERADD_PARAM_${PN} = "-r -g zabbix -d /var/lib/zabbix \
+ -s /sbin/nologin -c \"Zabbix Monitoring System\" zabbix \
+"
+
+KERNEL_VERSION = "${@get_kernelversion_headers('${STAGING_KERNEL_DIR}')}"
+
+EXTRA_OECONF = " \
+ --enable-dependency-tracking \
+ --enable-agent \
+ --enable-ipv6 \
+ --with-net-snmp \
+ --with-ldap=${STAGING_EXECPREFIXDIR} \
+ --with-jabber \
+ --with-unixodbc \
+ --with-ssh2 \
+ --with-sqlite3 \
+"
+CFLAGS_append = " -lldap -llber"
+
+do_configure_prepend() {
+ export KERNEL_VERSION="${KERNEL_VERSION}"
+}
+
+do_install_append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/zabbix-agent.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/zabbix-agent.service
+ fi
+}
+
+FILES_${PN} += "${libdir}"
+
+RDEPENDS_${PN} = "logrotate"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb
new file mode 100644
index 000000000..4920bce8c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "C++ bindings for ZeroMQ"
+HOMEPAGE = "http://www.zeromq.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=db174eaf7b55a34a7c89551197f66e94"
+DEPENDS = "zeromq"
+
+SRCREV = "6aa3ab686e916cb0e62df7fa7d12e0b13ae9fae6"
+PV = "4.2.3+git${SRCPV}"
+
+SRC_URI = "git://github.com/zeromq/cppzmq.git"
+
+S = "${WORKDIR}/git"
+
+do_install () {
+ install -d ${D}/usr/include
+ install -m 0755 ${S}/zmq.hpp ${D}/usr/include/
+}
+
+PACKAGES = "${PN}-dev"
+
+RDEPENDS_${PN}-dev = "zeromq-dev"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/run-ptest b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/run-ptest
new file mode 100755
index 000000000..48b9cd9fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+cd tests
+for i in `ls *`; do
+ if [ ./$i ] ; then
+ echo "PASS: $i"
+ else
+ echo "FAIL: $i"
+ fi
+done
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.2.5.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.2.5.bb
new file mode 100644
index 000000000..356348b43
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.2.5.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "ZeroMQ looks like an embeddable networking library but acts like a concurrency framework"
+HOMEPAGE = "http://www.zeromq.org"
+LICENSE = "LGPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=d5311495d952062e0e4fbba39cbf3de1"
+
+PACKAGECONFIG ??= "libsodium"
+PACKAGECONFIG[libsodium] = "--with-libsodium, --without-libsodium, libsodium"
+
+SRC_URI = "http://github.com/zeromq/libzmq/releases/download/v${PV}/zeromq-${PV}.tar.gz \
+ file://run-ptest \
+"
+SRC_URI[md5sum] = "a1c95b34384257e986842f4d006957b8"
+SRC_URI[sha256sum] = "cc9090ba35713d59bb2f7d7965f877036c49c5558ea0c290b0dcc6f2a17e489f"
+
+S = "${WORKDIR}/zeromq-${PV}"
+
+#Uncomment to choose polling system manually. valid values are kqueue, epoll, devpoll, poll or select
+#EXTRA_OECONF += "--with-poller=kqueue"
+#CFLAGS_append = " -O0"
+#CXXFLAGS_append = " -O0"
+
+inherit autotools ptest pkgconfig
+
+do_compile_ptest () {
+ echo 'buildtest-TESTS: $(check_PROGRAMS)' >> ${B}/Makefile
+ oe_runmake buildtest-TESTS
+}
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/tests
+ install -m 0755 ${B}/tests/.libs/test_* ${D}${PTEST_PATH}/tests
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-Comment-rst2man-related-stuff.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-Comment-rst2man-related-stuff.patch
new file mode 100644
index 000000000..f10c49e7c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-Comment-rst2man-related-stuff.patch
@@ -0,0 +1,34 @@
+From a92fd7da3a262e21c0970a3908eb0b4502819a01 Mon Sep 17 00:00:00 2001
+From: Yang Lyu <yangl@axis.com>
+Date: Fri, 23 Feb 2018 16:31:49 +0100
+Subject: [PATCH] Comment rst2man related stuff
+
+---
+ meson.build | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 56d38e4..3c3b109 100644
+--- a/meson.build
++++ b/meson.build
+@@ -15,7 +15,7 @@ add_project_arguments('-DBINDIR="' + join_paths(get_option('prefix'), get_option
+ cc = meson.get_compiler('c')
+ conf = configuration_data()
+ mod_pkgconfig = import('pkgconfig')
+-prog_rst2man = find_program('rst2man', 'rst2man.py')
++#prog_rst2man = find_program('rst2man', 'rst2man.py')
+
+ sub_cdvar = subproject('c-dvar', version: '>=1')
+ sub_clist = subproject('c-list', version: '>=3')
+@@ -56,7 +56,7 @@ endif
+
+ conf.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
+
+-subdir('docs')
++#subdir('docs')
+ subdir('src')
+
+ if use_launcher
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-Correct-including-directory-for-conf.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-Correct-including-directory-for-conf.patch
new file mode 100644
index 000000000..4909dea12
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-Correct-including-directory-for-conf.patch
@@ -0,0 +1,25 @@
+From 4b79f603b948709906c108796087de7b5643f61a Mon Sep 17 00:00:00 2001
+From: Yang Lyu <yangl@axis.com>
+Date: Mon, 26 Feb 2018 12:48:34 +0100
+Subject: [PATCH] Correct including directory for conf
+
+---
+ src/launch/config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/launch/config.c b/src/launch/config.c
+index 6a68699..579471b 100644
+--- a/src/launch/config.c
++++ b/src/launch/config.c
+@@ -1022,7 +1022,7 @@ static void config_parser_end_fn(void *userdata, const XML_Char *name) {
+ state->file,
+ state->current->include.selinux_root_relative ?
+ bus_selinux_policy_root() :
+- state->file->path,
++ NULL,
+ state->current->cdata);
+ if (r) {
+ state->error = error_trace(r);
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_git.bb b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_git.bb
new file mode 100644
index 000000000..b62bccf2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_git.bb
@@ -0,0 +1,32 @@
+SUMMARY = "dbus broker"
+DESCRIPTION = "Drop-in replacement for dbus-daemon."
+
+SECTION = "base"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7b486c2338d225a1405d979ed2c15ce8"
+
+DEPENDS = "dbus glib-2.0 expat"
+
+PV = "9+git${SRCPV}"
+SRCREV = "ccd06b284892182af569e69046262331150e3536"
+
+SRC_URI = "git://github.com/bus1/dbus-broker;protocol=git"
+SRC_URI += "file://0001-Comment-rst2man-related-stuff.patch"
+SRC_URI += "file://0002-Correct-including-directory-for-conf.patch"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+SYSTEMD_SERVICE_${PN} = "${BPN}.service"
+
+FILES_${PN} += "${systemd_system_unitdir}"
+FILES_${PN} += "${systemd_user_unitdir}"
+
+RDEPENDS_${PN} = "dbus"
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy/0001-dbus-daemon-proxy-Return-DBUS_HANDLER_RESULT_NOT_YET.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy/0001-dbus-daemon-proxy-Return-DBUS_HANDLER_RESULT_NOT_YET.patch
new file mode 100644
index 000000000..2c4ca057f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy/0001-dbus-daemon-proxy-Return-DBUS_HANDLER_RESULT_NOT_YET.patch
@@ -0,0 +1,30 @@
+From 8e6d1f590b1cb437dc67c51298ef1722a7266d35 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 18:37:58 -0700
+Subject: [PATCH] dbus-daemon-proxy: Return DBUS_HANDLER_RESULT_NOT_YET_HANDLED
+ from master_filter_cb() if DBusConnection is null
+
+So it can be passed on to other handlers since this could
+not be handled here
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dbus-daemon-proxy.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dbus-daemon-proxy.c b/dbus-daemon-proxy.c
+index 009e4fd..f3f0d80 100644
+--- a/dbus-daemon-proxy.c
++++ b/dbus-daemon-proxy.c
+@@ -115,7 +115,7 @@ master_filter_cb (DBusConnection *conn,
+ guint32 serial;
+
+ if (!dbus_conn)
+- return;
++ DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ if (verbose)
+ g_print ("New message from server: type='%d' path='%s' iface='%s'"
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy_git.bb b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy_git.bb
new file mode 100644
index 000000000..42cd032c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-daemon-proxy_git.bb
@@ -0,0 +1,23 @@
+SUMMARY = "dbus forwarding daemon"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://dbus-daemon-proxy.c;endline=19;md5=41df6d21fe1c97d6a1cc22a5bf374cba"
+DEPENDS = "dbus dbus-glib"
+SRCREV = "1226a0a1374628ff191f6d8a56000be5e53e7608"
+PV = "0.0.0+gitr${SRCPV}"
+PR = "r1.59"
+
+SRC_URI = "git://github.com/alban/dbus-daemon-proxy \
+ file://0001-dbus-daemon-proxy-Return-DBUS_HANDLER_RESULT_NOT_YET.patch \
+ "
+S = "${WORKDIR}/git"
+
+inherit pkgconfig
+
+do_compile() {
+ ${CC} ${CFLAGS} -o dbus-daemon-proxy dbus-daemon-proxy.c `pkg-config --cflags --libs dbus-glib-1` ${LDFLAGS}
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 dbus-daemon-proxy ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-pipe.c-Use-a-string-instead-of-char.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-pipe.c-Use-a-string-instead-of-char.patch
new file mode 100644
index 000000000..6883f9a0b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-pipe.c-Use-a-string-instead-of-char.patch
@@ -0,0 +1,27 @@
+From 6bcb58bd69c38b9200e8ec6c382247167571189d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Jul 2017 16:44:15 -0700
+Subject: [PATCH] pipe.c: Use a string instead of char
+
+Fixes
+error: invalid conversion from 'char' to 'const void*' [-fpermissive]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/pipe.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/pipe.cpp b/src/pipe.cpp
+index 45c2ba6..1303c2d 100644
+--- a/src/pipe.cpp
++++ b/src/pipe.cpp
+@@ -83,5 +83,5 @@ ssize_t Pipe::read(void *buffer, unsigned int &nbytes)
+ void Pipe::signal()
+ {
+ // TODO: ignoring return of read/write generates warning; maybe relevant for eventloop work...
+- ::write(_fd_write, '\0', 1);
++ ::write(_fd_write, "", 1);
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-src-eventloop.cpp-use-portable-method-for-initializi.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-src-eventloop.cpp-use-portable-method-for-initializi.patch
new file mode 100644
index 000000000..eed84e4a6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0001-src-eventloop.cpp-use-portable-method-for-initializi.patch
@@ -0,0 +1,36 @@
+From 93fd4868d71aa7a26cdfd382d1e4c85112f069f9 Mon Sep 17 00:00:00 2001
+From: Peter Williams <peter@newton.cx>
+Date: Sat, 19 Dec 2015 21:07:37 -0500
+Subject: [PATCH] src/eventloop.cpp: use portable method for initializing
+ recursive mutex
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+Upstream-Status: Backport [https://github.com/andreas-volz/dbus-cplusplus/commit/cdaeaa825db191bd65aad3aaaeb3178738727f05]
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/eventloop.cpp | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/eventloop.cpp b/src/eventloop.cpp
+index 7fb06a3..f622812 100644
+--- a/src/eventloop.cpp
++++ b/src/eventloop.cpp
+@@ -85,8 +85,11 @@ DefaultMutex::DefaultMutex(bool recursive)
+ {
+ if (recursive)
+ {
+- pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+- _mutex = recmutex;
++ pthread_mutexattr_t attr;
++
++ pthread_mutexattr_init(&attr);
++ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
++ pthread_mutex_init(&_mutex, &attr);
+ }
+ else
+ {
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0002-tools-generate_proxy.cpp-avoid-possibly-undefined-ui.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0002-tools-generate_proxy.cpp-avoid-possibly-undefined-ui.patch
new file mode 100644
index 000000000..65cd93976
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0002-tools-generate_proxy.cpp-avoid-possibly-undefined-ui.patch
@@ -0,0 +1,58 @@
+From c673a76857cbe0ca82fa11aea9b70f94c3e5b041 Mon Sep 17 00:00:00 2001
+From: Peter Williams <peter@newton.cx>
+Date: Sat, 19 Dec 2015 21:08:46 -0500
+Subject: [PATCH] tools/generate_proxy.cpp: avoid possibly undefined 'uint'
+ type
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+Upstream-Status: Backport [https://github.com/andreas-volz/dbus-cplusplus/commit/43f119a2b3fe951c0f1d88cc61170d4c81a88880]
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ tools/generate_proxy.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tools/generate_proxy.cpp b/tools/generate_proxy.cpp
+index bf1094a..ebb75fa 100644
+--- a/tools/generate_proxy.cpp
++++ b/tools/generate_proxy.cpp
+@@ -352,7 +352,7 @@ void generate_proxy(Xml::Document &doc, const char *filename)
+ if (!arg_name.length())
+ {
+ arg_name = "argin";
+- arg_name += toString <uint> (i);
++ arg_name += toString <unsigned int> (i);
+ }
+
+ // generate extra code to wrap object
+@@ -445,7 +445,7 @@ void generate_proxy(Xml::Document &doc, const char *filename)
+
+ if (!arg_name.length())
+ {
+- arg_name = "argout" + toString <uint> (i);
++ arg_name = "argout" + toString <unsigned int> (i);
+ }
+
+ if (arg_object.length())
+@@ -569,7 +569,7 @@ void generate_proxy(Xml::Document &doc, const char *filename)
+ // use a default if no arg name given
+ if (!arg_name.length())
+ {
+- arg_name = "arg" + toString <uint> (i);
++ arg_name = "arg" + toString <unsigned int> (i);
+ }
+
+ body << arg_name << ";" << endl;
+@@ -605,7 +605,7 @@ void generate_proxy(Xml::Document &doc, const char *filename)
+
+ if (!arg_name.length())
+ {
+- arg_name = "arg" + toString <uint> (j);
++ arg_name = "arg" + toString <unsigned int> (j);
+ }
+
+ if (arg_object.length())
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0003-Fixed-undefined-ssize_t-for-clang-3.8.0-on-FreeBSD.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0003-Fixed-undefined-ssize_t-for-clang-3.8.0-on-FreeBSD.patch
new file mode 100644
index 000000000..f69cefdb7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0003-Fixed-undefined-ssize_t-for-clang-3.8.0-on-FreeBSD.patch
@@ -0,0 +1,30 @@
+From 465d98dbcdcb72375c198010a50b80b953e7d5a6 Mon Sep 17 00:00:00 2001
+From: Yuri <yuri@tsoft.com>
+Date: Sat, 28 May 2016 13:20:10 -0700
+Subject: [PATCH] Fixed undefined ssize_t for clang-3.8.0 on FreeBSD.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+Upstream-Status: Backport [https://github.com/andreas-volz/dbus-cplusplus/commit/463f5a4400d494b831c3b3348c0a21f0faf14f39]
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ include/dbus-c++/pipe.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/dbus-c++/pipe.h b/include/dbus-c++/pipe.h
+index 999f042..682646c 100644
+--- a/include/dbus-c++/pipe.h
++++ b/include/dbus-c++/pipe.h
+@@ -30,6 +30,8 @@
+ /* STD */
+ #include <cstdlib>
+
++#include <sys/types.h>
++
+ namespace DBus
+ {
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0004-use-POSIX-poll.h-instead-of-sys-poll.h.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0004-use-POSIX-poll.h-instead-of-sys-poll.h.patch
new file mode 100644
index 000000000..b108a4cd6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/0004-use-POSIX-poll.h-instead-of-sys-poll.h.patch
@@ -0,0 +1,74 @@
+From 12de53b0f24c478ea4ff6b4e2c55366dbd2f02b1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Fri, 25 Nov 2016 09:33:20 +0000
+Subject: [PATCH] use POSIX poll.h instead of sys/poll.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+POSIX specifies that <poll.h> is the correct header to
+include for poll()
+ http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html
+whereas <sys/poll.h> is only needed for ancient glibc (<2.3),
+so let's follow POSIX instead.
+
+As a side-effect, this silences compilation warnings when
+compiling against the musl C-library such as:
+
+| In file included from ../../libdbus-c++-0.9.0/src/eventloop.cpp:31:0:
+| <sysroot>/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
+| #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
+| ^~~~~~~
+| In file included from ../../libdbus-c++-0.9.0/src/eventloop-integration.cpp:39:0:
+| <sysroot>/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
+| #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
+| ^~~~~~~
+
+Signed-off-by: André Draszik <git@andred.net>
+---
+Upstream-Status: Submitted [https://github.com/andreas-volz/dbus-cplusplus/pull/3]
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/eventloop-integration.cpp | 2 +-
+ src/eventloop.cpp | 2 +-
+ src/pipe.cpp | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+Index: libdbus-c++-0.9.0/src/eventloop-integration.cpp
+===================================================================
+--- libdbus-c++-0.9.0.orig/src/eventloop-integration.cpp
++++ libdbus-c++-0.9.0/src/eventloop-integration.cpp
+@@ -36,7 +36,7 @@
+ /* STD */
+ #include <string.h>
+ #include <cassert>
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <fcntl.h>
+
+ using namespace DBus;
+Index: libdbus-c++-0.9.0/src/eventloop.cpp
+===================================================================
+--- libdbus-c++-0.9.0.orig/src/eventloop.cpp
++++ libdbus-c++-0.9.0/src/eventloop.cpp
+@@ -28,7 +28,7 @@
+ #include <dbus-c++/eventloop.h>
+ #include <dbus-c++/debug.h>
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <sys/time.h>
+
+ #include <dbus/dbus.h>
+Index: libdbus-c++-0.9.0/src/pipe.cpp
+===================================================================
+--- libdbus-c++-0.9.0.orig/src/pipe.cpp
++++ libdbus-c++-0.9.0/src/pipe.cpp
+@@ -32,7 +32,7 @@
+
+ /* STD */
+ #include <unistd.h>
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <cassert>
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/fix-missing-unistd.h-include.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/fix-missing-unistd.h-include.patch
new file mode 100644
index 000000000..bf6870eb0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/fix-missing-unistd.h-include.patch
@@ -0,0 +1,38 @@
+
+sniped from ChromiumOS
+
+https://bugs.gentoo.org/424707
+
+From 154f7861d19a2bd5c79c488f9989610971db451b Mon Sep 17 00:00:00 2001
+From: Han Shen <shenhan@google.com>
+Date: Thu, 31 May 2012 16:49:35 -0700
+Subject: [PATCH] Fixed dbus-c++ gcc 4.7 building problem.
+
+Just add "unistd.h" inclusion to eventloop-integration.h.
+
+BUG=None
+TEST=Manually built using gcc 4.7.
+
+Change-Id: I87bd1f90db6a4c974a5ed8134044e8be2034aff2
+Reviewed-on: https://gerrit.chromium.org/gerrit/24260
+Tested-by: Han Shen <shenhan@google.com>
+Reviewed-by: Yunlian Jiang <yunlian@chromium.org>
+Commit-Ready: Han Shen <shenhan@chromium.org>
+Upstream-Status: Inappropriate [ not author, no upstream ]
+Signed-off-by: Thilo Cestonaro <thilo.cestonaro@ts.fujitsu.com>
+---
+ include/dbus-c++/eventloop-integration.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: libdbus-c++-0.9.0/include/dbus-c++/eventloop-integration.h
+===================================================================
+--- libdbus-c++-0.9.0.orig/include/dbus-c++/eventloop-integration.h
++++ libdbus-c++-0.9.0/include/dbus-c++/eventloop-integration.h
+@@ -26,6 +26,7 @@
+ #define __DBUSXX_EVENTLOOP_INTEGRATION_H
+
+ #include <errno.h>
++#include <unistd.h>
+ #include "api.h"
+ #include "dispatcher.h"
+ #include "util.h"
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/remove-CXX_FOR_BUILD-stuff.patch b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/remove-CXX_FOR_BUILD-stuff.patch
new file mode 100644
index 000000000..fa29d3cde
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++-0.9.0/remove-CXX_FOR_BUILD-stuff.patch
@@ -0,0 +1,33 @@
+From: Thilo Cestonaro <thilo.cestonaro@ts.fujitsu.com>
+Date: Fri, 18 Nov 2016 10:23:07 +0100
+Subject: Build libdbus-c++ tools for target platform rather than enforced for
+host platform.
+
+Upstream-Status: Inappropriate [no upstream]
+Signed-off-by: Thilo Cestonaro <thilo.cestonaro@ts.fujitsu.com>
+---
+
+diff -Naur libdbus-c++-0.9.0.ori/configure.ac libdbus-c++-0.9.0/configure.ac
+--- libdbus-c++-0.9.0.ori/configure.ac 2016-11-15 14:25:36.085882774 +0100
++++ libdbus-c++-0.9.0/configure.ac 2016-11-15 14:27:08.814568717 +0100
+@@ -64,9 +64,6 @@
+ AC_PROG_CC
+ AC_PROG_CXX
+
+-CXX_FOR_BUILD=${CXX_FOR_BUILD-${CXX}}
+-AC_SUBST(CXX_FOR_BUILD)
+-
+ AM_PROG_LIBTOOL
+
+ PKG_PROG_PKG_CONFIG
+diff -Naur libdbus-c++-0.9.0.ori/tools/Makefile.am libdbus-c++-0.9.0/tools/Makefile.am
+--- libdbus-c++-0.9.0.ori/tools/Makefile.am 2016-11-15 14:25:36.089882803 +0100
++++ libdbus-c++-0.9.0/tools/Makefile.am 2016-11-15 14:26:19.454203583 +0100
+@@ -1,7 +1,5 @@
+ # hacky, but ...
+
+-CXX = $(CXX_FOR_BUILD)
+-
+ AM_CPPFLAGS = \
+ $(dbus_CFLAGS) \
+ $(xml_CFLAGS) \
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++_0.9.0.bb b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++_0.9.0.bb
new file mode 100644
index 000000000..a6d8b86ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/libdbus-c++_0.9.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "DBus-C++ Library"
+DESCRIPTION = "DBus-c++ attempts to provide a C++ API for D-BUS. The library has a glib and an Ecore mainloop integration. It also offers an optional own main loop."
+HOMEPAGE = "http://dbus-cplusplus.sourceforge.net"
+SECTION = "base"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+DEPENDS = "dbus expat glib-2.0 libpcre"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/dbus-cplusplus/dbus-c++/${PV}/${BP}.tar.gz \
+ file://fix-missing-unistd.h-include.patch \
+ file://remove-CXX_FOR_BUILD-stuff.patch \
+ file://0001-src-eventloop.cpp-use-portable-method-for-initializi.patch \
+ file://0002-tools-generate_proxy.cpp-avoid-possibly-undefined-ui.patch \
+ file://0003-Fixed-undefined-ssize_t-for-clang-3.8.0-on-FreeBSD.patch \
+ file://0004-use-POSIX-poll.h-instead-of-sys-poll.h.patch \
+ file://0001-pipe.c-Use-a-string-instead-of-char.patch \
+ "
+SRC_URI[md5sum] = "e752116f523fa88ef041e63d3dee4de2"
+SRC_URI[sha256sum] = "bc11ac297b3cb010be904c72789695543ee3fdf3d75cdc8225fd371385af4e61"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-ecore --disable-examples --disable-tests"
+LDFLAGS += "-pthread"
+
+PACKAGE_BEFORE_PN = "${PN}-tools"
+
+FILES_${PN}-tools = "${bindir}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/gtk-doc.patch b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/gtk-doc.patch
new file mode 100644
index 000000000..abd7ff416
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/gtk-doc.patch
@@ -0,0 +1,34 @@
+Upstream-Status: Inappropriate [configuration]
+
+Index: eggdbus-0.6/docs/eggdbus/Makefile.am
+===================================================================
+--- eggdbus-0.6.orig/docs/eggdbus/Makefile.am
++++ eggdbus-0.6/docs/eggdbus/Makefile.am
+@@ -87,11 +87,7 @@ HTML_IMAGES = \
+ # Extra options to supply to gtkdoc-fixref
+ FIXXREF_OPTIONS=
+
+-if ENABLE_GTK_DOC
+-include $(top_srcdir)/gtk-doc.make
+-else
+ CLEANFILES =
+-endif
+
+ CLEANFILES += *~ \
+ eggdbus-scan.* \
+Index: eggdbus-0.6/docs/tests/Makefile.am
+===================================================================
+--- eggdbus-0.6.orig/docs/tests/Makefile.am
++++ eggdbus-0.6/docs/tests/Makefile.am
+@@ -65,11 +65,7 @@ HTML_IMAGES = \
+ # Extra options to supply to gtkdoc-fixref
+ FIXXREF_OPTIONS=
+
+-if ENABLE_GTK_DOC
+-include $(top_srcdir)/gtk-doc.make
+-else
+ CLEANFILES =
+-endif
+
+ CLEANFILES += *~ \
+ tests-scan.* \
diff --git a/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/marshal.patch b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/marshal.patch
new file mode 100644
index 000000000..a605a34c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus/marshal.patch
@@ -0,0 +1,28 @@
+Upstream-Status: Inappropriate [configuration]
+
+Index: eggdbus-0.6/src/eggdbus/Makefile.am
+===================================================================
+--- eggdbus-0.6.orig/src/eggdbus/Makefile.am
++++ eggdbus-0.6/src/eggdbus/Makefile.am
+@@ -130,7 +130,7 @@ BUILT_SOURCES = \
+ $(NULL)
+
+ eggdbus-built-sources.stamp : eggdbus-binding-tool Makefile.am org.freedesktop.DBus.xml org.freedesktop.DBus.Peer.xml org.freedesktop.DBus.Properties.xml org.freedesktop.DBus.Introspectable.xml eggdbus-glib-genmarshal
+- EGG_DBUS_GENMARSHAL=$(top_builddir)/src/eggdbus/eggdbus-glib-genmarshal $(top_builddir)/src/eggdbus/eggdbus-binding-tool \
++ EGG_DBUS_GENMARSHAL=eggdbus-glib-genmarshal eggdbus-binding-tool \
+ --namespace EggDBus \
+ --dbus-namespace org.freedesktop.DBus \
+ --interfaces-only \
+Index: eggdbus-0.6/src/tests/Makefile.am
+===================================================================
+--- eggdbus-0.6.orig/src/tests/Makefile.am
++++ eggdbus-0.6/src/tests/Makefile.am
+@@ -25,7 +25,7 @@ BUILT_SOURCES = \
+ $(NULL)
+
+ test-built-sources.stamp : Makefile.am $(top_builddir)/src/eggdbus/eggdbus-binding-tool com.example.Frob.xml com.example.Tweak.xml com.example.Twiddle.xml
+- EGG_DBUS_GENMARSHAL=$(top_builddir)/src/eggdbus/eggdbus-glib-genmarshal $(top_builddir)/src/eggdbus/eggdbus-binding-tool \
++ EGG_DBUS_GENMARSHAL=eggdbus-glib-genmarshal eggdbus-binding-tool \
+ --namespace "Test" \
+ --dbus-namespace "com.example" \
+ --include-header testtypes.h \
diff --git a/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus_0.6.bb b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus_0.6.bb
new file mode 100644
index 000000000..cc28ec77c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/eggdbus/eggdbus_0.6.bb
@@ -0,0 +1,33 @@
+SUMMARY = "An alternative to dbug-glib."
+DESCRIPTION = "An alternative to dbus-glib. It is designed specifically to \
+make it comfortable to work with very large and potentially \
+complex D-Bus services like e.g. DeviceKit-disks"
+
+HOMEPAGE = "http://cgit.freedesktop.org/~david/eggdbus"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=155db86cdbafa7532b41f390409283eb \
+ file://src/eggdbus/eggdbus.h;md5=6b312aef57ed8d738b3f131ad037d6c2"
+
+DEPENDS = "dbus glib-2.0 dbus-glib eggdbus-native"
+DEPENDS_class-native = "dbus-native glib-2.0-native dbus-glib-native"
+
+SRC_URI = "http://cgit.freedesktop.org/~david/${BPN}/snapshot/${BPN}-${PV}.tar.bz2 \
+ file://gtk-doc.patch \
+"
+SRC_URI_append_class-target = "file://marshal.patch"
+SRC_URI[md5sum] = "0a111faa54dfba2cf432c2c8e8a76e06"
+SRC_URI[sha256sum] = "3ad26e271c1a879bafcd181e065fe0ed53b542299a773c3188c9edb25b895ed1"
+
+inherit autotools gtk-doc
+
+EXTRA_OECONF = " --disable-man-pages "
+
+BBCLASSEXTEND = "native"
+
+PARALLEL_MAKE = ""
+
+do_configure_prepend() {
+ # Create ChangeLog to walk around automake error.
+ # " Makefile.am: error: required file './ChangeLog' not found "
+ touch ${S}/ChangeLog
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/ell/ell/0001-ell-fix-build-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-core/ell/ell/0001-ell-fix-build-with-musl-libc.patch
new file mode 100644
index 000000000..a172a93ca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/ell/ell/0001-ell-fix-build-with-musl-libc.patch
@@ -0,0 +1,39 @@
+From 4f8c68757b05d12392cd1a8aed174cb8e56f80e3 Mon Sep 17 00:00:00 2001
+From: "Maxin B. John" <maxin.john@intel.com>
+Date: Thu, 5 Apr 2018 17:19:44 +0300
+Subject: [PATCH] ell: fix build with musl libc
+
+musl libc doesn't implement TEMP_FAILURE_RETRY. Use the
+TEMP_FAILURE_RETRY from glibc to fix build.
+
+Upstream-Status: Submitted [https://lists.01.org/pipermail/ell/2018-April/001209.html]
+
+Signed-off-by: Maxin B. John <maxin.john@intel.com>
+---
+ ell/dbus.h | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/ell/dbus.h b/ell/dbus.h
+index a7c08d2..3ff5e0f 100644
+--- a/ell/dbus.h
++++ b/ell/dbus.h
+@@ -28,6 +28,16 @@
+ #include <stddef.h>
+ #include <stdarg.h>
+
++/* taken from glibc unistd.h for musl support */
++#ifndef TEMP_FAILURE_RETRY
++#define TEMP_FAILURE_RETRY(expression) \
++ (__extension__ \
++ ({ long int __result; \
++ do __result = (long int) (expression); \
++ while (__result == -1L && errno == EINTR); \
++ __result; }))
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+--
+2.4.0
+
diff --git a/meta-openembedded/meta-oe/recipes-core/ell/ell_0.4.bb b/meta-openembedded/meta-oe/recipes-core/ell/ell_0.4.bb
new file mode 100644
index 000000000..1524bd6b9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/ell/ell_0.4.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Embedded Linux Library"
+DESCRIPTION = "ELL is a DBUS library which provides DBUS bindings."
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb504b67c50331fc78734fed90fb0e09"
+SECTION = "libs"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/git"
+SRCREV = "b4aea06fabb2af1af01f861f8f394c75950b6d47"
+SRC_URI = "git://git.kernel.org/pub/scm/libs/ell/ell.git \
+ file://0001-ell-fix-build-with-musl-libc.patch \
+ "
+
+do_configure_prepend () {
+ mkdir ${S}/build-aux
+}
+
+DEPENDS = "dbus"
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/0001-Glib-Threads-Private-Fix-gobj.patch b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/0001-Glib-Threads-Private-Fix-gobj.patch
new file mode 100644
index 000000000..7899022f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/0001-Glib-Threads-Private-Fix-gobj.patch
@@ -0,0 +1,40 @@
+From 838fe84c2ddcc9af51c34f751defbf3dd0ba8a06 Mon Sep 17 00:00:00 2001
+From: Kjell Ahlstedt <kjellahlstedt@gmail.com>
+Date: Wed, 20 Dec 2017 20:00:32 +0100
+Subject: [PATCH] Glib::Threads::Private: Fix gobj()
+
+Bug 791711
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Backport [https://github.com/GNOME/glibmm/commit/37d57ae9572b7d74aa385a30313eceae7f2d3fce]
+ glib/glibmm/threads.h | 2 +-
+ glib/src/threads.hg | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/glib/glibmm/threads.h b/glib/glibmm/threads.h
+index f7e2b82a..2c0cbe8c 100644
+--- a/glib/glibmm/threads.h
++++ b/glib/glibmm/threads.h
+@@ -657,7 +657,7 @@ public:
+ */
+ inline void replace(T* data);
+
+- GPrivate* gobj() { return gobject_; }
++ GPrivate* gobj() { return &gobject_; }
+
+ private:
+ GPrivate gobject_;
+diff --git a/glib/src/threads.hg b/glib/src/threads.hg
+index 86d7a17b..c82a6130 100644
+--- a/glib/src/threads.hg
++++ b/glib/src/threads.hg
+@@ -628,7 +628,7 @@ public:
+ */
+ inline void replace(T* data);
+
+- GPrivate* gobj() { return gobject_; }
++ GPrivate* gobj() { return &gobject_; }
+
+ private:
+ GPrivate gobject_;
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/remove-examples.patch b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/remove-examples.patch
new file mode 100644
index 000000000..d32fe78d3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm/remove-examples.patch
@@ -0,0 +1,39 @@
+From f48a69fd11b2eda6c43ff046c202cbc4dcd4e92d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 12 Jul 2011 11:46:37 +0200
+
+---
+ Makefile.am | 7 +------
+ configure.ac | 1 -
+ 2 files changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index a0df8af..c3d5e06 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -23,12 +23,7 @@ src_subdirs = glib/src gio/src
+ else
+ src_subdirs =
+ endif
+-if ENABLE_DOCUMENTATION
+-doc_subdirs = docs
+-else
+-doc_subdirs =
+-endif
+-SUBDIRS = tools $(src_subdirs) glib/glibmm gio/giomm tests examples $(doc_subdirs)
++SUBDIRS = tools $(src_subdirs) glib/glibmm gio/giomm tests
+
+ glibmm_includedir = $(includedir)/$(GLIBMM_MODULE_NAME)
+ glibmm_include_HEADERS = glib/glibmm.h
+diff --git a/configure.ac b/configure.ac
+index c20e778..74203be 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -166,7 +166,6 @@ AC_CONFIG_FILES([Makefile
+ gio/src/Makefile
+ gio/giomm/Makefile
+ tests/Makefile
+- examples/Makefile
+ docs/Makefile
+ docs/reference/Doxyfile
+ MSVC_Net2013/glibmm/glibmm.rc
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.54.1.bb b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.54.1.bb
new file mode 100644
index 000000000..4706432ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.54.1.bb
@@ -0,0 +1,37 @@
+SUMMARY = "C++ bindings for the glib library"
+HOMEPAGE = "http://www.gtkmm.org/"
+SECTION = "libs"
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=42dfffebc56fec7527aac53b7a89d1d8 \
+ file://COPYING.tools;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "mm-common glib-2.0 libsigc++-2.0 glib-2.0-native"
+inherit autotools pkgconfig
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = " \
+ ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/${SHRT_VER}/glibmm-${PV}.tar.xz \
+ file://remove-examples.patch \
+ file://0001-Glib-Threads-Private-Fix-gobj.patch \
+"
+SRC_URI[md5sum] = "dee5ebe309f5976c3dacfcf5c43a062b"
+SRC_URI[sha256sum] = "7cc28c732b04d70ed34f0c923543129083cfb90580ea4a2b4be5b38802bf6a4a"
+
+do_install_append() {
+ install -d ${D}${datadir}/glibmm-2.4
+ install -d ${D}${datadir}/aclocal
+
+ install -m 0644 glib/glibmmconfig.h ${D}${datadir}/glibmm-2.4/
+ install -m 0644 scripts/glibmm_check_perl.m4 ${D}${datadir}/aclocal/ || true
+
+ for i in generate_wrap_init.pl gmmproc; do
+ sed -i -e '1s,.*,#!${bindir}/env perl,' ${D}${libdir}/glibmm-2.4/proc/$i
+ done
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${datadir}/glibmm-* ${libdir}/glibmm-2.4/include/ ${libdir}/glibmm-2.4/proc/ ${libdir}/giomm-2.4/include/"
+
+RDEPENDS_${PN}-dev = "perl"
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.0.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.0.bb
new file mode 100644
index 000000000..53bd5de10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A library for loose coupling of C++ method calls"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+
+DEPENDS = "mm-common"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.10/libsigc++-${PV}.tar.xz"
+SRC_URI[md5sum] = "70bcbde2c900e4925d6ef4bf50954195"
+SRC_URI[sha256sum] = "f843d6346260bfcb4426259e314512b99e296e8ca241d771d21ac64f28298d81"
+
+S = "${WORKDIR}/libsigc++-${PV}"
+
+inherit autotools
+
+EXTRA_AUTORECONF = "--exclude=autoheader"
+
+FILES_${PN}-dev += "${libdir}/sigc++-*/"
+FILES_${PN}-doc += "${datadir}/devhelp"
+
+BBCLASSEXTEND = "native"
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/libxml++_ptest.patch b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/libxml++_ptest.patch
new file mode 100644
index 000000000..0d1a5186a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/libxml++_ptest.patch
@@ -0,0 +1,82 @@
+Index: libxml++-2.40.1/Makefile.am
+===================================================================
+--- libxml++-2.40.1.orig/Makefile.am
++++ libxml++-2.40.1/Makefile.am
+@@ -24,5 +24,8 @@ dist_noinst_SCRIPTS = autogen.sh
+
+ DISTCLEANFILES = MSVC_Net2010/libxml++/libxml++config.h
+
++install-ptest:
++ make -C examples install-ptest
++
+ # Optional: auto-generate the ChangeLog file from the git log on make dist
+ include $(top_srcdir)/build/dist-changelog.am
+Index: libxml++-2.40.1/examples/Makefile.am
+===================================================================
+--- libxml++-2.40.1.orig/examples/Makefile.am
++++ libxml++-2.40.1/examples/Makefile.am
+@@ -19,6 +19,8 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_
+ AM_CXXFLAGS = $(LIBXMLXX_WXXFLAGS)
+ LDADD = $(top_builddir)/libxml++/libxml++-$(LIBXMLXX_API_VERSION).la $(LIBXMLXX_LIBS)
+
++LOG_DRIVER = $(SHELL) ../macros/test-driver
++
+ check_PROGRAMS = \
+ dom_build/dom_build \
+ dom_parse_entities/dom_parse_entities \
+@@ -37,6 +39,23 @@ check_PROGRAMS = \
+ schemavalidation/schemavalidation \
+ textreader/textreader
+
++check_DOTLIBS = \
++ dom_build/.libs/dom_build \
++ dom_parse_entities/.libs/dom_parse_entities \
++ dom_parser/.libs/dom_parser \
++ dom_parser_raw/.libs/dom_parser_raw \
++ dom_read_write/.libs/dom_read_write \
++ dom_xinclude/.libs/dom_xinclude \
++ dom_xpath/.libs/dom_xpath \
++ dtdvalidation/.libs/dtdvalidation \
++ import_node/.libs/import_node \
++ sax_exception/.libs/sax_exception \
++ sax_parser/.libs/sax_parser \
++ sax_parser_build_dom/.libs/sax_parser_build_dom \
++ sax_parser_entities/.libs/sax_parser_entities \
++ schemavalidation/.libs/schemavalidation \
++ textreader/.libs/textreader
++
+ # Shell scripts that call the example programs.
+ check_SCRIPTS = \
+ dom_build/make_check.sh \
+@@ -154,10 +173,10 @@ dist_noinst_DATA = \
+ # file are located in different directories.
+ dom_read_write/make_check.sh: Makefile
+ echo '# Generated and used by "make check"' >$@
+- echo 'dom_read_write/dom_read_write "$(srcdir)/dom_read_write/example.xml" dom_read_write/example_output.xml >/dev/null' >>$@
++ echo 'cd dom_read_write && .libs/dom_read_write "example.xml" example_output.xml >/dev/null' >>$@
+ chmod +x $@
+
+-script_template = cd "$(srcdir)/<!progname!>" && "$(abs_builddir)/<!progname!>/<!progname!>" >/dev/null
++script_template = cd "<!progname!>" && ".libs/<!progname!>" >/dev/null
+ standard_scripts = $(filter-out dom_read_write/make_check.sh,$(check_SCRIPTS))
+
+ # All other script files are generated like so:
+@@ -169,3 +188,18 @@ $(standard_scripts): Makefile
+ CLEANFILES = \
+ dom_read_write/example_output.xml \
+ $(check_SCRIPTS)
++
++buildtest: all
++ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
++ $(MAKE) $(AM_MAKEFLAGS) buildtest-TESTS
++
++install-ptest:
++ $(MKDIR_P) $(DESTDIR)/examples
++ cp --parents $(check_DOTLIBS) $(DESTDIR)/examples
++ cp --parents $(check_SCRIPTS) $(DESTDIR)/examples
++ cd $(srcdir) && cp --parents $(dist_noinst_DATA) $(DESTDIR)/examples
++ cp Makefile $(DESTDIR)/examples
++ $(MKDIR_P) $(DESTDIR)/macros
++ cp $(top_srcdir)/build/test-driver $(DESTDIR)/macros
++ sed -i -e 's|^Makefile:|_Makefile:|' $(DESTDIR)/examples/Makefile
++
diff --git a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/run-ptest b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/run-ptest
new file mode 100644
index 000000000..236f66753
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd examples
+make -k check-TESTS
diff --git a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++_2.40.1.bb b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++_2.40.1.bb
new file mode 100644
index 000000000..c001c184c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++_2.40.1.bb
@@ -0,0 +1,28 @@
+SUMMARY = "C++ wrapper for libxml library"
+DESCRIPTION = "C++ wrapper for libxml library"
+HOMEPAGE = "http://libxmlplusplus.sourceforge.net"
+BUGTRACKER = "http://bugzilla.gnome.org/buglist.cgi?product=libxml%2B%2B"
+SECTION = "libs"
+LICENSE = "LGPL-2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 "
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${SHRT_VER}/${BP}.tar.xz \
+ file://libxml++_ptest.patch \
+ file://run-ptest \
+"
+SRC_URI[md5sum] = "377a87bea899f2b4ff62df2418c3d8a6"
+SRC_URI[sha256sum] = "4ad4abdd3258874f61c2e2a41d08e9930677976d303653cd1670d3e9f35463e9"
+
+DEPENDS = "libxml2 glibmm"
+
+inherit autotools pkgconfig ptest
+
+do_compile_ptest() {
+ oe_runmake -C examples buildtest
+}
+
+FILES_${PN}-doc += "${datadir}/devhelp"
+FILES_${PN}-dev += "${libdir}/libxml++-2.6/include/libxml++config.h"
+
+RDEPENDS_${PN}-ptest += "make"
diff --git a/meta-openembedded/meta-oe/recipes-core/meta/distro-feed-configs.bb b/meta-openembedded/meta-oe/recipes-core/meta/distro-feed-configs.bb
new file mode 100644
index 000000000..2a8de54d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/meta/distro-feed-configs.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Configuration files for online package repositories aka feeds"
+PR = "r6"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+DISTRO_FEED_PREFIX ?= "remote"
+DISTRO_FEED_URI ?= "http://my-distribution.example/remote-feed/"
+DISTRO_FEED_ARCHS ?= "all ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}"
+
+do_compile() {
+ mkdir -p ${S}/${sysconfdir}/opkg
+ for feed in ${DISTRO_FEED_ARCHS}; do
+ echo "src/gz ${DISTRO_FEED_PREFIX}-${feed} ${DISTRO_FEED_URI}/${feed}" > ${S}/${sysconfdir}/opkg/${feed}-feed.conf
+ done
+}
+do_install () {
+ install -d ${D}${sysconfdir}/opkg
+ install -m 0644 ${S}/${sysconfdir}/opkg/* ${D}${sysconfdir}/opkg/
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#def distro_feed_configs(d):
+# import bb
+# parchs = d.getVar("PACKAGE_EXTRA_ARCHS").split()
+# march = d.getVar("MACHINE_ARCH").split()
+# archs = [ "all" ] + parchs + march
+# confs = [ ( "${sysconfdir}/opkg/%s-feed.conf" % feed ) for feed in archs ]
+# return " ".join( confs )
+#
+#CONFFILES_${PN} += '${@distro_feed_configs(d)}'
+
+CONFFILES_${PN} += '${@ " ".join( [ ( "${sysconfdir}/opkg/%s-feed.conf" % feed ) for feed in "all ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}".split() ] ) }'
diff --git a/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_0.9.11.bb b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_0.9.11.bb
new file mode 100644
index 000000000..591caa75d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_0.9.11.bb
@@ -0,0 +1,9 @@
+inherit gnomebase
+
+SRC_URI[archive.md5sum] = "d6f2a43589480d2315672da0b5839b56"
+SRC_URI[archive.sha256sum] = "20d1e7466ca4c83c92e29f9e8dfcc8e5721fdf1337f53157bed97be3b73b32a8"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-basic.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-basic.bb
new file mode 100644
index 000000000..b12183b3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-basic.bb
@@ -0,0 +1,56 @@
+# This recipe is intended as a 'simpler' replacement for packagegroup-base.
+# Please communicate your use cases and suggestions to the mailinglist(s)
+
+SUMMARY = "Basic task to get a device online"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+PR = "r13"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+inherit packagegroup
+inherit bluetooth
+
+# Poke extra recomendations into the list using your machine.conf
+#
+MACHINE_EXTRA_RRECOMMENDS ?= ""
+
+#
+# Select between dropbear and openssh
+# Set TASK_BASIC_SSHDAEMON = "openssh-sshd openssh-sftp openssh-sftp-server" in your DISTRO config to get openssh(d)
+#
+TASK_BASIC_SSHDAEMON ?= "dropbear openssh-sftp openssh-sftp-server"
+
+#
+# The section below is designed to match with packagegroup-boot, but doesn't depend on it to allow for more freedom
+# when writing image recipes.
+# It also avoids the choice between connman/networkmanager/ifupdown since that is an image feature, not a
+# distro feature.
+#
+# Util-linux (u)mount is included because the busybox one can't handle /etc/mtab being symlinked to /proc/mounts
+#
+RDEPENDS_${PN} = "\
+ ${TASK_BASIC_SSHDAEMON} \
+ avahi-daemon avahi-utils \
+"
+
+#
+# The following section is split in 3:
+# 1) Machine features: kernel modules and userspace helpers for those
+# 2) Distro features: packages associated with those
+# 3) Nice to have: packages that are nice to have, but aren't strictly needed
+#
+RRECOMMENDS_${PN} = "\
+ ${MACHINE_EXTRA_RRECOMMENDS} \
+ ${@bb.utils.contains("MACHINE_FEATURES", "usbhost", "usbutils", "", d)} \
+ ${@bb.utils.contains("MACHINE_FEATURES", "alsa", "alsa-utils-alsamixer", "", d)} \
+ ${@bb.utils.contains("MACHINE_FEATURES", "usbgadget", "kernel-module-g-ether kernel-module-g-serial kernel-module-g-mass-storage", "", d)} \
+ \
+ ${@bb.utils.contains("DISTRO_FEATURES", "bluetooth", "${BLUEZ}", "", d)} \
+ ${@bb.utils.contains("DISTRO_FEATURES", "wifi", "iw wpa-supplicant", "", d)} \
+ \
+ tzdata \
+ \
+ cpufrequtils \
+ htop \
+"
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-boot.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-boot.bb
new file mode 100644
index 000000000..3ae7a49fe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-boot.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Basic task to get a device booting"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+PR = "r58"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+inherit packagegroup
+
+#
+# those ones can be set in machine config to supply packages needed to get machine booting
+#
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= ""
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
+
+# Make sure we build the kernel
+DEPENDS = "virtual/kernel"
+
+#
+# minimal set of packages - needed to boot
+#
+RDEPENDS_${PN} = "\
+ base-files \
+ base-passwd \
+ busybox \
+ netbase \
+ ${@bb.utils.contains("MACHINE_FEATURES", "keyboard", "keymaps", "", d)} \
+ ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS} \
+"
+
+RRECOMMENDS_${PN} = "\
+ kernel \
+ ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS} \
+"
diff --git a/meta-openembedded/meta-oe/recipes-core/plymouth/files/0001-Make-full-path-to-systemd-tty-ask-password-agent-con.patch b/meta-openembedded/meta-oe/recipes-core/plymouth/files/0001-Make-full-path-to-systemd-tty-ask-password-agent-con.patch
new file mode 100644
index 000000000..6a86c76d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/plymouth/files/0001-Make-full-path-to-systemd-tty-ask-password-agent-con.patch
@@ -0,0 +1,34 @@
+From 746c690f57b52e6fe21cc2a11b5bb71d25af3128 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Wed, 13 Dec 2017 16:15:57 +0100
+Subject: [PATCH] Make full path to systemd-tty-ask-password-agent configurable
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ configure.ac | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index aad673e..6b37179 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,7 +48,10 @@ PLYMOUTH_LIBS="-lm -lrt -ldl"
+ AC_SUBST(PLYMOUTH_CFLAGS)
+ AC_SUBST(PLYMOUTH_LIBS)
+
+-AC_PATH_PROG([SYSTEMD_ASK_PASSWORD_AGENT], [systemd-tty-ask-password-agent])
++AC_ARG_WITH(systemd-tty-ask-password-agent, AS_HELP_STRING([--with-systemd-tty-ask-password-agent],[path of systemd-tty-ask-password-agent]),SYSTEMD_ASK_PASSWORD_AGENT=${withval},SYSTEMD_ASK_PASSWORD_AGENT=/bin/systemd-tty-ask-password-agent)
++AC_SUBST(SYSTEMD_ASK_PASSWORD_AGENT)
++
++# checked: UDEVADM is not used
+ AC_PATH_PROG([UDEVADM], [udevadm])
+
+ AC_ARG_ENABLE(pango, AS_HELP_STRING([--enable-pango],[enable building with pango, disabled there is no encryption prompts]),enable_pango=$enableval,enable_pango=yes)
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.2.bb b/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.2.bb
new file mode 100644
index 000000000..7e8d6e32a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.2.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Plymouth is a project from Fedora providing a flicker-free graphical boot process."
+
+DESCRIPTION = "Plymouth is an application that runs very early in the boot process \
+ (even before the root filesystem is mounted!) that provides a \
+ graphical boot animation while the boot process happens in the background. \
+"
+
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/Plymouth"
+SECTION = "base"
+
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libcap libpng cairo dbus udev"
+PROVIDES = "virtual/psplash"
+RPROVIDES_${PN} = "virtual-psplash virtual-psplash-support"
+
+SRC_URI = " \
+ http://www.freedesktop.org/software/plymouth/releases/${BPN}-${PV}.tar.bz2 \
+ file://0001-Make-full-path-to-systemd-tty-ask-password-agent-con.patch \
+"
+SRC_URI[md5sum] = "ff420994deb7ea203df678df92e7ab7d"
+SRC_URI[sha256sum] = "2f0ce82042cf9c7eadd2517a1f74c8a85fa8699781d9f294a06eade29fbed57f"
+
+EXTRA_OECONF += " --enable-shared --disable-static --disable-gtk --disable-documentation \
+ --with-logo=${LOGO} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd-integration --with-system-root-install --with-systemd-tty-ask-password-agent=${base_bindir}/systemd-tty-ask-password-agent', '', d)} \
+"
+
+PACKAGECONFIG ??= "pango initrd"
+PACKAGECONFIG_append_x86 = " drm"
+PACKAGECONFIG_append_x86-64 = " drm"
+
+PACKAGECONFIG[drm] = "--enable-drm,--disable-drm,libdrm"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+PACKAGECONFIG[gtk] = "--enable-gtk,--disable-gtk,gtk+3"
+PACKAGECONFIG[initrd] = ",,,"
+
+LOGO ??= "${datadir}/plymouth/bizcom.png"
+
+inherit autotools pkgconfig systemd
+
+do_install_append() {
+ # Remove /var/run from package as plymouth will populate it on startup
+ rm -fr "${D}${localstatedir}/run"
+
+ if ! ${@bb.utils.contains('PACKAGECONFIG', 'initrd', 'true', 'false', d)}; then
+ rm -rf "${D}${libexecdir}"
+ fi
+}
+
+PACKAGES =. "${@bb.utils.contains('PACKAGECONFIG', 'initrd', '${PN}-initrd ', '', d)}"
+PACKAGES =+ "${PN}-set-default-theme"
+
+FILES_${PN}-initrd = "${libexecdir}/plymouth/*"
+FILES_${PN}-set-default-theme = "${sbindir}/plymouth-set-default-theme"
+
+FILES_${PN} += "${systemd_unitdir}/system/*"
+FILES_${PN}-dbg += "${libdir}/plymouth/renderers/.debug"
+
+
+RDEPENDS_${PN}-initrd = "bash dracut"
+RDEPENDS_${PN}-set-default-theme = "bash"
+
+SYSTEMD_SERVICE_${PN} = "plymouth-start.service"
diff --git a/meta-openembedded/meta-oe/recipes-core/proxy-libintl/proxy-libintl_20100902.bb b/meta-openembedded/meta-oe/recipes-core/proxy-libintl/proxy-libintl_20100902.bb
new file mode 100644
index 000000000..f11ae7e4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/proxy-libintl/proxy-libintl_20100902.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Proxy libintl"
+HOMEPAGE = "http://ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/"
+SECTION = "libs"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://src/proxy-libintl/COPYING.LIB.txt;md5=bc400bc21422f9a92e76ec2c5167ca2e"
+
+PR = "r1"
+PROVIDES = "virtual/libintl"
+
+SRC_URI = " \
+ http://ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/${PN}-dev_${PV}_win32.zip \
+"
+SRC_URI[md5sum] = "aef407c2b97ee829383aadd867c61d1e"
+SRC_URI[sha256sum] = "291ac350cc5eb4a01b0d651ca99fae64cee8a1c06b2005277fab5a4356f9ae91"
+
+S = "${WORKDIR}"
+PACKAGES = "${PN} ${PN}-dev"
+FILES_${PN}-dev = "${includedir}/libintl.h ${libdir}/libintl.a"
+INSANE_SKIP_${PN}-dev = "staticdev"
+ALLOW_EMPTY_${PN} = "1"
+CFLAGS_append = " -fPIC -Wall -I ../../include ${@['-DSTUB_ONLY', ''][d.getVar('USE_NLS') != 'no']}"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_compile() {
+ cd ${WORKDIR}/src/proxy-libintl
+ oe_runmake ../../lib/libintl.a
+}
+
+do_install() {
+ install -d ${D}/${includedir}
+ install -d ${D}/${libdir}
+ install -m 0644 ${WORKDIR}/include/libintl.h ${D}/${includedir}
+ install -m 0644 ${WORKDIR}/lib/libintl.a ${D}/${libdir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.7.5.bb b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.7.5.bb
new file mode 100644
index 000000000..347c2856f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.7.5.bb
@@ -0,0 +1,71 @@
+SUMMARY = "Toybox combines common utilities together into a single executable."
+HOMEPAGE = "http://www.landley.net/toybox/"
+DEPENDS = "attr"
+
+LICENSE = "BSD-0-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0b8b3dd6431bcaa245da0a08bd0d511"
+
+SRC_URI = "http://www.landley.net/toybox/downloads/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "a8bb502a1be941f06dd2644fff25f547"
+SRC_URI[sha256sum] = "3ada450ac1eab1dfc352fee915ea6129b9a4349c1885f1394b61bd2d89a46c04"
+
+SECTION = "base"
+
+TOYBOX_BIN = "generated/unstripped/toybox"
+
+EXTRA_OEMAKE = 'HOSTCC="${BUILD_CC}" CPUS=${@oe.utils.cpu_count()}'
+
+do_configure() {
+ oe_runmake defconfig
+
+ # Disable killall5 as it isn't managed by update-alternatives
+ sed -e 's/CONFIG_KILLALL5=y/# CONFIG_KILLALL5 is not set/' -i .config
+
+ # Disable swapon as it doesn't handle the '-a' argument used during boot
+ sed -e 's/CONFIG_SWAPON=y/# CONFIG_SWAPON is not set/' -i .config
+}
+
+do_compile() {
+ oe_runmake ${TOYBOX_BIN}
+
+ # Create a list of links needed
+ ${BUILD_CC} -I . scripts/install.c -o generated/instlist
+ ./generated/instlist long | sed -e 's#^#/#' > toybox.links
+}
+
+do_install() {
+ # Install manually instead of using 'make install'
+ install -d ${D}${base_bindir}
+ if grep -q "CONFIG_TOYBOX_SUID=y" ${B}/.config; then
+ install -m 4755 ${B}/${TOYBOX_BIN} ${D}${base_bindir}/toybox
+ else
+ install -m 0755 ${B}/${TOYBOX_BIN} ${D}${base_bindir}/toybox
+ fi
+
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${B}/toybox.links ${D}${sysconfdir}
+}
+
+inherit update-alternatives
+
+# If you've chosen to install toybox you probably want it to take precedence
+# over busybox where possible but not over other packages
+ALTERNATIVE_PRIORITY = "60"
+
+python do_package_prepend () {
+ # Read links from /etc/toybox.links and create appropriate
+ # update-alternatives variables
+
+ dvar = d.getVar('D')
+ pn = d.getVar('PN')
+ target = "/bin/toybox"
+
+ f = open('%s/etc/toybox.links' % (dvar), 'r')
+ for alt_link_name in f:
+ alt_link_name = alt_link_name.strip()
+ alt_name = os.path.basename(alt_link_name)
+ d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
+ d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
+ d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
+ f.close()
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/usleep/files/GPLv2.patch b/meta-openembedded/meta-oe/recipes-core/usleep/files/GPLv2.patch
new file mode 100644
index 000000000..1ee8181f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/usleep/files/GPLv2.patch
@@ -0,0 +1,347 @@
+Upstream-Status: Inappropriate [licensing]
+
+diff --git a/COPYING b/COPYING
+new file mode 100644
+index 0000000..d511905
+--- /dev/null
++++ b/COPYING
+@@ -0,0 +1,339 @@
++ GNU GENERAL PUBLIC LICENSE
++ Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users. This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it. (Some other Free Software Foundation software is covered by
++the GNU Lesser General Public License instead.) You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++ To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have. You must make sure that they, too, receive or can get the
++source code. And you must show them these terms so they know their
++rights.
++
++ We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++ Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software. If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++ Finally, any free program is threatened constantly by software
++patents. We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary. To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ GNU GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License. The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language. (Hereinafter, translation is included without limitation in
++the term "modification".) Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++ 1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++ 2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) You must cause the modified files to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ b) You must cause any work that you distribute or publish, that in
++ whole or in part contains or is derived from the Program or any
++ part thereof, to be licensed as a whole at no charge to all third
++ parties under the terms of this License.
++
++ c) If the modified program normally reads commands interactively
++ when run, you must cause it, when started running for such
++ interactive use in the most ordinary way, to print or display an
++ announcement including an appropriate copyright notice and a
++ notice that there is no warranty (or else, saying that you provide
++ a warranty) and that users may redistribute the program under
++ these conditions, and telling the user how to view a copy of this
++ License. (Exception: if the Program itself is interactive but
++ does not normally print such an announcement, your work based on
++ the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++ a) Accompany it with the complete corresponding machine-readable
++ source code, which must be distributed under the terms of Sections
++ 1 and 2 above on a medium customarily used for software interchange; or,
++
++ b) Accompany it with a written offer, valid for at least three
++ years, to give any third party, for a charge no more than your
++ cost of physically performing source distribution, a complete
++ machine-readable copy of the corresponding source code, to be
++ distributed under the terms of Sections 1 and 2 above on a medium
++ customarily used for software interchange; or,
++
++ c) Accompany it with the information you received as to the offer
++ to distribute corresponding source code. (This alternative is
++ allowed only for noncommercial distribution and only if you
++ received the program in object code or executable form with such
++ an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it. For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable. However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License. Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++ 5. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Program or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++ 6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++ 7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all. For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded. In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++ 9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation. If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++ 10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission. For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this. Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++ NO WARRANTY
++
++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the program's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++
++Also add information on how to contact you by electronic and paper mail.
++
++If the program is interactive, make it output a short notice like this
++when it starts in an interactive mode:
++
++ Gnomovision version 69, Copyright (C) year name of author
++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, the commands you use may
++be called something other than `show w' and `show c'; they could even be
++mouse-clicks or menu items--whatever suits your program.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the program, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
++ `Gnomovision' (which makes passes at compilers) written by James Hacker.
++
++ <signature of Ty Coon>, 1 April 1989
++ Ty Coon, President of Vice
++
++This General Public License does not permit incorporating your program into
++proprietary programs. If your program is a subroutine library, you may
++consider it more useful to permit linking proprietary applications with the
++library. If this is what you want to do, use the GNU Lesser General
++Public License instead of this License.
diff --git a/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.1 b/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.1
new file mode 100644
index 000000000..2d7520f77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.1
@@ -0,0 +1,25 @@
+.TH USLEEP 1 "Red Hat, Inc" \" -*- nroff -*-
+.SH NAME
+usleep \- sleep some number of microseconds
+.SH SYNOPSIS
+.B usleep
+[\fInumber\fP]
+.SH DESCRIPTION
+.B usleep
+sleeps some number of microseconds. The default is 1.
+.SH OPTIONS
+\fI--usage\fP
+Show short usage message.
+.TP
+\fI--help, -?\fP
+Print help information.
+.TP
+\fI-v, --version\fP
+Print version information.
+.SH BUGS
+Probably not accurate on many machines down to the microsecond. Count
+on precision only to -4 or maybe -5.
+.SH AUTHOR
+Donald Barnes <djb@redhat.com>
+.br
+Erik Troan <ewt@redhat.com>
diff --git a/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.c b/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.c
new file mode 100644
index 000000000..a5e7d9d71
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/usleep/files/usleep.c
@@ -0,0 +1,82 @@
+/*
+ * usleep
+ *
+ * Written by Donald Barnes <djb@redhat.com> for Red Hat, Inc.
+ *
+ * Copyright (c) 1997-2003 Red Hat, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2,
+ * as published by the Free Software Foundation.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "popt.h"
+
+int main(int argc, char **argv) {
+ unsigned long count;
+ poptContext optCon;
+ int showVersion = 0;
+ int showOot = 0;
+ int rc;
+ char * countStr = NULL;
+ struct poptOption options[] = {
+ { "version", 'v', POPT_ARG_NONE, &showVersion, 0,
+ "Display the version of this program, and exit" },
+ { "oot", 'o', POPT_ARG_NONE, &showOot, 0,
+ "oot says hey!" },
+ POPT_AUTOHELP
+ { 0, 0, 0, 0, 0 }
+ };
+
+ optCon = poptGetContext("usleep", argc, argv, options,0);
+ /*poptReadDefaultConfig(optCon, 1);*/
+ poptSetOtherOptionHelp(optCon, "[microseconds]");
+
+ if ((rc = poptGetNextOpt(optCon)) < -1) {
+ fprintf(stderr, "usleep: bad argument %s: %s\n",
+ poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
+ poptStrerror(rc));
+ return 2;
+ }
+
+ if (showVersion) {
+ printf("usleep version 1.2\n usleep --help for more info\n");
+ return 0;
+ }
+
+ if (showOot) {
+ printf("oot says hey!\n");
+ return 0;
+ }
+
+ countStr = poptGetArg(optCon);
+
+ if (countStr == NULL) count = 1;
+
+ else if (countStr && poptGetArg(optCon)) {
+ fprintf(stderr, "%s: exactly one argument (number of microseconds) "
+ "must be used\n", argv[0]);
+ return 2;
+ }
+
+ else count = strtoul(countStr, NULL, 0);
+
+ usleep(count);
+ return 0;
+}
diff --git a/meta-openembedded/meta-oe/recipes-core/usleep/usleep_1.0.bb b/meta-openembedded/meta-oe/recipes-core/usleep/usleep_1.0.bb
new file mode 100644
index 000000000..9e9c7ed8c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/usleep/usleep_1.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A user tool to support sleeping some number of microseconds"
+SECTION = "base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+S = "${WORKDIR}"
+DEPENDS = "popt"
+
+SRC_URI = "file://usleep.c \
+ file://usleep.1 \
+ file://GPLv2.patch \
+"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} usleep.c -o usleep -lpopt
+}
+
+do_install() {
+ install -d ${D}${base_bindir}
+ install -d ${D}${mandir}/man1
+
+ install -m 0755 ${WORKDIR}/usleep ${D}${base_bindir}
+ install -m 0644 ${WORKDIR}/usleep.1 ${D}${mandir}/man1
+}
diff --git a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_1.7.4.bb b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_1.7.4.bb
new file mode 100644
index 000000000..c13b764f7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_1.7.4.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Manage plain dm-crypt and LUKS encrypted volumes"
+DESCRIPTION = "Cryptsetup is used to conveniently setup dm-crypt managed \
+device-mapper mappings. These include plain dm-crypt volumes and \
+LUKS volumes. The difference is that LUKS uses a metadata header \
+and can hence offer more features than plain dm-crypt. On the other \
+hand, the header is visible and vulnerable to damage."
+HOMEPAGE = "http://code.google.com/p/cryptsetup/"
+SECTION = "console"
+LICENSE = "GPL-2.0-with-OpenSSL-exception"
+LIC_FILES_CHKSUM = "file://COPYING;md5=32107dd283b1dfeb66c9b3e6be312326"
+
+DEPENDS = "util-linux libdevmapper popt libgcrypt"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v1.7/${BP}.tar.xz"
+SRC_URI[md5sum] = "058ed35c5b776032c2a036838f9e22a7"
+SRC_URI[sha256sum] = "7ccf893ef79a38fb92d61f03c17b964982119f5319cdaa85a1335b8558cca016"
+
+inherit autotools gettext pkgconfig
+
+# Use openssl because libgcrypt drops root privileges
+# if libgcrypt is linked with libcap support
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[openssl] = "--with-crypto_backend=openssl,,openssl"
+PACKAGECONFIG[gcrypt] = "--with-crypto_backend=gcrypt,,libgcrypt"
+
+RRECOMMENDS_${PN} = "kernel-module-aes-generic \
+ kernel-module-dm-crypt \
+ kernel-module-md5 \
+ kernel-module-cbc \
+ kernel-module-sha256-generic \
+ kernel-module-xts \
+"
+
+EXTRA_OECONF = "--enable-static"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/engine-pkcs11/engine-pkcs11_0.2.2.bb b/meta-openembedded/meta-oe/recipes-crypto/engine-pkcs11/engine-pkcs11_0.2.2.bb
new file mode 100644
index 000000000..bc79f356b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/engine-pkcs11/engine-pkcs11_0.2.2.bb
@@ -0,0 +1,31 @@
+SUMMARY = "A PKCS"
+DESCRIPTION = "\
+Engine_pkcs11 is an implementation of an engine for OpenSSL. It can be \
+loaded using code, config file or command line and will pass any function \
+call by openssl to a PKCS cards and software for using smart cards in PKCS"
+HOMEPAGE = "https://github.com/OpenSC/engine_pkcs11"
+SECTION = "Development/Libraries"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://src/engine_pkcs11.h;beginline=1;endline=26;md5=973a19f8a6105de047f2adfbbfc04c33"
+DEPENDS = "openssl libp11"
+
+SRC_URI = "git://github.com/OpenSC/engine_pkcs11.git"
+SRCREV = "132fcf2c8b319f9f4b2ebdc8dcb54ff496dc0519"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --disable-static \
+ --libdir ${libdir}/engines \
+"
+
+do_install_append () {
+ rm -f ${D}${libdir}/engines/libpkcs11.la
+}
+
+FILES_${PN} += "${libdir}/engines/libpkcs11${SOLIBSDEV}"
+FILES_${PN}-dbg += "${libdir}/engines/.debug/"
+
+RDEPENDS_${PN} += "openssl libp11 opensc"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libmcrypt/libmcrypt_2.5.8.bb b/meta-openembedded/meta-oe/recipes-crypto/libmcrypt/libmcrypt_2.5.8.bb
new file mode 100644
index 000000000..2a133c69a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libmcrypt/libmcrypt_2.5.8.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Replacement for the old crypt() package and crypt(1) command, with extensions"
+HOMEPAGE = "http://mcrypt.sourceforge.net/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=bbb461211a33b134d42ed5ee802b37ff"
+DEPENDS = "libtool"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/mcrypt/Libmcrypt/${PV}/libmcrypt-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0821830d930a86a5c69110837c55b7da"
+SRC_URI[sha256sum] = "e4eb6c074bbab168ac47b947c195ff8cef9d51a211cdd18ca9c9ef34d27a373e"
+
+inherit autotools-brokensep gettext binconfig
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.11.bb b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.11.bb
new file mode 100644
index 000000000..cbcbe96cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.11.bb
@@ -0,0 +1,12 @@
+SUMMARY = "The Sodium crypto library"
+HOMEPAGE = "http://libsodium.org/"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c9f00492f01f5610253fde01c3d2e866"
+
+SRC_URI = "https://download.libsodium.org/libsodium/releases/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "b58928d035064b2a46fb564937b83540"
+SRC_URI[sha256sum] = "a14549db3c49f6ae2170cbbf4664bd48ace50681045e8dbea7c8d9fb96f9c765"
+
+inherit autotools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.11.bb b/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.11.bb
new file mode 100644
index 000000000..db71bd03b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.11.bb
@@ -0,0 +1,29 @@
+SUMMARY = "A library for using PKCS"
+DESCRIPTION = "pkcs11-helper is a library that simplifies the interaction with PKCS \
+providers for end-user applications using a simple API and optional OpenSSL \
+engine. The library allows using multiple PKCS enumerating available token \
+certificates, or selecting a certificate directly by serialized id, handling \
+card removal and card insert events, handling card ie-insert to a different \
+slot, supporting session expiration and much more all using a simple API."
+
+HOMEPAGE = "http://www.opensc-project.org/pkcs11-helper/"
+SECTION = "Development/Libraries"
+
+LICENSE = "GPLv2 & BSD"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=4948810631bcac142af53d32df5b6ee1 \
+ file://COPYING.GPL;md5=8a71d0475d08eee76d8b6d0c6dbec543 \
+ file://COPYING.BSD;md5=f79f90ea7a106796af80b5d05f1f8da1 \
+"
+SRC_URI = "git://github.com/OpenSC/${BPN}.git"
+SRC_URI[md5sum] = "9f62af9f475901b89355266141306673"
+SRC_URI[sha256sum] = "494ec59c93e7c56c528f335d9353849e2e7c94a6b1b41c89604694e738113386"
+
+S = "${WORKDIR}/git"
+SRCREV = "e7adf8f35be232a4f04c53b4ac409be52792093e"
+
+DEPENDS = "zlib nettle gnutls gmp openssl nss nspr"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-static"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Makefile-Fix-parallel-build.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Makefile-Fix-parallel-build.patch
new file mode 100644
index 000000000..3135d4d5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Makefile-Fix-parallel-build.patch
@@ -0,0 +1,34 @@
+From c85978e77725ef233543370d24e23f853f449170 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 21 Sep 2017 17:47:02 -0700
+Subject: [PATCH] Makefile: Fix parallel build
+
+Sometimes mkdir $(SHARED_OUTDIR)/db races with compiler which is
+creating .o file in the same directory $(SHARED_OUTDIR)/db/db_bench.o
+
+Fixes error like
+
+| mkdir out-static
+| mkdir out-shared/db
+| Assembler messages:
+| Fatal error: can't create out-shared/db/db_bench.o: No such file or directory
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index f7cc7d7..51a0bcd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -386,6 +386,7 @@ $(STATIC_OUTDIR)/write_batch_test:db/write_batch_test.cc $(STATIC_LIBOBJECTS) $(
+ $(STATIC_OUTDIR)/memenv_test:$(STATIC_OUTDIR)/helpers/memenv/memenv_test.o $(STATIC_OUTDIR)/libmemenv.a $(STATIC_OUTDIR)/libleveldb.a $(TESTHARNESS)
+ $(XCRUN) $(CXX) $(LDFLAGS) $(STATIC_OUTDIR)/helpers/memenv/memenv_test.o $(STATIC_OUTDIR)/libmemenv.a $(STATIC_OUTDIR)/libleveldb.a $(TESTHARNESS) -o $@ $(LIBS)
+
++$(SHARED_OUTDIR)/db/db_bench.o: | $(SHARED_OUTDIR)/db
+ $(SHARED_OUTDIR)/db_bench:$(SHARED_OUTDIR)/db/db_bench.o $(SHARED_LIBS) $(TESTUTIL)
+ $(XCRUN) $(CXX) $(LDFLAGS) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SHARED_OUTDIR)/db/db_bench.o $(TESTUTIL) $(SHARED_OUTDIR)/$(SHARED_LIB3) -o $@ $(LIBS)
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-build_detect_platform-Check-for-__SSE4_2__.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-build_detect_platform-Check-for-__SSE4_2__.patch
new file mode 100644
index 000000000..8f93cb325
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-build_detect_platform-Check-for-__SSE4_2__.patch
@@ -0,0 +1,37 @@
+From 5fd0918df2bb30e8f3edb2ee895d178edbf26f40 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 4 Sep 2017 22:38:03 -0700
+Subject: [PATCH 1/2] build_detect_platform: Check for __SSE4_2__
+
+just using -msse4.2 is not enough, especially with clang
+where it may accept -msse4.2 even during cross compiling
+for say arm, however the difference is that builtin defines
+wont be defined.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ build_detect_platform | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: git/build_detect_platform
+===================================================================
+--- git.orig/build_detect_platform
++++ git/build_detect_platform
+@@ -224,13 +224,13 @@ EOF
+ rm -f $CXXOUTPUT 2>/dev/null
+
+ # Test if gcc SSE 4.2 is supported
+- $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -msse4.2 2>/dev/null <<EOF
++ $CXX $CXXFLAGS -Werror -x c++ - -o $CXXOUTPUT -msse4.2 -dD -E 2>/dev/null <<EOF
+ int main() {}
+ EOF
++ eval fgrep __SSE4_2__ $CXXOUTPUT >/dev/null 2>&1
+ if [ "$?" = 0 ]; then
+ PLATFORM_SSEFLAGS="-msse4.2"
+ fi
+-
+ rm -f $CXXOUTPUT 2>/dev/null
+ fi
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0002-makefile-build-SHARED_MEMENVLIB.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0002-makefile-build-SHARED_MEMENVLIB.patch
new file mode 100644
index 000000000..fc708b23a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0002-makefile-build-SHARED_MEMENVLIB.patch
@@ -0,0 +1,43 @@
+From 1ed8cec1fcf666904bb3ebd29fc85e235b72d122 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 4 Sep 2017 22:40:49 -0700
+Subject: [PATCH 2/2] makefile: build SHARED_MEMENVLIB
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index f7cc7d7..cb42278 100644
+--- a/Makefile
++++ b/Makefile
+@@ -126,12 +126,12 @@ SHARED_VERSION_MINOR = 20
+ SHARED_LIB1 = libleveldb.$(PLATFORM_SHARED_EXT)
+ SHARED_LIB2 = $(SHARED_LIB1).$(SHARED_VERSION_MAJOR)
+ SHARED_LIB3 = $(SHARED_LIB1).$(SHARED_VERSION_MAJOR).$(SHARED_VERSION_MINOR)
+-SHARED_LIBS = $(SHARED_OUTDIR)/$(SHARED_LIB1) $(SHARED_OUTDIR)/$(SHARED_LIB2) $(SHARED_OUTDIR)/$(SHARED_LIB3)
++SHARED_LIBS = $(SHARED_OUTDIR)/$(SHARED_LIB1) $(SHARED_OUTDIR)/$(SHARED_LIB2) $(SHARED_OUTDIR)/$(SHARED_LIB3) $(SHARED_MEMENVLIB)
+ $(SHARED_OUTDIR)/$(SHARED_LIB1): $(SHARED_OUTDIR)/$(SHARED_LIB3)
+ ln -fs $(SHARED_LIB3) $(SHARED_OUTDIR)/$(SHARED_LIB1)
+ $(SHARED_OUTDIR)/$(SHARED_LIB2): $(SHARED_OUTDIR)/$(SHARED_LIB3)
+ ln -fs $(SHARED_LIB3) $(SHARED_OUTDIR)/$(SHARED_LIB2)
+-SHARED_MEMENVLIB = $(SHARED_OUTDIR)/libmemenv.a
++SHARED_MEMENVLIB = $(SHARED_OUTDIR)/libmemenv.$(PLATFORM_SHARED_EXT).$(SHARED_VERSION_MAJOR).$(SHARED_VERSION_MINOR)
+ endif
+
+ $(SHARED_OUTDIR)/$(SHARED_LIB3): $(SHARED_LIBOBJECTS)
+@@ -294,7 +294,7 @@ endif
+
+ $(SHARED_MEMENVLIB):$(SHARED_MEMENVOBJECTS)
+ rm -f $@
+- $(AR) -rs $@ $(SHARED_MEMENVOBJECTS)
++ $(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(basename $(notdir $(SHARED_MEMENVLIB))) $(SHARED_MEMENVOBJECTS) -o $(SHARED_MEMENVLIB) $(LIBS)
+
+ $(STATIC_OUTDIR)/db_bench:db/db_bench.cc $(STATIC_LIBOBJECTS) $(TESTUTIL)
+ $(CXX) $(LDFLAGS) $(CXXFLAGS) db/db_bench.cc $(STATIC_LIBOBJECTS) $(TESTUTIL) -o $@ $(LIBS)
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_git.bb b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_git.bb
new file mode 100644
index 000000000..8fec89c6f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_git.bb
@@ -0,0 +1,37 @@
+SUMMARY = "LevelDB is a fast key-value storage library"
+DESCRIPTION = "LevelDB is a fast key-value storage library that provides an ordered mapping from string keys to string values"
+HOMEPAGE = "http://leveldb.googlecode.com"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=92d1b128950b11ba8495b64938fc164d"
+
+SRCREV = "a53934a3ae1244679f812d998a4f16f2c7f309a6"
+PV = "1.20+git${SRCPV}"
+
+SRC_URI = "git://github.com/google/${BPN}.git \
+ file://0001-build_detect_platform-Check-for-__SSE4_2__.patch \
+ file://0002-makefile-build-SHARED_MEMENVLIB.patch \
+ file://0001-Makefile-Fix-parallel-build.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit utils
+
+do_compile() {
+ # do not use oe_runmake. oe_runmake pass to make compilation arguments and override
+ # leveldb makefile variable CFLAGS and broke leveldb build.
+ CFLAGS="${CFLAGS}" make ${PARALLEL_MAKE}|| die
+}
+
+do_install() {
+ install -d ${D}${libdir} ${D}${bindir} ${D}${includedir}/leveldb
+ oe_libinstall -C ${B}/out-shared libleveldb ${D}${libdir}
+ oe_libinstall -C ${S}/out-static libleveldb ${D}${libdir}
+ oe_libinstall -C ${S}/out-static libmemenv ${D}${libdir}
+ install -m 0755 ${B}/out-shared/db_bench ${D}${bindir}
+ install -m 0755 ${B}/out-static/*_test ${D}${bindir}
+ install -m 644 ${S}/include/leveldb/*.h ${D}${includedir}/leveldb/
+}
+
+PACKAGES =+ "${PN}-ptest"
+FILES_${PN}-ptest = "${bindir}"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi.inc b/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi.inc
new file mode 100644
index 000000000..cea2838e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi.inc
@@ -0,0 +1,17 @@
+# libdbi OE build file
+# Copyright (C) 2005, Koninklijke Philips Electronics NV. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION = "Database Independent Abstraction Layer for C"
+HOMEPAGE = "http://libdbi.sourceforge.net/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+SECTION = "libs"
+
+INC_PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libdbi/libdbi-${PV}.tar.gz"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-docs"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi_0.9.0.bb b/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi_0.9.0.bb
new file mode 100644
index 000000000..24eae2850
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/libdbi/libdbi_0.9.0.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI[md5sum] = "05e2ceeac4bc85fbe40de8b4b22d9ab3"
+SRC_URI[sha256sum] = "dafb6cdca524c628df832b6dd0bf8fabceb103248edb21762c02d3068fca4503"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
new file mode 100644
index 000000000..5da34480e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
@@ -0,0 +1,36 @@
+From fbfceebce2121831904f2f7115252dd03b413a6d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 19 Sep 2017 18:52:53 -0700
+Subject: [PATCH] IntelRDFPMathLib20U1: Check for __DEFINED_wchar_t
+
+This is defined by musl if wchar_t is already defined
+
+avoids errors like
+
+src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h:46:15: error: typedef redefinition with different types
+ ('int' vs 'unsigned int')
+typedef int wchar_t;
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h b/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
+index 2b3f76db86..cc80305775 100755
+--- a/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
++++ b/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
+@@ -42,7 +42,7 @@
+ #include <ctype.h>
+
+ // Fix system header issue on Sun solaris and define required type by ourselves
+-#if !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__QNX__)
++#if !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__QNX__) && !defined(__DEFINED_wchar_t)
+ typedef int wchar_t;
+ #endif
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
new file mode 100644
index 000000000..aa01e954f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
@@ -0,0 +1,64 @@
+From 53368d3f4adc09dd84234a9af31771bcd8ca2757 Mon Sep 17 00:00:00 2001
+From: Sven Ebenfeld <sven.ebenfeld@gmail.com>
+Date: Fri, 15 Jan 2016 22:41:28 +0100
+Subject: [PATCH] Tell scons to use build settings from environment variables
+
+Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
+---
+ SConstruct | 8 ++++++--
+ src/mongo/util/SConscript | 2 ++
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+Index: git/SConstruct
+===================================================================
+--- git.orig/SConstruct
++++ git/SConstruct
+@@ -548,6 +548,7 @@ def variable_arch_converter(val):
+ 'amd64': 'x86_64',
+ 'emt64': 'x86_64',
+ 'x86': 'i386',
++ 'aarch64': 'arm64',
+ }
+ val = val.lower()
+
+@@ -627,7 +628,8 @@ env_vars.Add(
+ )
+
+ env_vars.Add('CC',
+- help='Select the C compiler to use')
++ help='Select the C compiler to use',
++ default=os.getenv('CC'))
+
+ env_vars.Add('CCFLAGS',
+ help='Sets flags for the C and C++ compiler',
+@@ -647,7 +649,8 @@ env_vars.Add('CPPPATH',
+ converter=variable_shlex_converter)
+
+ env_vars.Add('CXX',
+- help='Select the C++ compiler to use')
++ help='Select the C++ compiler to use',
++ default=os.getenv('CXX'))
+
+ env_vars.Add('CXXFLAGS',
+ help='Sets flags for the C++ compiler',
+@@ -895,6 +898,7 @@ envDict = dict(BUILD_ROOT=buildDir,
+ )
+
+ env = Environment(variables=env_vars, **envDict)
++env.PrependENVPath('PATH', os.getenv('PATH'))
+ del envDict
+
+ env.AddMethod(env_os_is_wrapper, 'TargetOSIs')
+Index: git/src/mongo/util/SConscript
+===================================================================
+--- git.orig/src/mongo/util/SConscript
++++ git/src/mongo/util/SConscript
+@@ -274,6 +274,8 @@ if env['MONGO_ALLOCATOR'] == 'tcmalloc':
+ 'MONGO_HAVE_GPERFTOOLS_SIZE_CLASS_STATS'
+ ]
+ )
++ if not use_system_version_of_library('valgrind'):
++ tcmspEnv.InjectThirdPartyIncludePaths('valgrind')
+
+ if not use_system_version_of_library('valgrind'):
+ # Include valgrind since tcmalloc disables itself while running under valgrind
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
new file mode 100644
index 000000000..f8c419d8a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
@@ -0,0 +1,50 @@
+From 3eed8388b49d5d3cbc2db74fee1b017eb4b40d0a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 10:06:24 -0700
+Subject: [PATCH] Use __GLIBC__ to control use of gnu_get_libc_version
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+ src/mongo/util/processinfo_linux.cpp | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
+index 910015215e..bf8c1ffd15 100644
+--- a/src/mongo/util/processinfo_linux.cpp
++++ b/src/mongo/util/processinfo_linux.cpp
+@@ -40,7 +40,7 @@
+ #include <sys/mman.h>
+ #include <sys/utsname.h>
+ #include <unistd.h>
+-#ifdef __UCLIBC__
++#ifndef __GLIBC__
+ #include <features.h>
+ #else
+ #include <gnu/libc-version.h>
+@@ -451,11 +451,13 @@ double ProcessInfo::getSystemMemoryPressurePercentage() {
+ }
+
+ void ProcessInfo::getExtraInfo(BSONObjBuilder& info) {
++#if defined(__GLIBC__)
+ LinuxProc p(_pid);
+ if (p._maj_flt <= std::numeric_limits<long long>::max())
+ info.appendNumber("page_faults", static_cast<long long>(p._maj_flt));
+ else
+ info.appendNumber("page_faults", static_cast<double>(p._maj_flt));
++#endif
+ }
+
+ /**
+@@ -491,7 +493,7 @@ void ProcessInfo::SystemInfo::collectSystemInfo() {
+ stringstream ss;
+ ss << "uClibc-" << __UCLIBC_MAJOR__ << "." << __UCLIBC_MINOR__ << "." << __UCLIBC_SUBLEVEL__;
+ bExtra.append("libcVersion", ss.str());
+-#else
++#elif defined(__GLIBC__)
+ bExtra.append("libcVersion", gnu_get_libc_version());
+ #endif
+ if (!verSig.empty())
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
new file mode 100644
index 000000000..389b302c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
@@ -0,0 +1,64 @@
+From a4951489d649c2b609cbb80f6cfb49fdcad8bd43 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 10:03:37 -0700
+Subject: [PATCH] Use long long instead of int64_t
+
+Fixes
+error: call to member function 'appendNumber' is ambiguous
+since this function expects long long as parameter and not int64_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+ src/mongo/util/procparser.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+Index: git/src/mongo/util/procparser.cpp
+===================================================================
+--- git.orig/src/mongo/util/procparser.cpp
++++ git/src/mongo/util/procparser.cpp
+@@ -260,7 +260,7 @@ Status parseProcStat(const std::vector<S
+
+ StringData stringValue((*partIt).begin(), (*partIt).end() - (*partIt).begin());
+
+- uint64_t value;
++ long long value;
+
+ if (!parseNumberFromString(stringValue, &value).isOK()) {
+ value = 0;
+@@ -272,7 +272,7 @@ Status parseProcStat(const std::vector<S
+ } else {
+ StringData stringValue((*partIt).begin(), (*partIt).end() - (*partIt).begin());
+
+- uint64_t value;
++ long long value;
+
+ if (!parseNumberFromString(stringValue, &value).isOK()) {
+ value = 0;
+@@ -365,7 +365,7 @@ Status parseProcMemInfo(const std::vecto
+
+ StringData stringValue((*partIt).begin(), (*partIt).end());
+
+- uint64_t value;
++ long long value;
+
+ if (!parseNumberFromString(stringValue, &value).isOK()) {
+ value = 0;
+@@ -426,7 +426,7 @@ Status parseProcDiskStats(const std::vec
+ StringData data,
+ BSONObjBuilder* builder) {
+ bool foundKeys = false;
+- std::vector<uint64_t> stats;
++ std::vector<long long> stats;
+ stats.reserve(kDiskFieldCount);
+
+ using string_split_iterator = boost::split_iterator<StringData::const_iterator>;
+@@ -501,7 +501,7 @@ Status parseProcDiskStats(const std::vec
+
+ StringData stringValue((*partIt).begin(), (*partIt).end());
+
+- uint64_t value;
++ long long value;
+
+ if (!parseNumberFromString(stringValue, &value).isOK()) {
+ value = 0;
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-strerror_r-only-on-glibc-systems.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-strerror_r-only-on-glibc-systems.patch
new file mode 100644
index 000000000..0334d994e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-strerror_r-only-on-glibc-systems.patch
@@ -0,0 +1,26 @@
+From a4dfc92ff342e59596ab64267a8d4f22f173c23b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 12:40:41 -0700
+Subject: [PATCH 1/4] Use strerror_r only on glibc systems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/mongo/util/log.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mongo/util/log.cpp b/src/mongo/util/log.cpp
+index 1957eb4791..ddf3908818 100644
+--- a/src/mongo/util/log.cpp
++++ b/src/mongo/util/log.cpp
+@@ -101,7 +101,7 @@ string errnoWithDescription(int errNumber) {
+ char buf[kBuflen];
+ char* msg{nullptr};
+
+-#if defined(__GNUC__) && defined(_GNU_SOURCE)
++#if defined(__GNUC__) && defined(_GNU_SOURCE) && defined(__GLIBC__)
+ msg = strerror_r(errNumber, buf, kBuflen);
+ #elif defined(_WIN32)
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
new file mode 100644
index 000000000..098306f50
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
@@ -0,0 +1,35 @@
+From df7ef16afcc6ab55daa686e4f15c16e3d1280337 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 12:42:30 -0700
+Subject: [PATCH 2/4] Add a definition for the macro __ELF_NATIVE_CLASS
+
+It depends on the native arch's word size.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/mongo/util/stacktrace_posix.cpp | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/mongo/util/stacktrace_posix.cpp b/src/mongo/util/stacktrace_posix.cpp
+index 53ab85f56f..7c458e7ef2 100644
+--- a/src/mongo/util/stacktrace_posix.cpp
++++ b/src/mongo/util/stacktrace_posix.cpp
+@@ -37,6 +37,15 @@
+ #include <string>
+ #include <sys/utsname.h>
+
++#if !defined(__GLIBC__)
++#if defined __x86_64__ && !defined __ILP32__
++# define __WORDSIZE 64
++#else
++# define __WORDSIZE 32
++#endif
++#define __ELF_NATIVE_CLASS __WORDSIZE
++#endif
++
+ #include "mongo/base/init.h"
+ #include "mongo/config.h"
+ #include "mongo/db/jsobj.h"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-d_state.cpp-Add-missing-dependenncy-on-local_shardin.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-d_state.cpp-Add-missing-dependenncy-on-local_shardin.patch
new file mode 100644
index 000000000..dc488ad7e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-d_state.cpp-Add-missing-dependenncy-on-local_shardin.patch
@@ -0,0 +1,25 @@
+From 5759878e5d278f11a1063e8fccd1e6b7b54caadf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 2 Aug 2017 16:25:37 -0700
+Subject: [PATCH 2/2] d_state.cpp: Add missing dependenncy on
+ local_sharding_info
+
+Fixes
+| src/mongo/s/d_state.cpp:81: error: undefined reference to 'mongo::enableLocalShardingInfo(mongo::ServiceContext*, std::function<bool (mongo::OperationContext*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>)'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/mongo/s/SConscript | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: git/src/mongo/s/SConscript
+===================================================================
+--- git.orig/src/mongo/s/SConscript
++++ git/src/mongo/s/SConscript
+@@ -317,5 +317,6 @@ env.Library(
+ "$BUILD_DIR/mongo/db/s/sharding",
+ "$BUILD_DIR/mongo/executor/network_interface_factory",
+ "$BUILD_DIR/mongo/s/client/shard_local",
++ "$BUILD_DIR/mongo/s/local_sharding_info",
+ ],
+ )
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Conditionalize-glibc-specific-strerror_r.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Conditionalize-glibc-specific-strerror_r.patch
new file mode 100644
index 000000000..1591f94c9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Conditionalize-glibc-specific-strerror_r.patch
@@ -0,0 +1,39 @@
+From 458f80f482a201b427a1c92235804d0c3f98fd51 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 13:01:11 -0700
+Subject: [PATCH 3/4] Conditionalize glibc specific strerror_r
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../asio-asio-1-11-0/asio/include/asio/impl/error_code.ipp | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/src/third_party/asio-asio-1-11-0/asio/include/asio/impl/error_code.ipp b/src/third_party/asio-asio-1-11-0/asio/include/asio/impl/error_code.ipp
+index 4e7badb14a..0eeae884e2 100644
+--- a/src/third_party/asio-asio-1-11-0/asio/include/asio/impl/error_code.ipp
++++ b/src/third_party/asio-asio-1-11-0/asio/include/asio/impl/error_code.ipp
+@@ -97,17 +97,14 @@ public:
+ #if defined(__sun) || defined(__QNX__) || defined(__SYMBIAN32__)
+ using namespace std;
+ return strerror(value);
+-#elif defined(__MACH__) && defined(__APPLE__) \
+- || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
+- || defined(_AIX) || defined(__hpux) || defined(__osf__) \
+- || defined(__ANDROID__)
++#elif defined(__GLIBC__) && defined(_GNU_SOURCE)
++ char buf[256] = "";
++ return strerror_r(value, buf, sizeof(buf));
++#else
+ char buf[256] = "";
+ using namespace std;
+ strerror_r(value, buf, sizeof(buf));
+ return buf;
+-#else
+- char buf[256] = "";
+- return strerror_r(value, buf, sizeof(buf));
+ #endif
+ #endif // defined(ASIO_WINDOWS)
+ }
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
new file mode 100644
index 000000000..e871f2ba9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
@@ -0,0 +1,26 @@
+From a1c77702926eb8546ff96b00b5b994f7478dabae Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 13:13:15 -0700
+Subject: [PATCH 4/4] wiredtiger: Disable strtouq on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/third_party/wiredtiger/build_linux/wiredtiger_config.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/third_party/wiredtiger/build_linux/wiredtiger_config.h b/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
+index 1122e1e319..fdfd48687b 100644
+--- a/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
++++ b/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
+@@ -101,7 +101,7 @@
+ #define HAVE_STRING_H 1
+
+ /* Define to 1 if you have the `strtouq' function. */
+-#define HAVE_STRTOUQ 1
++/* #undef HAVE_STRTOUQ 1 */
+
+ /* Define to 1 if you have the `sync_file_range' function. */
+ /* #undef HAVE_SYNC_FILE_RANGE */
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch
new file mode 100644
index 000000000..9046bb2f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch
@@ -0,0 +1,43 @@
+Add alises for arm64 which is same as aarch64
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: git/SConstruct
+===================================================================
+--- git.orig/SConstruct
++++ git/SConstruct
+@@ -990,6 +990,7 @@ elif endian == "big":
+ processor_macros = {
+ 'arm' : { 'endian': 'little', 'defines': ('__arm__',) },
+ 'aarch64' : { 'endian': 'little', 'defines': ('__arm64__', '__aarch64__')},
++ 'arm64' : { 'endian': 'little', 'defines': ('__arm64__', '__aarch64__')},
+ 'i386' : { 'endian': 'little', 'defines': ('__i386', '_M_IX86')},
+ 'ppc64le' : { 'endian': 'little', 'defines': ('__powerpc64__',)},
+ 's390x' : { 'endian': 'big', 'defines': ('__s390x__',)},
+Index: git/src/third_party/IntelRDFPMathLib20U1/SConscript
+===================================================================
+--- git.orig/src/third_party/IntelRDFPMathLib20U1/SConscript
++++ git/src/third_party/IntelRDFPMathLib20U1/SConscript
+@@ -301,7 +301,7 @@ if processor == 'i386':
+ elif processor == 'arm':
+ cpp_defines['IA32'] = '1'
+ cpp_defines['ia32'] = '1'
+-elif processor == "aarch64":
++elif processor == "aarch64" or processor == 'arm64':
+ cpp_defines['efi2'] = '1'
+ cpp_defines['EFI2'] = '1'
+ # Using 64 bit little endian
+Index: git/src/third_party/wiredtiger/SConscript
+===================================================================
+--- git.orig/src/third_party/wiredtiger/SConscript
++++ git/src/third_party/wiredtiger/SConscript
+@@ -139,7 +139,7 @@ condition_map = {
+ 'POSIX_HOST' : not env.TargetOSIs('windows'),
+ 'WINDOWS_HOST' : env.TargetOSIs('windows'),
+
+- 'ARM64_HOST' : env['TARGET_ARCH'] == 'aarch64',
++ 'ARM64_HOST' : env['TARGET_ARCH'] in ('aarch64', 'arm64'),
+ 'POWERPC_HOST' : env['TARGET_ARCH'] == 'ppc64le',
+ 'X86_HOST' : env['TARGET_ARCH'] == 'x86_64',
+ 'ZSERIES_HOST' : env['TARGET_ARCH'] == 's390x',
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/disable-hw-crc32-on-arm64-s390x.patch b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/disable-hw-crc32-on-arm64-s390x.patch
new file mode 100644
index 000000000..5c5c20ce3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/disable-hw-crc32-on-arm64-s390x.patch
@@ -0,0 +1,50 @@
+imported from debian
+
+Upstream-Status: Pending
+Index: git/src/third_party/wiredtiger/SConscript
+===================================================================
+--- git.orig/src/third_party/wiredtiger/SConscript
++++ git/src/third_party/wiredtiger/SConscript
+@@ -169,7 +169,9 @@ if useSnappy:
+ # If not available at runtime, we fall back to software in some cases.
+ #
+ # On zSeries we may disable because SLES 11 kernel doe not support the instructions.
+-if not (env['TARGET_ARCH'] == 's390x' and get_option("use-s390x-crc32") == "off"):
++# Debian: disable hardware-assisted crc32 on s390x and arm64, as at least the
++# buildd's do not support the instructions.
++if env['TARGET_ARCH'] not in ('s390x', 'arm64', 'aarch64'):
+ env.Append(CPPDEFINES=["HAVE_CRC32_HARDWARE"])
+
+ wtlib = env.Library(
+Index: git/src/third_party/wiredtiger/dist/filelist
+===================================================================
+--- git.orig/src/third_party/wiredtiger/dist/filelist
++++ git/src/third_party/wiredtiger/dist/filelist
+@@ -54,7 +54,6 @@ src/checksum/power8/crc32_wrapper.c POWE
+ src/checksum/software/checksum.c
+ src/checksum/x86/crc32-x86.c X86_HOST
+ src/checksum/zseries/crc32-s390x.c ZSERIES_HOST
+-src/checksum/zseries/crc32le-vx.sx ZSERIES_HOST
+ src/config/config.c
+ src/config/config_api.c
+ src/config/config_check.c
+Index: git/src/third_party/wiredtiger/src/checksum/zseries/crc32-s390x.c
+===================================================================
+--- git.orig/src/third_party/wiredtiger/src/checksum/zseries/crc32-s390x.c
++++ git/src/third_party/wiredtiger/src/checksum/zseries/crc32-s390x.c
+@@ -78,6 +78,7 @@ unsigned int __wt_crc32c_le(unsigned int
+ return crc; \
+ }
+
++#if defined(HAVE_CRC32_HARDWARE)
+ /* Main CRC-32 functions */
+ DEFINE_CRC32_VX(__wt_crc32c_le_vx, __wt_crc32c_le_vgfm_16, __wt_crc32c_le)
+
+@@ -90,6 +91,7 @@ __wt_checksum_hw(const void *chunk, size
+ {
+ return (~__wt_crc32c_le_vx(0xffffffff, chunk, len));
+ }
++#endif
+
+ #endif
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb
new file mode 100644
index 000000000..bb3ff3b40
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb
@@ -0,0 +1,76 @@
+SUMMARY = "mongodb"
+LICENSE = "AGPL-3.0 & Apache-2.0 & Zlib"
+LIC_FILES_CHKSUM = "file://GNU-AGPL-3.0.txt;md5=73f1eb20517c55bf9493b7dd6e480788 \
+ file://APACHE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "openssl libpcre libpcap zlib python boost"
+
+inherit scons dos2unix siteinfo
+
+PV = "3.4.13+git${SRCPV}"
+SRCREV = "fbdef2ccc53e0fcc9afb570063633d992b2aae42"
+SRC_URI = "git://github.com/mongodb/mongo.git;branch=v3.4 \
+ file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
+ file://0002-d_state.cpp-Add-missing-dependenncy-on-local_shardin.patch \
+ file://0001-Use-long-long-instead-of-int64_t.patch \
+ file://0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch \
+ file://0001-Use-strerror_r-only-on-glibc-systems.patch \
+ file://0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch \
+ file://0003-Conditionalize-glibc-specific-strerror_r.patch \
+ file://arm64-support.patch \
+ file://0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch \
+ file://disable-hw-crc32-on-arm64-s390x.patch \
+ "
+SRC_URI_append_libc-musl ="\
+ file://0004-wiredtiger-Disable-strtouq-on-musl.patch \
+ "
+S = "${WORKDIR}/git"
+
+# Wiredtiger supports only 64-bit platforms
+PACKAGECONFIG_x86-64 ??= "tcmalloc wiredtiger"
+PACKAGECONFIG_aarch64 ??= "tcmalloc wiredtiger"
+PACKAGECONFIG ??= "tcmalloc"
+# gperftools compilation fails for arm below v7 because of missing support of
+# dmb operation. So we use system-allocator instead of tcmalloc
+PACKAGECONFIG_remove_armv6 = "tcmalloc"
+PACKAGECONFIG_remove_libc-musl = "tcmalloc"
+
+#std::current_exception is undefined for arm < v6
+COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
+COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
+COMPATIBLE_MACHINE_armv7a = "(!.*armv7a).*"
+COMPATIBLE_MACHINE_armv7ve = "(!.*armv7ve).*"
+COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"
+COMPATIBLE_MACHINE_powerpc = "(!.*ppc).*"
+
+PACKAGECONFIG[tcmalloc] = "--use-system-tcmalloc,--allocator=system,gperftools,"
+PACKAGECONFIG[wiredtiger] = "--wiredtiger=on,--wiredtiger=off,,"
+
+EXTRA_OESCONS = "--prefix=${D}${prefix} \
+ LIBPATH=${STAGING_LIBDIR} \
+ LINKFLAGS='${LDFLAGS}' \
+ CXXFLAGS='${CXXFLAGS}' \
+ TARGET_ARCH=${TARGET_ARCH} \
+ --ssl \
+ --disable-warnings-as-errors \
+ --use-system-pcre \
+ --use-system-zlib \
+ --js-engine=none \
+ --nostrip \
+ --endian=${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
+ ${PACKAGECONFIG_CONFARGS} \
+ mongod mongos"
+
+do_configure_prepend() {
+ # tests use hex floats, not supported in plain C++
+ sed -e 's|-std=c++11|-std=gnu++11|g' -i ${S}/SConstruct
+}
+scons_do_compile() {
+ ${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} ${EXTRA_OESCONS} || \
+ die "scons build execution failed."
+}
+
+scons_do_install() {
+ ${STAGING_BINDIR_NATIVE}/scons install ${EXTRA_OESCONS}|| \
+ die "scons install execution failed."
+}
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_5.5.59.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_5.5.59.bb
new file mode 100644
index 000000000..4ce960d7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_5.5.59.bb
@@ -0,0 +1,19 @@
+require mariadb.inc
+inherit native
+
+PROVIDES += "mysql5-native"
+DEPENDS = "ncurses-native zlib-native bison-native"
+
+RDEPENDS_${PN} = ""
+PACKAGES = ""
+EXTRA_OEMAKE = ""
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+
+ install -d ${D}${bindir}
+ install -m 0755 sql/gen_lex_hash ${D}${bindir}/
+ install -m 0755 extra/comp_err ${D}${bindir}/
+ install -m 0755 scripts/comp_sql ${D}${bindir}/
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
new file mode 100644
index 000000000..99e705094
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
@@ -0,0 +1,297 @@
+SUMMARY = "A robust, scalable, and reliable SQL server"
+HOMEPAGE = "http://mariadb.org"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "https://downloads.mariadb.org/f/${BP}/source/${BP}.tar.gz \
+ file://fix-cmake-module-path.patch \
+ file://remove-bad-path.patch \
+ file://fix-mysqlclient-r-version.patch \
+ file://my.cnf \
+ file://mysqld.service \
+ file://install_db.service \
+ file://install_db \
+ file://mysql-systemd-start \
+ file://configure.cmake-fix-valgrind.patch \
+ file://fix-a-building-failure.patch \
+ file://change-cc-to-cc-version.patch \
+ file://0001-disable-ucontext-on-musl.patch \
+ "
+
+SRC_URI[md5sum] = "3cec4afc06b468687ef576c90148d10d"
+SRC_URI[sha256sum] = "c3269ce20b45b177239fd1e3d6d9428a94131711f12758ebf5f65222278bb110"
+
+S = "${WORKDIR}/mariadb-${PV}"
+
+BINCONFIG_GLOB = "mysql_config"
+
+inherit cmake gettext binconfig update-rc.d useradd systemd
+
+INITSCRIPT_PACKAGES = "${PN}-server ${PN}-setupdb"
+INITSCRIPT_NAME_${PN}-server = "mysqld"
+INITSCRIPT_PARAMS_${PN}-server ?= "start 45 5 . stop 45 0 6 1 ."
+
+USERADD_PACKAGES = "${PN}-server"
+USERADD_PARAM_${PN}-server = "--system --home-dir /var/mysql -g mysql --shell /bin/false mysql"
+GROUPADD_PARAM_${PN}-server = "--system mysql"
+
+INITSCRIPT_NAME_${PN}-setupdb = "install_db"
+INITSCRIPT_PARAMS_${PN}-setupdb ?= "defaults 44 44"
+
+SYSTEMD_PACKAGES = "${PN}-server ${PN}-setupdb"
+SYSTEMD_SERVICE_${PN}-server = "mysqld.service"
+SYSTEMD_AUTO_ENABLE_${PN}-server ?= "disable"
+
+SYSTEMD_SERVICE_${PN}-setupdb = "install_db.service"
+SYSTEMD_AUTO_ENABLE_${PN}-setupdb ?= "enable"
+ALLOW_EMPTY_${PN}-setupdb ?= "1"
+FILES_${PN}-setupdb = "${sysconfdir}/init.d/install_db"
+
+EXTRA_OEMAKE = "'GEN_LEX_HASH=${STAGING_BINDIR_NATIVE}/gen_lex_hash'"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} setupdb"
+PACKAGECONFIG_class-native = ""
+PACKAGECONFIG[pam] = ",-DWITHOUT_AUTH_PAM=TRUE,libpam"
+PACKAGECONFIG[valgrind] = "-DWITH_VALGRIND=TRUE,-DWITH_VALGRIND=FALSE,valgrind"
+PACKAGECONFIG[libedit] = "-DLIBEDIT_INTERFACE=TRUE,-DLIBEDIT_INTERFACE=FALSE,libedit"
+PACKAGECONFIG[krb5] = ", ,krb5"
+PACKAGECONFIG[setupdb] = ", ,,${PN}-setupdb"
+
+# MariaDB doesn't link properly with gold
+# https://mariadb.atlassian.net/browse/MDEV-5982
+TARGET_CFLAGS += "-fuse-ld=bfd"
+
+BUILD_CFLAGS += "-fuse-ld=bfd"
+BUILD_CXXFLAGS += "-fuse-ld=bfd"
+
+EXTRA_OECMAKE = "-DWITH_EMBEDDED_SERVER=ON \
+ -DWITH_JEMALLOC=no \
+ -DWITHOUT_TOKUDB=TRUE \
+ -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE \
+ -DGROFF=FALSE \
+ -DNROFF=FALSE \
+ -DENABLE_DTRACE=FALSE \
+ -DWITH_PIC=ON \
+ -DINSTALL_LAYOUT=RPM \
+ -DINSTALL_DOCDIR:PATH=${datadir}/doc/${BPN} \
+ -DINSTALL_LIBDIR:PATH=${baselib} \
+ -DINSTALL_PLUGINDIR:PATH=${baselib}/plugin \
+ -DINSTALL_SYSCONFDIR:PATH=${sysconfdir} \
+ -DMYSQL_DATADIR:PATH=/var/mysql \
+ -DCAT_EXECUTABLE=`which cat` \
+ -DCMAKE_AR:FILEPATH=${AR}"
+
+# With Ninja it fails with:
+# make: *** No rule to make target `install'. Stop.
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
+
+do_configure_append() {
+ # handle distros with different values of ${libexecdir}
+ libexecdir2=`echo ${libexecdir} | sed -e 's+/usr/++g'`
+ sed -i -e "s:/libexec:/$libexecdir2:g" ${S}/scripts/mysql_install_db.sh
+ sed -i -e "s:mysqld libexec:mysqld $libexecdir2:g" ${S}/scripts/mysql_install_db.sh
+ sed -i -e "s:/libexec:/$libexecdir2:g" ${S}/scripts/mysqld_safe.sh
+}
+
+do_generate_toolchain_file_append_class-native () {
+ # If these are set cmake will assume we're cross-compiling, which will
+ # result in certain things we want being disabled
+ sed -i "/set( CMAKE_SYSTEM_NAME/d" ${WORKDIR}/toolchain.cmake
+ sed -i "/set( CMAKE_SYSTEM_PROCESSOR/d" ${WORKDIR}/toolchain.cmake
+}
+
+do_compile_prepend_class-target () {
+ # These need to be in-tree or make will think they need to be built,
+ # and since we're cross-compiling that is disabled
+ cp ${STAGING_BINDIR_NATIVE}/comp_err ${S}/extra
+ cp ${STAGING_BINDIR_NATIVE}/comp_sql ${S}/scripts
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'krb5', 'yes', 'no', d)}" = "no" ]; then
+ if ! [ -e ${B}/include/openssl/kssl.h ] ; then
+ mkdir -p ${B}/include/openssl
+ echo "#ifndef KSSL_H" >${B}/include/openssl/kssl.h
+ echo "#define KSSL_H" >>${B}/include/openssl/kssl.h
+ echo "#include <openssl/opensslconf.h>">>${B}/include/openssl/kssl.h
+ echo "#endif" >>${B}/include/openssl/kssl.h
+ fi
+ fi
+}
+
+SYSROOT_PREPROCESS_FUNCS += "mariadb_sysroot_preprocess"
+
+# We need to append this so it runs *after* binconfig's preprocess function
+#
+# We really don't care exactly what the directories were set to originally.
+# plugindir is not fixed, but we don't create any plugins.
+#
+mariadb_sysroot_preprocess () {
+ sed -i -es,^pkgincludedir=.*,pkgincludedir=\'${STAGING_INCDIR}/mysql\', ${SYSROOT_DESTDIR}${bindir_crossscripts}/mysql_config
+ sed -i -es,^pkglibdir=.*,pkglibdir=\'${STAGING_LIBDIR}\', ${SYSROOT_DESTDIR}${bindir_crossscripts}/mysql_config
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/my.cnf ${D}/${sysconfdir}/
+ install -m 0755 ${WORKDIR}/install_db ${D}/${sysconfdir}/init.d/
+ mv ${D}/${sysconfdir}/init.d/mysql ${D}/${sysconfdir}/init.d/mysqld
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/mysqld.service ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/install_db.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@BINDIR@,${bindir},g' -e 's,@PREFIX@,${prefix},g' ${D}${systemd_unitdir}/system/mysqld.service \
+ ${D}${systemd_unitdir}/system/install_db.service
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "f /var/log/mysqld.err 0640 mysql mysql -" \
+ > ${D}${sysconfdir}/tmpfiles.d/99-mysqld.conf
+ fi
+ install -d ${D}${bindir}
+ install -m 755 ${WORKDIR}/mysql-systemd-start ${D}${bindir}
+ install -d ${D}${datadir}/doc/${PN}
+ if [ -f ${D}${datadir}/doc/README ]; then
+ mv ${D}${datadir}/doc/README ${D}${datadir}/doc/${PN}/
+ fi
+}
+
+PACKAGES = "${PN}-dbg ${PN} \
+ libmysqlclient-r libmysqlclient-r-dev libmysqlclient-r-staticdev libmysqlclient-r-dbg \
+ libmysqlclient libmysqlclient-dev libmysqlclient-staticdev libmysqlclient-dbg \
+ libmysqld libmysqld-dev ${PN}-client ${PN}-server ${PN}-setupdb ${PN}-leftovers"
+CONFFILES_${PN}-server += "${sysconfdir}/my.cnf ${sysconfdir}/my.cnf.d/server.cnf"
+CONFFILES_${PN}-client += "${sysconfdir}/my.cnf.d/mysql-clients.cnf"
+CONFFILES_libmysqlclient += "${sysconfdir}/my.cnf.d/client.cnf"
+
+FILES_${PN} = " "
+RDEPENDS_${PN} = "${PN}-client ${PN}-server"
+ALLOW_EMPTY_${PN} = "1"
+
+RDEPENDS_${PN}-client = "perl perl-module-getopt-long perl-module-file-temp \
+ perl-module-fcntl perl-module-sys-hostname perl-module-ipc-open3 \
+ perl-module-exporter"
+RDEPENDS_${PN}-server = "perl perl-module-getopt-long perl-module-data-dumper \
+ perl-module-file-basename perl-module-file-path perl-module-sys-hostname \
+ perl-module-file-copy perl-module-file-temp perl-module-posix \
+ ${PN}-client libdbi-perl libdbd-mysql-perl"
+RDEPENDS_${PN}-leftovers = "perl perl-module-cwd perl-module-benchmark perl-module-getopt-long \
+ perl-module-posix perl-module-data-dumper perl-module-sigtrap perl-module-threads \
+ perl-module-threads-shared perl-module-io-socket perl-module-sys-hostname perl-module-file-copy \
+ perl-module-file-spec perl-module-file-find perl-module-file-basename perl-module-file-path \
+ perl-module-constant perl-module-lib perl-module-file-temp perl-module-file-spec-functions \
+ perl-module-io-socket-inet perl-module-io-select"
+RDEPENDS_${PN}-setupdb = "coreutils"
+
+# Allow old code to link to the backward compatible library
+RDEPENDS_libmysqlclient-dev = "libmysqlclient-r-dev"
+
+FILES_libmysqlclient = "\
+ ${libdir}/libmysqlclient.so.* \
+ ${sysconfdir}/my.cnf.d/client.cnf"
+FILES_libmysqlclient-dev = " \
+ ${includedir}/mysql/ \
+ ${libdir}/libmysqlclient.so \
+ ${sysconfdir}/aclocal \
+ ${bindir}/mysql_config"
+FILES_libmysqlclient-staticdev = "\
+ ${libdir}/*.a"
+FILES_libmysqlclient-dbg = "${libdir}/plugin/.debug/ \
+ ${datadir}/mysql-test/lib/My/SafeProcess/.debug/my_safe_process"
+
+# Avoid warnings about ha_xtradb.so.0.0.0 and ha_innodb_plugin.so.0.0.0
+# which are intentionally non-PIC on 32-bit x86 (see e.g.
+# storage/xtradb/plug.in in the source)
+INSANE_SKIP_libmysqlclient_append_x86 = " textrel"
+
+FILES_libmysqlclient-r = "${libdir}/libmysqlclient_r.so.*"
+FILES_libmysqlclient-r-dev = "\
+ ${libdir}/libmysqlclient_r.so"
+FILES_libmysqlclient-r-staticdev = "${libdir}/libmysqlclient_r.a"
+FILES_libmysqlclient-r-dbg = "${libdir}/plugin/.debuglibmysqlclient_r.so.*"
+
+FILES_libmysqld = "\
+ ${libdir}/libmysqld.so.*"
+FILES_libmysqld-dev = "\
+ ${libdir}/libmysqld.so"
+
+FILES_${PN}-client = "\
+ ${bindir}/myisam_ftdump \
+ ${bindir}/mysql \
+ ${bindir}/mysql_client_test \
+ ${bindir}/mysql_client_test_embedded \
+ ${bindir}/mysql_find_rows \
+ ${bindir}/mysql_fix_extensions \
+ ${bindir}/mysql_waitpid \
+ ${bindir}/mysqlaccess \
+ ${bindir}/mysqladmin \
+ ${bindir}/mysqlbug \
+ ${bindir}/mysqlcheck \
+ ${bindir}/mysqldump \
+ ${bindir}/mysqldumpslow \
+ ${bindir}/mysqlimport \
+ ${bindir}/mysqlshow \
+ ${bindir}/mysqlslap \
+ ${bindir}/mysqltest_embedded \
+ ${libexecdir}/mysqlmanager \
+ ${sysconfdir}/my.cnf.d/mysql-clients.cnf"
+
+FILES_${PN}-server = "\
+ ${bindir}/comp_err \
+ ${bindir}/isamchk \
+ ${bindir}/isamlog \
+ ${bindir}/msql2mysql \
+ ${bindir}/my_print_defaults \
+ ${bindir}/myisamchk \
+ ${bindir}/myisamlog \
+ ${bindir}/myisampack \
+ ${bindir}/mysql_convert_table_format \
+ ${bindir}/mysql_fix_privilege_tables \
+ ${bindir}/mysql_install_db \
+ ${bindir}/mysql_secure_installation \
+ ${bindir}/mysql_setpermission \
+ ${bindir}/mysql-systemd-start \
+ ${bindir}/mysql_tzinfo_to_sql \
+ ${bindir}/mysql_upgrade \
+ ${bindir}/mysql_plugin \
+ ${bindir}/mysql_zap \
+ ${bindir}/mysqlbinlog \
+ ${bindir}/mysqld_multi \
+ ${bindir}/mysqld_safe \
+ ${bindir}/mysqld_safe_helper \
+ ${bindir}/mysqlhotcopy \
+ ${bindir}/mysqltest \
+ ${bindir}/ndb_delete_all \
+ ${bindir}/ndb_desc \
+ ${bindir}/ndb_drop_index \
+ ${bindir}/ndb_drop_table \
+ ${bindir}/ndb_mgm \
+ ${bindir}/ndb_restore \
+ ${bindir}/ndb_select_all \
+ ${bindir}/ndb_select_count \
+ ${bindir}/ndb_show_tables \
+ ${bindir}/ndb_waiter \
+ ${bindir}/pack_isam \
+ ${bindir}/perror \
+ ${bindir}/replace \
+ ${bindir}/resolve_stack_dump \
+ ${bindir}/resolveip \
+ ${libexecdir}/mysqld \
+ ${sbindir}/mysqld \
+ ${sbindir}/ndb_cpcd \
+ ${sbindir}/ndbd \
+ ${sbindir}/ndb_mgmd \
+ ${libdir}/plugin/*.so \
+ ${datadir}/mysql/ \
+ ${localstatedir}/mysql/ \
+ ${sysconfdir}/init.d/mysqld \
+ ${sysconfdir}/my.cnf \
+ ${sysconfdir}/my.cnf.d/server.cnf \
+ ${sysconfdir}/tmpfiles.d"
+
+DESCRIPTION_${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}"
+FILES_${PN}-leftovers = "/"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-disable-ucontext-on-musl.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-disable-ucontext-on-musl.patch
new file mode 100644
index 000000000..60e9199f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-disable-ucontext-on-musl.patch
@@ -0,0 +1,28 @@
+From 5bc3e7ef9700d12054e0125a126f1bb093f01ef9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 26 Mar 2017 14:30:33 -0700
+Subject: [PATCH] disable ucontext on musl
+
+musl does not have *contex() APIs even though it has ucontext.h header
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ include/my_context.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/my_context.h b/include/my_context.h
+index dd44103..9b28c17 100644
+--- a/include/my_context.h
++++ b/include/my_context.h
+@@ -31,7 +31,7 @@
+ #define MY_CONTEXT_USE_X86_64_GCC_ASM
+ #elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__)
+ #define MY_CONTEXT_USE_I386_GCC_ASM
+-#elif defined(HAVE_UCONTEXT_H)
++#elif defined(__GLIBC__) && defined(HAVE_UCONTEXT_H)
+ #define MY_CONTEXT_USE_UCONTEXT
+ #else
+ #define MY_CONTEXT_DISABLE
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/change-cc-to-cc-version.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/change-cc-to-cc-version.patch
new file mode 100644
index 000000000..02bda24f7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/change-cc-to-cc-version.patch
@@ -0,0 +1,26 @@
+mariadb: replace the CC with CC_VERSION and CXX with CXX_VERSION
+
+mysqlbug.sh is a bug report script. It makes a report with the build information,
+including gcc version. The CC is the local path of gcc, which is useless for bug
+report, and the path may expose private information, so change it to CC_VERSION.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yue Tao <Yue.Tao@windriver.com>
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+================================
+diff --git a/scripts/mysqlbug.sh.old b/scripts/mysqlbug.sh
+index e9df210..d4b8d53 100644
+--- a/scripts/mysqlbug.sh.old
++++ b/scripts/mysqlbug.sh
+@@ -24,8 +24,8 @@ VERSION="@VERSION@@MYSQL_SERVER_SUFFIX@"
+ COMPILATION_COMMENT="@COMPILATION_COMMENT@"
+ BUGmysql="maria-developers@lists.launchpad.net"
+ # This is set by configure
+-COMP_CALL_INFO="CC='@SAVE_CC@' CFLAGS='@SAVE_CFLAGS@' CXX='@SAVE_CXX@' CXXFLAGS='@SAVE_CXXFLAGS@' LDFLAGS='@SAVE_LDFLAGS@' ASFLAGS='@SAVE_ASFLAGS@'"
+-COMP_RUN_INFO="CC='@CC@' CFLAGS='@CFLAGS@' CXX='@CXX@' CXXFLAGS='@CXXFLAGS@' LDFLAGS='@LDFLAGS@' ASFLAGS='@ASFLAGS@'"
++COMP_CALL_INFO="CC='@CC_VERSION@' CFLAGS='@SAVE_CFLAGS@' CXX='@CXX_VERSION@' CXXFLAGS='@SAVE_CXXFLAGS@' LDFLAGS='@SAVE_LDFLAGS@' ASFLAGS='@SAVE_ASFLAGS@'"
++COMP_RUN_INFO="CC='@CC_VERSION@' CFLAGS='@CFLAGS@' CXX='@CXX_VERSION@' CXXFLAGS='@CXXFLAGS@' LDFLAGS='@LDFLAGS@' ASFLAGS='@ASFLAGS@'"
+ CONFIGURE_LINE="@CONF_COMMAND@"
+
+ LIBC_INFO=""
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/configure.cmake-fix-valgrind.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/configure.cmake-fix-valgrind.patch
new file mode 100644
index 000000000..e97def602
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/configure.cmake-fix-valgrind.patch
@@ -0,0 +1,41 @@
+From 5effba0d7d47071a3f1bca56823190d5a95bb1a6 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 12 Nov 2014 03:09:10 -0500
+Subject: [PATCH] configure.cmake: fix valgrind
+
+Check valgrind headers only if WITH_VALGRIND is set.
+
+mariadb uses two macros for valgrind compilations:
+HAVE_valgrind - valgrind is installed and can be set by configure option -DWITH_VALGRIND
+HAVE_VALGRIND - valgrind debug libraries is installed, set by auto check
+
+We would like to set them both by the configure option so that we can use
+PACKAGECONFIG to decide if valgrind is needed or not.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.cmake b/configure.cmake
+index 0bd7bbe..51a098f 100644
+--- a/configure.cmake
++++ b/configure.cmake
+@@ -1047,10 +1047,10 @@ MARK_AS_ADVANCED(WITH_ATOMIC_LOCKS MY_ATOMIC_MODE_RWLOCK MY_ATOMIC_MODE_DUMMY)
+
+ IF(WITH_VALGRIND)
+ SET(HAVE_valgrind 1)
++ CHECK_INCLUDE_FILES("valgrind/memcheck.h;valgrind/valgrind.h"
++ HAVE_VALGRIND)
+ ENDIF()
+
+-CHECK_INCLUDE_FILES("valgrind/memcheck.h;valgrind/valgrind.h"
+- HAVE_VALGRIND)
+
+ #--------------------------------------------------------------------
+ # Check for IPv6 support
+--
+2.0.0
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-a-building-failure.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-a-building-failure.patch
new file mode 100644
index 000000000..0c4e10237
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-a-building-failure.patch
@@ -0,0 +1,31 @@
+[PATCH] fix a building failure
+
+Upstream-Status: Inappropriate [configuration]
+
+building failed since native does not generate import_executables.cmake
+In fact, our building system will export the needed commands
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ CMakeLists.txt | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c1ce1c5..83b3a7e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -350,11 +350,6 @@ MYSQL_CHECK_READLINE()
+
+ CHECK_JEMALLOC()
+
+-IF(CMAKE_CROSSCOMPILING)
+- SET(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Path to import_executables.cmake from a native build")
+- INCLUDE(${IMPORT_EXECUTABLES})
+-ENDIF()
+-
+ #
+ # Setup maintainer mode options by the end. Platform checks are
+ # not run with the warning options as to not perturb fragile checks
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-cmake-module-path.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-cmake-module-path.patch
new file mode 100644
index 000000000..8d9f558d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-cmake-module-path.patch
@@ -0,0 +1,29 @@
+Avoid CMAKE_MODULE_PATH being overwritten
+
+OE-Core's setting of CMAKE_MODULE_PATH stomps on MariaDB's value unless
+we set it after setting the project name.
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Inappropriate [working around OE-Core bug]
+
+--- mariadb/CMakeLists.txt 2014-07-17 11:01:07.676353047 +0100
++++ mariadb/CMakeLists.txt 2014-07-17 11:01:31.299353107 +0100
+@@ -28,8 +28,6 @@
+
+ MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}")
+
+-SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
+-
+ # Distinguish between community and non-community builds, with the
+ # default being a community build. This does not impact the feature
+ # set that will be compiled in; it's merely provided as a hint to
+@@ -77,6 +75,8 @@
+ ENDIF()
+ PROJECT(${MYSQL_PROJECT_NAME})
+
++SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
++
+ IF(BUILD_CONFIG)
+ INCLUDE(
+ ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-mysqlclient-r-version.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-mysqlclient-r-version.patch
new file mode 100644
index 000000000..a519e4292
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-mysqlclient-r-version.patch
@@ -0,0 +1,160 @@
+From 6db2a606196fb38a6d106dc409eee1cb9a40a440 Mon Sep 17 00:00:00 2001
+From: Tor Didriksen <tor.didriksen@oracle.com>
+Date: Mon, 24 Jun 2013 17:15:35 +0200
+Subject: [PATCH] Bug#16809055 MYSQL 5.6 AND 5.7 STILL USE LIBMYSQLCLIENT.SO.18
+
+With this patch, the libmysql/ directory contains:
+libmysqlclient.a
+libmysqlclient_r.a -> libmysqlclient.a
+libmysqlclient_r.so -> libmysqlclient.so*
+libmysqlclient_r.so.18 -> libmysqlclient.so.18*
+libmysqlclient_r.so.18.1.0 -> libmysqlclient.so.18.1.0*
+libmysqlclient.so -> libmysqlclient.so.18*
+libmysqlclient.so.18 -> libmysqlclient.so.18.1.0*
+libmysqlclient.so.18.1.0*
+
+This fixes libmysqlclient_r symlinks pointing to the unversioned
+libmysqlclient.so symlink (leading to package QA errors since the
+libmysqlclient-r package ends up depending on libmysqlclient-dev).
+
+Borrowed from MySQL 5.6 tree at https://github.com/percona/mysql/
+
+Upstream-Status: Pending
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ cmake/install_macros.cmake | 25 +++++++++++++++----------
+ libmysql/CMakeLists.txt | 34 +++++++++++++++++++++++++++-------
+ 2 files changed, 42 insertions(+), 17 deletions(-)
+
+diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake
+index b8efdf8..a0d0e68 100644
+--- a/cmake/install_macros.cmake
++++ b/cmake/install_macros.cmake
+@@ -1,4 +1,4 @@
+-# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
++# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -167,28 +167,33 @@ ENDFUNCTION()
+
+
+ # Install symbolic link to CMake target.
+-# the link is created in the same directory as target
+-# and extension will be the same as for target file.
+-MACRO(INSTALL_SYMLINK linkname target destination component)
++# We do 'cd path; ln -s target_name link_name'
++# We also add an INSTALL target for "${path}/${link_name}"
++MACRO(INSTALL_SYMLINK target target_name link_name destination component)
+ IF(UNIX)
+ GET_TARGET_PROPERTY(location ${target} LOCATION)
+ GET_FILENAME_COMPONENT(path ${location} PATH)
+- GET_FILENAME_COMPONENT(name ${location} NAME)
+- SET(output ${path}/${linkname})
++ MESSAGE(STATUS "target ${target}")
++ MESSAGE(STATUS "link_name ${link_name}")
++ MESSAGE(STATUS "target_name ${target_name}")
++ MESSAGE(STATUS "path ${path}")
++ MESSAGE(STATUS "")
++
++ SET(output ${path}/${link_name})
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${output}
+ COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${output}
+ COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink
+- ${name}
+- ${linkname}
++ ${target_name}
++ ${link_name}
+ WORKING_DIRECTORY ${path}
+ DEPENDS ${target}
+ )
+
+- ADD_CUSTOM_TARGET(symlink_${linkname}
++ ADD_CUSTOM_TARGET(symlink_${link_name}
+ ALL
+ DEPENDS ${output})
+- SET_TARGET_PROPERTIES(symlink_${linkname} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
++ SET_TARGET_PROPERTIES(symlink_${link_name} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ IF(CMAKE_GENERATOR MATCHES "Xcode")
+ # For Xcode, replace project config with install config
+ STRING(REPLACE "${CMAKE_CFG_INTDIR}"
+diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt
+index be5760f..96286ff 100644
+--- a/libmysql/CMakeLists.txt
++++ b/libmysql/CMakeLists.txt
+@@ -433,6 +433,12 @@ IF(MSVC)
+ INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug)
+ ENDIF()
+
++MACRO(GET_TARGET_NAME target out_name)
++ GET_TARGET_PROPERTY(location ${target} LOCATION)
++ GET_FILENAME_COMPONENT(name ${location} NAME)
++ SET(${out_name} ${name})
++ENDMACRO()
++
+ IF(UNIX)
+ MACRO(GET_VERSIONED_LIBNAME LIBNAME EXTENSION VERSION OUTNAME)
+ SET(DOT_VERSION ".${VERSION}")
+@@ -445,7 +451,13 @@ IF(UNIX)
+ SET(${OUTNAME} ${LIBNAME}${EXTENSION}${DOT_VERSION})
+ ENDIF()
+ ENDMACRO()
+- INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r.a mysqlclient ${INSTALL_LIBDIR} Development)
++ENDIF()
++
++IF(UNIX)
++ GET_TARGET_NAME(mysqlclient lib_name)
++ INSTALL_SYMLINK(mysqlclient
++ ${lib_name} ${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r.a
++ ${INSTALL_LIBDIR} Development)
+ ENDIF()
+
+ IF(NOT DISABLE_SHARED)
+@@ -456,10 +468,9 @@ IF(NOT DISABLE_SHARED)
+ # libtool compatability
+ IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR APPLE)
+ SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}")
+- ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
+- SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.0")
+ ELSE()
+- SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.0.0")
++ SET(OS_SHARED_LIB_VERSION
++ "${SHARED_LIB_MAJOR_VERSION}.${SHARED_LIB_MINOR_VERSION}.0")
+ ENDIF()
+ # Name of shared library is mysqlclient on Unix
+ SET_TARGET_PROPERTIES(libmysql PROPERTIES
+@@ -482,8 +493,13 @@ IF(NOT DISABLE_SHARED)
+ "${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ ""
+ linkname)
+- INSTALL_SYMLINK(${linkname} libmysql ${INSTALL_LIBDIR} SharedLibraries)
+- SET(OS_SHARED_LIB_SYMLINKS "${SHARED_LIB_MAJOR_VERSION}" "${OS_SHARED_LIB_VERSION}")
++ GET_TARGET_NAME(libmysql lib_name)
++ GET_FILENAME_COMPONENT(lib_name_we ${lib_name} NAME_WE)
++ INSTALL_SYMLINK(libmysql
++ ${lib_name} ${linkname}
++ ${INSTALL_LIBDIR} SharedLibraries)
++ SET(OS_SHARED_LIB_SYMLINKS
++ "${SHARED_LIB_MAJOR_VERSION}" "${OS_SHARED_LIB_VERSION}")
+ LIST(REMOVE_DUPLICATES OS_SHARED_LIB_SYMLINKS)
+ FOREACH(ver ${OS_SHARED_LIB_SYMLINKS})
+ GET_VERSIONED_LIBNAME(
+@@ -491,7 +507,11 @@ IF(NOT DISABLE_SHARED)
+ "${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ "${ver}"
+ linkname)
+- INSTALL_SYMLINK(${linkname} libmysql ${INSTALL_LIBDIR} SharedLibraries)
++ GET_VERSIONED_LIBNAME(
++ ${lib_name_we} "${CMAKE_SHARED_LIBRARY_SUFFIX}" "${ver}" lib_name_ver)
++ INSTALL_SYMLINK(libmysql
++ ${lib_name_ver} ${linkname}
++ ${INSTALL_LIBDIR} SharedLibraries)
+ ENDFOREACH()
+ ENDIF()
+ ENDIF()
+--
+2.0.3
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db
new file mode 100755
index 000000000..512a7da7e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db
@@ -0,0 +1,13 @@
+#! /bin/sh
+case "$1" in
+ start)
+ echo "Starting to install database for mariadb"
+ /usr/bin/mysql-systemd-start pre
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/install_db start"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db.service b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db.service
new file mode 100644
index 000000000..c8369f569
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/install_db.service
@@ -0,0 +1,17 @@
+#
+# Simple install MySQL database service file
+# It shoulb be done before mysqld.service
+
+[Unit]
+Description=Install MySQL Community Server Database
+After=network.target
+After=syslog.target
+Before=mysqld.service
+
+[Install]
+WantedBy=multi-user.target
+
+[Service]
+Type=oneshot
+ExecStart=@BINDIR@/mysql-systemd-start pre
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/my.cnf b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/my.cnf
new file mode 100644
index 000000000..dc4c172e5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/my.cnf
@@ -0,0 +1,25 @@
+[client]
+#password = password
+port = 3306
+socket = /var/lib/mysql/mysql.sock
+
+[mysqld_safe]
+
+[mysqld]
+user = mysql
+port = 3306
+socket = /var/lib/mysql/mysql.sock
+pid-file = /var/lib/mysql/mysqld.pid
+log-error = /var/log/mysqld.err
+basedir = /usr
+datadir = /var/lib/mysql
+skip-external-locking
+skip-networking
+ignore-builtin-innodb
+default-storage-engine = myisam
+bind-address = localhost
+
+#
+# include all files from the config directory
+#
+!includedir /etc/my.cnf.d
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysql-systemd-start b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysql-systemd-start
new file mode 100644
index 000000000..189c02021
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysql-systemd-start
@@ -0,0 +1,66 @@
+#! /bin/sh
+#
+# Needed argument: pre | post
+#
+# pre mode : try to run mysql_install_db and fix perms and SELinux contexts
+# post mode : ping server until answer is received
+#
+
+get_option () {
+ local section=$1
+ local option=$2
+ local default=$3
+ ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
+ [ -z $ret ] && ret=$default
+ echo $ret
+}
+
+install_db () {
+ # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode)
+ datadir=$(get_option mysqld datadir "/var/lib/mysql")
+
+ # Restore log, dir, perms and SELinux contexts
+ [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1
+ log=/var/log/mysqld.log
+ [ -e $log ] || touch $log
+ chmod 0640 $log
+ chown mysql:mysql $log || exit 1
+ if [ -x /usr/sbin/restorecon ]; then
+ /usr/sbin/restorecon "$datadir"
+ /usr/sbin/restorecon $log
+ fi
+
+ # If special mysql dir is in place, skip db install
+ [ -d "$datadir/mysql" ] && exit 0
+
+ # Create initial db
+ /usr/bin/mysql_install_db --rpm --datadir="$datadir" --user=mysql
+ exit 0
+}
+
+pinger () {
+ # Wait for ping to answer to signal startup completed,
+ # might take a while in case of e.g. crash recovery
+ # MySQL systemd service will timeout script if no answer
+ datadir=$(get_option mysqld datadir "/var/lib/mysql")
+ socket=$(get_option mysqld socket "$datadir/mysql.sock")
+ case $socket in
+ /*) adminsocket="$socket" ;;
+ *) adminsocket="$datadir/$socket" ;;
+ esac
+
+ while /bin/true ; do
+ sleep 1
+ mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break
+ done
+ exit 0
+}
+
+# main
+case $1 in
+ "pre") install_db ;;
+ "post") pinger ;;
+esac
+
+exit 0
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysqld.service b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysqld.service
new file mode 100644
index 000000000..d88361703
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysqld.service
@@ -0,0 +1,25 @@
+[Unit]
+Description=MariaDB database server
+After=syslog.target
+After=network.target
+
+[Service]
+PIDFile=/var/lib/mysql/mysqld.pid
+Type=simple
+User=mysql
+Group=mysql
+
+# Execute post scripts as root
+PermissionsStartOnly=true
+
+# Start main service
+ExecStart=@BINDIR@/mysqld_safe --basedir=@PREFIX@
+
+# Don't signal startup success before a ping works
+ExecStartPost=@BINDIR@/mysql-systemd-start post
+
+TimeoutSec=300
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/remove-bad-path.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/remove-bad-path.patch
new file mode 100644
index 000000000..ff26b0b86
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/remove-bad-path.patch
@@ -0,0 +1,18 @@
+Remove host path from include directories
+
+Naturally this breaks cross-compilation if present.
+
+Upstream-Status: Pending
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+--- mariadb-5.5.38/storage/tokudb/ft-index/CMakeLists.txt 2014-07-17 14:37:04.529327998 +0100
++++ mariadb-5.5.38/storage/tokudb/ft-index/CMakeLists.txt 2014-07-17 14:43:56.991337895 +0100
+@@ -39,7 +39,6 @@
+
+ ## default includes and libraries
+ include_directories(SYSTEM
+- /usr/local/include
+ ${ZLIB_INCLUDE_DIRS}
+ )
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_5.5.59.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_5.5.59.bb
new file mode 100644
index 000000000..d7895732a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_5.5.59.bb
@@ -0,0 +1,27 @@
+require mariadb.inc
+
+EXTRA_OECMAKE += "-DSTACK_DIRECTION=-1"
+
+DEPENDS += "mariadb-native ncurses zlib readline libaio libevent"
+
+PROVIDES += "mysql5 libmysqlclient"
+
+RPROVIDES_${PN} += "mysql5"
+RREPLACES_${PN} += "mysql5"
+RCONFLICTS_${PN} += "mysql5"
+
+RPROVIDES_${PN}-dbg += "mysql5-dbg"
+RREPLACES_${PN}-dbg += "mysql5-dbg"
+RCONFLICTS_${PN}-dbg += "mysql5-dbg"
+
+RPROVIDES_${PN}-leftovers += "mysql5-leftovers"
+RREPLACES_${PN}-leftovers += "mysql5-leftovers"
+RCONFLICTS_${PN}-leftovers += "mysql5-leftovers"
+
+RPROVIDES_${PN}-client += "mysql5-client"
+RREPLACES_${PN}-client += "mysql5-client"
+RCONFLICTS_${PN}-client += "mysql5-client"
+
+RPROVIDES_${PN}-server += "mysql5-server"
+RREPLACES_${PN}-server += "mysql5-server"
+RCONFLICTS_${PN}-server += "mysql5-server"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb
new file mode 100644
index 000000000..ac0df4f06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Python interface to MySQL"
+HOMEPAGE = "https://github.com/farcepest/MySQLdb1"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "mysql5"
+
+SRCNAME = "MySQL-python"
+
+SRC_URI = "https://pypi.python.org/packages/source/M/${SRCNAME}/${SRCNAME}-${PV}.zip"
+SRC_URI[md5sum] = "654f75b302db6ed8dc5a898c625e030c"
+SRC_URI[sha256sum] = "811040b647e5d5686f84db415efd697e6250008b112b6909ba77ac059e140c74"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Use-pkg-config-for-libxml2-detection.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Use-pkg-config-for-libxml2-detection.patch
new file mode 100644
index 000000000..ce2a60cab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Use-pkg-config-for-libxml2-detection.patch
@@ -0,0 +1,40 @@
+From d52e330be895bb8c5f0fb3e2884766acbd942a85 Mon Sep 17 00:00:00 2001
+From: Philip Balister <philip@balister.org>
+Date: Tue, 1 Jul 2014 09:40:44 -0400
+Subject: [PATCH] Use pkg-config for libxml2 detection.
+
+Upstream-Status: Inappropriate [configuration]
+
+xml2-config does not work. Use pkgconfig to set CPPFLAGS and LIBS.
+
+Signed-off-by: Philip Balister <philip@balister.org>
+---
+ configure.in | 15 ++-------------
+ 1 file changed, 2 insertions(+), 13 deletions(-)
+
+Index: postgresql-9.4.15/configure.in
+===================================================================
+--- postgresql-9.4.15.orig/configure.in
++++ postgresql-9.4.15/configure.in
+@@ -759,19 +759,8 @@ PGAC_ARG_BOOL(with, libxml, no, [build w
+ [AC_DEFINE([USE_LIBXML], 1, [Define to 1 to build with XML support. (--with-libxml)])])
+
+ if test "$with_libxml" = yes ; then
+- AC_CHECK_PROGS(XML2_CONFIG, xml2-config)
+- if test -n "$XML2_CONFIG"; then
+- for pgac_option in `$XML2_CONFIG --cflags`; do
+- case $pgac_option in
+- -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";;
+- esac
+- done
+- for pgac_option in `$XML2_CONFIG --libs`; do
+- case $pgac_option in
+- -L*) LDFLAGS="$LDFLAGS $pgac_option";;
+- esac
+- done
+- fi
++ CPPFLAGS="$CPPFLAGS `pkg-config --short-errors --print-errors --cflags "libxml-2.0" 2>&1`"
++ LIBS="`pkg-config --short-errors --print-errors --libs "libxml-2.0" 2>&1` $LIBS"
+ fi
+
+ AC_SUBST(with_libxml)
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch
new file mode 100644
index 000000000..971510943
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch
@@ -0,0 +1,28 @@
+[PATCH] not check libperl under cross compiling
+
+Upstream-Status: Inappropriate [configuration]
+
+libperl ldflags returned by PGAC_CHECK_PERL_EMBED_LDFLAGS are native,
+can not be used to check target library.
+
+postpresql has the dependency on perl, so not need to check libperl
+again, like in postgresql-9.2.4
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: postgresql-9.4.15/configure.in
+===================================================================
+--- postgresql-9.4.15.orig/configure.in
++++ postgresql-9.4.15/configure.in
+@@ -1879,7 +1879,7 @@ if test "$with_tcl" = yes; then
+ fi
+
+ # check for <perl.h>
+-if test "$with_perl" = yes; then
++if test "$with_perl" = yes && test "$cross_compiling" = no; then
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE"
+ AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file <perl.h> is required for Perl])],
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-bashprofile b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-bashprofile
new file mode 100644
index 000000000..1c931f37f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-bashprofile
@@ -0,0 +1,4 @@
+[ -f /etc/profile ] && source /etc/profile
+
+PGDATA=/var/lib/postgresql/data
+export PGDATA
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-setup b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-setup
new file mode 100644
index 000000000..75bb01e05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql-setup
@@ -0,0 +1,73 @@
+#!/bin/sh
+#
+# postgresql-setup Initialization operation for PostgreSQL
+
+# For SELinux we need to use 'runuser' not 'su'
+if [ -x /sbin/runuser ]
+then
+ SU=runuser
+else
+ SU=su
+fi
+
+PGENGINE=/usr/bin
+PGDATA=/var/lib/postgresql/data
+PGLOG=/var/lib/postgresql/pgstartup.log
+script_result=0
+
+initdb(){
+ if [ -f "$PGDATA/PG_VERSION" ]
+ then
+ echo -n "Data directory is not empty!"
+ echo -n " [FAILED] "
+ echo
+ script_result=1
+ else
+ echo -n "Initializing database: "
+ if [ ! -e "$PGDATA" -a ! -h "$PGDATA" ]
+ then
+ mkdir -p "$PGDATA" || exit 1
+ chown postgres:postgres "$PGDATA"
+ chmod go-rwx "$PGDATA"
+ fi
+ # Clean up SELinux tagging for PGDATA
+ [ -x /sbin/restorecon ] && /sbin/restorecon "$PGDATA"
+
+ # Make sure the startup-time log file is OK, too
+ if [ ! -e "$PGLOG" -a ! -h "$PGLOG" ]
+ then
+ touch "$PGLOG" || exit 1
+ chown postgres:postgres "$PGLOG"
+ chmod go-rwx "$PGLOG"
+ [ -x /sbin/restorecon ] && /sbin/restorecon "$PGLOG"
+ fi
+
+ # Initialize the database
+ $SU -l postgres -c "$PGENGINE/initdb --pgdata='$PGDATA' --auth='ident'" >> "$PGLOG" 2>&1 < /dev/null
+
+ # Create directory for postmaster log
+ mkdir "$PGDATA/pg_log"
+ chown postgres:postgres "$PGDATA/pg_log"
+ chmod go-rwx "$PGDATA/pg_log"
+
+ if [ -f "$PGDATA/PG_VERSION" ]
+ then
+ echo -n " [ OK ] "
+ else
+ echo -n " [FAILED] "
+ script_result=1
+ fi
+ echo
+ fi
+}
+
+case "$1" in
+ initdb)
+ initdb
+ ;;
+ *)
+ echo "Usage: $0 initdb"
+ exit 2
+esac
+
+exit $script_result
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.init b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.init
new file mode 100644
index 000000000..4a4f0cd16
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.init
@@ -0,0 +1,193 @@
+#!/bin/sh
+#
+# postgresql This is the init script for starting up the PostgreSQL
+# server.
+#
+# chkconfig: - 64 36
+# description: PostgreSQL database server.
+# processname: postmaster
+# pidfile: /var/run/postmaster.PORT.pid
+
+# This script is slightly unusual in that the name of the daemon (postmaster)
+# is not the same as the name of the subsystem (postgresql)
+
+# PGVERSION is the full package version, e.g., 8.4.0
+# Note: the specfile inserts the correct value during package build
+PGVERSION=9.2.4
+# PGMAJORVERSION is major version, e.g., 8.4 (this should match PG_VERSION)
+PGMAJORVERSION=`echo "$PGVERSION" | sed 's/^\([0-9]*\.[0-9]*\).*$/\1/'`
+
+# Source function library.
+. /etc/init.d/functions
+
+# Find the name of the script
+NAME=`basename $0`
+if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
+then
+ NAME=${NAME:3}
+fi
+
+# For SELinux we need to use 'runuser' not 'su'
+if [ -x /sbin/runuser ]
+then
+ SU=runuser
+else
+ SU=su
+fi
+
+
+# Set defaults for configuration variables
+PGENGINE=/usr/bin
+PGPORT=5432
+PGDATA=/var/lib/postgresql/data
+PGLOG=/var/lib/postgresql/pgstartup.log
+# Value to set as postmaster process's oom_adj
+PG_OOM_ADJ=-17
+
+# Override defaults from /etc/sysconfig/postgresql if file is present
+[ -f /etc/default/postgresql/${NAME} ] && . /etc/default/postgresql/${NAME}
+
+export PGDATA
+export PGPORT
+
+lockfile="/var/lock/subsys/${NAME}"
+pidfile="/var/run/postmaster.${PGPORT}.pid"
+
+script_result=0
+
+start(){
+ [ -x "$PGENGINE/postmaster" ] || exit 5
+
+ PSQL_START=$"Starting ${NAME} service: "
+
+ # Make sure startup-time log file is valid
+ if [ ! -e "$PGLOG" -a ! -h "$PGLOG" ]
+ then
+ touch "$PGLOG" || exit 4
+ chown postgres:postgres "$PGLOG"
+ chmod go-rwx "$PGLOG"
+ [ -x /sbin/restorecon ] && /sbin/restorecon "$PGLOG"
+ fi
+
+ # Check for the PGDATA structure
+ if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ]
+ then
+ # Check version of existing PGDATA
+ if [ x`cat "$PGDATA/PG_VERSION"` != x"$PGMAJORVERSION" ]
+ then
+ SYSDOCDIR="(Your System's documentation directory)"
+ if [ -d "/usr/doc/postgresql-$PGVERSION" ]
+ then
+ SYSDOCDIR=/usr/doc
+ fi
+ if [ -d "/usr/share/doc/postgresql-$PGVERSION" ]
+ then
+ SYSDOCDIR=/usr/share/doc
+ fi
+ if [ -d "/usr/doc/packages/postgresql-$PGVERSION" ]
+ then
+ SYSDOCDIR=/usr/doc/packages
+ fi
+ if [ -d "/usr/share/doc/packages/postgresql-$PGVERSION" ]
+ then
+ SYSDOCDIR=/usr/share/doc/packages
+ fi
+ echo
+ echo $"An old version of the database format was found."
+ echo $"You need to upgrade the data format before using PostgreSQL."
+ echo $"See $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist for more information."
+ exit 1
+ fi
+ else
+ # No existing PGDATA! Warn the user to initdb it.
+ echo
+ echo "$PGDATA is missing. Use \"postgresql-setup initdb\" to initialize the cluster first."
+ echo -n " [FAILED] "
+ echo
+ exit 1
+ fi
+
+ echo -n "$PSQL_START"
+ test x"$PG_OOM_ADJ" != x && echo "$PG_OOM_ADJ" > /proc/self/oom_score_adj
+ $SU -l postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null
+ sleep 2
+ pid=`head -n 1 "$PGDATA/postmaster.pid" 2>/dev/null`
+ if [ "x$pid" != x ]
+ then
+ echo -n " [ OK ]"
+ touch "$lockfile"
+ echo $pid > "$pidfile"
+ echo
+ else
+ echo -n " [FAILED]"
+ echo
+ script_result=1
+ fi
+}
+
+stop(){
+ echo -n $"Stopping ${NAME} service: "
+ if [ -e "$lockfile" ]
+ then
+ $SU -l postgres -c "$PGENGINE/pg_ctl stop -D '$PGDATA' -s -m fast" > /dev/null 2>&1 < /dev/null
+ ret=$?
+ if [ $ret -eq 0 ]
+ then
+ echo -n " [ OK ] "
+ rm -f "$pidfile"
+ rm -f "$lockfile"
+ else
+ echo -n " [FAILED] "
+ script_result=1
+ fi
+ else
+ # not running; per LSB standards this is "ok"
+ echo -n " [ OK ] "
+ fi
+ echo
+}
+
+restart(){
+ stop
+ start
+}
+
+condrestart(){
+ [ -e "$lockfile" ] && restart || :
+}
+
+reload(){
+ $SU -l postgres -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" > /dev/null 2>&1 < /dev/null
+}
+
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status postmaster
+ script_result=$?
+ ;;
+ restart)
+ restart
+ ;;
+ condrestart|try-restart)
+ condrestart
+ ;;
+ reload)
+ reload
+ ;;
+ force-reload)
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ exit 2
+esac
+
+exit $script_result
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.pam b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.pam
new file mode 100644
index 000000000..0b6fdc5f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.pam
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth include common-auth
+account include common-account
+password include common-password
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.service b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.service
new file mode 100644
index 000000000..4ec959e84
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/postgresql.service
@@ -0,0 +1,27 @@
+[Unit]
+Description=PostgreSQL database server
+After=network.target
+
+[Service]
+Type=forking
+User=postgres
+Group=postgres
+
+# Port number for server to listen on
+Environment=PGPORT=5432
+
+# Location of database directory
+Environment=PGDATA=/var/lib/postgresql/data
+
+# Disable OOM kill on the postmaster
+OOMScoreAdjust=-17
+
+ExecStart=@BINDIR@/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
+ExecStop=@BINDIR@/pg_ctl stop -D ${PGDATA} -s -m fast
+ExecReload=@BINDIR@/pg_ctl reload -D ${PGDATA} -s
+
+# Give a reasonable amount of time for the server to start up/shut down
+TimeoutSec=300
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
new file mode 100644
index 000000000..812c2aed4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
@@ -0,0 +1,383 @@
+SUMMARY = "PostgreSQL is a powerful, open source relational database system."
+DESCRIPTION = "\
+ PostgreSQL is an advanced Object-Relational database management system \
+ (DBMS) that supports almost all SQL constructs (including \
+ transactions, subselects and user-defined types and functions). The \
+ postgresql package includes the client programs and libraries that \
+ you'll need to access a PostgreSQL DBMS server. These PostgreSQL \
+ client programs are programs that directly manipulate the internal \
+ structure of PostgreSQL databases on a PostgreSQL server. These client \
+ programs can be located on the same machine with the PostgreSQL \
+ server, or may be on a remote machine which accesses a PostgreSQL \
+ server over a network connection. This package contains the docs \
+ in HTML for the whole package, as well as command-line utilities for \
+ managing PostgreSQL databases on a PostgreSQL server. \
+ \
+ If you want to manipulate a PostgreSQL database on a local or remote \
+ PostgreSQL server, you need this package. You also need to install \
+ this package if you're installing the postgresql-server package. \
+"
+HOMEPAGE = "http://www.postgresql.com"
+LICENSE = "BSD"
+DEPENDS = "zlib readline tzcode-native"
+
+ARM_INSTRUCTION_SET = "arm"
+
+SRC_URI = "http://ftp.postgresql.org/pub/source/v${PV}/${BP}.tar.bz2 \
+ file://postgresql.init \
+ file://postgresql-bashprofile \
+ file://postgresql.pam \
+ file://postgresql-setup \
+ file://postgresql.service \
+ file://0001-Use-pkg-config-for-libxml2-detection.patch \
+"
+
+LEAD_SONAME = "libpq.so"
+
+# LDFLAGS for shared libraries
+export LDFLAGS_SL = "${LDFLAGS}"
+
+inherit autotools pkgconfig perlnative pythonnative useradd update-rc.d systemd gettext
+
+CFLAGS += "-I${STAGING_INCDIR}/${PYTHON_DIR} -I${STAGING_INCDIR}/tcl8.6"
+
+SYSTEMD_SERVICE_${PN} = "postgresql.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
+
+DEPENDS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-systemctl-native', '', d)}"
+pkg_postinst_${PN} () {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd sysvinit', 'true', 'false', d)}; then
+ if [ -n "$D" ]; then
+ OPTS="--root=$D"
+ fi
+ systemctl $OPTS mask postgresql-server.service
+ fi
+}
+
+enable_pam = "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG ??= "${enable_pam} openssl python uuid libxml tcl nls libxml perl"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
+PACKAGECONFIG[python] = "--with-python,--without-python,python,python"
+PACKAGECONFIG[uuid] = "--with-ossp-uuid,--without-ossp-uuid,ossp-uuid,"
+PACKAGECONFIG[tcl] = "--with-tcl --with-tclconfig=${STAGING_BINDIR_CROSS},--without-tcl,tcl tcl-native,"
+PACKAGECONFIG[nls] = "--enable-nls,--disable-nls,,"
+PACKAGECONFIG[libxml] = "--with-libxml,--without-libxml,libxml2,libxml2"
+PACKAGECONFIG[perl] = "--with-perl,--without-perl,perl,perl"
+
+EXTRA_OECONF += "--enable-thread-safety --disable-rpath \
+ --datadir=${datadir}/${BPN} \
+ --sysconfdir=${sysconfdir}/${BPN} \
+"
+EXTRA_OECONF_sh4 += "--disable-spinlocks"
+EXTRA_OECONF_aarch64 += "--disable-spinlocks"
+
+PACKAGES_DYNAMIC += "^${PN}-plperl ^${PN}-plperl-dbg \
+ ^${PN}-pltcl ^${PN}-pltcl-dbg \
+ ^${PN}-plpython ^${PN}-plpython-dbg \
+"
+
+python populate_packages_prepend() {
+
+ def fill_more(name, dbg=True):
+ if name is None or name.strip() == "":
+ return
+
+ fpack=d.getVar('PACKAGES', False) or ""
+ fpack="${PN}-" + name + " " + fpack
+ if dbg:
+ fpack="${PN}-" + name + "-dbg" + " " + fpack
+ d.setVar('PACKAGES', fpack)
+
+ conf=(d.getVar('PACKAGECONFIG') or "").split()
+ pack=d.getVar('PACKAGES', False) or ""
+ bb.debug(1, "PACKAGECONFIG=%s" % conf)
+ bb.debug(1, "PACKAGES1=%s" % pack )
+
+ if "perl" in conf :
+ fill_more("plperl")
+
+ if "tcl" in conf:
+ fill_more("pltcl")
+
+ if "python" in conf:
+ fill_more("plpython")
+
+ pack=d.getVar('PACKAGES') or ""
+ bb.debug(1, "PACKAGES2=%s" % pack)
+
+}
+
+do_configure() {
+ # do_configure
+ autotools_do_configure
+
+ # do_configure_append
+ # workaround perl package related bugs
+ sed -i -e "s:-L/usr/local/lib:-L=/usr/local/lib:g" \
+ ${B}/src/Makefile.global
+ LIBPNA="\${STAGING_LIBDIR_NATIVE}/perl-native"
+ LIBNA="\${STAGING_LIBDIR_NATIVE}"
+ BLIBNA="\${STAGING_BASE_LIBDIR_NATIVE}"
+ sed -i -e "/^perl_archlibexp/s:${LIBPNA}:${STAGING_LIBDIR}:g" \
+ ${B}/src/Makefile.global
+ sed -i -e "/^perl_privlibexp/s:${LIBPNA}:${STAGING_LIBDIR}:g" \
+ ${B}/src/Makefile.global
+ # remove the rpath, replace with correct lib path
+ sed -i \
+ -e "/^perl_embed_ldflags/s:-Wl,-rpath,${LIBNA}::g" \
+ -e "/^perl_embed_ldflags/s:-Wl,-rpath,${BLIBNA}::g" \
+ -e "/^perl_embed_ldflags/s:-Wl,-rpath-link,${LIBNA}::g" \
+ -e "/^perl_embed_ldflags/s:-Wl,-rpath-link,${BLIBNA}::g" \
+ -e "/^perl_embed_ldflags/s:${LIBPNA}:${STAGING_LIBDIR}:g" \
+ -e "/^perl_embed_ldflags/s:${LIBNA}:${STAGING_LIBDIR}:g" \
+ -e "/^perl_embed_ldflags/s:${BLIBNA}:${STAGING_BASELIBDIR}:g" \
+ -e "/^TCLSH/s:=.*:= ${bindir}/tclsh:g" \
+ ${B}/src/Makefile.global
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'perl', 'true', 'false', d)}; then
+ # workaround perl package's libperl.so problem
+ # we are using perlnative so this perl should have same version
+ perl_version=`perl -v 2>/dev/null | \
+ sed -n 's/This is perl.*v[a-z ]*\([0-9]\.[0-9][0-9.]*\).*$/\1/p'`
+ if [ ! -h "${STAGING_LIBDIR}/perl/$perl_version/CORE/libperl.so" -a \
+ ! -h "${STAGING_LIBDIR}/libperl.so" ]; then
+ ln -sf ../../../libperl.so.5 \
+ ${STAGING_LIBDIR}/perl/$perl_version/CORE/libperl.so
+ fi
+ fi
+}
+
+do_compile_append() {
+ oe_runmake -C contrib all
+}
+
+# server needs to configure user and group
+usernum = "28"
+groupnum = "28"
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "-M -g postgres -o -r -d ${localstatedir}/lib/${BPN} \
+ -s /bin/bash -c 'PostgreSQL Server' -u ${usernum} postgres"
+GROUPADD_PARAM_${PN} = "-g ${groupnum} -o -r postgres"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME = "${BPN}-server"
+INITSCRIPT_PARAMS = "start 64 . stop 36 0 1 2 3 4 5 6 ."
+
+do_install_append() {
+ # install contrib
+ oe_runmake DESTDIR=${D} -C contrib install
+ # install tutorial
+ install -d -m 0755 ${D}${libdir}/${BPN}/tutorial
+ install ${B}/src/tutorial/* ${D}${libdir}/${BPN}/tutorial
+
+ # install COPYRIGHT README HISTORY
+ install -d -m 0755 ${D}${docdir}/${BPN}
+ for i in ${B}/COPYRIGHT ${B}/README ${B}/HISTORY ${B}/doc/KNOWN_BUGS ${B}/doc/MISSING_FEATURES ${B}/doc/README* ${B}/doc/bug.template; do
+ [ -f $i ] && install $i ${D}${docdir}/${BPN}
+ done
+
+ # install dirs and server init
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/${BPN}.init ${D}${sysconfdir}/init.d/${BPN}-server
+ sed -i -e "s/^PGVERSION=.*$/PGVERSION=${PV}/g" ${D}${sysconfdir}/init.d/${BPN}-server
+ install -m 0755 ${WORKDIR}/${BPN}-setup ${D}${bindir}/${BPN}-setup
+ install -d -m 700 ${D}${localstatedir}/lib/${BPN}/data
+ install -d -m 700 ${D}${localstatedir}/lib/${BPN}/backups
+ install -m 644 ${WORKDIR}/${BPN}-bashprofile ${D}${localstatedir}/lib/${BPN}/.bash_profile
+ chown -R postgres:postgres ${D}${localstatedir}/lib/${BPN}
+ # multiple server config directory
+ install -d -m 700 ${D}${sysconfdir}/default/${BPN}
+
+ if [ "${@d.getVar('enable_pam')}" = "pam" ]; then
+ install -d ${D}${sysconfdir}/pam.d
+ install -m 644 ${WORKDIR}/postgresql.pam ${D}${sysconfdir}/pam.d/postgresql
+ fi
+
+ # Install systemd unit files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/postgresql.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@BINDIR@,${bindir},g' \
+ ${D}${systemd_unitdir}/system/postgresql.service
+}
+
+SSTATE_SCAN_FILES += "Makefile.global"
+
+PACKAGES =+ "${PN}-client ${PN}-server-dev ${PN}-timezone \
+ libecpg-compat-dbg libecpg-compat libecpg-compat-dev \
+ libecpg-dbg libecpg libecpg-dev libecpg-staticdev libecpg-doc \
+ libpq-dbg libpq libpq-dev libpq-staticdev \
+ libpgtypes-dbg libpgtypes libpgtypes-staticdev libpgtypes-dev \
+ ${PN}-contrib ${PN}-contrib-dbg \
+"
+
+FILES_${PN} += "${sysconfdir}/init.d/${BPN}-server \
+ ${localstatedir}/lib/${BPN}/data ${localstatedir}/lib/${BPN}/backups \
+ ${localstatedir}/lib/${BPN}/.bash_profile ${sysconfdir}/default/${BPN} \
+ ${libdir}/${BPN}/dict_snowball.so ${libdir}/${BPN}/plpgsql.so \
+ ${libdir}/${BPN}/euc2004_sjis2004.so \
+ ${libdir}/${BPN}/libpqwalreceiver.so \
+ ${libdir}/${BPN}/*_and_*.so \
+ ${@'${sysconfdir}/pam.d/postgresql' \
+ if 'pam' == d.getVar('enable_pam') \
+ else ''} \
+"
+
+FILES_${PN}-dbg += " ${libdir}/${BPN}/.debug/dict_snowball.so \
+ ${libdir}/${BPN}/.debug/plpgsql.so \
+ ${libdir}/${BPN}/.debug/euc2004_sjis2004.so \
+ ${libdir}/${BPN}/.debug/libpqwalreceiver.so \
+ ${libdir}/${BPN}/.debug/*_and_*.so \
+"
+
+FILES_${PN}-client = "${bindir}/clusterdb \
+ ${bindir}/createdb \
+ ${bindir}/createlang \
+ ${bindir}/createuser \
+ ${bindir}/dropdb \
+ ${bindir}/droplang \
+ ${bindir}/dropuser \
+ ${bindir}/pg_dump \
+ ${bindir}/pg_dumpall \
+ ${bindir}/pg_restore \
+ ${bindir}/psql \
+ ${bindir}/reindexdb \
+ ${bindir}/vacuumdb \
+ ${bindir}/vacuumlo \
+ ${datadir}/${BPN}/psqlrc.sample \
+"
+FILES_${PN}-client-doc = "${mandir}/man1/clusterdb.* \
+ ${mandir}/man1/createdb.* ${mandir}/man1/createlang.* \
+ ${mandir}/man1/createuser.* ${mandir}/man1/dropdb.* \
+ ${mandir}/man1/droplang.* ${mandir}/man1/dropuser.* \
+ ${mandir}/man1/pg_dump.* ${mandir}/man1/pg_dumpall.* \
+ ${mandir}/man1/pg_restore.* ${mandir}/man1/psql.* \
+ ${mandir}/man1/reindexdb.* ${mandir}/man1/vacuumdb.* \
+ ${mandir}/man7/* \
+"
+FILES_${PN}-doc += "${docdir}/${BPN}/html ${libdir}/${BPN}/tutorial/ \
+ ${mandir}/man1/initdb.* ${mandir}/man1/pg_controldata.* \
+ ${mandir}/man1/pg_ctl.* ${mandir}/man1/pg_resetxlog.* \
+ ${mandir}/man1/postgres.* ${mandir}/man1/postmaster.* \
+"
+FILES_${PN}-timezone = "${datadir}/${BPN}/timezone \
+ ${datadir}/${BPN}/timezonesets \
+"
+RDEPENDS_${PN} += "${PN}-timezone"
+FILES_${PN}-server-dev = "${includedir}/${BPN}/server"
+
+FILES_libecpg = "${libdir}/libecpg*${SOLIBS}"
+FILES_libecpg-dbg = "${libdir}/.debug/libecpg*"
+FILES_libecpg-dev = "${libdir}/libecpg*${SOLIBSDEV} \
+ ${libdir}/libpgtypes*${SOLIBSDEV} \
+ ${includedir}/ecpg*.h ${includedir}/${BPN}/ecpg*.h \
+ ${includedir}/pgtypes*.h ${includedir}/${BPN}/informix \
+ ${includedir}/sql3types.h ${includedir}/sqlca.h \
+"
+FILES_libecpg-doc = "${mandir}/man1/ecpg.*"
+FILES_libecpg-staticdev = "${libdir}/libecpg*.a"
+SECTION_libecpg-staticdev = "devel"
+RDEPENDS_libecpg-staticdev = "libecpg-dev (= ${EXTENDPKGV})"
+
+FILES_libpq = "${libdir}/libpq*${SOLIBS}"
+FILES_libpq-dbg = "${libdir}/.debug/libpq* ${libdir}/${BPN}/pgxs/src/test/regress/.debug/*"
+FILES_libpq-dev = "${libdir}/libpq*${SOLIBSDEV} \
+ ${includedir} \
+"
+FILES_libpq-staticdev = "${libdir}/libpq*.a ${libdir}/libpgport.a"
+SECTION_libpq-staticdev = "devel"
+RDEPENDS_libpq-staticdev = "libpq-dev (= ${EXTENDPKGV})"
+
+FILES_libecpg-compat = "${libdir}/libecpg_compat*${SOLIBS}"
+FILES_libecpg-compat-dbg = "${libdir}/.debug/libecpg_compat*"
+FILES_libecpg-compat-dev = "${libdir}/libecpg_compat*${SOLIBS}"
+FILES_libpgtypes = "${libdir}/libpgtypes*${SOLIBS}"
+FILES_libpgtypes-dbg = "${libdir}/.debug/libpgtypes*"
+FILES_libpgtypes-staticdev = "${libdir}/libpgtypes*.a"
+FILES_libpgtypes-dev = "${libdir}/libpgtypes*${SOLIBS} ${includedir}/pgtypes*.h"
+
+FILES_${PN}-contrib = " ${bindir}/oid2name ${bindir}/pg_standby \
+ ${bindir}/pgbench ${bindir}/vacuumlo \
+ ${S}/contrib/spi/*.example \
+ ${libdir}/${BPN}/_int.so ${libdir}/${BPN}/adminpack.so \
+ ${libdir}/${BPN}/autoinc.so ${libdir}/${BPN}/auto_explain.so \
+ ${libdir}/${BPN}/auth_delay.so ${libdir}/${BPN}/btree_gin.so \
+ ${libdir}/${BPN}/btree_gist.so ${libdir}/${BPN}/.so \
+ ${libdir}/${BPN}/chkpass.so ${libdir}/${BPN}/citext.so \
+ ${libdir}/${BPN}/cube.so ${libdir}/${BPN}/dblink.so \
+ ${libdir}/${BPN}/dict_int.so ${libdir}/${BPN}/dict_xsyn.so \
+ ${libdir}/${BPN}/dummy_seclabel.so ${libdir}/${BPN}/earthdistance.so \
+ ${libdir}/${BPN}/file_fdw.so ${libdir}/${BPN}/fuzzystrmatch.so \
+ ${libdir}/${BPN}/hstore.so ${libdir}/${BPN}/insert_username.so \
+ ${libdir}/${BPN}/isn.so ${libdir}/${BPN}/lo.so \
+ ${libdir}/${BPN}/ltree.so ${libdir}/${BPN}/moddatetime.so \
+ ${libdir}/${BPN}/pageinspect.so ${libdir}/${BPN}/pg_buffercache.so \
+ ${libdir}/${BPN}/pg_freespacemap.so ${libdir}/${BPN}/pg_trgm.so \
+ ${libdir}/${BPN}/pgcrypto.so ${libdir}/${BPN}/pgrowlocks.so \
+ ${libdir}/${BPN}/pgstattuple.so ${libdir}/${BPN}/pg_stat_statements.so \
+ ${libdir}/${BPN}/refint.so ${libdir}/${BPN}/seg.so \
+ ${libdir}/${BPN}/sslinfo.so \
+ ${libdir}/${BPN}/tablefunc.so \
+ ${libdir}/${BPN}/test_parser.so ${libdir}/${BPN}/timetravel.so \
+ ${libdir}/${BPN}/tsearch2.so ${libdir}/${BPN}/uuid-ossp.so \
+ ${libdir}/${BPN}/pgxml.so ${libdir}/${BPN}/passwordcheck.so \
+ ${libdir}/${BPN}/pg_upgrade_support.so ${libdir}/${BPN}/.so \
+ ${libdir}/${BPN}/unaccent.so \
+"
+FILES_${PN}-contrib-dbg = " \
+ ${libdir}/${BPN}/.debug/_int.so ${libdir}/${BPN}/.debug/adminpack.so \
+ ${libdir}/${BPN}/.debug/autoinc.so ${libdir}/${BPN}/.debug/auto_explain.so \
+ ${libdir}/${BPN}/.debug/auth_delay.so ${libdir}/${BPN}/.debug/btree_gin.so \
+ ${libdir}/${BPN}/.debug/btree_gist.so ${libdir}/${BPN}/.debug/.so \
+ ${libdir}/${BPN}/.debug/chkpass.so ${libdir}/${BPN}/.debug/citext.so \
+ ${libdir}/${BPN}/.debug/cube.so ${libdir}/${BPN}/.debug/dblink.so \
+ ${libdir}/${BPN}/.debug/dict_int.so ${libdir}/${BPN}/.debug/dict_xsyn.so \
+ ${libdir}/${BPN}/.debug/dummy_seclabel.so \
+ ${libdir}/${BPN}/.debug/earthdistance.so \
+ ${libdir}/${BPN}/.debug/file_fdw.so ${libdir}/${BPN}/.debug/fuzzystrmatch.so \
+ ${libdir}/${BPN}/.debug/hstore.so ${libdir}/${BPN}/.debug/insert_username.so \
+ ${libdir}/${BPN}/.debug/isn.so ${libdir}/${BPN}/.debug/lo.so \
+ ${libdir}/${BPN}/.debug/ltree.so ${libdir}/${BPN}/.debug/moddatetime.so \
+ ${libdir}/${BPN}/.debug/pageinspect.so \
+ ${libdir}/${BPN}/.debug/pg_buffercache.so \
+ ${libdir}/${BPN}/.debug/pg_freespacemap.so \
+ ${libdir}/${BPN}/.debug/pg_trgm.so \
+ ${libdir}/${BPN}/.debug/pgcrypto.so ${libdir}/${BPN}/.debug/pgrowlocks.so \
+ ${libdir}/${BPN}/.debug/pgstattuple.so \
+ ${libdir}/${BPN}/.debug/pg_stat_statements.so \
+ ${libdir}/${BPN}/.debug/refint.so ${libdir}/${BPN}/.debug/seg.so \
+ ${libdir}/${BPN}/.debug/sslinfo.so \
+ ${libdir}/${BPN}/.debug/tablefunc.so \
+ ${libdir}/${BPN}/.debug/test_parser.so ${libdir}/${BPN}/.debug/timetravel.so \
+ ${libdir}/${BPN}/.debug/tsearch2.so ${libdir}/${BPN}/.debug/uuid-ossp.so \
+ ${libdir}/${BPN}/.debug/pgxml.so ${libdir}/${BPN}/.debug/passwordcheck.so \
+ ${libdir}/${BPN}/.debug/pg_upgrade_support.so \
+ ${libdir}/${BPN}/.debug/unaccent.so \
+"
+DESCRIPTION_${PN}-contrib = "The postgresql-contrib package contains \
+ contributed packages that are included in the PostgreSQL distribution."
+
+FILES_${PN}-pltcl = "${libdir}/${BPN}/pltcl.so ${bindir}/pltcl_delmod \
+ ${binddir}/pltcl_listmod ${bindir}/pltcl_loadmod \
+ ${datadir}/${BPN}/unknown.pltcl"
+FILES_${PN}-pltcl-dbg = "${libdir}/${BPN}/.debug/pltcl.so"
+SUMMARY_${PN}-pltcl = "The Tcl procedural language for PostgreSQL"
+DESCRIPTION_${PN}-pltcl = "PostgreSQL is an advanced Object-Relational \
+ database management system. The postgresql-pltcl package contains the PL/Tcl \
+ procedural language for the backend."
+
+FILES_${PN}-plperl = "${libdir}/${BPN}/plperl.so"
+FILES_${PN}-plperl-dbg = "${libdir}/${BPN}/.debug/plperl.so"
+SUMMARY_${PN}-plperl = "The Perl procedural language for PostgreSQL"
+DESCRIPTION_${PN}-plperl = "PostgreSQL is an advanced Object-Relational \
+ database management system. The postgresql-plperl package contains the \
+ PL/Perl procedural language for the backend."
+
+# In version 8, it will be plpython.so
+# In version 9, it might be plpython{2,3}.so depending on python2 or 3
+FILES_${PN}-plpython = "${libdir}/${BPN}/plpython*.so"
+FILES_${PN}-plpython-dbg = "${libdir}/${BPN}/.debug/plpython*.so"
+SUMMARY_${PN}-plpython = "The Python procedural language for PostgreSQL"
+DESCRIPTION_${PN}-plpython = "PostgreSQL is an advanced Object-Relational \
+ database management system. The postgresql-plpython package contains \
+ the PL/Python procedural language for the backend."
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_9.4.17.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_9.4.17.bb
new file mode 100644
index 000000000..061184a6f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_9.4.17.bb
@@ -0,0 +1,14 @@
+require postgresql.inc
+
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=6dc95e63aa4d72502ff8193dfe2ddd38"
+
+SRC_URI += "\
+ file://not-check-libperl.patch \
+"
+
+do_compile_prepend_libc-musl() {
+ sed -i -e 's/\-lnsl//g' ${B}/src/Makefile.global
+}
+
+SRC_URI[md5sum] = "0a08f4078f5e4a54e764f63ad38a6de3"
+SRC_URI[sha256sum] = "7a320cd335052b840d209dc9688f09965763351c590e3cc7bf577591179fd7c6"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-donot-use-the-hardcode-libdir.patch b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-donot-use-the-hardcode-libdir.patch
new file mode 100644
index 000000000..7eda03875
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-donot-use-the-hardcode-libdir.patch
@@ -0,0 +1,26 @@
+[PATCH] do not use the hardcode libdir
+
+Upstream-status: Pending
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9b88d4c..df5ad7a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -140,7 +140,7 @@ if test "$with_libpq" != yes; then
+ if test -d "$with_libpq"; then
+ PATH="$PATH:$with_libpq/bin"
+ CPPFLAGS="$CPPFLAGS -I$with_libpq/include"
+- LDFLAGS="$LDFLAGS -L$with_libpq/lib"
++ LDFLAGS="$LDFLAGS -L$with_libpq/${base_libdir}"
+ else
+ if test -x "$with_libpq"; then
+ PG_CONFIG=$with_libpq
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-fix-for-ptest-support.patch b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-fix-for-ptest-support.patch
new file mode 100644
index 000000000..a8f14e768
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-fix-for-ptest-support.patch
@@ -0,0 +1,148 @@
+Subject: [PATCH] psqlodbc: fixes for ptest support
+
+* Fix the LIBODBC since we don't use ODBC_CONFIG.
+* Fix the path for driver.
+* Add the default info of postgresql server.
+* Fix the output format for ptest.
+* Fix the results and exe dir.
+
+Upstream-Status: Inappropriate [OE ptest specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ test/Makefile.in | 2 +-
+ test/odbcini-gen.sh | 8 ++++----
+ test/runsuite.c | 26 +++++++++++++-------------
+ 3 files changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/test/Makefile.in b/test/Makefile.in
+index 8710616..fcb470e 100644
+--- a/test/Makefile.in
++++ b/test/Makefile.in
+@@ -18,7 +18,7 @@ CFLAGS = @CFLAGS@
+ ODBC_CONFIG = @ODBC_CONFIG@
+ PROVE = @PROVE@
+
+-LIBODBC := $(shell $(ODBC_CONFIG) --libs)
++LIBODBC = -lodbc
+
+ all: $(TESTBINS) runsuite reset-db
+
+diff --git a/test/odbcini-gen.sh b/test/odbcini-gen.sh
+index d2c2c87..6068d9d 100755
+--- a/test/odbcini-gen.sh
++++ b/test/odbcini-gen.sh
+@@ -6,7 +6,7 @@
+ outini=odbc.ini
+ outinstini=odbcinst.ini
+
+-drvr=../.libs/psqlodbcw
++drvr=@LIBDIR@/psqlodbca
+ driver=${drvr}.so
+ if test ! -e $driver ; then
+ driver=${drvr}.dll
+@@ -33,10 +33,10 @@ Driver = psqlodbc test driver
+ Trace = No
+ TraceFile =
+ Database = contrib_regression
+-Servername =
+-Username =
++Servername = localhost
++Username = postgres
+ Password =
+-Port =
++Port = 5432
+ ReadOnly = No
+ RowVersioning = No
+ ShowSystemTables = No
+diff --git a/test/runsuite.c b/test/runsuite.c
+index 583cf35..fd2a90e 100644
+--- a/test/runsuite.c
++++ b/test/runsuite.c
+@@ -51,7 +51,7 @@ bailout(const char *fmt, ...)
+
+ /* Given a test program's name, get the test name */
+ void
+-parse_argument(const char *in, char *testname, char *binname)
++parse_argument(const char *in, char *testname, char *binname, const char *inputdir)
+ {
+ const char *basename;
+ #ifdef WIN32
+@@ -65,7 +65,7 @@ parse_argument(const char *in, char *testname, char *binname)
+ if (strchr(in, DIR_SEP) == NULL)
+ {
+ strcpy(testname, in);
+- sprintf(binname, "exe%c%s-test", DIR_SEP, in);
++ sprintf(binname, "%s%cexe%c%s-test", inputdir, DIR_SEP, DIR_SEP, in);
+ return;
+ }
+
+@@ -127,7 +127,7 @@ int main(int argc, char **argv)
+ failures = 0;
+ for (i = 1, j = 1; i <= numtests; i++, j++)
+ {
+- parse_argument(argv[j], testname, binname);
++ parse_argument(argv[j], testname, binname, inputdir);
+ if (runtest(binname, testname, i, inputdir) != 0)
+ failures++;
+ }
+@@ -157,29 +157,29 @@ runtest(const char *binname, const char *testname, int testno, const char *input
+ #ifndef WIN32
+ snprintf(cmdline, sizeof(cmdline),
+ "ODBCSYSINI=. ODBCINSTINI=./odbcinst.ini ODBCINI=./odbc.ini "
+- "%s > results/%s.out",
+- binname, testname);
++ "%s > %s/results/%s.out",
++ binname, inputdir, testname);
+ #else
+ snprintf(cmdline, sizeof(cmdline),
+- "%s > results\\%s.out",
+- binname, testname);
++ "%s > %s/results\\%s.out",
++ binname, inputdir, testname);
+ #endif
+ rc = system(cmdline);
+
+ diff = rundiff(testname, inputdir);
+ if (rc != 0)
+ {
+- printf("not ok %d - %s test returned %d\n", testno, testname, rc);
++ printf("FAIL: %d - %s\n\ttest returned %d\n", testno, testname, rc);
+ ret = 1;
+ }
+ else if (diff != 0)
+ {
+- printf("not ok %d - %s test output differs\n", testno, testname);
++ printf("FAIL: %d - %s\n\ttest output differs\n", testno, testname);
+ ret = 1;
+ }
+ else
+ {
+- printf("ok %d - %s\n", testno, testname);
++ printf("PASS: %d - %s\n", testno, testname);
+ ret = 0;
+ }
+ fflush(stdout);
+@@ -196,7 +196,7 @@ rundiff(const char *testname, const char *inputdir)
+ char *result;
+ size_t result_len;
+
+- snprintf(filename, sizeof(filename), "results/%s.out", testname);
++ snprintf(filename, sizeof(filename), "%s/results/%s.out", inputdir, testname);
+ result = slurpfile(filename, &result_len);
+
+ outputno = 0;
+@@ -244,8 +244,8 @@ rundiff(const char *testname, const char *inputdir)
+ * files and print the smallest diff?
+ */
+ snprintf(cmdline, sizeof(cmdline),
+- "diff -c %s/expected/%s.out results/%s.out >> regression.diffs",
+- inputdir, testname, testname);
++ "diff -c %s/expected/%s.out %s/results/%s.out >> regression.diffs",
++ inputdir, testname, inputdir, testname);
+ if (system(cmdline) == -1)
+ printf("# diff failed\n");
+
+--
+2.8.2
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-remove-some-checks-for-cross-compiling.patch b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-remove-some-checks-for-cross-compiling.patch
new file mode 100644
index 000000000..1d988182e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/psqlodbc-remove-some-checks-for-cross-compiling.patch
@@ -0,0 +1,118 @@
+Subject: [PATCH] remove some checks for cross-compiling
+
+some lib check is not suitable for
+cross-compiling, so remove them.
+
+Upstream-Status: Inappropriate [not a real bug,just for cross-compiling]
+
+Signed-off-by: Song.Li <Song.Li@windriver.com>
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac | 66 +++++++-----------------------------------------------------
+ 1 file changed, 7 insertions(+), 59 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index df5ad7a..b72bd4c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -46,57 +46,19 @@ AC_ARG_WITH(iodbc, [ --with-iodbc[[=DIR]] [[default=no]] DIR is the iODBC bas
+ if test "$with_iodbc" != no; then
+ with_unixodbc=no
+ AC_DEFINE(WITH_IODBC, 1, [Define to 1 to build with iODBC support])
+- if test "$with_iodbc" = yes; then
+- AC_PATH_PROGS(ODBC_CONFIG, iodbc-config)
+- else
+- ODBC_CONFIG=$with_iodbc
+- fi
+- if test ! -x "${ODBC_CONFIG}/bin/iodbc-config"; then
+- if test ! -x "${ODBC_CONFIG}"; then
+- AC_MSG_ERROR([iodbc-config not found (required for iODBC build)])
+- fi
+- else
+- ODBC_CONFIG=${ODBC_CONFIG}/bin/iodbc-config
+- fi
+ fi
+
+ if test "$with_unixodbc" != no; then
+ AC_DEFINE(WITH_UNIXODBC, 1,
+ [Define to 1 to build with unixODBC support])
+- if test "$with_unixodbc" = yes; then
+- AC_PATH_PROGS(ODBC_CONFIG, odbc_config)
+- else
+- ODBC_CONFIG=$with_unixodbc
+- fi
+- if test ! -x "${ODBC_CONFIG}/bin/odbc_config"; then
+- if test ! -x "${ODBC_CONFIG}"; then
+- AC_MSG_ERROR([odbc_config not found (required for unixODBC build)])
+- fi
+- else
+- ODBC_CONFIG=${ODBC_CONFIG}/bin/odbc_config
+- fi
+ fi
+
+ #
+ # ODBC include and library
+ #
+-
+-if test "$ODBC_CONFIG" != ""; then
+- if test "$with_iodbc" != no; then
+- ODBC_INCLUDE=`${ODBC_CONFIG} --cflags`
+- CPPFLAGS="$CPPFLAGS ${ODBC_INCLUDE}"
+- # Linking libiodoc is rather problematic
+- [ODBC_LIBDIR=`${ODBC_CONFIG} --libs | sed -e "s/^\(-L\|.*[ \t]-L\)\([^ \n\r\f\t]*\).*$/-L\2/"`]
+- LDFLAGS="$LDFLAGS ${ODBC_LIBDIR}"
+- else
+- ODBC_INCLUDE=`${ODBC_CONFIG} --include-prefix`
+- CPPFLAGS="$CPPFLAGS -I${ODBC_INCLUDE}"
+- # Linking libodoc is rather problematic
+- ODBC_LIBDIR=`${ODBC_CONFIG} --lib-prefix`
+- LDFLAGS="$LDFLAGS -L${ODBC_LIBDIR}"
+- fi
+- AC_MSG_NOTICE([using $ODBC_INCLUDE $ODBC_LIBDIR])
+-fi
++ODBC_LIBS="-lodbcinst"
++LIBS="$LIBS ${ODBC_LIBS}"
++AC_MSG_NOTICE([using $ODBC_INCLUDE $ODBC_LIBS])
+
+ #
+ # SQLCOLATTRIBUTE_SQLLEN check
+@@ -176,18 +138,10 @@ PGAC_ARG_BOOL(enable, pthreads, yes,
+ # Find libpq headers and libraries
+ #
+
+-if test -z "$PG_CONFIG"; then
+- AC_PATH_PROGS(PG_CONFIG, pg_config)
+-fi
+-
+-if test -n "$PG_CONFIG"; then
+- pg_includedir=`"$PG_CONFIG" --includedir`
+- pg_libdir=`"$PG_CONFIG" --libdir`
+- CPPFLAGS="$CPPFLAGS -I$pg_includedir"
+- LDFLAGS="$LDFLAGS -L$pg_libdir"
+-fi
+-
+-
++pg_includedir=""
++pg_libdir=""
++CPPFLAGS="$CPPFLAGS"
++LDFLAGS="$LDFLAGS"
+
+ # 1. Programs
+
+@@ -211,12 +165,6 @@ if test "$with_iodbc" != no; then
+ [AC_MSG_ERROR([iODBC library "iodbcinst" not found])])
+ fi
+
+-if test "$enable_pthreads" = yes; then
+- AC_CHECK_LIB(pthreads, pthread_create,
+- [],
+- [AC_CHECK_LIB(pthread, pthread_create)])
+-fi
+-
+ AC_CHECK_LIB(pq, PQsetSingleRowMode, [],
+ [AC_MSG_ERROR([libpq library version >= 9.2 is required])])
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/run-ptest b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/run-ptest
new file mode 100644
index 000000000..6b41c6369
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/files/run-ptest
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+BASEDIR="$(dirname $(readlink -f $0))"
+
+# init and start postgresql server for testing
+PGDATA="/var/lib/postgresql/data"
+if [ -f "${PGDATA}/PG_VERSION" ]; then
+ echo "Data directory is not empty! Skip initdb."
+else
+ echo "Initializing database: "
+ chown -R postgres:postgres ${PGDATA}
+ su -l postgres -c "/usr/bin/initdb --pgdata='$PGDATA'"
+fi
+
+SYSV_INIT="/etc/init.d/postgresql-server"
+if [ -e ${SYSV_INIT} ]; then
+ RESTART_POSTGRESQL="${SYSV_INIT} restart"
+ STOP_POSTGRESQL="${SYSV_INIT} stop"
+else
+ RESTART_POSTGRESQL="systemctl restart postgresql"
+ STOP_POSTGRESQL="systemctl stop postgresql"
+fi
+
+${RESTART_POSTGRESQL} || echo "Failed to restart postgresql, skip the tests."
+
+if [ ! -d ${BASEDIR}/results ]; then
+ mkdir ${BASEDIR}/results
+fi
+
+# Generate odbc config files and reset db
+${BASEDIR}/odbcini-gen.sh || echo "FAIL: Generate odbc config files"
+ODBCSYSINI=. ODBCINSTINI=./odbcinst.ini ODBCINI=./odbc.ini \
+ ${BASEDIR}/reset-db < ${BASEDIR}/sampletables.sql \
+ || echo "FAIL: reset db with sample tables"
+
+# Run the actual tests
+TESTS=
+for i in `ls ${BASEDIR}/exe/*-test`; do
+ TESTS="$TESTS $(basename ${i%-test})"
+done
+
+${BASEDIR}/runsuite ${TESTS} --inputdir=${BASEDIR}
+
+# Cleanup
+${STOP_POSTGRESQL}
+rm -f regression.diffs odbcinst.ini odbc.ini
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc.inc b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc.inc
new file mode 100644
index 000000000..5337b4569
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc.inc
@@ -0,0 +1,50 @@
+SUMMARY = "ODBC driver for PostgreSQL"
+DESCRIPTION = "\
+ This package provides a driver that allows ODBC-enabled applications to \
+ access PostgreSQL databases. ODBC is an abstraction layer that allows \
+ applications written for that layer to access databases in a manner \
+ that is relatively independent of the particular database management \
+ system. \
+ . \
+ You need to install this package if you want to use an application that \
+ provides database access through ODBC and you want that application to \
+ access a PostgreSQL database. This package would need to be installed \
+ on the same machine as that client application; the PostgreSQL database \
+ server can be on a different machine and does not need any additional \
+ software to accept ODBC clients. \
+"
+SECTION = "libs"
+HOMEPAGE = "http://psqlodbc.projects.postgresql.org/"
+
+DEPENDS += "postgresql unixodbc"
+
+EXTRA_OECONF = "\
+ ac_cv_lib_ltdl_lt_dlopen=no \
+ ac_cv_lib_pq_PQconnectdb=yes \
+ --with-unixodbc=yes \
+ --with-libpq=${STAGING_LIBDIR}/.. \
+ --enable-pthreads \
+ --disable-unicode \
+ LIBS="-lpthread" \
+"
+
+inherit autotools pkgconfig ptest
+
+do_compile_ptest() {
+ oe_runmake -C ${B}/test
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ cp -a --no-preserve=ownership ${B}/test/exe ${S}/test/expected ${D}${PTEST_PATH}
+ install -m 0755 ${B}/test/reset-db ${D}${PTEST_PATH}
+ install -m 0755 ${B}/test/runsuite ${D}${PTEST_PATH}
+ install -m 0755 ${S}/test/odbcini-gen.sh ${D}${PTEST_PATH}
+ install -m 0755 ${S}/test/sampletables.sql ${D}${PTEST_PATH}
+ sed -i -e 's|@LIBDIR@|${libdir}|' ${D}${PTEST_PATH}/odbcini-gen.sh
+}
+
+FILES_${PN} += "${libdir}"
+
+# The tests need a local PostgreSQL server running
+RDEPENDS_${PN}-ptest = "postgresql"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_09.05.0300.bb b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_09.05.0300.bb
new file mode 100644
index 000000000..6e1c8ab4a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_09.05.0300.bb
@@ -0,0 +1,14 @@
+require ${PN}.inc
+
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://license.txt;md5=6db3822fc7512e83087ba798da013692"
+
+SRC_URI = "http://ftp.postgresql.org/pub/odbc/versions/src/${BPN}-${PV}.tar.gz \
+ file://psqlodbc-remove-some-checks-for-cross-compiling.patch \
+ file://psqlodbc-donot-use-the-hardcode-libdir.patch \
+ file://psqlodbc-fix-for-ptest-support.patch \
+ file://run-ptest \
+"
+
+SRC_URI[md5sum] = "4c6e0b22187d7bb1c998ffac89e50f6b"
+SRC_URI[sha256sum] = "9521f328bf28aaaf5c8488dc89792b614f9d6271742c0baf9bb41c97537764a8"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
new file mode 100644
index 000000000..1e6cbae38
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
@@ -0,0 +1,32 @@
+SUMMARY = "RocksDB an embeddable, persistent key-value store"
+DESCRIPTION = "RocksDB is library that provides an embeddable, persistent key-value store for fast storage."
+HOMEPAGE = "http://rocksdb.org/"
+LICENSE = "(Apache-2.0 | GPL-2.0) & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.Apache;md5=3b83ef96387f14655fc854ddc3c6bd57 \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LICENSE.leveldb;md5=fb04ff57a14f308f2eed4a9b87d45837"
+
+SRCREV = "8969445642039566214d650cc6614849e7dd5e17"
+SRCBRANCH = "5.12.fb"
+PV = "5.12.2"
+
+SRC_URI = "git://github.com/facebook/${BPN}.git;branch=${SRCBRANCH}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGECONFIG ??= "bzip2 zlib lz4"
+PACKAGECONFIG[bzip2] = "-DWITH_BZ2=ON,-DWITH_BZ2=OFF,bzip2"
+PACKAGECONFIG[lz4] = "-DWITH_LZ4=ON,-DWITH_LZ4=OFF,lz4"
+PACKAGECONFIG[zlib] = "-DWITH_ZLIB=ON,-DWITH_ZLIB=OFF,zlib"
+PACKAGECONFIG[lite] = "-DROCKSDB_LITE=ON,-DROCKSDB_LITE=OFF"
+
+# Tools and tests currently don't compile on armv5 so we disable them
+EXTRA_OECMAKE = "\
+ -DPORTABLE=ON \
+ -DWITH_TESTS=OFF \
+ -DWITH_TOOLS=OFF \
+"
+
+FILES_${PN}-dev += "${libdir}/cmake"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/soci/soci/soci_libdir.patch b/meta-openembedded/meta-oe/recipes-dbs/soci/soci/soci_libdir.patch
new file mode 100644
index 000000000..00a1a5c86
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/soci/soci/soci_libdir.patch
@@ -0,0 +1,28 @@
+Define SOCI_LIBDIR only if its not passed via environemnt. In OE we
+want to set it per our choice since we use 'lib' for 64bit unless we
+are using multilib
+
+-Khem
+
+Index: soci-3.2.2/CMakeLists.txt
+===================================================================
+--- soci-3.2.2.orig/CMakeLists.txt
++++ soci-3.2.2/CMakeLists.txt
+@@ -69,11 +69,12 @@ include(SociDependencies)
+ ###############################################################################
+ # Installation
+ ###############################################################################
+-
+-if(APPLE OR CMAKE_SIZEOF_VOID_P EQUAL 4)
+- set(SOCI_LIBDIR "lib")
+-else()
+- set(SOCI_LIBDIR "lib64")
++if(NOT DEFINED SOCI_LIBDIR)
++ if(APPLE OR CMAKE_SIZEOF_VOID_P EQUAL 4)
++ set(SOCI_LIBDIR "lib")
++ else()
++ set(SOCI_LIBDIR "lib")
++ endif()
+ endif()
+
+ set(BINDIR "bin" CACHE PATH "The directory to install binaries into.")
diff --git a/meta-openembedded/meta-oe/recipes-dbs/soci/soci_3.2.3.bb b/meta-openembedded/meta-oe/recipes-dbs/soci/soci_3.2.3.bb
new file mode 100644
index 000000000..3f22d3818
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/soci/soci_3.2.3.bb
@@ -0,0 +1,49 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "The C++ Database Access Library"
+HOMEPAGE = "http://soci.sourceforge.net"
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+SECTION = "libs"
+DEPENDS = "boost"
+
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}/${BP}/${BP}.tar.gz \
+ file://soci_libdir.patch \
+ "
+SRC_URI[md5sum] = "acfbccf176cd20e06833a8037a2d3699"
+SRC_URI[sha256sum] = "2c659db0f4f7b424bbcffe195c03c293a1dbf676189a27b077fb2aab4d53a610"
+
+TESTCONFIG = '-DSOCI_TEST_EMPTY_CONNSTR="dummy" -DSOCI_TEST_SQLITE3_CONNSTR="test.db" \
+ -DSOCI_TEST_POSTGRESQL_CONNSTR:STRING="dbname=soci_test" \
+ -DSOCI_TEST_MYSQL_CONNSTR:STRING="db=soci_test user=oe password=oe"'
+
+OBASEDIR ?= "/opt/oracle"
+OINCDIR = "rdbms/public"
+OLIBDIR = "lib"
+
+PACKAGECONFIG[sqlite3] = "-DSOCI_SQLITE3=ON,-DSOCI_SQLITE3=OFF,sqlite3,"
+PACKAGECONFIG[mysql] = "-DSOCI_MYSQL=ON,-DSOCI_MYSQL=OFF,mariadb,"
+PACKAGECONFIG[postgresql] = "-DSOCI_POSTGRESQL=ON,-DSOCI_POSTGRESQL=OFF,postgresql,"
+PACKAGECONFIG[odbc] = "-DSOCI_ODBC=ON,-DSOCI_ODBC=OFF,,"
+PACKAGECONFIG[empty] = "-DSOCI_EMPTY=ON,-DSOCI_EMPTY=OFF,,"
+PACKAGECONFIG[oracle] = "-DWITH_ORACLE=ON --with-oracle-include=${OINCDIR} --with-oracle-lib=${OLIBDIR},-DWITH_ORACLE=OFF,,"
+PACKAGECONFIG[ptest] = "${TESTCONFIG},,,"
+
+# enable your backend by default we enable 'empty'
+PACKAGECONFIG ??= "empty"
+
+# Take the flags added by PACKAGECONFIG and pass them to cmake.
+EXTRA_OECMAKE = "${EXTRA_OECONF} -DSOCI_LIBDIR=${libdir}"
+DISABLE_STATIC = ""
+
+inherit dos2unix cmake
+
+PACKAGES += "${PN}-sqlite3 ${PN}-mysql ${PN}-postgresql ${PN}-odbc ${PN}-oracle"
+
+FILES_${PN}-sqlite3 = "${libdir}/lib${BPN}_sqlite3.so.*"
+FILES_${PN}-mysql = "${libdir}/lib${BPN}_mysql.so.*"
+FILES_${PN}-postgresql = "${libdir}/lib${BPN}_postgresql.so.*"
+FILES_${PN}-odbc = "${libdir}/lib${BPN}_odbc.so.*"
+FILES_${PN}-oracle = "${libdir}/lib${BPN}_oracle.so.*"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/0001-shell.c-Fix-format-not-a-string-literal-warning.patch b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/0001-shell.c-Fix-format-not-a-string-literal-warning.patch
new file mode 100644
index 000000000..c5d7c0c81
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/0001-shell.c-Fix-format-not-a-string-literal-warning.patch
@@ -0,0 +1,32 @@
+From 443980ddc82fb40e2e1f9544f2be169bd23dd246 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 16:49:24 -0700
+Subject: [PATCH] shell.c: Fix format not a string literal warning
+
+src/shell.c:695:20: error: format not a string literal and no format arguments [-Werror=format-security]
+| fprintf(stderr,zHelp);
+| ^~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/shell.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shell.c b/src/shell.c
+index bb46c49..3c6fe0f 100644
+--- a/src/shell.c
++++ b/src/shell.c
+@@ -692,7 +692,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
+ }else
+
+ if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
+- fprintf(stderr,zHelp);
++ fprintf(stderr, "%s", zHelp);
+ }else
+
+ if( c=='i' && strncmp(azArg[0], "indices", n)==0 && nArg>1 ){
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_build_dynamic.patch b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_build_dynamic.patch
new file mode 100644
index 000000000..914422f1d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_build_dynamic.patch
@@ -0,0 +1,32 @@
+diff -urN sqlite-2.8.17.orig/main.mk sqlite-2.8.17/main.mk
+--- sqlite-2.8.17.orig/main.mk 2005-04-23 22:43:23.000000000 +0000
++++ sqlite-2.8.17/main.mk 2009-04-02 20:10:36.000000000 +0000
+@@ -139,7 +139,7 @@
+ # This is the default Makefile target. The objects listed here
+ # are what get build when you type just "make" with no arguments.
+ #
+-all: sqlite.h config.h libsqlite.a sqlite$(EXE)
++all: sqlite.h config.h libsqlite.so sqlite$(EXE)
+
+ # Generate the file "last_change" which contains the date of change
+ # of the most recently modified source code file
+@@ -148,13 +148,12 @@
+ cat $(SRC) | grep '$$Id: ' | sort +4 | tail -1 \
+ | awk '{print $$5,$$6}' >last_change
+
+-libsqlite.a: $(LIBOBJ)
+- $(AR) libsqlite.a $(LIBOBJ)
+- $(RANLIB) libsqlite.a
+-
+-sqlite$(EXE): $(TOP)/src/shell.c libsqlite.a sqlite.h
+- $(TCCX) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c \
+- libsqlite.a $(LIBREADLINE) $(THREADLIB)
++libsqlite.so: $(LIBOBJ)
++ $(CC) $(LDFLAGS) -shared -o libsqlite.so -Wl,-soname,libsqlite.so.0 $(LIBOBJ)
++
++sqlite$(EXE): $(TOP)/src/shell.c libsqlite.so sqlite.h
++ $(TCCX) $(LDFLAGS) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c \
++ -lsqlite $(LIBREADLINE) $(THREADLIB)
+
+ sqlite_analyzer$(EXE): $(TOP)/src/tclsqlite.c libsqlite.a $(TESTSRC) \
+ $(TOP)/tool/spaceanal.tcl
diff --git a/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_no_tcl.patch b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_no_tcl.patch
new file mode 100644
index 000000000..b84b6486e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/mainmk_no_tcl.patch
@@ -0,0 +1,20 @@
+diff -bur sqlite-2.8.17~orig/main.mk sqlite-2.8.17/main.mk
+--- sqlite-2.8.17~orig/main.mk 2006-02-13 04:09:33.000000000 -0600
++++ sqlite-2.8.17/main.mk 2006-02-13 04:15:42.000000000 -0600
+@@ -58,7 +58,7 @@
+ expr.o func.o hash.o insert.o \
+ main.o opcodes.o os.o pager.o parse.o pragma.o printf.o random.o \
+ select.o table.o tokenize.o trigger.o update.o util.o \
+- vacuum.o vdbe.o vdbeaux.o where.o tclsqlite.o
++ vacuum.o vdbe.o vdbeaux.o where.o
+
+ # All of the source code files.
+ #
+@@ -91,7 +91,6 @@
+ $(TOP)/src/sqlite.h.in \
+ $(TOP)/src/sqliteInt.h \
+ $(TOP)/src/table.c \
+- $(TOP)/src/tclsqlite.c \
+ $(TOP)/src/tokenize.c \
+ $(TOP)/src/trigger.c \
+ $(TOP)/src/update.c \
diff --git a/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/sqlite.pc b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/sqlite.pc
new file mode 100644
index 000000000..6bc742eec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite-2.8.17/sqlite.pc
@@ -0,0 +1,12 @@
+# Package Information for pkg-config
+
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: SQLite
+Description: SQL database engine
+Version: 2.8.17
+Libs: -L${libdir} -lsqlite
+Cflags: -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite_2.8.17.bb b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite_2.8.17.bb
new file mode 100644
index 000000000..501c0e3e7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/sqlite/sqlite_2.8.17.bb
@@ -0,0 +1,61 @@
+SUMMARY = "An Embeddable SQL Database Engine"
+HOMEPAGE = "http://www.sqlite.org/"
+SECTION = "libs"
+DEPENDS = "readline ncurses"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://src/main.c;beginline=1;endline=10;md5=e98469a8efa024a38ad5b2e4b92f4a96"
+
+PR = "r7"
+
+SRC_URI = "http://www.hwaci.com/sw/sqlite/sqlite-${PV}.tar.gz \
+ file://mainmk_build_dynamic.patch \
+ file://mainmk_no_tcl.patch \
+ file://sqlite.pc \
+ file://0001-shell.c-Fix-format-not-a-string-literal-warning.patch \
+ "
+
+SOURCES = "attach.o auth.o btree.o btree_rb.o build.o copy.o date.o delete.o \
+ expr.o func.o hash.o insert.o main.o opcodes.o os.o pager.o \
+ parse.o pragma.o printf.o random.o select.o table.o tokenize.o \
+ trigger.o update.o util.o vacuum.o vdbe.o vdbeaux.o where.o"
+
+inherit autotools pkgconfig
+
+do_configure() {
+ echo "main.mk is patched, no need to configure"
+ # make pkgconfig.bbclass pick this up
+ cp ${WORKDIR}/sqlite.pc ${S}
+}
+
+do_compile() {
+ oe_runmake -f ${S}/Makefile.linux-gcc \
+ TOP="${S}" \
+ BCC="${BUILD_CC}" \
+ TCC="${CC}" \
+ OPTS="-fPIC -D'INTPTR_TYPE=int'" \
+ TCL_FLAGS= LIBTCL= \
+ READLINE_FLAGS="-DHAVE_READLINE=1 -I${STAGING_INCDIR}" \
+ LIBREADLINE="-L. -L${STAGING_LIBDIR} -lreadline -lncurses"
+}
+
+do_install() {
+ install -d ${D}${libdir} ${D}${bindir}
+ install sqlite ${D}${bindir}
+ install -m 0755 libsqlite.so ${D}${libdir}/libsqlite.so.0.8.6
+ ln -sf libsqlite.so.0.8.6 ${D}${libdir}/libsqlite.so
+ ln -sf libsqlite.so.0.8.6 ${D}${libdir}/libsqlite.so.0
+ ln -sf libsqlite.so.0.8.6 ${D}${libdir}/libsqlite.so.0.8
+ install -d ${D}${includedir}
+ install -m 0644 sqlite.h ${D}${includedir}/sqlite.h
+ install -d ${D}${libdir}/pkgconfig
+ install -m 0644 ${S}/sqlite.pc ${D}${libdir}/pkgconfig/sqlite.pc
+}
+
+PACKAGES += "${PN}-bin"
+FILES_${PN}-bin = "${bindir}/*"
+FILES_${PN} = "${libdir}/*.so.*"
+
+SRC_URI[md5sum] = "838dbac20b56d2c4292e98848505a05b"
+SRC_URI[sha256sum] = "3f35ebfb67867fb5b583a03e480f900206af637efe7179b32294a6a0cf806f37"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup
new file mode 100644
index 000000000..f7d997372
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# TODO enable the lines below once we have support for getprop
+# retrieve the product info from Android
+# manufacturer=$(getprop ro.product.manufacturer Android)
+# model=$(getprop ro.product.model Android)
+# serial=$(getprop ro.serialno 0123456789ABCDEF)
+
+manufacturer="$(cat /system/build.prop | grep -o 'ro.product.manufacturer=.*' | cut -d'=' -f 2)"
+model="$(cat /system/build.prop | grep -o 'ro.product.model=.*' | cut -d'=' -f 2)"
+# get the device serial number from /proc/cmdline directly(since we have no getprop on
+# GNU/Linux)
+serial="$(cat /proc/cmdline | sed 's/.*androidboot.serialno=//' | sed 's/ .*//')"
+
+echo $serial > /sys/class/android_usb/android0/iSerial
+echo $manufacturer > /sys/class/android_usb/android0/iManufacturer
+echo $model > /sys/class/android_usb/android0/iProduct
+
+echo "0" > /sys/class/android_usb/android0/enable
+echo "18d1" > /sys/class/android_usbid_usb/android0/idVendor
+echo "D002" > /sys/class/android_usb/android0/idProduct
+echo "adb" > /sys/class/android_usb/android0/functions
+echo "1" > /sys/class/android_usb/android0/enable
+
+sleep 4
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb
new file mode 100644
index 000000000..af98f92f0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Different utilities from Android - corressponding configuration files"
+SECTION = "console/utils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://android-gadget-setup"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/android-gadget-setup ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/.gitignore b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/.gitignore
new file mode 100644
index 000000000..b034c10a1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/.gitignore
@@ -0,0 +1,59 @@
+*
+!.gitignore
+!*.indirectionsymlink
+!*.[ch]
+!*.mk
+!*.patch
+!*.service
+!NOTICE
+!MODULE_LICENSE_*
+!/system/
+!/system/core/
+!/system/core/adb/
+!/system/core/fastboot/
+!/system/core/fs_mgr/
+!/system/core/fs_mgr/include/
+!/system/core/include/
+!/system/core/include/android/
+!/system/core/include/cutils/
+!/system/core/include/log/
+!/system/core/include/mincrypt/
+!/system/core/include/private/
+!/system/core/include/utils/
+!/system/core/include/zipfile/
+!/system/core/liblog/
+!/system/core/liblog/tests/
+!/system/core/libcutils/
+!/system/core/libmincrypt/
+!/system/core/libzipfile/
+!/system/core/libsparse/
+!/system/core/libsparse/include/
+!/system/core/libsparse/include/sparse/
+!/system/core/libsparse/simg_dump.py
+!/system/core/mkbootimg/
+!/system/extras/
+!/system/extras/ext4_utils/
+!/system/extras/ext4_utils/mkuserimg.sh
+!/system/extras/ext4_utils/test_ext4fixup
+!/system/extras/f2fs_utils/
+!/hardware/
+!/hardware/libhardware/
+!/hardware/libhardware/include/
+!/hardware/libhardware/include/hardware/
+!/external/
+!/external/libselinux/
+!/external/libselinux/include/
+!/external/libselinux/include/selinux/
+!/external/libselinux/src/
+!/external/f2fs-tools/
+!/external/f2fs-tools/include/
+!/external/f2fs-tools/lib/
+!/external/f2fs-tools/mkfs/
+!/build/
+!/build/core/
+!/build/core/version_defaults.mk
+!/build/core/combo/
+!/build/core/combo/include/
+!/build/core/combo/include/arch/
+!/build/core/combo/include/arch/linux-*/
+!/build/core/combo/include/arch/linux-*/AndroidConfig.h
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch
new file mode 100644
index 000000000..680d21f3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch
@@ -0,0 +1,351 @@
+From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2017 15:46:38 -0700
+Subject: [PATCH 1/2] add base64 implementation
+
+musl needs it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ system/core/adb/adb_auth_client.c | 2 +-
+ system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 316 insertions(+), 1 deletion(-)
+ create mode 100644 system/core/adb/base64.c
+
+diff --git a/system/core/adb/adb_auth_client.c b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+--- a/system/core/adb/adb_auth_client.c
++++ b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static void read_keys(const char *file, struct listnode *list)
+ if (sep)
+ *sep = '\0';
+
+- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4);
++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4);
+ if (ret != sizeof(key->key)) {
+ D("%s: Invalid base64 data ret=%d\n", file, ret);
+ free(key);
+diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c
+new file mode 100644
+index 0000000..95da284
+--- /dev/null
++++ b/system/core/adb/base64.c
+@@ -0,0 +1,315 @@
++/*
++ * Copyright (c) 1996-1999 by Internet Software Consortium.
++ *
++ * Permission to use, copy, modify, and distribute this software for any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines, Inc.
++ *
++ * International Business Machines, Inc. (hereinafter called IBM) grants
++ * permission under its copyrights to use, copy, modify, and distribute this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that the name of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior
++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunity from suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing Domain Name System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond)) abort()
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
++ The following encoding technique is taken from RFC 1521 by Borenstein
++ and Freed. It is reproduced here in a slightly edited form for
++ convenience.
++
++ A 65-character subset of US-ASCII is used, enabling 6 bits to be
++ represented per printable character. (The extra 65th character, "=",
++ is used to signify a special processing function.)
++
++ The encoding process represents 24-bit groups of input bits as output
++ strings of 4 encoded characters. Proceeding from left to right, a
++ 24-bit input group is formed by concatenating 3 8-bit input groups.
++ These 24 bits are then treated as 4 concatenated 6-bit groups, each
++ of which is translated into a single digit in the base64 alphabet.
++
++ Each 6-bit group is used as an index into an array of 64 printable
++ characters. The character referenced by the index is placed in the
++ output string.
++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding Value Encoding
++ 0 A 17 R 34 i 51 z
++ 1 B 18 S 35 j 52 0
++ 2 C 19 T 36 k 53 1
++ 3 D 20 U 37 l 54 2
++ 4 E 21 V 38 m 55 3
++ 5 F 22 W 39 n 56 4
++ 6 G 23 X 40 o 57 5
++ 7 H 24 Y 41 p 58 6
++ 8 I 25 Z 42 q 59 7
++ 9 J 26 a 43 r 60 8
++ 10 K 27 b 44 s 61 9
++ 11 L 28 c 45 t 62 +
++ 12 M 29 d 46 u 63 /
++ 13 N 30 e 47 v
++ 14 O 31 f 48 w (pad) =
++ 15 P 32 g 49 x
++ 16 Q 33 h 50 y
++
++ Special processing is performed if fewer than 24 bits are available
++ at the end of the data being encoded. A full encoding quantum is
++ always completed at the end of a quantity. When fewer than 24 input
++ bits are available in an input group, zero bits are added (on the
++ right) to form an integral number of 6-bit groups. Padding at the
++ end of the data is performed using the '=' character.
++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src, size_t srclength, char* target, size_t targsize)
++{
++ size_t datalength = 0;
++ uint8_t input[3];
++ uint8_t output[4];
++ size_t i;
++
++ while (2 < srclength) {
++ input[0] = *src++;
++ input[1] = *src++;
++ input[2] = *src++;
++ srclength -= 3;
++
++ output[0] = input[0] >> 2;
++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
++ output[3] = input[2] & 0x3f;
++ Assert(output[0] < 64);
++ Assert(output[1] < 64);
++ Assert(output[2] < 64);
++ Assert(output[3] < 64);
++
++ if (datalength + 4 > targsize)
++ return (-1);
++ target[datalength++] = Base64[output[0]];
++ target[datalength++] = Base64[output[1]];
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Base64[output[3]];
++ }
++
++ /* Now we worry about padding. */
++ if (0 != srclength) {
++ /* Get what's left. */
++ input[0] = input[1] = input[2] = '\0';
++ for (i = 0; i < srclength; i++)
++ input[i] = *src++;
++
++ output[0] = input[0] >> 2;
++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
++ Assert(output[0] < 64);
++ Assert(output[1] < 64);
++ Assert(output[2] < 64);
++
++ if (datalength + 4 > targsize)
++ return (-1);
++ target[datalength++] = Base64[output[0]];
++ target[datalength++] = Base64[output[1]];
++ if (srclength == 1)
++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);
++ target[datalength] = '\0'; /* Returned value doesn't count \0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.
++ converts characters, four at a time, starting at (or after)
++ src from base - 64 numbers into three 8 bit bytes in the target area.
++ it returns the number of data bytes stored at the target, or -1 on error.
++ */
++
++int b64_pton(const char* src, uint8_t* target, size_t targsize)
++{
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere. */
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos = strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) << 2;
++ }
++ state = 1;
++ break;
++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >> 4;
++ target[tarindex+1] = ((pos - Base64) & 0x0f)
++ << 4 ;
++ }
++ tarindex++;
++ state = 2;
++ break;
++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >> 2;
++ target[tarindex+1] = ((pos - Base64) & 0x03)
++ << 6;
++ }
++ tarindex++;
++ state = 3;
++ break;
++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);
++ }
++ tarindex++;
++ state = 0;
++ break;
++ default:
++ abort();
++ }
++ }
++
++ /*
++ * We are done decoding Base-64 chars. Let's see if we ended
++ * on a byte boundary, and/or with erroneous trailing characters.
++ */
++
++ if (ch == Pad64) { /* We got a pad char. */
++ ch = *src++; /* Skip it, get next. */
++ switch (state) {
++ case 0: /* Invalid = in first position */
++ case 1: /* Invalid = in second position */
++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing = sign. */
++ if (ch != Pad64)
++ return (-1);
++ ch = *src++; /* Skip the = */
++ /* Fall through to "single trailing =" case. */
++ /* FALLTHROUGH */
++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there anything but
++ * whitespace after it?
++ */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ return (-1);
++
++ /*
++ * Now make sure for cases 2 and 3 that the "extra"
++ * bits that slopped past the last full byte were
++ * zeros. If we don't check them, they become a
++ * subliminal channel.
++ */
++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*
++ * We ended by seeing the end of the string. Make sure we
++ * have no partial bytes lying around.
++ */
++ if (state != 0)
++ return (-1);
++ }
++
++ return (tarindex);
++}
++
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
new file mode 100644
index 000000000..c7aebb641
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
@@ -0,0 +1,134 @@
+From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2017 15:50:57 -0700
+Subject: [PATCH 2/2] adb: Musl fixes
+
+__nonnull is gcc specific
+include sys/types.h for size_t
+Do not redefine close() and lseek()
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ system/core/adb/adb.h | 2 ++
+ system/core/adb/disable_verity_service.c | 13 ++++++++-----
+ system/core/adb/framebuffer_service.c | 7 ++++---
+ system/core/adb/sysdeps.h | 12 ++++++------
+ 4 files changed, 20 insertions(+), 14 deletions(-)
+
+diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h
+index 44e5981..bcdc49f 100644
+--- a/system/core/adb/adb.h
++++ b/system/core/adb/adb.h
+@@ -18,7 +18,9 @@
+ #define __ADB_H
+
+ #include <limits.h>
++#include <sys/types.h>
+
++#include "fdevent.h"
+ #include "adb_trace.h"
+ #include "transport.h" /* readx(), writex() */
+
+diff --git a/system/core/adb/disable_verity_service.c b/system/core/adb/disable_verity_service.c
+index ed3da52..29fa3d6 100644
+--- a/system/core/adb/disable_verity_service.c
++++ b/system/core/adb/disable_verity_service.c
+@@ -14,25 +14,28 @@
+ * limitations under the License.
+ */
+
+-#include "sysdeps.h"
+
+ #define TRACE_TAG TRACE_ADB
+ #include "adb.h"
++#include "sysdeps.h"
++#include "cutils/properties.h"
++#include "ext4_sb.h"
++#include <fs_mgr.h>
+
+ #include <stdio.h>
+ #include <stdarg.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ #include <inttypes.h>
++#include <unistd.h>
++#include <errno.h>
++#include <stdbool.h>
+
+-#include "cutils/properties.h"
+-#include "ext4_sb.h"
+-#include <fs_mgr.h>
+
+ #define FSTAB_PREFIX "/fstab."
+ struct fstab *fstab;
+
+-__attribute__((__format__(printf, 2, 3))) __nonnull((2))
++__attribute__((__format__(printf, 2, 3))) __attribute__((nonnull((2))))
+ static void write_console(int fd, const char* format, ...)
+ {
+ char buffer[256];
+diff --git a/system/core/adb/framebuffer_service.c b/system/core/adb/framebuffer_service.c
+index 8cbe840..8f0ccfb 100644
+--- a/system/core/adb/framebuffer_service.c
++++ b/system/core/adb/framebuffer_service.c
+@@ -14,6 +14,10 @@
+ * limitations under the License.
+ */
+
++#include "fdevent.h"
++#include "adb.h"
++#include "sysdeps.h"
++
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <unistd.h>
+@@ -23,9 +27,6 @@
+ #include <sys/types.h>
+ #include <sys/wait.h>
+
+-#include "fdevent.h"
+-#include "adb.h"
+-
+ #include <linux/fb.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h
+index cc1f839..ea39ac3 100644
+--- a/system/core/adb/sysdeps.h
++++ b/system/core/adb/sysdeps.h
+@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd)
+ {
+ return close(fd);
+ }
+-#undef close
+-#define close ____xxx_close
++//#undef close
++//#define close ____xxx_close
+
+ static __inline__ int unix_read(int fd, void* buf, size_t len)
+ {
+@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd)
+ {
+ return close(fd);
+ }
+-#undef close
+-#define close ____xxx_close
++//#undef close
++//#define close ____xxx_close
+
+
+ static __inline__ int adb_read(int fd, void* buf, size_t len)
+@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, int pos, int where)
+ {
+ return lseek(fd, pos, where);
+ }
+-#undef lseek
+-#define lseek ___xxx_lseek
++//#undef lseek
++//#define lseek ___xxx_lseek
+
+ static __inline__ int adb_unlink(const char* path)
+ {
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adb.mk b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adb.mk
new file mode 100644
index 000000000..0687c22c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adb.mk
@@ -0,0 +1,72 @@
+# Makefile for adb
+
+SRCDIR ?= $(S)
+
+VPATH += $(SRCDIR)/system/core/adb
+adb_SRC_FILES += adb.c
+adb_SRC_FILES += console.c
+adb_SRC_FILES += transport.c
+adb_SRC_FILES += transport_local.c
+adb_SRC_FILES += transport_usb.c
+adb_SRC_FILES += commandline.c
+adb_SRC_FILES += adb_client.c
+adb_SRC_FILES += adb_auth_host.c
+adb_SRC_FILES += sockets.c
+adb_SRC_FILES += services.c
+adb_SRC_FILES += file_sync_client.c
+adb_SRC_FILES += get_my_path_linux.c
+adb_SRC_FILES += usb_linux.c
+adb_SRC_FILES += usb_vendors.c
+adb_SRC_FILES += fdevent.c
+adb_OBJS := $(adb_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libcutils
+libcutils_SRC_FILES += atomic.c
+libcutils_SRC_FILES += hashmap.c
+libcutils_SRC_FILES += native_handle.c
+libcutils_SRC_FILES += config_utils.c
+libcutils_SRC_FILES += cpu_info.c
+libcutils_SRC_FILES += load_file.c
+# libcutils_SRC_FILES += open_memstream.c
+# libcutils_SRC_FILES += strdup16to8.c
+# libcutils_SRC_FILES += strdup8to16.c
+# libcutils_SRC_FILES += record_stream.c
+# libcutils_SRC_FILES += process_name.c
+# libcutils_SRC_FILES += threads.c
+# libcutils_SRC_FILES += sched_policy.c
+# libcutils_SRC_FILES += iosched_policy.c
+libcutils_SRC_FILES += str_parms.c
+libcutils_SRC_FILES += fs.c
+libcutils_SRC_FILES += multiuser.c
+libcutils_SRC_FILES += socket_inaddr_any_server.c
+libcutils_SRC_FILES += socket_local_client.c
+libcutils_SRC_FILES += socket_local_server.c
+libcutils_SRC_FILES += socket_loopback_client.c
+libcutils_SRC_FILES += socket_loopback_server.c
+libcutils_SRC_FILES += socket_network_client.c
+libcutils_SRC_FILES += sockets.c
+libcutils_SRC_FILES += ashmem-host.c
+libcutils_SRC_FILES += dlmalloc_stubs.c
+libcutils_OBJS := $(libcutils_SRC_FILES:.c=.o)
+
+CFLAGS += -DANDROID
+CFLAGS += -DWORKAROUND_BUG6558362
+CFLAGS += -DADB_HOST=1
+CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE
+CFLAGS += -DANDROID_SMP=0
+CFLAGS += -I$(SRCDIR)/system/core/adb
+CFLAGS += -I$(SRCDIR)/system/core/include
+CFLAGS += -include $(SRCDIR)/build/core/combo/include/arch/$(android_arch)/AndroidConfig.h
+
+LIBS += libcutils.a -lpthread -lcrypto
+
+all: adb
+
+adb: libcutils.a $(adb_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(adb_OBJS) $(LIBS)
+
+libcutils.a: $(libcutils_OBJS)
+ $(AR) rcs $@ $(libcutils_OBJS)
+
+clean:
+ $(RM) $(adb_OBJS) $(libcutils_OBJS) adb *.a
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk
new file mode 100644
index 000000000..31452ae10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk
@@ -0,0 +1,164 @@
+# Makefile for adbd
+
+SRCDIR ?= $(S)
+
+VPATH += $(SRCDIR)/system/core/adb
+adbd_SRC_FILES += adb.c
+adbd_SRC_FILES += fdevent.c
+adbd_SRC_FILES += transport.c
+adbd_SRC_FILES += transport_local.c
+adbd_SRC_FILES += transport_usb.c
+adbd_SRC_FILES += adb_auth_client.c
+adbd_SRC_FILES += sockets.c
+adbd_SRC_FILES += services.c
+adbd_SRC_FILES += file_sync_service.c
+adbd_SRC_FILES += jdwp_service.c
+adbd_SRC_FILES += framebuffer_service.c
+adbd_SRC_FILES += remount_service.c
+adbd_SRC_FILES += disable_verity_service.c
+adbd_SRC_FILES += base64.c
+adbd_SRC_FILES += usb_linux_client.c
+adbd_OBJS := $(adbd_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/liblog
+liblog_SRC_FILES += logd_write.c
+liblog_SRC_FILES += log_event_write.c
+liblog_SRC_FILES += logprint.c
+liblog_SRC_FILES += event_tag_map.c
+liblog_SRC_FILES += fake_log_device.c
+liblog_OBJS := $(liblog_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/fs_mgr
+fs_mgr_SRC_FILES += fs_mgr_fstab.c
+fs_mgr_OBJS := $(fs_mgr_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libcutils
+libcutils_SRC_FILES += atomic.c
+libcutils_SRC_FILES += hashmap.c
+libcutils_SRC_FILES += native_handle.c
+libcutils_SRC_FILES += config_utils.c
+libcutils_SRC_FILES += cpu_info.c
+libcutils_SRC_FILES += load_file.c
+# libcutils_SRC_FILES += open_memstream.c
+# libcutils_SRC_FILES += strdup16to8.c
+# libcutils_SRC_FILES += strdup8to16.c
+# libcutils_SRC_FILES += record_stream.c
+# libcutils_SRC_FILES += process_name.c
+# libcutils_SRC_FILES += threads.c
+# libcutils_SRC_FILES += sched_policy.c
+# libcutils_SRC_FILES += iosched_policy.c
+libcutils_SRC_FILES += str_parms.c
+libcutils_SRC_FILES += fs.c
+libcutils_SRC_FILES += multiuser.c
+libcutils_SRC_FILES += socket_inaddr_any_server.c
+libcutils_SRC_FILES += socket_local_client.c
+libcutils_SRC_FILES += socket_local_server.c
+libcutils_SRC_FILES += socket_loopback_client.c
+libcutils_SRC_FILES += socket_loopback_server.c
+libcutils_SRC_FILES += socket_network_client.c
+libcutils_SRC_FILES += sockets.c
+libcutils_SRC_FILES += ashmem-host.c
+libcutils_SRC_FILES += dlmalloc_stubs.c
+libcutils_SRC_FILES += klog.c
+libcutils_SRC_FILES += properties.c
+libcutils_OBJS := $(libcutils_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/external/libselinux/src
+libselinux_SRC_FILES += booleans.c
+libselinux_SRC_FILES += canonicalize_context.c
+libselinux_SRC_FILES += disable.c
+libselinux_SRC_FILES += enabled.c
+libselinux_SRC_FILES += fgetfilecon.c
+libselinux_SRC_FILES += fsetfilecon.c
+libselinux_SRC_FILES += getenforce.c
+libselinux_SRC_FILES += getfilecon.c
+libselinux_SRC_FILES += getpeercon.c
+libselinux_SRC_FILES += lgetfilecon.c
+libselinux_SRC_FILES += load_policy.c
+libselinux_SRC_FILES += lsetfilecon.c
+libselinux_SRC_FILES += policyvers.c
+libselinux_SRC_FILES += procattr.c
+libselinux_SRC_FILES += setenforce.c
+libselinux_SRC_FILES += setfilecon.c
+libselinux_SRC_FILES += context.c
+libselinux_SRC_FILES += mapping.c
+libselinux_SRC_FILES += stringrep.c
+libselinux_SRC_FILES += compute_create.c
+libselinux_SRC_FILES += compute_av.c
+libselinux_SRC_FILES += avc.c
+libselinux_SRC_FILES += avc_internal.c
+libselinux_SRC_FILES += avc_sidtab.c
+libselinux_SRC_FILES += get_initial_context.c
+libselinux_SRC_FILES += checkAccess.c
+libselinux_SRC_FILES += sestatus.c
+libselinux_SRC_FILES += deny_unknown.c
+
+libselinux_SRC_FILES += callbacks.c
+libselinux_SRC_FILES += check_context.c
+libselinux_SRC_FILES += freecon.c
+libselinux_SRC_FILES += init.c
+libselinux_SRC_FILES += label.c
+libselinux_SRC_FILES += label_file.c
+libselinux_SRC_FILES += label_android_property.c
+libselinux_OBJS := $(libselinux_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/extras/ext4_utils
+libext4_utils_SRC_FILES += make_ext4fs.c
+libext4_utils_SRC_FILES += ext4fixup.c
+libext4_utils_SRC_FILES += ext4_utils.c
+libext4_utils_SRC_FILES += allocate.c
+libext4_utils_SRC_FILES += contents.c
+libext4_utils_SRC_FILES += extent.c
+libext4_utils_SRC_FILES += indirect.c
+libext4_utils_SRC_FILES += uuid.c
+libext4_utils_SRC_FILES += sha1.c
+libext4_utils_SRC_FILES += wipe.c
+libext4_utils_SRC_FILES += crc16.c
+libext4_utils_SRC_FILES += ext4_sb.c
+libext4_utils_OBJS := $(libext4_utils_SRC_FILES:.c=.o)
+
+CFLAGS += -std=gnu11
+CFLAGS += -DANDROID
+CFLAGS += -DADB_HOST=0
+CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE
+CFLAGS += -DALLOW_ADBD_ROOT=1
+CFLAGS += -DALLOW_ADBD_DISABLE_VERITY=1
+CFLAGS += -DPROP_NAME_MAX=32
+CFLAGS += -DPROP_VALUE_MAX=92
+CFLAGS += -DAUDITD_LOG_TAG=1003
+# CFLAGS += -DHOST
+CFLAGS += -DANDROID_SMP=0
+CFLAGS += -I$(SRCDIR)/system/core/adb
+CFLAGS += -I$(SRCDIR)/system/core/include
+CFLAGS += -I$(SRCDIR)/system/core/libsparse/include
+CFLAGS += -I$(SRCDIR)/system/extras/ext4_utils
+CFLAGS += -I$(SRCDIR)/system/core/fs_mgr/include
+CFLAGS += -I$(SRCDIR)/hardware/libhardware/include
+CFLAGS += -I$(SRCDIR)/external/libselinux/include
+CFLAGS += -include $(SRCDIR)/build/core/combo/include/arch/$(android_arch)/AndroidConfig.h
+
+LIBS += liblog.a libfs_mgr.a libcutils.a libselinux.a libext4_utils.a -lpthread -lbsd -lpcre -lresolv -lcrypto
+
+all: adbd
+
+adbd: liblog.a libfs_mgr.a libcutils.a libselinux.a libext4_utils.a $(adbd_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(adbd_OBJS) $(LIBS)
+
+liblog.a: $(liblog_OBJS)
+ $(AR) rcs $@ $(liblog_OBJS)
+
+libfs_mgr.a: $(fs_mgr_OBJS)
+ $(AR) rcs $@ $(fs_mgr_OBJS)
+
+libcutils.a: $(libcutils_OBJS)
+ $(AR) rcs $@ $(libcutils_OBJS)
+
+libselinux.a: $(libselinux_OBJS)
+ export CFLAGS="-DANDROID -DHOST"
+ $(AR) rcs $@ $(libselinux_OBJS)
+
+libext4_utils.a: $(libext4_utils_OBJS)
+ $(AR) rcs $@ $(libext4_utils_OBJS)
+
+clean:
+ $(RM) *.o *.a adbd
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/android-tools-adbd.service b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/android-tools-adbd.service
new file mode 100644
index 000000000..88ed6871d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/android-tools-adbd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Android Debug Bridge
+
+[Service]
+Type=simple
+Restart=on-failure
+ExecStartPre=/usr/bin/android-gadget-setup adb
+ExecStart=/usr/bin/adbd
+StandardOutput=null
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/define-shell-command.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/define-shell-command.patch
new file mode 100644
index 000000000..8381967c4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/define-shell-command.patch
@@ -0,0 +1,23 @@
+Description: we intend to run on Linux system so the shell is always /bin/sh,
+ for the host or the target.
+Author: Fathi Boudra <fabo@debian.org>
+
+Upstream-Status: Inappropriate
+---
+ system/core/adb/services.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+--- a/system/core/adb/services.c
++++ b/system/core/adb/services.c
+@@ -299,11 +299,7 @@ static int create_subproc_raw(const char
+ }
+ #endif /* !ABD_HOST */
+
+-#if ADB_HOST
+ #define SHELL_COMMAND "/bin/sh"
+-#else
+-#define SHELL_COMMAND "/system/bin/sh"
+-#endif
+
+ #if !ADB_HOST
+ static void subproc_waiter_service(int fd, void *cookie)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/ext4_utils.mk b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/ext4_utils.mk
new file mode 100644
index 000000000..c18aa9c4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/ext4_utils.mk
@@ -0,0 +1,103 @@
+# Makefile for ext4_utils
+
+SRCDIR ?= $(S)
+
+VPATH += $(SRCDIR)/system/extras/ext4_utils
+make_ext4fs_SRC_FILES += make_ext4fs_main.c
+make_ext4fs_SRC_FILES += canned_fs_config.c
+make_ext4fs_OBJS := $(make_ext4fs_SRC_FILES:.c=.o)
+
+ext2simg_SRC_FILES += ext2simg.c
+ext2simg_OBJS := $(ext2simg_SRC_FILES:.c=.o)
+
+ext4fixup_SRC_FILES += ext4fixup_main.c
+ext4fixup_OBJS := $(ext4fixup_SRC_FILES:.c=.o)
+
+libext4_utils_SRC_FILES += make_ext4fs.c
+libext4_utils_SRC_FILES += ext4fixup.c
+libext4_utils_SRC_FILES += ext4_utils.c
+libext4_utils_SRC_FILES += allocate.c
+libext4_utils_SRC_FILES += contents.c
+libext4_utils_SRC_FILES += extent.c
+libext4_utils_SRC_FILES += indirect.c
+libext4_utils_SRC_FILES += uuid.c
+libext4_utils_SRC_FILES += sha1.c
+libext4_utils_SRC_FILES += wipe.c
+libext4_utils_SRC_FILES += crc16.c
+libext4_utils_SRC_FILES += ext4_sb.c
+libext4_utils_OBJS := $(libext4_utils_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libsparse
+simg2img_SRC_FILES += simg2img.c
+simg2img_SRC_FILES += sparse_crc32.c
+simg2img_OBJS := $(simg2img_SRC_FILES:.c=.o)
+
+img2simg_SRC_FILES += img2simg.c
+img2simg_OBJS := $(img2simg_SRC_FILES:.c=.o)
+
+simg2simg_SRC_FILES += simg2simg.c
+simg2simg_SRC_FILES += sparse_crc32.c
+simg2simg_OBJS := $(simg2simg_SRC_FILES:.c=.o)
+
+libsparse_SRC_FILES += backed_block.c
+libsparse_SRC_FILES += output_file.c
+libsparse_SRC_FILES += sparse.c
+libsparse_SRC_FILES += sparse_crc32.c
+libsparse_SRC_FILES += sparse_err.c
+libsparse_SRC_FILES += sparse_read.c
+libsparse_OBJS := $(libsparse_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/external/libselinux/src
+libselinux_SRC_FILES += callbacks.c
+libselinux_SRC_FILES += check_context.c
+libselinux_SRC_FILES += freecon.c
+libselinux_SRC_FILES += init.c
+libselinux_SRC_FILES += label.c
+libselinux_SRC_FILES += label_file.c
+libselinux_SRC_FILES += label_android_property.c
+libselinux_OBJS := $(libselinux_SRC_FILES:.c=.o)
+
+CFLAGS += -DANDROID
+CFLAGS += -DHOST
+CFLAGS += -I$(SRCDIR)/system/extras/ext4_utils
+CFLAGS += -I$(SRCDIR)/system/core/include
+CFLAGS += -I$(SRCDIR)/system/core/libsparse/include
+CFLAGS += -I$(SRCDIR)/external/libselinux/include
+CFLAGS += -include $(SRCDIR)/build/core/combo/include/arch/$(android_arch)/AndroidConfig.h
+
+all: make_ext4fs ext2simg ext4fixup simg2img img2simg simg2simg
+
+make_ext4fs: libext4_utils.a libsparse.a libselinux.a $(make_ext4fs_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(make_ext4fs_OBJS) \
+ libext4_utils.a libsparse.a libselinux.a -lz -lpcre
+
+ext2simg: libext4_utils.a libselinux.a libsparse.a $(ext2simg_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(ext2simg_OBJS) \
+ libext4_utils.a libselinux.a libsparse.a -lz -lpcre
+
+ext4fixup: libext4_utils.a libsparse.a $(ext4fixup_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(ext4fixup_OBJS) libext4_utils.a libsparse.a -lz
+
+simg2img: libsparse.a $(simg2img_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(simg2img_OBJS) libsparse.a -lz
+
+img2simg: libsparse.a $(img2simg_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(img2simg_OBJS) libsparse.a -lz
+
+simg2simg: libsparse.a $(simg2simg_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(simg2simg_OBJS) libsparse.a -lz
+
+libext4_utils.a: $(libext4_utils_OBJS)
+ $(AR) rcs $@ $(libext4_utils_OBJS)
+
+libsparse.a: $(libsparse_OBJS)
+ $(AR) rcs $@ $(libsparse_OBJS)
+
+libselinux.a: $(libselinux_OBJS)
+ $(AR) rcs $@ $(libselinux_OBJS)
+
+clean:
+ $(RM) $(make_ext4fs_OBJS) $(ext2simg_OBJS) $(ext4fixup_OBJS) \
+ $(simg2img_OBJS) $(img2simg_OBJS) $(simg2simg_OBJS) \
+ $(libext4_utils_OBJS) $(libsparse_OBJS) $(libselinux_OBJS) \
+ make_ext4fs ext2simg ext4fixup simg2img img2simg simg2simg *.a
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fastboot.mk b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fastboot.mk
new file mode 100644
index 000000000..b9ba95f38
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fastboot.mk
@@ -0,0 +1,89 @@
+# Makefile for fastboot
+
+SRCDIR ?= $(S)
+
+VPATH += $(SRCDIR)/system/core/fastboot
+fastboot_SRC_FILES += protocol.c
+fastboot_SRC_FILES += engine.c
+fastboot_SRC_FILES += bootimg.c
+fastboot_SRC_FILES += fastboot.c
+fastboot_SRC_FILES += util.c
+fastboot_SRC_FILES += fs.c
+fastboot_SRC_FILES += usb_linux.c
+fastboot_SRC_FILES += util_linux.c
+fastboot_OBJS := $(fastboot_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libzipfile
+libzipfile_SRC_FILES += centraldir.c
+libzipfile_SRC_FILES += zipfile.c
+libzipfile_OBJS := $(libzipfile_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/extras/ext4_utils
+libext4_utils_SRC_FILES += make_ext4fs.c
+libext4_utils_SRC_FILES += ext4fixup.c
+libext4_utils_SRC_FILES += ext4_utils.c
+libext4_utils_SRC_FILES += allocate.c
+libext4_utils_SRC_FILES += contents.c
+libext4_utils_SRC_FILES += extent.c
+libext4_utils_SRC_FILES += indirect.c
+libext4_utils_SRC_FILES += uuid.c
+libext4_utils_SRC_FILES += sha1.c
+libext4_utils_SRC_FILES += wipe.c
+libext4_utils_SRC_FILES += crc16.c
+libext4_utils_SRC_FILES += ext4_sb.c
+libext4_utils_OBJS := $(libext4_utils_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libsparse
+libsparse_SRC_FILES += backed_block.c
+libsparse_SRC_FILES += output_file.c
+libsparse_SRC_FILES += sparse.c
+libsparse_SRC_FILES += sparse_crc32.c
+libsparse_SRC_FILES += sparse_err.c
+libsparse_SRC_FILES += sparse_read.c
+libsparse_OBJS := $(libsparse_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/external/libselinux/src
+libselinux_SRC_FILES += callbacks.c
+libselinux_SRC_FILES += check_context.c
+libselinux_SRC_FILES += freecon.c
+libselinux_SRC_FILES += init.c
+libselinux_SRC_FILES += label.c
+libselinux_SRC_FILES += label_file.c
+libselinux_SRC_FILES += label_android_property.c
+libselinux_OBJS := $(libselinux_SRC_FILES:.c=.o)
+
+CFLAGS += -std=gnu11
+CFLAGS += -DANDROID
+# CFLAGS += -DUSE_F2FS
+CFLAGS += -DHOST
+CFLAGS += -I$(SRCDIR)/system/core/fastboot
+CFLAGS += -I$(SRCDIR)/system/core/include
+CFLAGS += -I$(SRCDIR)/system/core/mkbootimg
+CFLAGS += -I$(SRCDIR)/system/extras/ext4_utils
+CFLAGS += -I$(SRCDIR)/system/extras/f2fs_utils
+CFLAGS += -I$(SRCDIR)/system/core/libsparse/include
+CFLAGS += -I$(SRCDIR)/external/libselinux/include
+CFLAGS += -include $(SRCDIR)/build/core/combo/include/arch/$(android_arch)/AndroidConfig.h
+
+LIBS += libzipfile.a libext4_utils.a libsparse.a libselinux.a -lz -lpcre
+
+all: fastboot
+
+fastboot: libzipfile.a libext4_utils.a libsparse.a libselinux.a $(fastboot_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(fastboot_OBJS) $(LIBS)
+
+libzipfile.a: $(libzipfile_OBJS)
+ $(AR) rcs $@ $(libzipfile_OBJS)
+
+libext4_utils.a: $(libext4_utils_OBJS)
+ $(AR) rcs $@ $(libext4_utils_OBJS)
+
+libsparse.a: $(libsparse_OBJS)
+ $(AR) rcs $@ $(libsparse_OBJS)
+
+libselinux.a: $(libselinux_OBJS)
+ $(AR) rcs $@ $(libselinux_OBJS)
+
+clean:
+ $(RM) $(fastboot_OBJS) $(libzipfile_OBJS) $(libext4_utils_OBJS) \
+ $(libsparse_OBJS) $(libselinux_OBJS) fastboot *.a
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fix-big-endian-build.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fix-big-endian-build.patch
new file mode 100644
index 000000000..8deaf3a3d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/fix-big-endian-build.patch
@@ -0,0 +1,39 @@
+Fix build on big endian systems
+
+The usb_linux_client.c file defines cpu_to_le16/32 by using the C
+library htole16/32 function calls. However, cpu_to_le16/32 are used
+when initializing structures, i.e in a context where a function call
+is not allowed.
+
+It works fine on little endian systems because htole16/32 are defined
+by the C library as no-ops. But on big-endian systems, they are
+actually doing something, which might involve calling a function,
+causing build failures.
+
+To solve this, we simply open-code cpu_to_le16/32 in a way that allows
+them to be used when initializing structures.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+Index: b/system/core/adb/usb_linux_client.c
+===================================================================
+--- a/system/core/adb/usb_linux_client.c
++++ b/system/core/adb/usb_linux_client.c
+@@ -34,8 +34,15 @@
+ #define MAX_PACKET_SIZE_FS 64
+ #define MAX_PACKET_SIZE_HS 512
+
+-#define cpu_to_le16(x) htole16(x)
+-#define cpu_to_le32(x) htole32(x)
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++# define cpu_to_le16(x) (x)
++# define cpu_to_le32(x) (x)
++#else
++# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
++# define cpu_to_le32(x) \
++ ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \
++ (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
++#endif
+
+ struct usb_handle
+ {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/implicit-declaration-function-strlcat-strlcopy.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/implicit-declaration-function-strlcat-strlcopy.patch
new file mode 100644
index 000000000..64db6168c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/implicit-declaration-function-strlcat-strlcopy.patch
@@ -0,0 +1,42 @@
+Description: fix implicit declaration of stlcat/strlcopy functions.
+Author: Fathi Boudra <fabo@debian.org>
+
+Upstream-Status: Inappropriate
+---
+ system/core/adb/adb.c | 1 +
+ system/core/fs_mgr/fs_mgr_fstab.c | 2 +-
+ system/core/include/cutils/sockets.h | 2 +-
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/system/core/fs_mgr/fs_mgr_fstab.c
++++ b/system/core/fs_mgr/fs_mgr_fstab.c
+@@ -17,7 +17,7 @@
+ #include <ctype.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <bsd/string.h>
+ #include <sys/mount.h>
+
+ #include "fs_mgr_priv.h"
+--- a/system/core/include/cutils/sockets.h
++++ b/system/core/include/cutils/sockets.h
+@@ -19,7 +19,7 @@
+
+ #include <errno.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <bsd/string.h>
+ #include <stdbool.h>
+
+ #ifdef HAVE_WINSOCK
+--- a/system/core/adb/adb.c
++++ b/system/core/adb/adb.c
+@@ -41,6 +41,7 @@
+ #include <sys/prctl.h>
+ #include <getopt.h>
+ #include <selinux/selinux.h>
++#include <grp.h>
+ #else
+ #include "usb_vendors.h"
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg-Add-dt-parameter-to-specify-DT-image.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg-Add-dt-parameter-to-specify-DT-image.patch
new file mode 100644
index 000000000..35bb766a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg-Add-dt-parameter-to-specify-DT-image.patch
@@ -0,0 +1,108 @@
+From cc5e7b02a3be57709a1aed6e34be100b82a71620 Mon Sep 17 00:00:00 2001
+From: David Ng <dave@codeaurora.org>
+Date: Fri, 27 Jul 2012 17:15:03 -0700
+Subject: [PATCH 1/2] mkbootimg: Add --dt parameter to specify DT image
+
+New optional --dt parameter to specify a kernel device
+tree image.
+
+Change-Id: Ie29a11cbf4138426bfd19ae486d69a5fcbd8f442
+
+Upstream-Status: Inappropriate
+---
+ system/core/mkbootimg/bootimg.h | 7 +++++--
+ system/core/mkbootimg/mkbootimg.c | 21 +++++++++++++++++++++
+ 2 files changed, 26 insertions(+), 2 deletions(-)
+
+--- a/system/core/mkbootimg/bootimg.h
++++ b/system/core/mkbootimg/bootimg.h
+@@ -41,8 +41,8 @@ struct boot_img_hdr
+
+ unsigned tags_addr; /* physical addr for kernel tags */
+ unsigned page_size; /* flash page size we assume */
+- unsigned unused[2]; /* future expansion: should be 0 */
+-
++ unsigned dt_size; /* device tree in bytes */
++ unsigned unused; /* future expansion: should be 0 */
+ unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */
+
+ unsigned char cmdline[BOOT_ARGS_SIZE];
+@@ -64,10 +64,13 @@ struct boot_img_hdr
+ ** +-----------------+
+ ** | second stage | o pages
+ ** +-----------------+
++** | device tree | p pages
++** +-----------------+
+ **
+ ** n = (kernel_size + page_size - 1) / page_size
+ ** m = (ramdisk_size + page_size - 1) / page_size
+ ** o = (second_size + page_size - 1) / page_size
++** p = (dt_size + page_size - 1) / page_size
+ **
+ ** 0. all entities are page_size aligned in flash
+ ** 1. kernel and ramdisk are required (size != 0)
+--- a/system/core/mkbootimg/mkbootimg.c
++++ b/system/core/mkbootimg/mkbootimg.c
+@@ -65,6 +65,7 @@ int usage(void)
+ " [ --board <boardname> ]\n"
+ " [ --base <address> ]\n"
+ " [ --pagesize <pagesize> ]\n"
++ " [ --dt <filename> ]\n"
+ " -o|--output <filename>\n"
+ );
+ return 1;
+@@ -105,6 +106,8 @@ int main(int argc, char **argv)
+ char *cmdline = "";
+ char *bootimg = 0;
+ char *board = "";
++ char *dt_fn = 0;
++ void *dt_data = 0;
+ unsigned pagesize = 2048;
+ int fd;
+ SHA_CTX ctx;
+@@ -158,6 +161,8 @@ int main(int argc, char **argv)
+ fprintf(stderr,"error: unsupported page size %d\n", pagesize);
+ return -1;
+ }
++ } else if(!strcmp(arg, "--dt")) {
++ dt_fn = val;
+ } else {
+ return usage();
+ }
+@@ -232,6 +237,14 @@ int main(int argc, char **argv)
+ }
+ }
+
++ if(dt_fn) {
++ dt_data = load_file(dt_fn, &hdr.dt_size);
++ if (dt_data == 0) {
++ fprintf(stderr,"error: could not load device tree image '%s'\n", dt_fn);
++ return 1;
++ }
++ }
++
+ /* put a hash of the contents in the header so boot images can be
+ * differentiated based on their first 2k.
+ */
+@@ -242,6 +255,10 @@ int main(int argc, char **argv)
+ SHA_update(&ctx, &hdr.ramdisk_size, sizeof(hdr.ramdisk_size));
+ SHA_update(&ctx, second_data, hdr.second_size);
+ SHA_update(&ctx, &hdr.second_size, sizeof(hdr.second_size));
++ if(dt_data) {
++ SHA_update(&ctx, dt_data, hdr.dt_size);
++ SHA_update(&ctx, &hdr.dt_size, sizeof(hdr.dt_size));
++ }
+ sha = SHA_final(&ctx);
+ memcpy(hdr.id, sha,
+ SHA_DIGEST_SIZE > sizeof(hdr.id) ? sizeof(hdr.id) : SHA_DIGEST_SIZE);
+@@ -266,6 +283,10 @@ int main(int argc, char **argv)
+ if(write_padding(fd, pagesize, hdr.second_size)) goto fail;
+ }
+
++ if(dt_data) {
++ if(write(fd, dt_data, hdr.dt_size) != (ssize_t) hdr.dt_size) goto fail;
++ if(write_padding(fd, pagesize, hdr.dt_size)) goto fail;
++ }
+ return 0;
+
+ fail:
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg.mk b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg.mk
new file mode 100644
index 000000000..519f609fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/mkbootimg.mk
@@ -0,0 +1,29 @@
+# Makefile for mkbootimg
+
+SRCDIR ?= $(S)
+
+VPATH += $(SRCDIR)/system/core/mkbootimg
+mkbootimg_SRC_FILES += mkbootimg.c
+mkbootimg_OBJS := $(mkbootimg_SRC_FILES:.c=.o)
+
+VPATH += $(SRCDIR)/system/core/libmincrypt
+libmincrypt_SRC_FILES := dsa_sig.c p256.c p256_ec.c p256_ecdsa.c rsa.c sha.c sha256.c
+libmincrypt_OBJS := $(libmincrypt_SRC_FILES:.c=.o)
+
+CFLAGS += -DANDROID
+CFLAGS += -I$(SRCDIR)/system/core/mkbootimg
+CFLAGS += -I$(SRCDIR)/system/core/include
+CFLAGS += -include $(SRCDIR)/build/core/combo/include/arch/$(android_arch)/AndroidConfig.h
+
+LIBS += libmincrypt.a
+
+all: mkbootimg
+
+mkbootimg: libmincrypt.a $(mkbootimg_OBJS)
+ $(CC) -o $@ $(LDFLAGS) $(mkbootimg_OBJS) $(LIBS)
+
+libmincrypt.a: $(libmincrypt_OBJS)
+ $(AR) rcs $@ $(libmincrypt_OBJS)
+
+clean:
+ $(RM) $(mkbootimg_OBJS) $(libmincrypt_OBJS) mkbootimg *.a
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/preserve-ownership.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/preserve-ownership.patch
new file mode 100644
index 000000000..5c9039719
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/preserve-ownership.patch
@@ -0,0 +1,81 @@
+From aa669312a380611d280d126cb509fa282080707e Mon Sep 17 00:00:00 2001
+From: Markus Mayer <mmayer@mmayer.net>
+Date: Wed, 7 Sep 2016 12:58:47 +0300
+Subject: [PATCH] android-tools: add recipe from AOSP tag android-5.1.1_r37
+
+Description: add -o argument to preserve ownership
+
+See also https://android-review.googlesource.com/#/c/100312/
+
+Upstream-Status: Inappropriate
+
+---
+ ext4_utils/make_ext4fs.c | 6 ++++++
+ ext4_utils/make_ext4fs_main.c | 10 ++++++++--
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/ext4_utils/make_ext4fs.c b/ext4_utils/make_ext4fs.c
+index 2f89ae8a..cc41d623 100644
+--- a/ext4_utils/make_ext4fs.c
++++ b/ext4_utils/make_ext4fs.c
+@@ -68,6 +68,8 @@
+
+ #endif
+
++int preserve_owner = 0;
++
+ /* TODO: Not implemented:
+ Allocating blocks in the same block group as the file inode
+ Hash or binary tree directories
+@@ -186,6 +188,10 @@ static u32 build_directory_structure(const char *full_path, const char *dir_path
+ } else {
+ dentries[i].mtime = fixed_time;
+ }
++ if (preserve_owner) {
++ dentries[i].uid = stat.st_uid;
++ dentries[i].gid = stat.st_gid;
++ }
+ uint64_t capabilities;
+ if (fs_config_func != NULL) {
+ #ifdef ANDROID
+diff --git a/ext4_utils/make_ext4fs_main.c b/ext4_utils/make_ext4fs_main.c
+index a6c5f616..7af0dddf 100644
+--- a/ext4_utils/make_ext4fs_main.c
++++ b/ext4_utils/make_ext4fs_main.c
+@@ -48,13 +48,15 @@ struct selabel_handle;
+ extern struct fs_info info;
+
+
++extern int preserve_owner;
++
+ static void usage(char *path)
+ {
+ fprintf(stderr, "%s [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ]\n", basename(path));
+ fprintf(stderr, " [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ]\n");
+ fprintf(stderr, " [ -L <label> ] [ -f ] [ -a <android mountpoint> ]\n");
+ fprintf(stderr, " [ -S file_contexts ] [ -C fs_config ] [ -T timestamp ]\n");
+- fprintf(stderr, " [ -z | -s ] [ -w ] [ -c ] [ -J ] [ -v ] [ -B <block_list_file> ]\n");
++ fprintf(stderr, " [ -z | -s ] [ -w ] [ -c ] [ -J ] [ -o ] [ -v ] [ -B <block_list_file> ]\n");
+ fprintf(stderr, " <filename> [<directory>]\n");
+ }
+
+@@ -80,7 +82,7 @@ int main(int argc, char **argv)
+ struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "" } };
+ #endif
+
+- while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:S:T:C:B:fwzJsctv")) != -1) {
++ while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:S:T:C:B:fwzJsctov")) != -1) {
+ switch (opt) {
+ case 'l':
+ info.len = parse_num(optarg);
+@@ -143,6 +145,10 @@ int main(int argc, char **argv)
+ }
+ #endif
+ break;
++ case 'o':
++ preserve_owner = 1;
++ printf("Warning: Enabling 'preserve ownership', this is an unofficial feature!\n");
++ break;
+ case 'v':
+ verbose = 1;
+ break;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-bionic-android.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-bionic-android.patch
new file mode 100644
index 000000000..e933724cf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-bionic-android.patch
@@ -0,0 +1,67 @@
+Description: remove bionic specific calls
+Author: Fathi Boudra <fabo@debian.org>
+
+Upstream-Status: Inappropriate
+---
+ system/core/include/cutils/properties.h | 1 -
+ system/core/libcutils/properties.c | 2 +-
+ system/core/liblog/logd_write.c | 5 +++++
+ 3 files changed, 6 insertions(+), 2 deletions(-)
+
+--- a/system/core/include/cutils/properties.h
++++ b/system/core/include/cutils/properties.h
+@@ -19,7 +19,6 @@
+
+ #include <sys/cdefs.h>
+ #include <stddef.h>
+-#include <sys/system_properties.h>
+ #include <stdint.h>
+
+ #ifdef __cplusplus
+--- a/system/core/liblog/logd_write.c
++++ b/system/core/liblog/logd_write.c
+@@ -23,6 +23,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/stat.h>
++#include <sys/syscall.h>
+ #include <sys/types.h>
+ #if (FAKE_LOG_DEVICE == 0)
+ #include <sys/socket.h>
+@@ -205,7 +206,11 @@ static int __write_to_log_kernel(log_id_
+ realtime_ts.tv_nsec = ts.tv_nsec;
+
+ log_id_buf = log_id;
++#ifdef __BIONIC__
+ tid = gettid();
++#else
++ tid = (pid_t) syscall(__NR_gettid);
++#endif
+
+ newVec[0].iov_base = (unsigned char *) &log_id_buf;
+ newVec[0].iov_len = sizeof_log_id_t;
+--- a/system/core/libcutils/properties.c
++++ b/system/core/libcutils/properties.c
+@@ -104,10 +104,10 @@ int32_t property_get_int32(const char *k
+ return (int32_t)property_get_imax(key, INT32_MIN, INT32_MAX, default_value);
+ }
+
++#undef HAVE_LIBC_SYSTEM_PROPERTIES
+ #ifdef HAVE_LIBC_SYSTEM_PROPERTIES
+
+ #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
+-#include <sys/_system_properties.h>
+
+ int property_set(const char *key, const char *value)
+ {
+--- a/external/libselinux/src/procattr.c
++++ b/external/libselinux/src/procattr.c
+@@ -8,7 +8,7 @@
+ #include "selinux_internal.h"
+ #include "policy.h"
+
+-#ifdef HOST
++#ifndef __BIONIC__
+ static pid_t gettid(void)
+ {
+ return syscall(__NR_gettid);
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-selinux-android.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-selinux-android.patch
new file mode 100644
index 000000000..d4a37f82b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/remove-selinux-android.patch
@@ -0,0 +1,56 @@
+Subject: drop useless includes of Android SELINUX extensions; avoids having to clone another module; this should be sent upstream
+Author: Sergio Schvezov <sergio.schvezov@canonical.com>
+
+Upstream-Status: Inappropriate
+---
+ system/core/adb/file_sync_service.c | 3 ---
+ system/extras/ext4_utils/make_ext4fs.c | 1 -
+ system/extras/ext4_utils/make_ext4fs_main.c | 1 -
+ 3 files changed, 5 deletions(-)
+
+--- a/system/extras/ext4_utils/make_ext4fs.c
++++ b/system/extras/ext4_utils/make_ext4fs.c
+@@ -62,7 +62,6 @@
+
+ #include <selinux/selinux.h>
+ #include <selinux/label.h>
+-#include <selinux/android.h>
+
+ #define O_BINARY 0
+
+--- a/system/extras/ext4_utils/make_ext4fs_main.c
++++ b/system/extras/ext4_utils/make_ext4fs_main.c
+@@ -32,7 +32,6 @@
+ #ifndef USE_MINGW
+ #include <selinux/selinux.h>
+ #include <selinux/label.h>
+-#include <selinux/android.h>
+ #else
+ struct selabel_handle;
+ #endif
+--- a/system/core/adb/file_sync_service.c
++++ b/system/core/adb/file_sync_service.c
+@@ -26,7 +26,6 @@
+
+ #include <errno.h>
+ #include <private/android_filesystem_config.h>
+-#include <selinux/android.h>
+ #include "sysdeps.h"
+
+ #define TRACE_TAG TRACE_SYNC
+@@ -73,7 +72,6 @@ static int mkdirs(char *name)
+ *x = '/';
+ return ret;
+ }
+- selinux_android_restorecon(name, 0);
+ }
+ *x++ = '/';
+ }
+@@ -251,7 +249,6 @@ static int handle_send_file(int s, char
+ if(fd >= 0) {
+ struct utimbuf u;
+ adb_close(fd);
+- selinux_android_restorecon(path, 0);
+ u.actime = timestamp;
+ u.modtime = timestamp;
+ utime(path, &u);
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-capability.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-capability.patch
new file mode 100644
index 000000000..b8ebe09dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-capability.patch
@@ -0,0 +1,19 @@
+Subject: use linux/capability.h on linux systems too
+Author: Loïc Minier <loic.minier@ubuntu.com>
+
+Upstream-Status: Inappropriate
+---
+ system/core/include/private/android_filesystem_config.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/system/core/include/private/android_filesystem_config.h
++++ b/system/core/include/private/android_filesystem_config.h
+@@ -27,7 +27,7 @@
+ #include <sys/types.h>
+ #include <stdint.h>
+
+-#ifdef HAVE_ANDROID_OS
++#if defined(HAVE_ANDROID_OS) || defined(__linux__)
+ #include <linux/capability.h>
+ #else
+ #include "android_filesystem_capability.h"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-local-socket.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-local-socket.patch
new file mode 100644
index 000000000..7facd61b9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/use-local-socket.patch
@@ -0,0 +1,62 @@
+Subject: adb: Use local sockets where appropriate
+Author: Hilko Bengen <bengen@debian.org>
+
+Upstream-Status: Inappropriate
+---
+ system/core/adb/adb.c | 6 +++++-
+ system/core/adb/adb_client.c | 5 +++--
+ system/core/adb/transport_local.c | 3 ++-
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+--- a/system/core/adb/adb.c
++++ b/system/core/adb/adb.c
+@@ -1230,7 +1230,11 @@ int launch_server(int server_port)
+ */
+ void build_local_name(char* target_str, size_t target_size, int server_port)
+ {
+- snprintf(target_str, target_size, "tcp:%d", server_port);
++ if (gListenAll > 0) {
++ snprintf(target_str, target_size, "tcp:%d", server_port);
++ } else {
++ snprintf(target_str, target_size, "local:%d", server_port);
++ }
+ }
+
+ #if !ADB_HOST
+--- a/system/core/adb/adb_client.c
++++ b/system/core/adb/adb_client.c
+@@ -185,12 +185,12 @@ int _adb_connect(const char *service)
+ strcpy(__adb_error, "service name too long");
+ return -1;
+ }
+- snprintf(tmp, sizeof tmp, "%04x", len);
++ snprintf(tmp, sizeof tmp, "%d", __adb_server_port);
+
+ if (__adb_server_name)
+ fd = socket_network_client(__adb_server_name, __adb_server_port, SOCK_STREAM);
+ else
+- fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);
++ fd = socket_local_client(tmp, ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM);
+
+ if(fd < 0) {
+ strcpy(__adb_error, "cannot connect to daemon");
+@@ -201,6 +201,7 @@ int _adb_connect(const char *service)
+ return -1;
+ }
+
++ snprintf(tmp, sizeof tmp, "%04x", len);
+ if(writex(fd, tmp, 4) || writex(fd, service, len)) {
+ strcpy(__adb_error, "write failure during connection");
+ adb_close(fd);
+--- a/system/core/adb/transport_local.c
++++ b/system/core/adb/transport_local.c
+@@ -121,7 +121,8 @@ int local_connect_arbitrary_ports(int co
+ }
+ #endif
+ if (fd < 0) {
+- fd = socket_loopback_client(adb_port, SOCK_STREAM);
++ snprintf(buf, sizeof buf, "%d", adb_port);
++ fd = socket_local_client(buf, ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM);
+ }
+
+ if (fd >= 0) {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
new file mode 100644
index 000000000..780ecaa11
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
@@ -0,0 +1,158 @@
+DESCRIPTION = "Different utilities from Android"
+SECTION = "console/utils"
+LICENSE = "Apache-2.0 & GPL-2.0 & BSD-2-Clause & BSD-3-Clause"
+LIC_FILES_CHKSUM = " \
+ file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
+ file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
+ file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=8bef8e6712b1be5aa76af1ebde9d6378 \
+ file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
+"
+DEPENDS = "libbsd libpcre openssl zlib libcap"
+
+ANDROID_MIRROR = "android.googlesource.com"
+CORE_REPO = "${ANDROID_MIRROR}/platform/system/core"
+EXTRAS_REPO = "${ANDROID_MIRROR}/platform/system/extras"
+LIBHARDWARE_REPO = "${ANDROID_MIRROR}/platform/hardware/libhardware"
+LIBSELINUX_REPO = "${ANDROID_MIRROR}/platform/external/libselinux"
+BUILD_REPO = "${ANDROID_MIRROR}/platform/build"
+
+# matches with android-5.1.1_r37
+SRCREV_core = "2314b110bdebdbfd2d94c502282f9e57c849897e"
+SRCREV_extras = "3ecbe8d841df96127d7855661293e5ab6ba6c205"
+SRCREV_libhardware = "be55eb1f4d840c82ffaf7c47460df17ff5bc4d9b"
+SRCREV_libselinux = "07e9e1339ad1ba608acfba9dce2d0f474b252feb"
+SRCREV_build = "16e987def3d7d8f7d30805eb95cef69e52a87dbc"
+
+SRC_URI = " \
+ git://${CORE_REPO};name=core;protocol=https;nobranch=1;destsuffix=git/system/core \
+ git://${EXTRAS_REPO};name=extras;protocol=https;nobranch=1;destsuffix=git/system/extras \
+ git://${LIBHARDWARE_REPO};name=libhardware;protocol=https;nobranch=1;destsuffix=git/hardware/libhardware \
+ git://${LIBSELINUX_REPO};name=libselinux;protocol=https;nobranch=1;destsuffix=git/external/libselinux \
+ git://${BUILD_REPO};name=build;protocol=https;nobranch=1;destsuffix=git/build \
+ file://remove-selinux-android.patch \
+ file://use-capability.patch \
+ file://use-local-socket.patch \
+ file://preserve-ownership.patch;patchdir=system/extras \
+ file://mkbootimg-Add-dt-parameter-to-specify-DT-image.patch \
+ file://remove-bionic-android.patch \
+ file://define-shell-command.patch \
+ file://implicit-declaration-function-strlcat-strlcopy.patch \
+ file://fix-big-endian-build.patch \
+ file://0001-add-base64-implementation.patch \
+ file://0002-adb-Musl-fixes.patch \
+ file://android-tools-adbd.service \
+ file://.gitignore;subdir=git \
+ file://adb.mk;subdir=${BPN} \
+ file://adbd.mk;subdir=${BPN} \
+ file://ext4_utils.mk;subdir=${BPN} \
+ file://fastboot.mk;subdir=${BPN} \
+ file://mkbootimg.mk;subdir=${BPN} \
+"
+
+S = "${WORKDIR}/git"
+B = "${WORKDIR}/${BPN}"
+
+# http://errors.yoctoproject.org/Errors/Details/133881/
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
+
+inherit systemd
+
+SYSTEMD_SERVICE_${PN} = "android-tools-adbd.service"
+
+# Find libbsd headers during native builds
+CC_append_class-native = " -I${STAGING_INCDIR}"
+CC_append_class-nativesdk = " -I${STAGING_INCDIR}"
+
+TOOLS = "adb fastboot ext4_utils mkbootimg adbd"
+
+# Adb needs sys/capability.h, which is not available for native*
+TOOLS_class-native = "fastboot ext4_utils mkbootimg"
+TOOLS_class-nativesdk = "fastboot ext4_utils mkbootimg"
+
+do_compile() {
+ # Setting both variables below causing our makefiles to not work with
+ # implicit make rules
+ unset CFLAGS
+ unset CPPFLAGS
+
+ export SRCDIR=${S}
+
+ case "${HOST_ARCH}" in
+ arm)
+ export android_arch=linux-arm
+ ;;
+ aarch64)
+ export android_arch=linux-arm64
+ ;;
+ mips|mipsel)
+ export android_arch=linux-mips
+ ;;
+ powerpc|powerpc64)
+ export android_arch=linux-ppc
+ ;;
+ i586|x86_64)
+ export android_arch=linux-x86
+ ;;
+ esac
+
+ for tool in ${TOOLS}; do
+ mkdir -p ${B}/${tool}
+ oe_runmake -f ${B}/${tool}.mk -C ${B}/${tool}
+ done
+}
+
+do_install() {
+ if echo ${TOOLS} | grep -q "ext4_utils" ; then
+ install -D -p -m0755 ${S}/system/core/libsparse/simg_dump.py ${D}${bindir}/simg_dump
+ install -D -p -m0755 ${S}/system/extras/ext4_utils/mkuserimg.sh ${D}${bindir}/mkuserimg
+
+ install -m0755 ${B}/ext4_utils/ext2simg ${D}${bindir}
+ install -m0755 ${B}/ext4_utils/ext4fixup ${D}${bindir}
+ install -m0755 ${B}/ext4_utils/img2simg ${D}${bindir}
+ install -m0755 ${B}/ext4_utils/make_ext4fs ${D}${bindir}
+ install -m0755 ${B}/ext4_utils/simg2img ${D}${bindir}
+ install -m0755 ${B}/ext4_utils/simg2simg ${D}${bindir}
+ fi
+
+ if echo ${TOOLS} | grep -q "adb " ; then
+ install -d ${D}${bindir}
+ install -m0755 ${B}/adb/adb ${D}${bindir}
+ fi
+
+ if echo ${TOOLS} | grep -q "adbd" ; then
+ install -d ${D}${bindir}
+ install -m0755 ${B}/adbd/adbd ${D}${bindir}
+ fi
+
+ # Outside the if statement to avoid errors during do_package
+ install -D -p -m0644 ${WORKDIR}/android-tools-adbd.service \
+ ${D}${systemd_unitdir}/system/android-tools-adbd.service
+
+ if echo ${TOOLS} | grep -q "fastboot" ; then
+ install -d ${D}${bindir}
+ install -m0755 ${B}/fastboot/fastboot ${D}${bindir}
+ fi
+
+ if echo ${TOOLS} | grep -q "mkbootimg" ; then
+ install -d ${D}${bindir}
+ install -m0755 ${B}/mkbootimg/mkbootimg ${D}${bindir}
+ fi
+}
+
+PACKAGES += "${PN}-fstools"
+
+RDEPENDS_${BPN} = "${BPN}-conf bash"
+
+FILES_${PN}-fstools = "\
+ ${bindir}/ext2simg \
+ ${bindir}/ext4fixup \
+ ${bindir}/img2simg \
+ ${bindir}/make_ext4fs \
+ ${bindir}/simg2img \
+ ${bindir}/simg2simg \
+ ${bindir}/simg_dump \
+ ${bindir}/mkuserimg \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0001-svg-add-rudimentary-support-for-ARM-cpuinfo.patch b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0001-svg-add-rudimentary-support-for-ARM-cpuinfo.patch
new file mode 100644
index 000000000..4581ef25f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0001-svg-add-rudimentary-support-for-ARM-cpuinfo.patch
@@ -0,0 +1,49 @@
+From 8d40b4c286e005e82fa50b66fbbbde22b7e65e15 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sun, 20 May 2012 21:35:34 +0200
+Subject: [PATCH 1/2] svg: add rudimentary support for ARM cpuinfo
+
+On ARM /proc/cpuinfo looks like this:
+
+root@beagleboneA3-0428:~# cat /proc/cpuinfo
+Processor : ARMv7 Processor rev 2 (v7l)
+BogoMIPS : 498.89
+Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
+CPU implementer : 0x41
+CPU architecture: 7
+CPU variant : 0x3
+CPU part : 0xc08
+CPU revision : 2
+
+Hardware : am335xevm
+Revision : 0000
+Serial : 0000000000000000
+
+So no real way to get the actual SoC name, TI AM3359, but a lot better than 'Unknown'
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+
+Upstream-Status: submitted
+
+ svg.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/svg.c b/svg.c
+index 80e0292..53724b2 100644
+--- a/svg.c
++++ b/svg.c
+@@ -178,6 +178,10 @@ void svg_title(void)
+ strncpy(cpu, &buf[13], 255);
+ break;
+ }
++ if (strstr(buf, "Processor")) {
++ strncpy(cpu, &buf[12], 255);
++ break;
++ }
+ }
+ fclose(f);
+ }
+--
+1.7.10
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0002-svg-open-etc-os-release-and-use-PRETTY_NAME-for-the-.patch b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0002-svg-open-etc-os-release-and-use-PRETTY_NAME-for-the-.patch
new file mode 100644
index 000000000..f63d98aee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart/0002-svg-open-etc-os-release-and-use-PRETTY_NAME-for-the-.patch
@@ -0,0 +1,39 @@
+From e3adb4c312c6ba3491b7c173559efac7a53e5abc Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sun, 20 May 2012 22:12:29 +0200
+Subject: [PATCH 2/2] svg: open /etc/os-release and use PRETTY_NAME for the
+ 'Build' name
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+
+Upstream-Status: Submitted
+
+ svg.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/svg.c b/svg.c
+index 53724b2..c675d84 100644
+--- a/svg.c
++++ b/svg.c
+@@ -194,6 +194,17 @@ void svg_title(void)
+ fclose(f);
+ }
+
++ f = fopen("/etc/os-release", "r");
++ if(f) {
++ while (fgets(buf, 255, f)) {
++ if (strstr(buf, "PRETTY_NAME=")) {
++ strncpy(build, &buf[12], 255);
++ break;
++ }
++ }
++ fclose(f);
++ }
++
+ svg("<text class=\"t1\" x=\"0\" y=\"30\">Bootchart for %s - %s</text>\n",
+ uts.nodename, date);
+ svg("<text class=\"t2\" x=\"20\" y=\"50\">System: %s %s %s %s</text>\n",
+--
+1.7.10
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart_git.bb b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart_git.bb
new file mode 100644
index 000000000..2b75eaac9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/bootchart/bootchart_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Monitors where the system spends its time at start, creating a graph of all processes, disk utilization, and wait time."
+HOMEPAGE = "http://meego.gitorious.org/meego-developer-tools/bootchart"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067"
+
+PV = "1.17"
+PR = "r1"
+PE = "1"
+
+SRC_URI = "git://gitorious.org/meego-developer-tools/bootchart.git;protocol=https \
+ file://0001-svg-add-rudimentary-support-for-ARM-cpuinfo.patch \
+ file://0002-svg-open-etc-os-release-and-use-PRETTY_NAME-for-the-.patch \
+"
+
+SRCREV = "a2c7561d4060a9f075339bda89e793c76f2ff6dd"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Replace-use-of-struct-ucontext-with-ucontext_t.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Replace-use-of-struct-ucontext-with-ucontext_t.patch
new file mode 100644
index 000000000..07cb8a366
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Replace-use-of-struct-ucontext-with-ucontext_t.patch
@@ -0,0 +1,242 @@
+From b90c8f3b60bfe5dbed2823620242e9d30b9eb28f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 28 Jun 2017 19:01:18 -0700
+Subject: [PATCH] Replace use of struct ucontext with ucontext_t
+
+glibc 2.26 would not expose struct ucontext anymore
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ .../linux/dump_writer_common/ucontext_reader.cc | 32 +++++++++++-----------
+ .../linux/dump_writer_common/ucontext_reader.h | 14 +++++-----
+ src/client/linux/handler/exception_handler.cc | 10 +++----
+ src/client/linux/handler/exception_handler.h | 4 +--
+ .../linux/microdump_writer/microdump_writer.cc | 2 +-
+ .../linux/minidump_writer/minidump_writer.cc | 2 +-
+ 6 files changed, 32 insertions(+), 32 deletions(-)
+
+diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc
+index c80724dd..052ce37c 100644
+--- a/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ b/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -36,19 +36,19 @@ namespace google_breakpad {
+
+ // Minidump defines register structures which are different from the raw
+ // structures which we get from the kernel. These are platform specific
+-// functions to juggle the ucontext and user structures into minidump format.
++// functions to juggle the ucontext_t and user structures into minidump format.
+
+ #if defined(__i386__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_ESP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_EIP];
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fp) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__x86_64)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_RSP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[REG_RIP];
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fpregs) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__ARM_EABI__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.arm_sp;
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.arm_pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+ out->context_flags = MD_CONTEXT_ARM_FULL;
+
+ out->iregs[0] = uc->uc_mcontext.arm_r0;
+@@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
+
+ #elif defined(__aarch64__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.sp;
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs) {
+ out->context_flags = MD_CONTEXT_ARM64_FULL;
+
+@@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+
+ #elif defined(__mips__)
+
+-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP];
+ }
+
+-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.pc;
+ }
+
+-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+ #if _MIPS_SIM == _ABI64
+ out->context_flags = MD_CONTEXT_MIPS64_FULL;
+ #elif _MIPS_SIM == _ABIO32
+diff --git a/src/client/linux/dump_writer_common/ucontext_reader.h b/src/client/linux/dump_writer_common/ucontext_reader.h
+index b6e77b4b..2de80b70 100644
+--- a/src/client/linux/dump_writer_common/ucontext_reader.h
++++ b/src/client/linux/dump_writer_common/ucontext_reader.h
+@@ -39,23 +39,23 @@
+
+ namespace google_breakpad {
+
+-// Wraps platform-dependent implementations of accessors to ucontext structs.
++// Wraps platform-dependent implementations of accessors to ucontext_t structs.
+ struct UContextReader {
+- static uintptr_t GetStackPointer(const struct ucontext* uc);
++ static uintptr_t GetStackPointer(const ucontext_t* uc);
+
+- static uintptr_t GetInstructionPointer(const struct ucontext* uc);
++ static uintptr_t GetInstructionPointer(const ucontext_t* uc);
+
+- // Juggle a arch-specific ucontext into a minidump format
++ // Juggle a arch-specific ucontext_t into a minidump format
+ // out: the minidump structure
+ // info: the collection of register structures.
+ #if defined(__i386__) || defined(__x86_64)
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct _libc_fpstate* fp);
+ #elif defined(__aarch64__)
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs);
+ #else
+- static void FillCPUContext(RawContextCPU *out, const ucontext *uc);
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc);
+ #endif
+ };
+
+diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
+index 586d84e9..05936d28 100644
+--- a/src/client/linux/handler/exception_handler.cc
++++ b/src/client/linux/handler/exception_handler.cc
+@@ -457,9 +457,9 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
+ // Fill in all the holes in the struct to make Valgrind happy.
+ memset(&g_crash_context_, 0, sizeof(g_crash_context_));
+ memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t));
+- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext));
++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t));
+ #if defined(__aarch64__)
+- struct ucontext* uc_ptr = (struct ucontext*)uc;
++ ucontext_t* uc_ptr = (ucontext_t*)uc;
+ struct fpsimd_context* fp_ptr =
+ (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved;
+ if (fp_ptr->head.magic == FPSIMD_MAGIC) {
+@@ -468,9 +468,9 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
+ }
+ #elif !defined(__ARM_EABI__) && !defined(__mips__)
+ // FP state is not part of user ABI on ARM Linux.
+- // In case of MIPS Linux FP state is already part of struct ucontext
++ // In case of MIPS Linux FP state is already part of ucontext_t
+ // and 'float_state' is not a member of CrashContext.
+- struct ucontext* uc_ptr = (struct ucontext*)uc;
++ ucontext_t* uc_ptr = (ucontext_t*)uc;
+ if (uc_ptr->uc_mcontext.fpregs) {
+ memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs,
+ sizeof(g_crash_context_.float_state));
+@@ -494,7 +494,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) {
+ // ExceptionHandler::HandleSignal().
+ siginfo.si_code = SI_USER;
+ siginfo.si_pid = getpid();
+- struct ucontext context;
++ ucontext_t context;
+ getcontext(&context);
+ return HandleSignal(sig, &siginfo, &context);
+ }
+diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h
+index daba57e0..25598a29 100644
+--- a/src/client/linux/handler/exception_handler.h
++++ b/src/client/linux/handler/exception_handler.h
+@@ -191,11 +191,11 @@ class ExceptionHandler {
+ struct CrashContext {
+ siginfo_t siginfo;
+ pid_t tid; // the crashing thread.
+- struct ucontext context;
++ ucontext_t context;
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ // #ifdef this out because FP state is not part of user ABI for Linux ARM.
+ // In case of MIPS Linux FP state is already part of struct
+- // ucontext so 'float_state' is not required.
++ // ucontext_t so 'float_state' is not required.
+ fpstate_t float_state;
+ #endif
+ };
+diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc
+index 3764eec2..80ad5c46 100644
+--- a/src/client/linux/microdump_writer/microdump_writer.cc
++++ b/src/client/linux/microdump_writer/microdump_writer.cc
+@@ -593,7 +593,7 @@ class MicrodumpWriter {
+
+ void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
+
+- const struct ucontext* const ucontext_;
++ const ucontext_t* const ucontext_;
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_;
+ #endif
+diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc
+index d11ba6e5..c7161434 100644
+--- a/src/client/linux/minidump_writer/minidump_writer.cc
++++ b/src/client/linux/minidump_writer/minidump_writer.cc
+@@ -1323,7 +1323,7 @@ class MinidumpWriter {
+ const int fd_; // File descriptor where the minidum should be written.
+ const char* path_; // Path to the file where the minidum should be written.
+
+- const struct ucontext* const ucontext_; // also from the signal handler
++ const ucontext_t* const ucontext_; // also from the signal handler
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_; // ditto
+ #endif
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch
new file mode 100644
index 000000000..33bae1a37
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch
@@ -0,0 +1,41 @@
+From ab8dcad25d0ac1f3a88814e78794e5d450de15ac Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 23:12:51 -0700
+Subject: [PATCH 1/5] Turn off sign-compare for musl-libc
+
+Fix
+
+../../../../../../../workspace/sources/breakpad/src/client/linux/crash_generation/crash_generation_server.cc:234:14: error: comparison of integers of different signs: 'unsigned long' and 'int' [-Werror,-Wsign-compare] hdr = CMSG_NXTHDR(&msg, hdr)) { ^~~~~~~~~~~~~~~~~~~~~~
+/mnt/a/oe/build/tmp/work/cortexa7hf-neon-vfpv4-bec-linux-musleabi/breakpad/1_1.0+git999-r0/recipe-sysroot/usr/include/sys/socket.h:288:44: note: expanded from macro 'CMSG_NXTHDR' __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/client/linux/crash_generation/crash_generation_server.cc | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/client/linux/crash_generation/crash_generation_server.cc b/src/client/linux/crash_generation/crash_generation_server.cc
+index 2596afde..2faeb9e5 100644
+--- a/src/client/linux/crash_generation/crash_generation_server.cc
++++ b/src/client/linux/crash_generation/crash_generation_server.cc
+@@ -230,8 +230,18 @@ CrashGenerationServer::ClientEvent(short revents)
+ // Walk the control payload and extract the file descriptor and validated pid.
+ pid_t crashing_pid = -1;
+ int signal_fd = -1;
++#ifndef __GLIBC__
++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
++ // clang to throw sign-compare warning. This is to suppress the warning
++ // inline.
++ #pragma clang diagnostic push
++ #pragma clang diagnostic ignored "-Wsign-compare"
++#endif
+ for (struct cmsghdr *hdr = CMSG_FIRSTHDR(&msg); hdr;
+ hdr = CMSG_NXTHDR(&msg, hdr)) {
++#ifndef __GLIBC__
++ #pragma clang diagnostic pop
++#endif
+ if (hdr->cmsg_level != SOL_SOCKET)
+ continue;
+ if (hdr->cmsg_type == SCM_RIGHTS) {
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
new file mode 100644
index 000000000..c762754ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
@@ -0,0 +1,52 @@
+From 57ecf7205feedd23f901e1bb9d193787e559e433 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Tue, 23 Jan 2018 15:13:26 -0800
+Subject: [PATCH] disable calls to getcontext() with musl
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ src/client/linux/handler/exception_handler.cc | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
+index cca023f..f3e460c 100644
+--- a/src/client/linux/handler/exception_handler.cc
++++ b/src/client/linux/handler/exception_handler.cc
+@@ -495,7 +495,19 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) {
+ siginfo.si_code = SI_USER;
+ siginfo.si_pid = getpid();
+ ucontext_t context;
++#if defined(__GLIBC__)
+ getcontext(&context);
++#else
++ // Extreme hack: Allow musl builds to compile - but don't expect them to work.
++ // Although musl provides a definition for getcontext() in ucontext.h (which
++ // enough to build libbreakpad_client) musl does not provide a corresponding
++ // getcontext() function, so builds will fail when attempting to link anything
++ // with libbreakpad_client. Disabling calls to getcontext() is a temporary
++ // hack. The real fix is probably to enable Breakpad's own implementation of
++ // getcontext() when building for musl (it's currently only enabled when
++ // building for Android).
++ memset (&context, 0, sizeof(context));
++#endif
+ return HandleSignal(sig, &siginfo, &context);
+ }
+
+@@ -680,9 +692,14 @@ bool ExceptionHandler::WriteMinidump() {
+ sys_prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
+
+ CrashContext context;
++#if defined(__GLIBC__)
+ int getcontext_result = getcontext(&context.context);
+ if (getcontext_result)
+ return false;
++#else
++ // Extreme hack - see comments above.
++ memset (&context.context, 0, sizeof(&context.context));
++#endif
+
+ #if defined(__i386__)
+ // In CPUFillFromUContext in minidumpwriter.cc the stack pointer is retrieved
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-include-sys-reg.h-to-get-__WORDSIZE-on-musl-libc.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-include-sys-reg.h-to-get-__WORDSIZE-on-musl-libc.patch
new file mode 100644
index 000000000..4583d601a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-include-sys-reg.h-to-get-__WORDSIZE-on-musl-libc.patch
@@ -0,0 +1,28 @@
+From 68580cb62f77117be3164c52abae68f75e8e59a1 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sun, 1 Feb 2015 14:26:52 +0100
+Subject: [PATCH 1/3] include <sys/reg.h> to get __WORDSIZE on musl libc
+
+---
+ src/common/linux/elf_core_dump.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: git/src/common/linux/elf_core_dump.h
+===================================================================
+--- git.orig/src/common/linux/elf_core_dump.h
++++ git/src/common/linux/elf_core_dump.h
+@@ -33,10 +33,13 @@
+ #ifndef COMMON_LINUX_ELF_CORE_DUMP_H_
+ #define COMMON_LINUX_ELF_CORE_DUMP_H_
+
++#include <config.h>
+ #include <elf.h>
+ #include <link.h>
+ #include <stddef.h>
+-
++#ifdef HAVE_SYS_REG_H
++#include <sys/reg.h>
++#endif
+ #include "common/memory_range.h"
+
+ namespace google_breakpad {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-lss-Match-syscalls-to-match-musl.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-lss-Match-syscalls-to-match-musl.patch
new file mode 100644
index 000000000..2b892ad64
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-lss-Match-syscalls-to-match-musl.patch
@@ -0,0 +1,45 @@
+From 5f7333e4f7b7485598bd71aa80967e1a16a7f901 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 22:57:52 -0700
+Subject: [PATCH] lss: Match syscalls to match musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ linux_syscall_support.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+Index: lss/linux_syscall_support.h
+===================================================================
+--- lss.orig/linux_syscall_support.h
++++ lss/linux_syscall_support.h
+@@ -793,6 +793,9 @@ struct kernel_statfs {
+ #define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
+ #endif
+
++#ifndef __NR_fstatat
++#define __NR_fstatat __NR_fstatat64
++#endif
+
+ #if defined(__x86_64__)
+ #ifndef ARCH_SET_GS
+@@ -924,6 +927,7 @@ struct kernel_statfs {
+ #ifndef __NR_fallocate
+ #define __NR_fallocate 324
+ #endif
++
+ /* End of i386 definitions */
+ #elif defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
+ #ifndef __NR_setresuid
+@@ -1211,6 +1215,12 @@ struct kernel_statfs {
+ #ifndef __NR_fallocate
+ #define __NR_fallocate 285
+ #endif
++#ifndef __NR_pread
++#define __NR_pread __NR_pread64
++#endif
++#ifndef __NR_pwrite
++#define __NR_pwrite __NR_pwrite64
++#endif
+ /* End of x86-64 definitions */
+ #elif defined(__mips__)
+ #if _MIPS_SIM == _MIPS_SIM_ABI32
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Avoid-using-basename.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Avoid-using-basename.patch
new file mode 100644
index 000000000..bc6282981
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Avoid-using-basename.patch
@@ -0,0 +1,29 @@
+From 806964f852773e427fea82a7716d44ce3be4498c Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sun, 1 Feb 2015 14:27:32 +0100
+Subject: [PATCH 2/3] Avoid using basename
+
+---
+ src/common/linux/dump_symbols.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
+index d029ca14..6ac4a17b 100644
+--- a/src/common/linux/dump_symbols.cc
++++ b/src/common/linux/dump_symbols.cc
+@@ -881,9 +881,9 @@ const char* ElfArchitecture(const typename ElfClass::Ehdr* elf_header) {
+ // last slash, or the whole filename if there are no slashes.
+ string BaseFileName(const string &filename) {
+ // Lots of copies! basename's behavior is less than ideal.
+- char* c_filename = strdup(filename.c_str());
+- string base = basename(c_filename);
+- free(c_filename);
++ const char *c_filename = filename.c_str();
++ const char *p = strrchr(c_filename, '/');
++ string base = p ? p+1 : c_filename;
+ return base;
+ }
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch
new file mode 100644
index 000000000..6c097cd22
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch
@@ -0,0 +1,60 @@
+From 0ba1b3e35e7c743b670bedc3e90001dfb868df10 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sun, 1 Feb 2015 13:45:51 +0100
+Subject: [PATCH 2/6] Use _fpstate instead of _libc_fpstate on linux
+
+glibc defines both. musl libc only the former.
+---
+ src/client/linux/dump_writer_common/ucontext_reader.cc | 4 ++--
+ src/client/linux/dump_writer_common/ucontext_reader.h | 2 +-
+ src/client/linux/minidump_writer/minidump_writer.h | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+Index: git/src/client/linux/dump_writer_common/ucontext_reader.cc
+===================================================================
+--- git.orig/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ git/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -49,7 +49,7 @@ uintptr_t UContextReader::GetInstruction
+ }
+
+ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+- const struct _libc_fpstate* fp) {
++ const struct _fpstate* fp) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+ out->context_flags = MD_CONTEXT_X86_FULL |
+@@ -97,7 +97,7 @@ uintptr_t UContextReader::GetInstruction
+ }
+
+ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+- const struct _libc_fpstate* fpregs) {
++ const struct _fpstate* fpregs) {
+ const greg_t* regs = uc->uc_mcontext.gregs;
+
+ out->context_flags = MD_CONTEXT_AMD64_FULL;
+Index: git/src/client/linux/dump_writer_common/ucontext_reader.h
+===================================================================
+--- git.orig/src/client/linux/dump_writer_common/ucontext_reader.h
++++ git/src/client/linux/dump_writer_common/ucontext_reader.h
+@@ -50,7 +50,7 @@ struct UContextReader {
+ // info: the collection of register structures.
+ #if defined(__i386__) || defined(__x86_64)
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+- const struct _libc_fpstate* fp);
++ const struct _fpstate* fp);
+ #elif defined(__aarch64__)
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs);
+Index: git/src/client/linux/minidump_writer/minidump_writer.h
+===================================================================
+--- git.orig/src/client/linux/minidump_writer/minidump_writer.h
++++ git/src/client/linux/minidump_writer/minidump_writer.h
+@@ -48,7 +48,7 @@ class ExceptionHandler;
+ #if defined(__aarch64__)
+ typedef struct fpsimd_context fpstate_t;
+ #elif !defined(__ARM_EABI__) && !defined(__mips__)
+-typedef struct _libc_fpstate fpstate_t;
++typedef struct _fpstate fpstate_t;
+ #endif
+
+ // These entries store a list of memory regions that the client wants included
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch
new file mode 100644
index 000000000..cfd9a9b34
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0002-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch
@@ -0,0 +1,26 @@
+From 15582e19c2545d5ffe8ff07f957d0ed602aeca74 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 23:15:09 -0700
+Subject: [PATCH 2/5] <sys/signal.h> is a nonportable alias for <signal.h>
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/client/linux/handler/exception_handler.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
+index 05936d28..cca023fd 100644
+--- a/src/client/linux/handler/exception_handler.cc
++++ b/src/client/linux/handler/exception_handler.cc
+@@ -78,7 +78,7 @@
+ #include <sys/wait.h>
+ #include <unistd.h>
+
+-#include <sys/signal.h>
++#include <signal.h>
+ #include <sys/ucontext.h>
+ #include <sys/user.h>
+ #include <ucontext.h>
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Dont-include-stab.h.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Dont-include-stab.h.patch
new file mode 100644
index 000000000..2593ea93e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Dont-include-stab.h.patch
@@ -0,0 +1,88 @@
+From 569af712da94637091080943f6a0d69ccb35864e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 23:24:08 -0700
+Subject: [PATCH 3/5] Dont include stab.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/common/stabs_reader.cc | 1 -
+ src/common/stabs_reader.h | 12 +++++++++++-
+ src/common/stabs_reader_unittest.cc | 1 -
+ 3 files changed, 11 insertions(+), 3 deletions(-)
+
+Index: git/src/common/stabs_reader.cc
+===================================================================
+--- git.orig/src/common/stabs_reader.cc
++++ git/src/common/stabs_reader.cc
+@@ -34,7 +34,9 @@
+ #include "common/stabs_reader.h"
+
+ #include <assert.h>
++#ifdef HAVE_STAB_H
+ #include <stab.h>
++#endif
+ #include <string.h>
+
+ #include <string>
+Index: git/src/common/stabs_reader.h
+===================================================================
+--- git.orig/src/common/stabs_reader.h
++++ git/src/common/stabs_reader.h
+@@ -58,6 +58,30 @@
+ #elif defined(HAVE_A_OUT_H)
+ #include <a.out.h>
+ #endif
++// Definitions from <stab.h> and <a.out.h> for systems which
++// do not have them
++#ifndef HAVE_A_OUT_H
++#undef N_UNDF
++#define N_UNDF 0x0
++#ifndef N_FUN
++#define N_FUN 0x24
++#endif
++#ifndef N_SLINE
++#define N_SLINE 0x44
++#endif
++#ifndef N_SO
++#define N_SO 0x64
++#endif
++#ifndef N_LSYM
++#define N_LSYM 0x80
++#endif
++#ifndef N_BINCL
++#define N_BINCL 0x82
++#endif
++#ifndef N_SOL
++#define N_SOL 0x84
++#endif
++#endif
+
+ #include <string>
+ #include <vector>
+Index: git/src/common/stabs_reader_unittest.cc
+===================================================================
+--- git.orig/src/common/stabs_reader_unittest.cc
++++ git/src/common/stabs_reader_unittest.cc
+@@ -33,7 +33,9 @@
+
+ #include <assert.h>
+ #include <errno.h>
++#ifdef HAVE_STAB_H
+ #include <stab.h>
++#endif
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <string.h>
+Index: git/configure.ac
+===================================================================
+--- git.orig/configure.ac
++++ git/configure.ac
+@@ -72,7 +72,7 @@ AC_ARG_ENABLE(m32,
+ AC_HEADER_STDC
+ AC_SYS_LARGEFILE
+ AX_PTHREAD
+-AC_CHECK_HEADERS([a.out.h sys/random.h])
++AC_CHECK_HEADERS([a.out.h stab.h sys/random.h])
+ AC_CHECK_FUNCS([arc4random getrandom])
+
+ AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch
new file mode 100644
index 000000000..851004704
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0003-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch
@@ -0,0 +1,35 @@
+From 7aa266545dabf9934ccd44d4fc836040497159be Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sun, 1 Feb 2015 13:41:08 +0100
+Subject: [PATCH 3/3] Fix conflict between musl libc <dirent.h> and lss
+
+Include <dirent.h> late to avoid the macro getdents64 in musl
+libc's <dirent.h> to conflict with linux_sycall_support.h.
+---
+ src/client/linux/crash_generation/crash_generation_server.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/client/linux/crash_generation/crash_generation_server.cc b/src/client/linux/crash_generation/crash_generation_server.cc
+index 26c50a5c..2596afde 100644
+--- a/src/client/linux/crash_generation/crash_generation_server.cc
++++ b/src/client/linux/crash_generation/crash_generation_server.cc
+@@ -28,7 +28,6 @@
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #include <assert.h>
+-#include <dirent.h>
+ #include <fcntl.h>
+ #include <limits.h>
+ #include <poll.h>
+@@ -49,6 +48,8 @@
+ #include "common/linux/guid_creator.h"
+ #include "common/linux/safe_readlink.h"
+
++#include <dirent.h>
++
+ static const char kCommandQuit = 'x';
+
+ namespace google_breakpad {
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0004-elf_reader.cc-include-sys-reg.h-to-get-__WORDSIZE-on.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0004-elf_reader.cc-include-sys-reg.h-to-get-__WORDSIZE-on.patch
new file mode 100644
index 000000000..525a1555b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0004-elf_reader.cc-include-sys-reg.h-to-get-__WORDSIZE-on.patch
@@ -0,0 +1,43 @@
+From 680f9590d19a6e35c7c5587e3f4d8194aab0fcd2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 23:28:36 -0700
+Subject: [PATCH 4/5] elf_reader.cc: include <sys/reg.h> to get __WORDSIZE on
+ musl libc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/common/dwarf/elf_reader.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: git/src/common/dwarf/elf_reader.cc
+===================================================================
+--- git.orig/src/common/dwarf/elf_reader.cc
++++ git/src/common/dwarf/elf_reader.cc
+@@ -29,10 +29,13 @@
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE // needed for pread()
+ #endif
+-
++#include <config.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
++#ifdef HAVE_SYS_REG_H
++#include <sys/reg.h>
++#endif
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <string.h>
+Index: git/configure.ac
+===================================================================
+--- git.orig/configure.ac
++++ git/configure.ac
+@@ -72,7 +72,7 @@ AC_ARG_ENABLE(m32,
+ AC_HEADER_STDC
+ AC_SYS_LARGEFILE
+ AX_PTHREAD
+-AC_CHECK_HEADERS([a.out.h stab.h sys/random.h])
++AC_CHECK_HEADERS([a.out.h stab.h sys/random.h sys/reg.h])
+ AC_CHECK_FUNCS([arc4random getrandom])
+
+ AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0005-md2core-Replace-basename.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0005-md2core-Replace-basename.patch
new file mode 100644
index 000000000..852c1ed2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0005-md2core-Replace-basename.patch
@@ -0,0 +1,38 @@
+From bbf2b5ed5d93b227df8aea5726727b48e29f6790 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 23:35:40 -0700
+Subject: [PATCH 5/5] md2core: Replace basename()
+
+musl does not provide it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/tools/linux/md2core/minidump-2-core.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/tools/linux/md2core/minidump-2-core.cc b/src/tools/linux/md2core/minidump-2-core.cc
+index 6a9e28eb..52b81c22 100644
+--- a/src/tools/linux/md2core/minidump-2-core.cc
++++ b/src/tools/linux/md2core/minidump-2-core.cc
+@@ -107,6 +107,9 @@ struct Options {
+
+ static void
+ Usage(int argc, const char* argv[]) {
++ const char *c_filename = argv[0];;
++ const char *p = strrchr(c_filename, '/');
++ const char *base = p ? p+1 : c_filename;
+ fprintf(stderr,
+ "Usage: %s [options] <minidump file>\n"
+ "\n"
+@@ -133,7 +136,7 @@ Usage(int argc, const char* argv[]) {
+ " lookups to be done in this directory rather than the filesystem\n"
+ " layout as it exists in the crashing image. This path should end\n"
+ " with a slash if it's a directory. e.g. /var/lib/breakpad/\n"
+- "", basename(argv[0]));
++ "", base);
+ }
+
+ static void
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch
new file mode 100644
index 000000000..42e073b94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch
@@ -0,0 +1,77 @@
+map the mcontext_t structure for musl
+
+Upstream-Status: Inappropriate[need to consider Android]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: git/src/client/linux/dump_writer_common/thread_info.cc
+===================================================================
+--- git.orig/src/client/linux/dump_writer_common/thread_info.cc
++++ git/src/client/linux/dump_writer_common/thread_info.cc
+@@ -229,7 +229,6 @@ void ThreadInfo::FillCPUContext(RawConte
+ }
+
+ #elif defined(__mips__)
+-
+ uintptr_t ThreadInfo::GetInstructionPointer() const {
+ return mcontext.pc;
+ }
+@@ -263,8 +262,11 @@ void ThreadInfo::FillCPUContext(RawConte
+ out->cause = 0; // Not stored in mcontext
+
+ for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i)
++#ifdef __GLIBC__
+ out->float_save.regs[i] = mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs;
+-
++#else
++ out->float_save.regs[i] = mcontext.fpregs[i];
++#endif
+ out->float_save.fpcsr = mcontext.fpc_csr;
+ #if _MIPS_SIM == _ABIO32
+ out->float_save.fir = mcontext.fpc_eir;
+Index: git/src/client/linux/dump_writer_common/ucontext_reader.cc
+===================================================================
+--- git.orig/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ git/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -247,8 +247,11 @@ void UContextReader::FillCPUContext(RawC
+ out->cause = 0; // Not reported in signal context.
+
+ for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i)
++#ifdef __GLIBC__
+ out->float_save.regs[i] = uc->uc_mcontext.fpregs.fp_r.fp_dregs[i];
+-
++#else
++ out->float_save.regs[i] = uc->uc_mcontext.fpregs[i];
++#endif
+ out->float_save.fpcsr = uc->uc_mcontext.fpc_csr;
+ #if _MIPS_SIM == _ABIO32
+ out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused.
+Index: git/src/client/linux/minidump_writer/linux_core_dumper.cc
+===================================================================
+--- git.orig/src/client/linux/minidump_writer/linux_core_dumper.cc
++++ git/src/client/linux/minidump_writer/linux_core_dumper.cc
+@@ -196,7 +196,7 @@ bool LinuxCoreDumper::EnumerateThreads()
+ info.tgid = status->pr_pgrp;
+ info.ppid = status->pr_ppid;
+ #if defined(__mips__)
+-#if defined(__ANDROID__)
++#if defined(__ANDROID__) || !defined(__GLIBC__)
+ for (int i = EF_R0; i <= EF_R31; i++)
+ info.mcontext.gregs[i - EF_R0] = status->pr_reg[i];
+ #else // __ANDROID__
+Index: git/src/tools/linux/md2core/minidump-2-core.cc
+===================================================================
+--- git.orig/src/tools/linux/md2core/minidump-2-core.cc
++++ git/src/tools/linux/md2core/minidump-2-core.cc
+@@ -516,8 +516,12 @@ ParseThreadRegisters(CrashedProcess::Thr
+ thread->mcontext.lo3 = rawregs->lo[2];
+
+ for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) {
++#ifdef __GLIBC__
+ thread->mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs =
+ rawregs->float_save.regs[i];
++#else
++ thread->mcontext.fpregs[i] = rawregs->float_save.regs[i];
++#endif
+ }
+
+ thread->mcontext.fpc_csr = rawregs->float_save.fpcsr;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mips_asm_sgidefs.patch b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mips_asm_sgidefs.patch
new file mode 100644
index 000000000..19bb56044
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/mips_asm_sgidefs.patch
@@ -0,0 +1,27 @@
+Index: lss/linux_syscall_support.h
+===================================================================
+--- lss.orig/linux_syscall_support.h
++++ lss/linux_syscall_support.h
+@@ -118,21 +118,13 @@ extern "C" {
+ #include <endian.h>
+
+ #ifdef __mips__
+-/* Include definitions of the ABI currently in use. */
+-#ifdef __ANDROID__
+-/* Android doesn't have sgidefs.h, but does have asm/sgidefs.h,
+- * which has the definitions we need.
+- */
+ #include <asm/sgidefs.h>
+-#else
+-#include <sgidefs.h>
+-#endif
+ #endif
+ #endif
+
+ /* The Android NDK's <sys/stat.h> #defines these macros as aliases
+ * to their non-64 counterparts. To avoid naming conflict, remove them. */
+-#ifdef __ANDROID__
++#if defined(__ANDROID__) || (defined(__linux__) && !defined(__glibc__))
+ /* These are restored by the corresponding #pragma pop_macro near
+ * the end of this file. */
+ # pragma push_macro("stat64")
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
new file mode 100644
index 000000000..d9773c9a6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
@@ -0,0 +1,123 @@
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+# Applications using this library needs to add link against libbreakpad_client.a.
+
+SUMMARY = "An open-source multi-platform crash reporting system"
+DESCRIPTION = "Breakpad is a library and tool suite that allows you to distribute an application to users with compiler-provided debugging information removed, record crashes in compact \"minidump\" files, send them back to your server, and produce C and C++ stack traces from these minidumps. "
+HOMEPAGE = "https://code.google.com/p/google-breakpad/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=56c24a43c81c3af6fcf590851931489e"
+SECTION = "libs"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
+
+PE = "1"
+
+PV = "1.0+git${SRCPV}"
+
+SRCREV_FORMAT = "breakpad_gtest_protobuf_lss_gyp"
+
+SRCREV_breakpad = "dea867e76f24e4a68395684b9d1cf24bcef82f20"
+SRCREV_gtest = "ec44c6c1675c25b9827aacd08c02433cccde7780"
+SRCREV_protobuf = "cb6dd4ef5f82e41e06179dcd57d3b1d9246ad6ac"
+SRCREV_lss = "a91633d172407f6c83dd69af11510b37afebb7f9"
+SRCREV_gyp = "324dd166b7c0b39d513026fa52d6280ac6d56770"
+
+SRC_URI = "git://github.com/google/breakpad;name=breakpad \
+ git://github.com/google/googletest.git;destsuffix=git/src/testing/gtest;name=gtest \
+ git://github.com/google/protobuf.git;destsuffix=git/src/third_party/protobuf/protobuf;name=protobuf \
+ git://chromium.googlesource.com/linux-syscall-support;protocol=https;destsuffix=git/src/third_party/lss;name=lss \
+ git://chromium.googlesource.com/external/gyp;protocol=https;destsuffix=git/src/tools/gyp;name=gyp \
+ file://0001-Replace-use-of-struct-ucontext-with-ucontext_t.patch \
+ file://0001-include-sys-reg.h-to-get-__WORDSIZE-on-musl-libc.patch \
+ file://0002-Avoid-using-basename.patch \
+ file://0003-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch \
+ file://0001-Turn-off-sign-compare-for-musl-libc.patch \
+ file://0002-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch \
+ file://0003-Dont-include-stab.h.patch \
+ file://0004-elf_reader.cc-include-sys-reg.h-to-get-__WORDSIZE-on.patch \
+ file://0005-md2core-Replace-basename.patch \
+ file://0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch \
+ file://mcontext.patch \
+ file://0001-disable-calls-to-getcontext-with-musl.patch \
+ file://0001-lss-Match-syscalls-to-match-musl.patch;patchdir=src/third_party/lss \
+ file://mips_asm_sgidefs.patch;patchdir=src/third_party/lss \
+"
+S = "${WORKDIR}/git"
+
+CXXFLAGS += "-D_GNU_SOURCE"
+
+COMPATIBLE_MACHINE_powerpc = "(!.*ppc).*"
+
+do_install_append() {
+ install -d ${D}${includedir}
+ install -d ${D}${includedir}/breakpad
+
+ install -d ${D}${includedir}/breakpad/client/linux/crash_generation
+ install -m 0644 ${S}/src/client/linux/crash_generation/crash_generation_client.h ${D}${includedir}/breakpad/client/linux/crash_generation/crash_generation_client.h
+
+ install -d ${D}${includedir}/breakpad/client/linux/handler/
+ install -m 0644 ${S}/src/client/linux/handler/exception_handler.h ${D}${includedir}/breakpad/client/linux/handler/exception_handler.h
+ install -m 0644 ${S}/src/client/linux/handler/minidump_descriptor.h ${D}${includedir}/breakpad/client/linux/handler/minidump_descriptor.h
+
+ install -d ${D}${includedir}/breakpad/client/linux/dump_writer_common
+ install -m 0644 ${S}/src/client/linux/dump_writer_common/mapping_info.h ${D}${includedir}/breakpad/client/linux/dump_writer_common/mapping_info.h
+ install -m 0644 ${S}/src/client/linux/dump_writer_common/thread_info.h ${D}${includedir}/breakpad/client/linux/dump_writer_common/thread_info.h
+ install -m 0644 ${S}/src/client/linux/dump_writer_common/raw_context_cpu.h ${D}${includedir}/breakpad/client/linux/dump_writer_common/raw_context_cpu.h
+
+ install -d ${D}${includedir}/breakpad/client/linux/minidump_writer
+ install -m 0644 ${S}/src/client/linux/minidump_writer/linux_dumper.h ${D}${includedir}/breakpad/client/linux/minidump_writer/linux_dumper.h
+ install -m 0644 ${S}/src/client/linux/minidump_writer/minidump_writer.h ${D}${includedir}/breakpad/client/linux/minidump_writer/minidump_writer.h
+
+ install -d ${D}${includedir}/breakpad/common
+ install -m 0644 ${S}/src/common/memory.h ${D}${includedir}/breakpad/common/memory.h
+ install -m 0644 ${S}/src/common/scoped_ptr.h ${D}${includedir}/breakpad/common/scoped_ptr.h
+ install -m 0644 ${S}/src/common/using_std_string.h ${D}${includedir}/breakpad/common/using_std_string.h
+
+ install -d ${D}${includedir}/breakpad/google_breakpad/common
+ install -m 0644 ${S}/src/google_breakpad/common/breakpad_types.h ${D}${includedir}/breakpad/google_breakpad/common/breakpad_types.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_format.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_format.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_amd64.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_amd64.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_arm.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_arm.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_arm64.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_arm64.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_mips.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_mips.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_ppc64.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_ppc64.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_ppc.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_ppc.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_sparc.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_sparc.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_cpu_x86.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_cpu_x86.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_exception_linux.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_exception_linux.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_exception_mac.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_exception_mac.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_exception_ps3.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_exception_ps3.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_exception_solaris.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_exception_solaris.h
+ install -m 0644 ${S}/src/google_breakpad/common/minidump_exception_win32.h ${D}${includedir}/breakpad/google_breakpad/common/minidump_exception_win32.h
+
+ install -d ${D}${includedir}/breakpad/third_party/lss
+ install -m 0644 ${S}/src/third_party/lss/linux_syscall_support.h ${D}${includedir}/breakpad/third_party/lss/linux_syscall_support.h
+}
+
+PACKAGES =+ "${PN}-minidump-upload ${PN}-sym-upload"
+
+FILES_${PN}-minidump-upload = "${bindir}/minidump_upload"
+FILES_${PN}-sym-upload = "${bindir}/sym_upload"
+
+
+SYSROOT_PREPROCESS_FUNCS += "breakpad_populate_sysroot"
+breakpad_populate_sysroot() {
+ sysroot_stage_dir ${D}/usr/include ${SYSROOT_DESTDIR}/usr/include
+ sysroot_stage_dir ${D}/usr/lib ${SYSROOT_DESTDIR}/usr/lib
+ sysroot_stage_dir ${D}/usr/lib ${SYSROOT_DESTDIR}/usr/lib
+}
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:2178: Error: selected processor does not support Thumb mode `it ne'
+#| {standard input}:2179: Error: Thumb does not support conditional execution
+#| {standard input}:2180: Error: selected processor does not support Thumb mode `it eq'
+#| {standard input}:2181: Error: Thumb does not support conditional execution
+#| {standard input}:2183: Error: lo register required -- `str ip,[r1,#-4]!'
+#| {standard input}:2184: Error: Thumb does not support this addressing mode -- `str r6,[r1,#-4]!'
+#| {standard input}:2191: Error: lo register required -- `ldr pc,[sp]'
+#| make: *** [src/client/linux/handler/exception_handler.o] Error 1
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.6.1.bb b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.6.1.bb
new file mode 100644
index 000000000..ffbe73fee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.6.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Cap'n Proto serialization/RPC system"
+DESCRIPTION = "Cap’n Proto is an insanely fast data interchange format and capability-based RPC system. "
+HOMEPAGE = "https://github.com/sandstorm-io/capnproto"
+SECTION = "console/tools"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=0a5b5b742baf10cc1c158579eba7fb1d"
+
+SRCREV = "c949a18da5f041a36cc218c5c4b79c7705999b4f"
+SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-${PV}"
+
+EXTRA_OECMAKE += "\
+ -DBUILD_TESTING=OFF \
+"
+
+inherit cmake
+
+S = "${WORKDIR}/git/c++"
+
+PACKAGE_BEFORE_PN = "${PN}-compiler"
+RDEPENDS_${PN}-dev += "${PN}-compiler"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+FILES_${PN}-compiler = "${bindir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb/remove-help2man.patch b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb/remove-help2man.patch
new file mode 100644
index 000000000..4358629b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb/remove-help2man.patch
@@ -0,0 +1,47 @@
+Disable building manpages so that make install doesn't fail due to lack of help2man
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com>
+---
+ configure.ac | 3 ---
+ doc/Makefile.am | 5 -----
+ 2 files changed, 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ee7eca0..1f0d924 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -134,9 +134,6 @@ dnl check that the required tools are available to generate documentation
+ if test "$HAS_MAKEINFO" != "yes" ; then
+ AC_MSG_ERROR([Please install makeinfo before installing])
+ fi
+-if test "$HAS_HELP2MAN" != "yes" ; then
+- AC_MSG_ERROR([Please install help2man])
+-fi
+
+ dnl Checking for log10 function in math - I would like to remove this
+ AC_CHECK_LIB(m, log10)
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 60662f6..0ae0013 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,15 +1,10 @@
+ info_TEXINFOS = cgdb.texi
+ cgdb_TEXINFOS = gpl.texi
+
+-dist_man_MANS = cgdb.1
+ EXTRA_DIST = cgdb.txt
+
+ dist_pkgdata_DATA = cgdb.txt
+
+-# generate the man page using help2man.
+-cgdb.1:
+- help2man --output=$(top_srcdir)/doc/cgdb.1 $(top_builddir)/cgdb/cgdb$(EXEEXT)
+-
+ cgdb.txt: cgdb.texi $(srcdir)/version.texi $(cgdb_TEXINFOS)
+ TEXTS = cgdb.txt
+ text-am: $(TEXTS)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.6.8.bb b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.6.8.bb
new file mode 100644
index 000000000..74019fb62
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.6.8.bb
@@ -0,0 +1,21 @@
+SUMMARY = "curses-based interface to GDB"
+DESCRIPTION = "cgdb is a lightweight curses (terminal-based) interface to the GNU Debugger (GDB)."
+HOMEPAGE = "http://cgdb.github.io/"
+SECTION = "devel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "flex-native readline ncurses"
+
+inherit autotools
+
+SRC_URI = "http://cgdb.me/files/${BP}.tar.gz \
+ file://remove-help2man.patch"
+SRC_URI[md5sum] = "7bd38c79bf4d794d239928fef401fca3"
+SRC_URI[sha256sum] = "be203e29be295097439ab67efe3dc8261f742c55ff3647718d67d52891f4cf41"
+
+CACHED_CONFIGUREVARS = "ac_cv_file__dev_ptmx=yes ac_cv_rl_version=6.2"
+EXTRA_OECONF = "--with-readline=${STAGING_LIBDIR} \
+ --with-ncurses=${STAGING_LIBDIR}"
+
+RDEPENDS_${PN} = "gdb"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9-avahi.service b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9-avahi.service
new file mode 100644
index 000000000..cb9b6e2db
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9-avahi.service
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+
+<service-group>
+ <name replace-wildcards="yes">Cloud9 IDE on %h</name>
+ <service>
+ <type>_http._tcp</type>
+ <port>3000</port>
+ </service>
+</service-group>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9.service b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9.service
new file mode 100644
index 000000000..495b131ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/cloud9.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Cloud9 IDE
+ConditionPathExists=|/var/lib/cloud9
+
+[Service]
+Restart=always
+EnvironmentFile=-/etc/default/node
+ExecStart=/usr/bin/node4 /usr/share/cloud9/bin/cloud9.js -l 0.0.0.0 -w /var/lib/cloud9 -p 3000
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/index.js b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/index.js
new file mode 100644
index 000000000..88c9a19f0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloud9/cloud9/index.js
@@ -0,0 +1,2 @@
+var o3 = require('./o3.js')
+module.exports = o3.xml;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit/cross.patch b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit/cross.patch
new file mode 100644
index 000000000..9e5058f2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit/cross.patch
@@ -0,0 +1,62 @@
+From ab0eec78382bd00ce533aec2c84fd50c1733033d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 5 Jan 2013 19:42:51 -0800
+
+---
+ configure | 32 ++++++++++++++++++--------------
+ 1 file changed, 18 insertions(+), 14 deletions(-)
+
+diff --git a/configure b/configure
+index 76c2812..78ce2ff 100755
+--- a/configure
++++ b/configure
+@@ -535,14 +535,18 @@ else
+ GZIP_SUFFIX=".gz"
+ fi
+
+-printf "Finding suitable compiler........"
+-CC=`pathsearch "${CC:-cc}"`
+-if test -z "$CC" -o ! -x "$CC"; then
+- CC=`pathsearch "${CC:-gcc}"`
++if test -z "$CC"; then
++ printf "Finding suitable compiler........"
++ CC=`pathsearch "${CC:-cc}"`
++ if test -z "$CC" -o ! -x "$CC"; then
++ CC=`pathsearch "${CC:-gcc}"`
++ fi
+ fi
+ assert "$CC" "not found"
+
+-cat << EOF > .1.c
++if test -z "$COMPILER"; then
++
++ cat << EOF > .1.c
+ #include <stdio.h>
+ int main(void) {
+ #if defined(_WIN32)
+@@ -569,16 +573,16 @@ int main(void) {
+ #endif
+ }
+ EOF
++ $CC -o .1 .1.c
++ COMPILER=`./.1`
++ r=$?
++ rm -f .1.c .1
+
+-$CC -o .1 .1.c
+-COMPILER=`./.1`
+-r=$?
+-rm -f .1.c .1
+-
+-if test "$r" -ne 0; then
+- assert "" "update compiler"
+-else
+- echo "success [$CC]"
++ if test "$r" -ne 0; then
++ assert "" "update compiler"
++ else
++ echo "success [$CC]"
++ fi
+ fi
+
+ if test "$COMPILER" = "suncc"; then
diff --git a/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb
new file mode 100644
index 000000000..19767c311
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Concurrency Kit provides a plethora of concurrency primitives, \
+safe memory reclamation mechanisms and non-blocking data structures \
+designed to aid in the design and implementation of high performance \
+concurrent systems."
+
+LICENSE = "BSD & Apache-2.0"
+HOMEPAGE = "http://concurrencykit.org"
+SECTION = "base"
+
+PV = "0.5.1+git${SRCPV}"
+SRCREV = "f97d3da5c375ac2fc5a9173cdd36cb828915a2e1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a0b24c1a8f9ad516a297d055b0294231"
+SRC_URI = "git://github.com/concurrencykit/ck.git \
+ file://cross.patch \
+"
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = "(i.86|x86_64|powerpc|powerpc64).*-linux*"
+
+inherit autotools-brokensep
+
+PLAT_powerpc64 = "ppc64"
+PLAT ?= "${HOST_ARCH}"
+
+do_configure () {
+ export PLATFORM=${PLAT}
+ export COMPILER='gcc'
+ ${S}/configure \
+ --prefix=${prefix} \
+ --includedir=${includedir} \
+ --libdir=${libdir}
+}
+
+do_compile () {
+ oe_runmake
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20170122.bb b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20170122.bb
new file mode 100644
index 000000000..7a70f7576
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20170122.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Linux tool to dump x86 CPUID information about the CPU(s)"
+DESCRIPTION = "cpuid dumps detailed information about the CPU(s) gathered \
+from the CPUID instruction, and also determines the exact model of CPU(s). \
+It supports Intel, AMD, and VIA CPUs, as well as older Transmeta, Cyrix, \
+UMC, NexGen, Rise, and SiS CPUs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://www.etallen.com/${BPN}/${BP}.src.tar.gz"
+SRC_URI[md5sum] = "1c46a6662626c5a6eaca626f23a5a7d7"
+SRC_URI[sha256sum] = "667612aae6704341dd10844e97c84c5c5c8700817a5937a3c293b55013bc4865"
+
+COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
+
+# The install rule from the Makefile has hardcoded paths, so we duplicate
+# the actions to accommodate different paths.
+do_install () {
+ install -d -m755 ${D}/${bindir}
+ install -m755 ${B}/cpuid ${D}/${bindir}/cpuid
+ install -d -m755 ${D}/${mandir}
+ install -m444 ${B}/cpuid.man.gz ${D}/${mandir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cscope/cscope_15.8b.bb b/meta-openembedded/meta-oe/recipes-devtools/cscope/cscope_15.8b.bb
new file mode 100644
index 000000000..8aa5947d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cscope/cscope_15.8b.bb
@@ -0,0 +1,24 @@
+# Copyright (C) 2015 Igor Santos <igor.santos@aker.com.br>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Cscope is a text screen based source browser"
+DESCRIPTION = "Cscope is a developer's tool for browsing source code. \
+ It has an impeccable Unix pedigree, having been originally \
+ developed at Bell Labs back in the days of the PDP-11. \
+ Cscope was part of the official AT&T Unix distribution for \
+ many years, and has been used to manage projects involving 20 \
+ million lines of code!"
+
+HOMEPAGE = "http://cscope.sourceforge.net/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d4667b67b483823043fcffa489ea343b"
+
+inherit autotools
+
+DEPENDS += "ncurses"
+
+SRC_URI = "http://downloads.sourceforge.net/project/cscope/cscope/${PV}/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "8f9409a238ee313a96f9f87fe0f3b176"
+SRC_URI[sha256sum] = "4889d091f05aa0845384b1e4965aa31d2b20911fb2c001b2cdcffbcb7212d3af"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_5.8.bb b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_5.8.bb
new file mode 100644
index 000000000..d006d83aa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_5.8.bb
@@ -0,0 +1,25 @@
+# Copyright (C) 2015 Igor Santos <igor.santos@aker.com.br>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Exuberant Ctags"
+DESCRIPTION = "Exuberant Ctags is a multilanguage reimplementation of the \
+ Unix ctags utility. Ctags generates an index of source code \
+ definitions which is used by numerous editors and utilities \
+ to instantly locate the definitions."
+
+HOMEPAGE = "http://ctags.sourceforge.net/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+inherit autotools-brokensep
+
+SRC_URI = "http://prdownloads.sourceforge.net/${BPN}/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "c00f82ecdcc357434731913e5b48630d"
+SRC_URI[sha256sum] = "0e44b45dcabe969e0bbbb11e30c246f81abe5d32012db37395eb57d66e9e99c7"
+
+do_install() {
+ install -Dm 755 ${B}/ctags ${D}${bindir}/ctags
+ install -Dm 644 ${B}/ctags.1 ${D}${mandir}/man1/ctags.1
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap/devices.tar.gz b/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap/devices.tar.gz
new file mode 100644
index 000000000..20eaba3ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap/devices.tar.gz
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap_1.0.67.bb b/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap_1.0.67.bb
new file mode 100644
index 000000000..8472aca6c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/debootstrap/debootstrap_1.0.67.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Install a Debian system into a subdirectory"
+HOMEPAGE = "https://wiki.debian.org/Debootstrap"
+SECTION = "devel"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=1e68ced6e1689d4cd9dac75ff5225608"
+
+inherit pkgconfig
+
+SRC_URI = "\
+ http://http.debian.net/debian/pool/main/d/debootstrap/debootstrap_1.0.67.tar.gz \
+ file://devices.tar.gz;unpack=0 \
+"
+
+SRC_URI[md5sum] = "eacabfe2e45415af60b1d74c3a23418a"
+SRC_URI[sha256sum] = "0a12e0a2bbff185d47711a716b1f2734856100e8784361203e834fed0cffa51b"
+
+S = "${WORKDIR}/${BP}"
+
+# All Makefile does is creation of devices.tar.gz, which fails in OE build, we use
+# static devices.tar.gz as work around
+# | NOTE: make -j 8 -e MAKEFLAGS=
+# | rm -rf dev
+# | mkdir -p dev
+# | chown 0:0 dev
+# | chown: changing ownership of `dev': Operation not permitted
+# | make: *** [devices.tar.gz] Error 1
+# | WARNING: exit code 1 from a shell command.
+do_compile_prepend() {
+ cp ${WORKDIR}/devices.tar.gz ${B}
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+ chown -R root:root ${D}${datadir}/debootstrap
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu/configure.patch b/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu/configure.patch
new file mode 100644
index 000000000..2eb8af713
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu/configure.patch
@@ -0,0 +1,45 @@
+Index: dejagnu-1.4.4/configure.in
+===================================================================
+--- dejagnu-1.4.4.orig/configure.in 2014-07-18 07:05:49.997481207 +0000
++++ dejagnu-1.4.4/configure.in 2014-07-18 07:05:50.085481210 +0000
+@@ -1,10 +1,10 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_PREREQ(2.13)
+-AC_INIT(runtest.exp)
++AC_INIT(dejagnu, 1.4.4)
+ dnl AC_CONFIG_AUX_DIR(..)
+
+ dnl These are required by automake
+-AM_INIT_AUTOMAKE(dejagnu, 1.4.4)
++AM_INIT_AUTOMAKE([foreign])
+ AM_MAINTAINER_MODE
+ AC_PROG_MAKE_SET
+
+Index: dejagnu-1.4.4/example/calc/configure.in
+===================================================================
+--- dejagnu-1.4.4.orig/example/calc/configure.in 2002-04-26 03:32:40.000000000 +0000
++++ dejagnu-1.4.4/example/calc/configure.in 2014-07-18 07:11:59.085491266 +0000
+@@ -1,8 +1,8 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_PREREQ(2.5)
+-AC_INIT(calc.c)
++AC_INIT(calc, 1.1)
+ AM_CONFIG_HEADER(calc.h)
+-AM_INIT_AUTOMAKE(calc, 1.1)
++AM_INIT_AUTOMAKE([foreign])
+
+ AC_PROG_CC
+ AC_PROG_INSTALL
+Index: dejagnu-1.4.4/example/hello/configure.in
+===================================================================
+--- dejagnu-1.4.4.orig/example/hello/configure.in 2002-08-31 05:46:16.000000000 +0000
++++ dejagnu-1.4.4/example/hello/configure.in 2014-07-18 07:12:23.721491937 +0000
+@@ -25,7 +25,7 @@
+ # ------------------------------------------------------------------------
+
+ AC_INIT(helloworld, demo-version, philip.wilsey@ieee.org)
+-AM_INIT_AUTOMAKE(helloworld, demo-version)
++AM_INIT_AUTOMAKE([foreign])
+
+ #AC_CONFIG_SRCDIR([hello.cc])
+ #AC_CONFIG_HEADER([config.h])
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu_1.4.4.bb b/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu_1.4.4.bb
new file mode 100644
index 000000000..63726b232
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dejagnu/dejagnu_1.4.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "GNU unit testing framework, written in Expect and Tcl"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
+SECTION = "devel"
+
+inherit autotools
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://configure.patch"
+
+SRC_URI[md5sum] = "053f18fd5d00873de365413cab17a666"
+SRC_URI[sha256sum] = "d0fbedef20fb0843318d60551023631176b27ceb1e11de7468a971770d0e048d"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/0001-undefined-strdup-macro.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/0001-undefined-strdup-macro.patch
new file mode 100644
index 000000000..ea940e993
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/0001-undefined-strdup-macro.patch
@@ -0,0 +1,29 @@
+From 9c2438e85e4d7deb9422be257a25e8ab16093821 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Dec 2016 14:02:02 -0800
+Subject: [PATCH] undefined strdup macro
+
+build fails due to strdup define in string2.h
+system header.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dmalloc.h.3 | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/dmalloc.h.3 b/dmalloc.h.3
+index 8bda997..b70c07e 100644
+--- a/dmalloc.h.3
++++ b/dmalloc.h.3
+@@ -1,5 +1,8 @@
+ /* NOTE: start of $Id: dmalloc.h.4,v 1.15 2007/05/14 17:23:37 gray Exp $ */
+
++#undef strndup
++#undef strdup
++
+ /* dmalloc version defines */
+ #define DMALLOC_VERSION_MAJOR 5 /* X.0.0 */
+ #define DMALLOC_VERSION_MINOR 5 /* 0.X.0 */
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/02-Makefile.in.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/02-Makefile.in.patch
new file mode 100644
index 000000000..967643bad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/02-Makefile.in.patch
@@ -0,0 +1,312 @@
+Description: Changes for building shared libraries
+ This patch includes changes for building shared libraries with PIC object
+ files and the correct soname and libname.
+Author: Daniel Rus Morales <danirus@tol-project.org>
+
+Index: dmalloc-5.5.2/Makefile.in
+===================================================================
+--- dmalloc-5.5.2.orig/Makefile.in
++++ dmalloc-5.5.2/Makefile.in
+@@ -41,7 +41,7 @@ LIBRARY = lib$(MODULE).a
+
+ # thread version of the library
+ LIB_TH = lib$(MODULE)th.a
+-LIB_TH_SL = lib$(MODULE)th.@shlibext@
++LIB_TH_SL = lib$(MODULE)th.@shlibext@.5.5.2
+ @TH_ON@BUILD_ALL_1 = threads
+ @TH_ON@INSTALL_LIB_1 = installth
+ @SL_ON@BUILD_THREADS_1 = $(LIB_TH_SL)
+@@ -50,8 +50,8 @@ LIB_TH_SL = lib$(MODULE)th.@shlibext@
+ @TH_ON@@SL_ON@INSTALL_LIB_2 = installthsl
+
+ # C++ version of the library
+-LIB_CXX = lib$(MODULE)xx.a
+-LIB_CXX_SL = lib$(MODULE)xx.@shlibext@
++LIB_CXX = lib$(MODULE)cxx.a
++LIB_CXX_SL = lib$(MODULE)cxx.@shlibext@.5.5.2
+ @CXX_ON@BUILD_ALL_3 = $(LIB_CXX)
+ @CXX_ON@INSTALL_LIB_3 = installcxx
+ @SL_ON@BUILD_CXX_3 = $(LIB_CXX_SL)
+@@ -61,7 +61,7 @@ LIB_CXX_SL = lib$(MODULE)xx.@shlibext@
+
+ # threads + C++
+ LIB_TH_CXX = lib$(MODULE)thcxx.a
+-LIB_TH_CXX_SL = lib$(MODULE)thcxx.@shlibext@
++LIB_TH_CXX_SL = lib$(MODULE)thcxx.@shlibext@.5.5.2
+ @TH_ON@@CXX_ON@BUILD_ALL_5 = $(LIB_TH_CXX)
+ @TH_ON@@CXX_ON@INSTALL_LIB_5 = installthcxx
+ @TH_ON@BUILD_CXX_5 = $(LIB_TH_CXX)
+@@ -76,7 +76,7 @@ LIB_TH_CXX_SL = lib$(MODULE)thcxx.@shlib
+ @CXX_ON@@SL_ON@INSTALL_THREADS_6 = installthcxxsl
+
+ # shared versions of the libraries
+-LIB_SL = lib$(MODULE).@shlibext@
++LIB_SL = lib$(MODULE).@shlibext@.5.5.2
+ @SL_ON@BUILD_ALL_7 = $(LIB_SL)
+ @SL_ON@INSTALL_LIB_7 = installsl
+ @SL_ON@BUILD_TH_CXX_7 = $(LIB_TH_CXX_SL)
+@@ -145,9 +145,13 @@ SHELL = /bin/sh
+
+ HFLS = dmalloc.h
+ OBJS = arg_check.o compat.o dmalloc_rand.o dmalloc_tab.o env.o heap.o
++OBJS_SL = arg_check_sl.o compat_sl.o dmalloc_rand_sl.o dmalloc_tab_sl.o env_sl.o heap_sl.o
+ NORMAL_OBJS = chunk.o error.o malloc.o
++NORMAL_OBJS_SL = chunk_sl.o error_sl.o malloc_sl.o
+ THREAD_OBJS = chunk_th.o error_th.o malloc_th.o
++THREAD_OBJS_SL = chunk_th_sl.o error_th_sl.o malloc_th_sl.o
+ CXX_OBJS = dmallocc.o
++CXX_OBJS_SL = dmallocc_sl.o
+
+ CFLAGS = $(CCFLAGS)
+ TEST = $(MODULE)_t
+@@ -160,9 +164,9 @@ all : $(BUILD_ALL)
+
+ clean :
+ rm -f $(A_OUT) core *.o *.t
+- rm -f $(LIBRARY) $(LIB_TH) $(LIB_CXX) $(LIB_TH_CXX) $(TEST) $(TEST_FC)
+- rm -f $(LIB_TH_SL) $(LIB_CXX_SL) $(LIB_TH_CXX_SL) $(LIB_SL)
++ rm -f $(TEST) $(TEST_FC)
+ rm -f $(UTIL) dmalloc.h
++ rm -f lib$(MODULE)*.*
+
+ realclean : clean
+
+@@ -181,43 +185,43 @@ installincs : $(HFLS)
+ $(INSTALL_DATA) $(HFLS) $(includedir)
+
+ installthsl : $(LIB_TH_SL)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIB_TH_SL) $(libdir)
++ $(srcdir)/mkinstalldirs $(shlibdir)
++ $(INSTALL) $(LIB_TH_SL) $(shlibdir)
+
+ installth : $(INSTALL_THREADS)
+ $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIB_TH) $(libdir)
++ $(INSTALL) $(LIB_TH) $(libdir)
+ @CXX_OFF@ @echo "Enter 'make installthcxx' to install the threaded C++ library"
+ @SL_OFF@ @echo "Enter 'make installthsl' to install the threaded shared-library"
+
+ installthcxxsl : $(LIB_TH_CXX_SL)
+ $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL_PROGRAM) $(LIB_TH_CXX_SL) $(shlibdir)
++ $(INSTALL) $(LIB_TH_CXX_SL) $(shlibdir)
+
+ installthcxx : $(INSTALL_TH_CXX)
+ $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIB_TH_CXX) $(libdir)
++ $(INSTALL) $(LIB_TH_CXX) $(libdir)
+ @SL_OFF@ @echo "Enter 'make installthcxxsl' to install the threaded C++ shared-library"
+
+ installcxxsl : $(LIB_CXX_SL)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIB_CXX_SL) $(libdir)
++ $(srcdir)/mkinstalldirs $(shlibdir)
++ $(INSTALL) $(LIB_CXX_SL) $(shlibdir)
+
+ installcxx : $(INSTALL_CXX)
+ $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIB_CXX) $(libdir)
++ $(INSTALL) $(LIB_CXX) $(libdir)
+ @TH_OFF@ @echo "Enter 'make installthcxx' to install the threaded C++ library"
+ @SL_OFF@ @echo "Enter 'make installcxxsl' to install the C++ shared-library"
+
+ installsl : $(LIB_SL)
+ $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL_PROGRAM) $(LIB_SL) $(shlibdir)
++ $(INSTALL) $(LIB_SL) $(shlibdir)
+ @CXX_OFF@ @echo "Enter 'make installcxxsl' to install the C++ shared-library"
+ @TH_OFF@ @echo "Enter 'make installthsl' to install thread shared-library"
+
+ installlib : $(INSTALL_LIB)
+ $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL_PROGRAM) $(LIBRARY) $(libdir)
++ $(INSTALL) $(LIBRARY) $(libdir)
+ @RANLIB@ $(libdir)/$(LIBRARY)
+ @SL_OFF@ @echo "Enter 'make installsl' to install $(LIB_SL) in $(shlibdir)"
+ @CXX_OFF@ @echo "Enter 'make installcxx' to install the C++ library"
+@@ -255,10 +259,8 @@ shlib : $(BUILD_SL)
+ # NOTE: you may have to edit the configure.ac script to get this to
+ # work on your operating system. Please send feedback to the author
+ # via: http://256.com/gray/email.html
+-$(LIB_SL) : $(LIBRARY)
+- rm -f $@ $@.t
+- @shlinkargs@ $(LIBRARY) $(OBJS) $(NORMAL_OBJS)
+- mv $@.t $@
++$(LIB_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL)
++ $(CC) -shared -Wl,-soname,libdmalloc.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL)
+
+ $(LIBRARY) : $(OBJS) $(NORMAL_OBJS)
+ ar cr $@ $?
+@@ -268,32 +270,26 @@ $(LIB_TH) : $(OBJS) $(THREAD_OBJS)
+ ar cr $@ $?
+ @RANLIB@ $@
+
+-$(LIB_TH_SL) : $(LIB_TH)
+- rm -f $@ $@.t
+- @shlinkargs@ $(LIB_TH) $(OBJS) $(THREAD_OBJS)
+- mv $@.t $@
++$(LIB_TH_SL) : $(OBJS_SL) $(THREAD_OBJS_SL)
++ $(CC) -shared -Wl,-soname,libdmallocth.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL)
+
+ $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS)
+ ar cr $@ $?
+ @RANLIB@ $@
+
+-$(LIB_CXX_SL) : $(LIB_CXX)
+- rm -f $@ $@.t
+- @shlinkargs@ $(LIB_CXX) $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS)
+- mv $@.t $@
++$(LIB_CXX_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
++ $(CC) -shared -Wl,-soname,libdmalloccxx.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
+
+ $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS)
+ ar cr $@ $?
+ @RANLIB@ $@
+
+-$(LIB_TH_CXX_SL) : $(LIB_TH_CXX)
+- rm -f $@ $@.t
+- @shlinkargs@ $(LIB_TH_CXX) $(OBJS) $(THREAD_OBJS) $(CXX_OBJS)
+- mv $@.t $@
++$(LIB_TH_CXX_SL) : $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
++ $(CC) -shared -Wl,-soname,libdmallocthcxx.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
+
+-threadssl : $(LIB_TH_SL)
++threadssl : $(LIB_TH_SL)$(ver)
+
+-threadscxxsl : $(LIB_TH_CXX_SL)
++threadscxxsl : $(LIB_TH_CXX_SL)$(ver)
+
+ threadscxx : $(BUILD_TH_CXX)
+ @SL_OFF@ @echo "Enter 'make threadscxxsl' to build the threaded C++ shared-library"
+@@ -302,7 +298,7 @@ threads : $(BUILD_THREADS)
+ @CXX_OFF@ @echo "Enter 'make threadscxx' to build the threaded C++ library"
+ @SL_OFF@ @echo "Enter 'make threadssl' to build the threaded shared library"
+
+-cxxsl : $(LIB_CXX_SL)
++cxxsl : $(LIB_CXX_SL)$(ver)
+
+ cxx : $(BUILD_CXX)
+ @SL_OFF@ @echo "Enter 'make cxxsl' to build the cxx shared library"
+@@ -371,6 +367,11 @@ dmallocc.o : $(srcdir)/dmallocc.cc
+ $(CXX) $(CFLAGS) $(CPPFLAGS) $(DEFS) $(INCS) -c $(srcdir)/dmallocc.cc \
+ -o ./$@
+
++dmallocc_sl.o : $(srcdir)/dmallocc.cc
++ rm -f $@
++ $(CXX) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $(srcdir)/dmallocc.cc \
++ -o ./$@
++
+ #
+ # auto configure settings - uncomment if you are doing configure
+ # development on the library
+@@ -395,38 +396,109 @@ dmallocc.o : $(srcdir)/dmallocc.cc
+
+ arg_check.o: arg_check.c conf.h settings.h dmalloc.h chunk.h debug_tok.h \
+ dmalloc_loc.h error.h arg_check.h
++arg_check_sl.o: arg_check.c conf.h settings.h dmalloc.h chunk.h debug_tok.h \
++ dmalloc_loc.h error.h arg_check.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ chunk.o: chunk.c conf.h settings.h dmalloc.h chunk.h chunk_loc.h \
+ dmalloc_loc.h compat.h debug_tok.h dmalloc_rand.h dmalloc_tab.h error.h \
+ error_val.h heap.h
++chunk_sl.o: chunk.c conf.h settings.h dmalloc.h chunk.h chunk_loc.h \
++ dmalloc_loc.h compat.h debug_tok.h dmalloc_rand.h dmalloc_tab.h error.h \
++ error_val.h heap.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ compat.o: compat.c conf.h settings.h dmalloc.h compat.h dmalloc_loc.h
++compat_sl.o: compat.c conf.h settings.h dmalloc.h compat.h dmalloc_loc.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc.o: dmalloc.c conf.h settings.h dmalloc_argv.h dmalloc.h compat.h \
+ debug_tok.h dmalloc_loc.h env.h error_val.h version.h
++dmalloc_sl.o: dmalloc.c conf.h settings.h dmalloc_argv.h dmalloc.h compat.h \
++ debug_tok.h dmalloc_loc.h env.h error_val.h version.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc_argv.o: dmalloc_argv.c conf.h settings.h dmalloc_argv.h \
+ dmalloc_argv_loc.h compat.h
++dmalloc_argv_sl.o: dmalloc_argv.c conf.h settings.h dmalloc_argv.h \
++ dmalloc_argv_loc.h compat.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc_fc_t.o: dmalloc_fc_t.c conf.h settings.h dmalloc.h dmalloc_argv.h \
+ dmalloc_rand.h debug_tok.h dmalloc_loc.h error_val.h
++dmalloc_fc_t_sl.o: dmalloc_fc_t.c conf.h settings.h dmalloc.h dmalloc_argv.h \
++ dmalloc_rand.h debug_tok.h dmalloc_loc.h error_val.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc_rand.o: dmalloc_rand.c dmalloc_rand.h
++dmalloc_rand_sl.o: dmalloc_rand.c dmalloc_rand.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc_t.o: dmalloc_t.c conf.h settings.h compat.h dmalloc.h \
+ dmalloc_argv.h dmalloc_rand.h arg_check.h debug_tok.h dmalloc_loc.h \
+ error_val.h heap.h
++dmalloc_t_sl.o: dmalloc_t.c conf.h settings.h compat.h dmalloc.h \
++ dmalloc_argv.h dmalloc_rand.h arg_check.h debug_tok.h dmalloc_loc.h \
++ error_val.h heap.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ dmalloc_tab.o: dmalloc_tab.c conf.h settings.h chunk.h compat.h dmalloc.h \
+ dmalloc_loc.h error.h error_val.h dmalloc_tab.h dmalloc_tab_loc.h
++dmalloc_tab_sl.o: dmalloc_tab.c conf.h settings.h chunk.h compat.h dmalloc.h \
++ dmalloc_loc.h error.h error_val.h dmalloc_tab.h dmalloc_tab_loc.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ env.o: env.c conf.h settings.h dmalloc.h compat.h dmalloc_loc.h \
+ debug_tok.h env.h error.h
++env_sl.o: env.c conf.h settings.h dmalloc.h compat.h dmalloc_loc.h \
++ debug_tok.h env.h error.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ error.o: error.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
+ dmalloc_loc.h env.h error.h error_val.h version.h
++error_sl.o: error.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
++ dmalloc_loc.h env.h error.h error_val.h version.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ heap.o: heap.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
+ dmalloc_loc.h error.h error_val.h heap.h
++heap_sl.o: heap.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
++ dmalloc_loc.h error.h error_val.h heap.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ malloc.o: malloc.c conf.h settings.h dmalloc.h chunk.h compat.h \
+ debug_tok.h dmalloc_loc.h env.h error.h error_val.h heap.h \
+ malloc_funcs.h return.h
++malloc_sl.o: malloc.c conf.h settings.h dmalloc.h chunk.h compat.h \
++ debug_tok.h dmalloc_loc.h env.h error.h error_val.h heap.h \
++ malloc_funcs.h return.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ protect.o: protect.c conf.h settings.h dmalloc.h dmalloc_loc.h error.h \
+ heap.h protect.h
++protect_sl.o: protect.c conf.h settings.h dmalloc.h dmalloc_loc.h error.h \
++ heap.h protect.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ chunk_th.o: chunk.c conf.h settings.h dmalloc.h chunk.h chunk_loc.h \
+ dmalloc_loc.h compat.h debug_tok.h dmalloc_rand.h dmalloc_tab.h error.h \
+ error_val.h heap.h
++chunk_th_sl.o: chunk.c conf.h settings.h dmalloc.h chunk.h chunk_loc.h \
++ dmalloc_loc.h compat.h debug_tok.h dmalloc_rand.h dmalloc_tab.h error.h \
++ error_val.h heap.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ error_th.o: error.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
+ dmalloc_loc.h env.h error.h error_val.h version.h
++error_th_sl.o: error.c conf.h settings.h dmalloc.h chunk.h compat.h debug_tok.h \
++ dmalloc_loc.h env.h error.h error_val.h version.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
+ malloc_th.o: malloc.c conf.h settings.h dmalloc.h chunk.h compat.h \
+ debug_tok.h dmalloc_loc.h env.h error.h error_val.h heap.h \
+ malloc_funcs.h return.h
++malloc_th_sl.o: malloc.c conf.h settings.h dmalloc.h chunk.h compat.h \
++ debug_tok.h dmalloc_loc.h env.h error.h error_val.h heap.h \
++ malloc_funcs.h return.h
++ rm -f $@
++ $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(DEFS) $(INCS) -c $< -o ./$@
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/03-threads.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/03-threads.patch
new file mode 100644
index 000000000..be0945257
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/03-threads.patch
@@ -0,0 +1,18 @@
+Description: Fix LOCK_THREADS in settings.dist
+ This patch takes into account that if --enable-threads is used, LOCK_THREADS
+ doesn't get updated
+Author: Markus Stenberg <markus.stenberg@conformiq.com>
+Author: Daniel Rus Morales <danirus@tol-project.org>
+Bug-Debian: http://bugs.debian.org/276457
+
+--- dmalloc-5.5.1.orig/settings.dist 2007-03-25 21:16:43.000000000 +0200
++++ dmalloc-5.5.1/settings.dist 2007-04-27 20:56:49.000000000 +0200
+@@ -409,7 +409,7 @@
+ */
+
+ #ifndef LOCK_THREADS
+-#define LOCK_THREADS 0
++#define LOCK_THREADS 1
+ #endif
+
+ #if LOCK_THREADS
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/100-use-xtools.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/100-use-xtools.patch
new file mode 100644
index 000000000..e1db69059
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/100-use-xtools.patch
@@ -0,0 +1,109 @@
+This patch makes configure use the cross ld and ar rather than the native tools.
+
+It was build up by Yann E. MORIN <yann.morin.1998@anciens.enib.fr> from some
+bits gathered from buildroot, which is LGPL v2.1
+License for dmalloc is:
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies, and that the name of Gray Watson not be used in advertising
+ * or publicity pertaining to distribution of the document or software
+ * without specific, written prior permission.
+ *
+ * Gray Watson makes no representations about the suitability of the
+ * software described herein for any purpose. It is provided "as is"
+ * without express or implied warranty.
+
+I personnaly believe that the resulting code should therefore be
+LGPL v2.1, but don't believe me, ask your lawyers!
+
+Index: dmalloc-5.5.2/configure.ac
+===================================================================
+--- dmalloc-5.5.2.orig/configure.ac
++++ dmalloc-5.5.2/configure.ac
+@@ -69,6 +69,15 @@ if test "$ac_cv_prog_cc_stdc" = "no" ; t
+ fi
+ AC_PROG_INSTALL
+ AC_PROG_RANLIB
++AN_MAKEVAR([AR], [AC_PROG_AR])
++AN_PROGRAM([ar], [AC_PROG_AR])
++AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
++AC_PROG_AR
++AN_MAKEVAR([LD], [AC_PROG_LD])
++AN_PROGRAM([ld], [AC_PROG_LD])
++AC_DEFUN([AC_PROG_LD], [AC_CHECK_TOOL(LD, ld, :)])
++AC_PROG_LD
++
+ AC_C_CONST
+
+ # we need this for various settings
+@@ -131,14 +140,14 @@ AC_SUBST(shlibdir)
+ AC_MSG_CHECKING([shared library link args])
+ AC_COMPILE_IFELSE([ int foo(int val) { return val + 1; } ],[
+ # so now we try to create an archive from the compiled .o file
+- (ar cr conftest.a conftest.o) 2>&5
++ (${ac_cv_prog_AR} cr conftest.a conftest.o) 2>&5
+ # see which shared-library ld commands work
+ #
+ # Darwin/Mac OS X - Terry Teague
+ # username terry_teague at domain users.sourceforge.net
+ ac_cv_shared_lib_link_objs=no
+ if test `uname` = "Darwin"; then
+- if (ld -dylib -o conftest.so.t -lc conftest.a) 2>&5; then
++ if (${ac_cv_prog_LD} -dylib -o conftest.so.t -lc conftest.a) 2>&5; then
+ # By convention on some platforms
+ # libLLL.so, libLLL.X.so are symlinks to libLLL.X.Y.Z.so
+ # where X.Y.Z is version # (major.minor.increment) of the library
+@@ -156,12 +165,12 @@ AC_COMPILE_IFELSE([ int foo(int val) { r
+ ac_cv_shared_link_args='# Could not configure shlib linking'
+ enable_shlib=no
+ fi
+- elif (ld -shared --whole-archive -soname conftest.so -o conftest.so.t conftest.a) 2>&5; then
+- ac_cv_shared_link_args='ld -shared --whole-archive -soname $@ -o $@.t'
+- elif (ld -shared -o conftest.so.t -all -soname conftest.so.t -none -lc -all conftest.a) 2>&5; then
+- ac_cv_shared_link_args='ld -shared -o $@.t -all -soname $@ -none -lc -all'
+- elif (ld -G -o conftest.so.t conftest.a) 2>&5; then
+- ac_cv_shared_link_args='ld -G -o $@.t'
++ elif (${ac_cv_prog_LD} -shared --whole-archive -soname conftest.so -o conftest.so.t conftest.a) 2>&5; then
++ ac_cv_shared_link_args='${CC} -Wl,-shared -Wl,--whole-archive -Wl,-soname,$@ -o $@.t -Wl,--no-whole-archive'
++ elif (${ac_cv_prog_LD} -shared -o conftest.so.t -all -soname conftest.so.t -none -lc -all conftest.a) 2>&5; then
++ ac_cv_shared_link_args='${CC} -Wl,-shared -o $@.t -Wl,-all -Wl,-soname,$@ -Wl,-none -lc -Wl,-all'
++ elif (${ac_cv_prog_LD} -G -o conftest.so.t conftest.a) 2>&5; then
++ ac_cv_shared_link_args='${CC} -Wl,-G -o $@.t'
+ else
+ # oh well, toss an error
+ ac_cv_shared_link_args='# Could not configure shlib linking'
+Index: dmalloc-5.5.2/Makefile.in
+===================================================================
+--- dmalloc-5.5.2.orig/Makefile.in
++++ dmalloc-5.5.2/Makefile.in
+@@ -263,25 +263,25 @@ $(LIB_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL)
+ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloc.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL)
+
+ $(LIBRARY) : $(OBJS) $(NORMAL_OBJS)
+- ar cr $@ $?
++ @AR@ cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_TH) : $(OBJS) $(THREAD_OBJS)
+- ar cr $@ $?
++ @AR@ cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_TH_SL) : $(OBJS_SL) $(THREAD_OBJS_SL)
+ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmallocth.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL)
+
+ $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS)
+- ar cr $@ $?
++ @AR@ cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_CXX_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
+ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloccxx.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
+
+ $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS)
+- ar cr $@ $?
++ @AR@ cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_TH_CXX_SL) : $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/13-fix-ldflags-in-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/13-fix-ldflags-in-makefile.patch
new file mode 100644
index 000000000..2581e5488
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/13-fix-ldflags-in-makefile.patch
@@ -0,0 +1,38 @@
+Index: dmalloc-5.5.2/Makefile.in
+===================================================================
+--- dmalloc-5.5.2.orig/Makefile.in
++++ dmalloc-5.5.2/Makefile.in
+@@ -260,7 +260,7 @@ shlib : $(BUILD_SL)
+ # work on your operating system. Please send feedback to the author
+ # via: http://256.com/gray/email.html
+ $(LIB_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL)
+- $(CC) -shared -Wl,-soname,libdmalloc.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL)
++ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloc.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL)
+
+ $(LIBRARY) : $(OBJS) $(NORMAL_OBJS)
+ ar cr $@ $?
+@@ -271,21 +271,21 @@ $(LIB_TH) : $(OBJS) $(THREAD_OBJS)
+ @RANLIB@ $@
+
+ $(LIB_TH_SL) : $(OBJS_SL) $(THREAD_OBJS_SL)
+- $(CC) -shared -Wl,-soname,libdmallocth.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL)
++ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmallocth.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL)
+
+ $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS)
+ ar cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_CXX_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
+- $(CC) -shared -Wl,-soname,libdmalloccxx.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
++ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloccxx.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
+
+ $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS)
+ ar cr $@ $?
+ @RANLIB@ $@
+
+ $(LIB_TH_CXX_SL) : $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
+- $(CC) -shared -Wl,-soname,libdmallocthcxx.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
++ $(CC) $(LDFLAGS) -shared -Wl,-soname,libdmallocthcxx.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
+
+ threadssl : $(LIB_TH_SL)$(ver)
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/130-mips.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/130-mips.patch
new file mode 100644
index 000000000..935ac983a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/130-mips.patch
@@ -0,0 +1,90 @@
+Patch to correctly handle the MIPS case.
+
+It was build up by Yann E. MORIN <yann.morin.1998@anciens.enib.fr> from some
+bits gathered from buildroot, which is LGPL v2.1
+License for dmalloc is:
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies, and that the name of Gray Watson not be used in advertising
+ * or publicity pertaining to distribution of the document or software
+ * without specific, written prior permission.
+ *
+ * Gray Watson makes no representations about the suitability of the
+ * software described herein for any purpose. It is provided "as is"
+ * without express or implied warranty.
+
+I personnaly believe that the resulting code should therefore be
+LGPL v2.1, but don't believe me, ask your lawyers!
+
+Index: dmalloc-5.5.2/return.h
+===================================================================
+--- dmalloc-5.5.2.orig/return.h
++++ dmalloc-5.5.2/return.h
+@@ -106,26 +106,16 @@
+ /*************************************/
+
+ /*
+- * For DEC Mips machines running Ultrix
++ * For Mips machines running Linux
+ */
+ #if __mips
+
+ /*
+- * I have no idea how to get inline assembly with the default cc.
+- * Anyone know how?
+- */
+-
+-#if 0
+-
+-/*
+ * NOTE: we assume here that file is global.
+ *
+- * $31 is the frame pointer. $2 looks to be the return address but maybe
+- * not consistently.
++ * $31 is the return address.
+ */
+-#define GET_RET_ADDR(file) asm("sw $2, file")
+-
+-#endif
++#define GET_RET_ADDR(file) asm("sw $31, %0" : "=m" (file))
+
+ #endif /* __mips */
+
+Index: dmalloc-5.5.2/configure.ac
+===================================================================
+--- dmalloc-5.5.2.orig/configure.ac
++++ dmalloc-5.5.2/configure.ac
+@@ -585,31 +585,7 @@ int main() { return 1; }
+ # check if the return.h macros work
+ #
+ AC_MSG_CHECKING([return.h macros work])
+-AC_RUN_IFELSE([
+-
+-#define __CONF_H__
+-#define USE_RETURN_MACROS 1
+-#define RETURN_MACROS_WORK 1
+-
+-#include "return.h"
+-
+-static void foo (void)
+-{
+- char *ret_addr;
+- GET_RET_ADDR(ret_addr);
+-}
+-
+-main()
+-{
+- foo();
+- exit(0);
+-}
+-],
+-[ AC_DEFINE(RETURN_MACROS_WORK, 1) AC_MSG_RESULT([yes]) ],
+-[ AC_DEFINE(RETURN_MACROS_WORK, 0) AC_MSG_RESULT([no]) ],
+-[ AC_DEFINE(RETURN_MACROS_WORK, 0) AC_MSG_RESULT([no]) ]
+-)
+-
++AC_DEFINE(RETURN_MACROS_WORK, 1)
+ ##############################################################################
+
+ #
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/150-use_DESTDIR.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/150-use_DESTDIR.patch
new file mode 100644
index 000000000..7edd46412
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/150-use_DESTDIR.patch
@@ -0,0 +1,104 @@
+Make install rules use DESTDIR.
+Split installation of the utilitity from the global install.
+
+Copyright 2007 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
+Licensed to you as dmalloc-5.5.2 is.
+
+Index: dmalloc-5.5.2/Makefile.in
+===================================================================
+--- dmalloc-5.5.2.orig/Makefile.in
++++ dmalloc-5.5.2/Makefile.in
+@@ -178,66 +178,66 @@ distclean : clean
+ # rm -f configure
+
+ installdirs :
+- $(srcdir)/mkinstalldirs $(includedir) $(libdir) $(bindir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(includedir) $(DESTDIR)/$(libdir) $(DESTDIR)/$(bindir)
+
+ installincs : $(HFLS)
+- $(srcdir)/mkinstalldirs $(includedir)
+- $(INSTALL_DATA) $(HFLS) $(includedir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(includedir)
++ $(INSTALL_DATA) $(HFLS) $(DESTDIR)/$(includedir)
+
+ installthsl : $(LIB_TH_SL)
+- $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL) $(LIB_TH_SL) $(shlibdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(shlibdir)
++ $(INSTALL) $(LIB_TH_SL) $(DESTDIR)/$(shlibdir)
+
+ installth : $(INSTALL_THREADS)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL) $(LIB_TH) $(libdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(libdir)
++ $(INSTALL) $(LIB_TH) $(DESTDIR)/$(libdir)
+ @CXX_OFF@ @echo "Enter 'make installthcxx' to install the threaded C++ library"
+ @SL_OFF@ @echo "Enter 'make installthsl' to install the threaded shared-library"
+
+ installthcxxsl : $(LIB_TH_CXX_SL)
+- $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL) $(LIB_TH_CXX_SL) $(shlibdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(shlibdir)
++ $(INSTALL) $(LIB_TH_CXX_SL) $(DESTDIR)/$(shlibdir)
+
+ installthcxx : $(INSTALL_TH_CXX)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL) $(LIB_TH_CXX) $(libdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(libdir)
++ $(INSTALL) $(LIB_TH_CXX) $(DESTDIR)/$(libdir)
+ @SL_OFF@ @echo "Enter 'make installthcxxsl' to install the threaded C++ shared-library"
+
+ installcxxsl : $(LIB_CXX_SL)
+- $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL) $(LIB_CXX_SL) $(shlibdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(shlibdir)
++ $(INSTALL) $(LIB_CXX_SL) $(DESTDIR)/$(shlibdir)
+
+ installcxx : $(INSTALL_CXX)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL) $(LIB_CXX) $(libdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(libdir)
++ $(INSTALL) $(LIB_CXX) $(DESTDIR)/$(libdir)
+ @TH_OFF@ @echo "Enter 'make installthcxx' to install the threaded C++ library"
+ @SL_OFF@ @echo "Enter 'make installcxxsl' to install the C++ shared-library"
+
+ installsl : $(LIB_SL)
+- $(srcdir)/mkinstalldirs $(shlibdir)
+- $(INSTALL) $(LIB_SL) $(shlibdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(shlibdir)
++ $(INSTALL) $(LIB_SL) $(DESTDIR)/$(shlibdir)
+ @CXX_OFF@ @echo "Enter 'make installcxxsl' to install the C++ shared-library"
+ @TH_OFF@ @echo "Enter 'make installthsl' to install thread shared-library"
+
+ installlib : $(INSTALL_LIB)
+- $(srcdir)/mkinstalldirs $(libdir)
+- $(INSTALL) $(LIBRARY) $(libdir)
+- @RANLIB@ $(libdir)/$(LIBRARY)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(libdir)
++ $(INSTALL) $(LIBRARY) $(DESTDIR)/$(libdir)
++ @RANLIB@ $(DESTDIR)/$(libdir)/$(LIBRARY)
+ @SL_OFF@ @echo "Enter 'make installsl' to install $(LIB_SL) in $(shlibdir)"
+ @CXX_OFF@ @echo "Enter 'make installcxx' to install the C++ library"
+ @TH_OFF@ @echo "Enter 'make installth' to install thread library"
+
+ installdocs : $(srcdir)/docs/$(HTMLFILE) $(srcdir)/docs/$(TEXIFILE) \
+ $(srcdir)/docs/$(PDFFILE)
+- $(srcdir)/mkinstalldirs $(docdir)
+- $(INSTALL_DATA) $(srcdir)/docs/$(HTMLFILE) $(docdir)
+- $(INSTALL_DATA) $(srcdir)/docs/$(TEXIFILE) $(docdir)
+- $(INSTALL_DATA) $(srcdir)/docs/$(PDFFILE) $(docdir)
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(docdir)
++ $(INSTALL_DATA) $(srcdir)/docs/$(HTMLFILE) $(DESTDIR)/$(docdir)
++ $(INSTALL_DATA) $(srcdir)/docs/$(TEXIFILE) $(DESTDIR)/$(docdir)
++ $(INSTALL_DATA) $(srcdir)/docs/$(PDFFILE) $(DESTDIR)/$(docdir)
+
+ install : installincs installlib $(UTIL)
+- $(srcdir)/mkinstalldirs $(bindir)
+- $(INSTALL_PROGRAM) $(UTIL) $(bindir)
+- @echo "Enter 'make installdocs' to install $(DOCFILES) in $(docdir)"
++ $(srcdir)/mkinstalldirs $(DESTDIR)/$(bindir)
++ $(INSTALL_PROGRAM) $(UTIL) $(DESTDIR)/$(bindir)
++ @echo "Enter 'make installdocs' to install $(DOCFILES) in $(DESTDIR)/$(docdir)"
+
+ dmalloc.h.2 : $(srcdir)/configure
+ $(SHELL) $(srcdir)/configure
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/configure-pagesize-HACK.patch b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/configure-pagesize-HACK.patch
new file mode 100644
index 000000000..a5bd73661
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc/configure-pagesize-HACK.patch
@@ -0,0 +1,37 @@
+We cant run tests during cross compile therefore pin to 4k pages
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: dmalloc-5.5.2/configure.ac
+===================================================================
+--- dmalloc-5.5.2.orig/configure.ac
++++ dmalloc-5.5.2/configure.ac
+@@ -348,26 +348,8 @@ AC_MSG_RESULT([$ac_cv_use_mmap])
+ #
+ AC_CHECK_FUNCS(getpagesize)
+ AC_MSG_CHECKING([basic-block size])
+-ac_cv_page_size=0
+-if test $ac_cv_page_size = 0; then
+- AC_RUN_IFELSE([main() { if (getpagesize()<=2048) exit(0); else exit(1); }],
+- [ ac_cv_page_size=11 ] )
+-fi
+-if test $ac_cv_page_size = 0; then
+- AC_RUN_IFELSE([main() { if (getpagesize()<=4096) exit(0); else exit(1); }],
+- [ ac_cv_page_size=12 ] )
+-fi
+-if test $ac_cv_page_size = 0; then
+- AC_RUN_IFELSE([main() { if (getpagesize()<=8192) exit(0); else exit(1); }],
+- [ ac_cv_page_size=13 ] )
+-fi
+-if test $ac_cv_page_size = 0; then
+- AC_RUN_IFELSE([main() { if (getpagesize()<=16384) exit(0); else exit(1); }],
+- [ ac_cv_page_size=14 ] )
+-fi
+-if test $ac_cv_page_size = 0; then
+- ac_cv_page_size=15
+-fi
++# fix to 4K for now
++ac_cv_page_size=12
+ AC_DEFINE_UNQUOTED([BASIC_BLOCK],[$ac_cv_page_size])
+ AC_MSG_RESULT([$ac_cv_page_size])
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc_5.5.2.bb b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc_5.5.2.bb
new file mode 100644
index 000000000..2f0d8a340
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/dmalloc/dmalloc_5.5.2.bb
@@ -0,0 +1,39 @@
+# Copyright (C) 2016 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Debug Malloc Library"
+
+DESCRIPTION = "The debug memory allocation or dmalloc library has been \
+designed as a drop in replacement for the system's malloc, realloc, \
+calloc, free and other memory management routines while providing \
+powerful debugging facilities configurable at runtime. These facilities \
+include such things as memory-leak tracking, fence-post write detection, \
+file/line number reporting, and general logging of statistics."
+
+HOMEPAGE = "http://dmalloc.com/"
+LICENSE = "CC-BY-SA-3.0"
+
+LIC_FILES_CHKSUM = "file://dmalloc.c;beginline=4;endline=17;md5=83d13664f87f1f1a3b6b2b6f6eba85aa"
+
+SECTION = "libs"
+
+SRC_URI = "http://dmalloc.com/releases/dmalloc-${PV}.tgz \
+ file://02-Makefile.in.patch \
+ file://03-threads.patch \
+ file://13-fix-ldflags-in-makefile.patch \
+ file://configure-pagesize-HACK.patch \
+ file://100-use-xtools.patch \
+ file://130-mips.patch \
+ file://150-use_DESTDIR.patch \
+ file://0001-undefined-strdup-macro.patch \
+"
+
+SRC_URI[md5sum] = "f92e5606c23a8092f3d5694e8d1c932e"
+SRC_URI[sha256sum] = "d3be5c6eec24950cb3bd67dbfbcdf036f1278fae5fd78655ef8cdf9e911e428a"
+
+ARM_INSTRUCTION_SET = "arm"
+
+inherit autotools
+
+EXTRA_AUTORECONF += "--include=acinclude --exclude=autoheader"
+EXTRA_OECONF += "--enable-threads --enable-cxx --enable-shlib"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-correct-version-for-so-lib.patch b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-correct-version-for-so-lib.patch
new file mode 100644
index 000000000..a7a42f981
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-correct-version-for-so-lib.patch
@@ -0,0 +1,26 @@
+From 8b44dc65d98d50b462843ac9dab6fe3fc25abe36 Mon Sep 17 00:00:00 2001
+From: Pascal Bach <pascal.bach@siemens.com>
+Date: Fri, 12 May 2017 13:54:49 +0200
+Subject: [PATCH] correct version for so lib
+
+Upstream-Status: Pending
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3670afe..f4fcd2c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -172,6 +172,7 @@ endif()
+ if(FLATBUFFERS_BUILD_SHAREDLIB)
+ add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
+ set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers)
++ set_target_properties(flatbuffers_shared PROPERTIES VERSION "${PV}")
+ endif()
+
+ function(compile_flatbuffers_schema_to_cpp SRC_FBS)
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-flatbuffers-Move-EndianSwap-template-to-flatbuffers-.patch b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-flatbuffers-Move-EndianSwap-template-to-flatbuffers-.patch
new file mode 100644
index 000000000..d736f012b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0001-flatbuffers-Move-EndianSwap-template-to-flatbuffers-.patch
@@ -0,0 +1,113 @@
+From a614d8e20fa9e4fd16b699d581ddac2956c120f5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 19 Sep 2017 10:04:02 -0700
+Subject: [PATCH 1/2] flatbuffers: Move EndianSwap template to
+ flatbuffers/base.h
+
+Clang complains
+call to function 'EndianSwap' that is neither visible in the template definition nor found by argument-dependent lookup
+ return EndianSwap(t);
+
+This seems to be due to limitation of two-phase lookup of dependent names in template definitions
+
+Its not being found using associated namespaces therefore
+it has to be made visible at the template definition site as well
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ include/flatbuffers/base.h | 33 +++++++++++++++++++++++++++++++++
+ include/flatbuffers/flatbuffers.h | 32 --------------------------------
+ 2 files changed, 33 insertions(+), 32 deletions(-)
+
+diff --git a/include/flatbuffers/base.h b/include/flatbuffers/base.h
+index f051755..c73fb2d 100644
+--- a/include/flatbuffers/base.h
++++ b/include/flatbuffers/base.h
+@@ -150,6 +150,39 @@ typedef uintmax_t largest_scalar_t;
+ // We support aligning the contents of buffers up to this size.
+ #define FLATBUFFERS_MAX_ALIGNMENT 16
+
++template<typename T> T EndianSwap(T t) {
++ #if defined(_MSC_VER)
++ #define FLATBUFFERS_BYTESWAP16 _byteswap_ushort
++ #define FLATBUFFERS_BYTESWAP32 _byteswap_ulong
++ #define FLATBUFFERS_BYTESWAP64 _byteswap_uint64
++ #else
++ #if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408
++ // __builtin_bswap16 was missing prior to GCC 4.8.
++ #define FLATBUFFERS_BYTESWAP16(x) \
++ static_cast<uint16_t>(__builtin_bswap32(static_cast<uint32_t>(x) << 16))
++ #else
++ #define FLATBUFFERS_BYTESWAP16 __builtin_bswap16
++ #endif
++ #define FLATBUFFERS_BYTESWAP32 __builtin_bswap32
++ #define FLATBUFFERS_BYTESWAP64 __builtin_bswap64
++ #endif
++ if (sizeof(T) == 1) { // Compile-time if-then's.
++ return t;
++ } else if (sizeof(T) == 2) {
++ auto r = FLATBUFFERS_BYTESWAP16(*reinterpret_cast<uint16_t *>(&t));
++ return *reinterpret_cast<T *>(&r);
++ } else if (sizeof(T) == 4) {
++ auto r = FLATBUFFERS_BYTESWAP32(*reinterpret_cast<uint32_t *>(&t));
++ return *reinterpret_cast<T *>(&r);
++ } else if (sizeof(T) == 8) {
++ auto r = FLATBUFFERS_BYTESWAP64(*reinterpret_cast<uint64_t *>(&t));
++ return *reinterpret_cast<T *>(&r);
++ } else {
++ assert(0);
++ }
++}
++
++
+ template<typename T> T EndianScalar(T t) {
+ #if FLATBUFFERS_LITTLEENDIAN
+ return t;
+diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h
+index 9216cf4..f749dcb 100644
+--- a/include/flatbuffers/flatbuffers.h
++++ b/include/flatbuffers/flatbuffers.h
+@@ -37,38 +37,6 @@ inline void EndianCheck() {
+ (void)endiantest;
+ }
+
+-template<typename T> T EndianSwap(T t) {
+- #if defined(_MSC_VER)
+- #define FLATBUFFERS_BYTESWAP16 _byteswap_ushort
+- #define FLATBUFFERS_BYTESWAP32 _byteswap_ulong
+- #define FLATBUFFERS_BYTESWAP64 _byteswap_uint64
+- #else
+- #if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408
+- // __builtin_bswap16 was missing prior to GCC 4.8.
+- #define FLATBUFFERS_BYTESWAP16(x) \
+- static_cast<uint16_t>(__builtin_bswap32(static_cast<uint32_t>(x) << 16))
+- #else
+- #define FLATBUFFERS_BYTESWAP16 __builtin_bswap16
+- #endif
+- #define FLATBUFFERS_BYTESWAP32 __builtin_bswap32
+- #define FLATBUFFERS_BYTESWAP64 __builtin_bswap64
+- #endif
+- if (sizeof(T) == 1) { // Compile-time if-then's.
+- return t;
+- } else if (sizeof(T) == 2) {
+- auto r = FLATBUFFERS_BYTESWAP16(*reinterpret_cast<uint16_t *>(&t));
+- return *reinterpret_cast<T *>(&r);
+- } else if (sizeof(T) == 4) {
+- auto r = FLATBUFFERS_BYTESWAP32(*reinterpret_cast<uint32_t *>(&t));
+- return *reinterpret_cast<T *>(&r);
+- } else if (sizeof(T) == 8) {
+- auto r = FLATBUFFERS_BYTESWAP64(*reinterpret_cast<uint64_t *>(&t));
+- return *reinterpret_cast<T *>(&r);
+- } else {
+- assert(0);
+- }
+-}
+-
+ template<typename T> FLATBUFFERS_CONSTEXPR size_t AlignOf() {
+ #ifdef _MSC_VER
+ return __alignof(T);
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0002-use-__builtin_bswap16-when-building-with-clang.patch b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0002-use-__builtin_bswap16-when-building-with-clang.patch
new file mode 100644
index 000000000..460159f27
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/files/0002-use-__builtin_bswap16-when-building-with-clang.patch
@@ -0,0 +1,30 @@
+From 626fe5e043de25e970ebdf061b88c646fa689113 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 19 Sep 2017 10:09:31 -0700
+Subject: [PATCH 2/2] use __builtin_bswap16 when building with clang
+
+clang pretends to be gcc 4.2.0 and therefore the code does
+not use __builtin_bswap16 but tries to synthesize it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+ include/flatbuffers/base.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/flatbuffers/base.h b/include/flatbuffers/base.h
+index c73fb2d..13e8fac 100644
+--- a/include/flatbuffers/base.h
++++ b/include/flatbuffers/base.h
+@@ -156,7 +156,7 @@ template<typename T> T EndianSwap(T t) {
+ #define FLATBUFFERS_BYTESWAP32 _byteswap_ulong
+ #define FLATBUFFERS_BYTESWAP64 _byteswap_uint64
+ #else
+- #if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408
++ #if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408 && !defined(__clang__)
+ // __builtin_bswap16 was missing prior to GCC 4.8.
+ #define FLATBUFFERS_BYTESWAP16(x) \
+ static_cast<uint16_t>(__builtin_bswap32(static_cast<uint32_t>(x) << 16))
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.9.0.bb b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.9.0.bb
new file mode 100644
index 000000000..a8df44485
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.9.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Memory Efficient Serialization Library"
+HOMEPAGE = "https://github.com/google/flatbuffers"
+SECTION = "console/tools"
+LICENSE = "Apache-2.0"
+
+PACKAGE_BEFORE_PN = "${PN}-compiler"
+
+RDEPENDS_${PN}-compiler = "${PN}"
+RDEPENDS_${PN}-dev += "${PN}-compiler"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a873c5645c184d51e0f9b34e1d7cf559"
+
+SRCREV = "25a15950f5a24d7217689739ed8f6dac64912d62"
+
+SRC_URI = "git://github.com/google/flatbuffers.git \
+ file://0001-correct-version-for-so-lib.patch \
+ file://0001-flatbuffers-Move-EndianSwap-template-to-flatbuffers-.patch \
+ file://0002-use-__builtin_bswap16-when-building-with-clang.patch \
+ "
+
+# Make sure C++11 is used, required for example for GCC 4.9
+CXXFLAGS += "-std=c++11"
+BUILD_CXXFLAGS += "-std=c++11"
+
+EXTRA_OECMAKE += "\
+ -DFLATBUFFERS_BUILD_TESTS=OFF \
+ -DFLATBUFFERS_BUILD_SHAREDLIB=ON \
+ -DPV=${PV} \
+"
+
+inherit cmake
+
+S = "${WORKDIR}/git"
+
+FILES_${PN}-compiler = "${bindir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/geany/geany-plugins_1.31.bb b/meta-openembedded/meta-oe/recipes-devtools/geany/geany-plugins_1.31.bb
new file mode 100644
index 000000000..d8f2f894b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/geany/geany-plugins_1.31.bb
@@ -0,0 +1,271 @@
+DESCRIPTION = "A fast and lightweight IDE"
+HOMEPAGE = "http://plugins.geany.org/"
+
+LICENSE_DEFAULT = "GPLv2"
+LICENSE = "${LICENSE_DEFAULT} & BSD-2-Clause & GPLv3"
+
+python () {
+ for plugin in d.getVar('PLUGINS').split():
+ if 'LICENSE_%s' % plugin not in d:
+ d.setVar('LICENSE_' + plugin, '${LICENSE_DEFAULT}')
+}
+
+DEPENDS = " \
+ fribidi \
+ geany \
+ libxml2 \
+ libsoup-2.4 \
+ enchant \
+ intltool-native \
+ libassuan \
+ gpgme \
+ vte9 \
+ libgit2 \
+"
+
+inherit distro_features_check autotools pkgconfig gtk-icon-cache
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://plugins.geany.org/${PN}/${PN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "808f9048b77fd9704569ed2ba12a56e9"
+SRC_URI[sha256sum] = "76bd9e803db5a626b86669f08330cf95b8cc35057a1cdf65759bc00aef120e25"
+
+do_configure_prepend() {
+ rm -f ${S}/build/cache/glib-gettext.m4
+}
+
+FILES_${PN} += "${datadir}/icons"
+FILES_${PN}-dev += "${libdir}/geany/*.la ${libdir}/${PN}/*/*.la"
+
+PLUGINS += "${PN}-addons"
+LIC_FILES_CHKSUM += "file://addons/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-addons = "${libdir}/geany/addons.so"
+RDEPENDS_${PN}-addons = "${PN}"
+
+PLUGINS += "${PN}-autoclose"
+LIC_FILES_CHKSUM += "file://autoclose/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-autoclose = "${libdir}/geany/autoclose.so"
+RDEPENDS_${PN}-autoclose = "${PN}"
+
+PLUGINS += "${PN}-automark"
+LIC_FILES_CHKSUM += "file://automark/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-automark = "${libdir}/geany/automark.so"
+RDEPENDS_${PN}-automark = "${PN}"
+
+PLUGINS += "${PN}-codenav"
+LIC_FILES_CHKSUM += "file://codenav/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-codenav = "${libdir}/geany/codenav.so"
+RDEPENDS_${PN}-codenav = "${PN}"
+
+PLUGINS += "${PN}-commander"
+LIC_FILES_CHKSUM += "file://commander/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+LICENSE_${PN}-commander = "GPLv3"
+FILES_${PN}-commander = "${libdir}/geany/commander.so"
+RDEPENDS_${PN}-commander = "${PN}"
+
+PLUGINS += "${PN}-debugger"
+LIC_FILES_CHKSUM += "file://debugger/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-debugger = "${libdir}/geany/debugger.so ${datadir}/${PN}/debugger"
+RDEPENDS_${PN}-debugger = "${PN}"
+
+PLUGINS += "${PN}-defineformat"
+LIC_FILES_CHKSUM += "file://defineformat/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-defineformat = "${libdir}/geany/defineformat.so"
+RDEPENDS_${PN}-defineformat = "${PN}"
+
+# no gnome devhelp in some common layer
+EXTRA_OECONF += "--disable-devhelp"
+#PLUGINS += "${PN}-devhelp"
+#LIC_FILES_CHKSUM += "file://devhelp/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+#LICENSE_${PN}-devhelp = "GPLv3"
+#FILES_${PN}-devhelp = "${libdir}/geany/devhelp.so"
+#RDEPENDS_${PN}-devhelp = "${PN}"
+
+PLUGINS += "${PN}-geanyctags"
+LIC_FILES_CHKSUM += "file://geanyctags/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanyctags = "${libdir}/geany/geanyctags.so"
+RDEPENDS_${PN}-geanyctags = "${PN}"
+
+PLUGINS += "${PN}-geanydoc"
+LIC_FILES_CHKSUM += "file://geanydoc/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+LICENSE_${PN}-geanydoc = "GPLv3"
+FILES_${PN}-geanydoc = "${libdir}/geany/geanydoc.so"
+RDEPENDS_${PN}-geanydoc = "${PN}"
+
+PLUGINS += "${PN}-geanyextrasel"
+LIC_FILES_CHKSUM += "file://geanyextrasel/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanyextrasel = "${libdir}/geany/geanyextrasel.so"
+RDEPENDS_${PN}-geanyextrasel = "${PN}"
+
+PLUGINS += "${PN}-geanyinsertnum"
+LIC_FILES_CHKSUM += "file://geanyinsertnum/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanyinsertnum = "${libdir}/geany/geanyinsertnum.so"
+RDEPENDS_${PN}-geanyinsertnum = "${PN}"
+
+PLUGINS += "${PN}-geanylatex"
+LIC_FILES_CHKSUM += "file://geanylatex/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanylatex = "${libdir}/geany/geanylatex.so"
+RDEPENDS_${PN}-geanylatex = "${PN}"
+
+PLUGINS += "${PN}-geanylipsum"
+LIC_FILES_CHKSUM += "file://lipsum/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-geanylipsum = "${libdir}/geany/lipsum.so"
+RDEPENDS_${PN}-geanylipsum = "${PN}"
+
+# no lua: max supported version is 5.2
+EXTRA_OECONF += "--disable-geanylua"
+#PLUGINS += "${PN}-geanylua"
+#LIC_FILES_CHKSUM += "file://geanylua/COPYING;md5=4325afd396febcb659c36b49533135d4"
+#FILES_${PN}-geanylua = "${libdir}/geany/geanylua.so ${libdir}/${PN}/geanylua/*.so"
+#RDEPENDS_${PN}-geanylua = "${PN}"
+
+PLUGINS += "${PN}-geanymacro"
+LIC_FILES_CHKSUM += "file://geanymacro/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanymacro = "${libdir}/geany/geanymacro.so"
+RDEPENDS_${PN}-geanymacro = "${PN}"
+
+PLUGINS += "${PN}-geanyminiscript"
+LIC_FILES_CHKSUM += "file://geanyminiscript/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-geanyminiscript = "${libdir}/geany/geanyminiscript.so"
+RDEPENDS_${PN}-geanyminiscript = "${PN}"
+
+PLUGINS += "${PN}-geanynumberedbookmarks"
+LIC_FILES_CHKSUM += "file://geanynumberedbookmarks/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanynumberedbookmarks = "${libdir}/geany/geanynumberedbookmarks.so"
+RDEPENDS_${PN}-geanynumberedbookmarks = "${PN}"
+
+PLUGINS += "${PN}-geanypg"
+LIC_FILES_CHKSUM += "file://geanypg/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+FILES_${PN}-geanypg = "${libdir}/geany/geanypg.so"
+RDEPENDS_${PN}-geanypg = "${PN}"
+
+PLUGINS += "${PN}-geanyprj"
+LIC_FILES_CHKSUM += "file://geanyprj/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+LICENSE_${PN}-geanyprj = "GPLv3"
+FILES_${PN}-geanyprj = "${libdir}/geany/geanyprj.so"
+RDEPENDS_${PN}-geanyprj = "${PN}"
+
+# no gnome pygtk
+EXTRA_OECONF += "--disable-geanypy"
+#PLUGINS += "${PN}-geanypy"
+#LIC_FILES_CHKSUM += "file://geanypy/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+#FILES_${PN}-geanypy = "${libdir}/geany/geanypy.so"
+#RDEPENDS_${PN}-geanypy = "${PN}"
+
+PLUGINS += "${PN}-geanyvc"
+LIC_FILES_CHKSUM += "file://geanyvc/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-geanyvc = "${libdir}/geany/geanyvc.so"
+RDEPENDS_${PN}-geanyvc = "${PN}"
+
+PLUGINS += "${PN}-geniuspaste"
+LIC_FILES_CHKSUM += "file://geniuspaste/COPYING;md5=bfc203269f8862ebfc1198cdc809a95a"
+FILES_${PN}-geniuspaste = "${libdir}/geany/geniuspaste.so ${datadir}/${PN}/geniuspaste"
+RDEPENDS_${PN}-geniuspaste = "${PN}"
+
+PLUGINS += "${PN}-git-changebar"
+LIC_FILES_CHKSUM += "file://git-changebar/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+LICENSE_${PN}-git-changebar = "GPLv3"
+FILES_${PN}-git-changebar = "${libdir}/geany/git-changebar.so"
+RDEPENDS_${PN}-git-changebar = "${PN}"
+
+PLUGINS += "${PN}-keyrecord"
+LIC_FILES_CHKSUM += "file://keyrecord/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-keyrecord = "${libdir}/geany/keyrecord.so"
+RDEPENDS_${PN}-keyrecord = "${PN}"
+
+PLUGINS += "${PN}-lineoperations"
+LIC_FILES_CHKSUM += "file://lineoperations/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-lineoperations = "${libdir}/geany/lineoperations.so"
+RDEPENDS_${PN}-lineoperations = "${PN}"
+
+# no markdown - avoid floating dependencies
+EXTRA_OECONF += " --disable-peg-markdown"
+#PLUGINS += "${PN}-markdown"
+#LIC_FILES_CHKSUM += "file://markdown/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+#FILES_${PN}-markdown = "${libdir}/geany/markdown.so"
+#RDEPENDS_${PN}-markdown = "${PN}"
+
+PLUGINS += "${PN}-multiterm"
+LIC_FILES_CHKSUM += "file://multiterm/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+FILES_${PN}-multiterm = "${libdir}/geany/multiterm.so"
+RDEPENDS_${PN}-multiterm = "${PN}"
+
+PLUGINS += "${PN}-overview"
+LIC_FILES_CHKSUM += "file://overview/overview/overviewplugin.c;beginline=4;endline=20;md5=1aa33522916cdeb46cccac0c629da0d0"
+FILES_${PN}-overview = "${libdir}/geany/overview.so ${datadir}/${PN}/overview"
+RDEPENDS_${PN}-overview = "${PN}"
+
+PLUGINS += "${PN}-pairtaghighlighter"
+LICENSE_${PN}-pairtaghighlighter = "BSD-2-Clause"
+LIC_FILES_CHKSUM += "file://pairtaghighlighter/COPYING;md5=d6d927525a612b3a8dbebc4b2e9b47c1"
+FILES_${PN}-pairtaghighlighter = "${libdir}/geany/pairtaghighlighter.so"
+RDEPENDS_${PN}-pairtaghighlighter = "${PN}"
+
+PLUGINS += "${PN}-pohelper"
+LICENSE_${PN}-pohelper = "GPLv3"
+LIC_FILES_CHKSUM += "file://pohelper/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+FILES_${PN}-pohelper = "${libdir}/geany/pohelper.so"
+RDEPENDS_${PN}-pohelper = "${PN}"
+
+PLUGINS += "${PN}-pretty-printer"
+LIC_FILES_CHKSUM += "file://pretty-printer/src/PrettyPrinter.c;beginline=1;endline=17;md5=1665115c2fadb17c1b53cdb4e43b2440"
+FILES_${PN}-pretty-printer = "${libdir}/geany/pretty-printer.so"
+RDEPENDS_${PN}-pretty-printer = "${PN}"
+
+PLUGINS += "${PN}-projectorganizer"
+LIC_FILES_CHKSUM += "file://projectorganizer/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-projectorganizer = "${libdir}/geany/projectorganizer.so"
+RDEPENDS_${PN}-projectorganizer = "${PN}"
+
+PLUGINS += "${PN}-scope"
+LIC_FILES_CHKSUM += "file://scope/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-scope = "${libdir}/geany/scope.so"
+RDEPENDS_${PN}-scope = "${PN}"
+
+PLUGINS += "${PN}-sendmail"
+LIC_FILES_CHKSUM += "file://sendmail/COPYING;md5=c107cf754550e65755c42985a5d4e9c9"
+FILES_${PN}-sendmail = "${libdir}/geany/sendmail.so"
+RDEPENDS_${PN}-sendmail = "${PN}"
+
+PLUGINS += "${PN}-shiftcolumn"
+LIC_FILES_CHKSUM += "file://shiftcolumn/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+FILES_${PN}-shiftcolumn = "${libdir}/geany/shiftcolumn.so"
+RDEPENDS_${PN}-shiftcolumn = "${PN}"
+
+PLUGINS += "${PN}-spellcheck"
+LIC_FILES_CHKSUM += "file://spellcheck/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-spellcheck = "${libdir}/geany/spellcheck.so"
+RDEPENDS_${PN}-spellcheck = "${PN}"
+
+PLUGINS += "${PN}-tableconvert"
+LIC_FILES_CHKSUM += "file://tableconvert/COPYING;md5=6753686878d090a1f3f9445661d3dfbc"
+FILES_${PN}-tableconvert = "${libdir}/geany/tableconvert.so"
+RDEPENDS_${PN}-tableconvert = "${PN}"
+
+PLUGINS += "${PN}-treebrowser"
+LIC_FILES_CHKSUM += "file://treebrowser/README;beginline=67;endline=67;md5=52f90857fd1a9672111e472dd056a0d8"
+FILES_${PN}-treebrowser = "${libdir}/geany/treebrowser.so"
+RDEPENDS_${PN}-treebrowser = "${PN}"
+
+PLUGINS += "${PN}-updatechecker"
+LIC_FILES_CHKSUM += "file://updatechecker/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-updatechecker = "${libdir}/geany/updatechecker.so"
+RDEPENDS_${PN}-updatechecker = "${PN}"
+
+# no webkit - lasts ages and is not properly detected
+EXTRA_OECONF += " --disable-webhelper"
+#PLUGINS += "${PN}-webhelper"
+#LIC_FILES_CHKSUM += "file://webhelper/COPYING;md5=d32239bcb673463ab874e80d47fae504"
+#LICENSE_${PN}-webhelper = "GPLv3"
+#FILES_${PN}-webhelper = "${libdir}/geany/webhelper.so"
+#RDEPENDS_${PN}-webhelper = "${PN}"
+
+PLUGINS += "${PN}-xmlsnippets"
+LIC_FILES_CHKSUM += "file://xmlsnippets/COPYING;md5=4325afd396febcb659c36b49533135d4"
+FILES_${PN}-xmlsnippets = "${libdir}/geany/xmlsnippets.so"
+RDEPENDS_${PN}-xmlsnippets = "${PN}"
+
+PACKAGES =+ "${PLUGINS}"
+RDEPENDS_${PN} = "${PLUGINS}"
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.31.bb b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.31.bb
new file mode 100644
index 000000000..bb9d8bc29
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.31.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A fast and lightweight IDE"
+HOMEPAGE = "http://www.geany.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bd7b2c994af21d318bd2cd3b3f80c2d5"
+
+DEPENDS = "gtk+ libxml-parser-perl-native python3-docutils-native intltool-native"
+
+inherit distro_features_check autotools pkgconfig perlnative pythonnative gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://download.geany.org/${BP}.tar.bz2"
+SRC_URI[md5sum] = "386000be6b26972c6a699939c37cda34"
+SRC_URI[sha256sum] = "30fdb906bb76c4251a8bcf83ee267db28c26ef6ab867668a782cec1164a3aba5"
+
+FILES_${PN} += "${datadir}/icons"
+
+EXTRA_OECONF = "--disable-html-docs"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/giflib/giflib_5.1.4.bb b/meta-openembedded/meta-oe/recipes-devtools/giflib/giflib_5.1.4.bb
new file mode 100644
index 000000000..21fa352cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/giflib/giflib_5.1.4.bb
@@ -0,0 +1,19 @@
+SUMMARY = "shared library for GIF images"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ae11c61b04b2917be39b11f78d71519a"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/giflib/${BP}.tar.bz2"
+
+inherit autotools
+
+PACKAGES += "${PN}-utils"
+FILES_${PN} = "${libdir}/libgif.so.*"
+FILES_${PN}-utils = "${bindir}"
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN}-utils = "perl"
+
+SRC_URI[md5sum] = "2c171ced93c0e83bb09e6ccad8e3ba2b"
+SRC_URI[sha256sum] = "df27ec3ff24671f80b29e6ab1c4971059c14ac3db95406884fc26574631ba8d5"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/glade/glade/remove-yelp-help-rules-var.patch b/meta-openembedded/meta-oe/recipes-devtools/glade/glade/remove-yelp-help-rules-var.patch
new file mode 100644
index 000000000..78a8719f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/glade/glade/remove-yelp-help-rules-var.patch
@@ -0,0 +1,39 @@
+From 42efc94c11d510b41d8cf3407e1c3900eb52b600 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 4 Jun 2015 16:28:02 +0800
+Subject: [PATCH] Remove unused variable (YELP_HELP_RULES)
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ help/Makefile.am | 2 --
+ help/Makefile.in | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/help/Makefile.am b/help/Makefile.am
+index 50c0e84..5c5d2e9 100644
+--- a/help/Makefile.am
++++ b/help/Makefile.am
+@@ -1,5 +1,3 @@
+-@YELP_HELP_RULES@
+-
+ HELP_ID = glade
+
+ HELP_FILES = \
+diff --git a/help/Makefile.in b/help/Makefile.in
+index 6978ea5..e1c7d3b 100644
+--- a/help/Makefile.in
++++ b/help/Makefile.in
+@@ -521,8 +521,6 @@ uninstall-am:
+
+ .PRECIOUS: Makefile
+
+-@YELP_HELP_RULES@
+-
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.20.2.bb b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.20.2.bb
new file mode 100644
index 000000000..95e1737c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.20.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Glade - A User Interface Designer"
+HOMEPAGE = "http://www.gnu.org/software/gnash"
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=aabe87591cb8ae0f3c68be6977bb5522 \
+ file://COPYING.GPL;md5=9ac2e7cff1ddaf48b6eab6028f23ef88 \
+ file://COPYING.LGPL;md5=252890d9eee26aab7b432e8b8a616475"
+DEPENDS = "gtk+ gtk+3 glib-2.0 libxml2 intltool-native \
+ gnome-common-native \
+"
+
+
+inherit distro_features_check autotools pkgconfig gnomebase gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glade/3.20/glade-${PV}.tar.xz \
+ file://remove-yelp-help-rules-var.patch \
+ "
+SRC_URI[md5sum] = "d3dd9ba33c7d7c854ab207e1ba844dda"
+SRC_URI[sha256sum] = "07d1545570951aeded20e9fdc6d3d8a56aeefe2538734568c5335be336c6abed"
+
+EXTRA_OECONF += "--disable-man-pages"
+
+FILES_${PN} += "${datadir}/* ${libdir}/glade/modules/libgladegtk.so"
+FILES_${PN}-dev += "${libdir}/glade/modules/libgladegtk.la"
+FILES_${PN}-dbg += "${libdir}/glade/modules/.debug/libgladegtk.so"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
new file mode 100644
index 000000000..5774e62eb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
@@ -0,0 +1,68 @@
+From cc6dbabea0e452ebc93682df860a79ed9a45722e Mon Sep 17 00:00:00 2001
+From: Alexey Firago <alexey_firago@mentor.com>
+Date: Fri, 20 Oct 2017 00:04:19 +0300
+Subject: [PATCH] CMakeLists.txt: Fix grpc_cpp_plugin path during
+ cross-compilation
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+---
+ CMakeLists.txt | 9 ++++++++-
+ templates/CMakeLists.txt.template | 9 ++++++++-
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f9cd630..9663934 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -328,6 +328,13 @@ function(protobuf_generate_grpc_cpp)
+ return()
+ endif()
+
++ #if cross-compiling, find host plugin
++ if(CMAKE_CROSSCOMPILING)
++ find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
++ else()
++ set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
++ endif()
++
+ set(_protobuf_include_path -I . -I ${PROTOBUF_WELLKNOWN_IMPORT_DIR})
+ foreach(FIL ${ARGN})
+ get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
+@@ -345,7 +352,7 @@ function(protobuf_generate_grpc_cpp)
+ COMMAND ${_gRPC_PROTOBUF_PROTOC_EXECUTABLE}
+ ARGS --grpc_out=generate_mock_code=true:${_gRPC_PROTO_GENS_DIR}
+ --cpp_out=${_gRPC_PROTO_GENS_DIR}
+- --plugin=protoc-gen-grpc=$<TARGET_FILE:grpc_cpp_plugin>
++ --plugin=protoc-gen-grpc=${gRPC_CPP_PLUGIN}
+ ${_protobuf_include_path}
+ ${REL_FIL}
+ DEPENDS ${ABS_FIL} ${_gRPC_PROTOBUF_PROTOC} grpc_cpp_plugin
+diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template
+index 64daf04..a7e8629 100644
+--- a/templates/CMakeLists.txt.template
++++ b/templates/CMakeLists.txt.template
+@@ -373,6 +373,13 @@
+ return()
+ endif()
+
++ #if cross-compiling, find host plugin
++ if(CMAKE_CROSSCOMPILING)
++ find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
++ else()
++ set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
++ endif()
++
+ set(_protobuf_include_path -I . -I <%text>${PROTOBUF_WELLKNOWN_IMPORT_DIR}</%text>)
+ foreach(FIL <%text>${ARGN}</%text>)
+ get_filename_component(ABS_FIL <%text>${FIL}</%text> ABSOLUTE)
+@@ -390,7 +397,7 @@
+ COMMAND <%text>${_gRPC_PROTOBUF_PROTOC_EXECUTABLE}</%text>
+ ARGS --grpc_out=<%text>generate_mock_code=true:${_gRPC_PROTO_GENS_DIR}</%text>
+ --cpp_out=<%text>${_gRPC_PROTO_GENS_DIR}</%text>
+- --plugin=protoc-gen-grpc=$<TARGET_FILE:grpc_cpp_plugin>
++ --plugin=protoc-gen-grpc=${gRPC_CPP_PLUGIN}
+ <%text>${_protobuf_include_path}</%text>
+ <%text>${REL_FIL}</%text>
+ DEPENDS <%text>${ABS_FIL}</%text> <%text>${_gRPC_PROTOBUF_PROTOC}</%text> grpc_cpp_plugin
+--
+2.7.4
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
new file mode 100644
index 000000000..f8d965294
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
@@ -0,0 +1,166 @@
+From 8e9bf962a45a82f1c2eb5858e29fa89a3a60b564 Mon Sep 17 00:00:00 2001
+From: Alexey Firago <alexey_firago@mentor.com>
+Date: Mon, 30 Oct 2017 23:24:49 +0300
+Subject: [PATCH 1/4] CMakeLists.txt: Fix libraries installation for Linux
+
+* Set libs versions as in Makefile
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+
+%% original patch: 0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
+---
+ CMakeLists.txt | 55 +++++++++++++++++++++++++++++++++++
+ CMakeLists.txt => CMakeLists.txt.orig | 0
+ 2 files changed, 55 insertions(+)
+ copy CMakeLists.txt => CMakeLists.txt.orig (100%)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b1a49df..13e64ac 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -30,6 +30,15 @@ set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}")
+ set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
+ project(${PACKAGE_NAME} C CXX)
+
++set (CORE_VERSION_MAJOR "4")
++set (CORE_VERSION "4.0.0")
++
++set (CPP_VERSION_MAJOR "1")
++set (CPP_VERSION "${PACKAGE_VERSION}")
++
++set (CSHARP_VERSION_MAJOR "1")
++set (CSHARP_VERSION "${PACKAGE_VERSION}")
++
+ set(gRPC_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
+ set(gRPC_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
+ set(gRPC_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
+@@ -841,6 +850,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET gpr PROPERTY VERSION ${CORE_VERSION})
++ set_property(TARGET gpr PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+
+ target_include_directories(gpr
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -1221,6 +1234,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc PROPERTY VERSION ${CORE_VERSION})
++ set_property(TARGET grpc PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -1535,6 +1552,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc_cronet PROPERTY VERSION ${CORE_VERSION})
++ set_property(TARGET grpc_cronet PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc_cronet
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -2377,6 +2398,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc_unsecure PROPERTY VERSION ${CORE_VERSION})
++ set_property(TARGET grpc_unsecure PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc_unsecure
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -2592,6 +2617,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc++ PROPERTY VERSION ${CPP_VERSION})
++ set_property(TARGET grpc++ PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc++
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -3078,6 +3107,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc++_cronet PROPERTY VERSION ${CPP_VERSION})
++ set_property(TARGET grpc++_cronet PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc++_cronet
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -3282,6 +3315,11 @@ protobuf_generate_grpc_cpp(
+ src/proto/grpc/status/status.proto
+ )
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc++_error_details PROPERTY VERSION ${CPP_VERSION})
++ set_property(TARGET grpc++_error_details PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
++
+ target_include_directories(grpc++_error_details
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+@@ -3408,6 +3446,11 @@ protobuf_generate_grpc_cpp(
+ src/proto/grpc/reflection/v1alpha/reflection.proto
+ )
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc++_reflection PROPERTY VERSION ${CPP_VERSION})
++ set_property(TARGET grpc++_reflection PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
++
+ target_include_directories(grpc++_reflection
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+@@ -3827,6 +3870,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc++_unsecure PROPERTY VERSION ${CPP_VERSION})
++ set_property(TARGET grpc++_unsecure PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc++_unsecure
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -4140,6 +4187,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc_plugin_support PROPERTY VERSION ${CORE_VERSION})
++ set_property(TARGET grpc_plugin_support PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc_plugin_support
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -4649,6 +4700,10 @@ if(WIN32 AND MSVC)
+ endif()
+ endif()
+
++if(_gRPC_PLATFORM_LINUX)
++ set_property(TARGET grpc_csharp_ext PROPERTY VERSION ${CSHARP_VERSION})
++ set_property(TARGET grpc_csharp_ext PROPERTY SOVERSION ${CSHARP_VERSION_MAJOR})
++endif()
+
+ target_include_directories(grpc_csharp_ext
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+diff --git a/CMakeLists.txt b/CMakeLists.txt.orig
+similarity index 100%
+copy from CMakeLists.txt
+copy to CMakeLists.txt.orig
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0004-CMakeLists.txt-Find-c-ares-in-target-sysroot-alone.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0004-CMakeLists.txt-Find-c-ares-in-target-sysroot-alone.patch
new file mode 100644
index 000000000..8985022fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0004-CMakeLists.txt-Find-c-ares-in-target-sysroot-alone.patch
@@ -0,0 +1,42 @@
+From a498b56ba96948015f0f2784b2ab8296946716ee Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 1 Feb 2018 23:28:17 -0800
+Subject: [PATCH 4/4] CMakeLists.txt: Find c-ares in target sysroot alone
+
+Current code lets it look into native sysroot as well
+which is then preferred during cross compile and it adds
+absolute path to libcares into linker flags
+on heterogenous architectures linker complains and build
+fails
+
+| /mnt/a/oe/build/tmp/work/cortexa7t2hf-neon-vfpv4-bec-linux-gnueabi/grpc/1.8.5-r0/recipe-sysroot-native/usr/lib/lib
+cares.so.2.2.0: file not recognized: File format not recognized
+| collect2: error: ld returned 1 exit status
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1d7eef1..058423d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -153,10 +153,8 @@ if("${gRPC_CARES_PROVIDER}" STREQUAL "module")
+ set(gRPC_INSTALL FALSE)
+ endif()
+ elseif("${gRPC_CARES_PROVIDER}" STREQUAL "package")
+- find_package(c-ares REQUIRED CONFIG)
+- if(TARGET c-ares::cares)
+- set(_gRPC_CARES_LIBRARIES c-ares::cares)
+- endif()
++ find_package(c-ares REQUIRED)
++ set(_gRPC_CARES_LIBRARIES cares)
+ set(_gRPC_FIND_CARES "if(NOT c-ares_FOUND)\n find_package(c-ares CONFIG)\nendif()")
+ endif()
+
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.8.5.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.8.5.bb
new file mode 100644
index 000000000..0883ec176
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.8.5.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "A high performance, open source, general-purpose RPC framework. \
+Provides gRPC libraries for multiple languages written on top of shared C core library \
+(C++, Node.js, Python, Ruby, Objective-C, PHP, C#)"
+HOMEPAGE = "https://github.com/grpc/grpc"
+SECTION = "libs"
+LICENSE = "Apache-2"
+
+DEPENDS = "gflags c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl"
+DEPENDS_append_class-target = " gtest grpc-native "
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "https://github.com/grpc/grpc/archive/v${PV}.tar.gz \
+ file://0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch \
+ file://0004-CMakeLists.txt-Find-c-ares-in-target-sysroot-alone.patch \
+ "
+SRC_URI[md5sum] = "b565fa6787e42f4969395870c2ad436e"
+SRC_URI[sha256sum] = "df9168da760fd2ee970c74c9d1b63377e0024be248deaa844e784d0df47599de"
+
+SRC_URI_append_class-target = " file://0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch"
+
+inherit cmake
+
+EXTRA_OECMAKE = " \
+ -DgRPC_CARES_PROVIDER=package \
+ -DgRPC_ZLIB_PROVIDER=package \
+ -DgRPC_SSL_PROVIDER=package \
+ -DgRPC_PROTOBUF_PROVIDER=package \
+ -DgRPC_GFLAGS_PROVIDER=package \
+ -DgRPC_INSTALL=1 \
+ -DBUILD_SHARED_LIBS=ON \
+ "
+
+FILES_${PN}-dev += "${libdir}/cmake"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/files/0001-Makefile.am-no-examples.patch b/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/files/0001-Makefile.am-no-examples.patch
new file mode 100644
index 000000000..5d83818c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/files/0001-Makefile.am-no-examples.patch
@@ -0,0 +1,27 @@
+From e6d53086524a94d27920614e38966020e0b2b3ef Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 5 Nov 2012 11:25:02 +0100
+Subject: [PATCH] Makefile.am: no examples
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+---
+ Makefile.am | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 28ee7eb..af437a6 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1 +1 @@
+-SUBDIRS = src examples
+\ No newline at end of file
++SUBDIRS = src
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/icon-slicer_0.3.bb b/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/icon-slicer_0.3.bb
new file mode 100644
index 000000000..9768a6e71
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/icon-slicer/icon-slicer_0.3.bb
@@ -0,0 +1,13 @@
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "gdk-pixbuf popt"
+
+SRC_URI = "http://freedesktop.org/software/${BPN}/releases/${BPN}-${PV}.tar.gz \
+ file://0001-Makefile.am-no-examples.patch"
+SRC_URI[md5sum] = "5c5374d4f265b0abe4daef1d03f87104"
+SRC_URI[sha256sum] = "05f0216dd0c25a17859de66357f64da5033375b6fbf5f31ca54867311160b64d"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/0001-Fix-printd-formatting-strings.patch b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/0001-Fix-printd-formatting-strings.patch
new file mode 100644
index 000000000..5b9afd961
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/0001-Fix-printd-formatting-strings.patch
@@ -0,0 +1,54 @@
+From 86b4d398dbb95e2437b70eba3b30e995ec9be505 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Aug 2017 20:47:50 -0700
+Subject: [PATCH] Fix printd formatting strings
+
+Fixes
+error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/ipfilter.c | 2 +-
+ src/othptab.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/ipfilter.c b/src/ipfilter.c
+index eb17ec7..8c76e4c 100644
+--- a/src/ipfilter.c
++++ b/src/ipfilter.c
+@@ -146,7 +146,7 @@ void gethostparams(struct hostparams *data, char *init_saddr, char *init_smask,
+ snprintf(msgstr, 60,
+ "Invalid protocol input at or near token \"%s\"",
+ bptr);
+- tui_error(ANYKEY_MSG, msgstr);
++ tui_error(ANYKEY_MSG, "%s", msgstr);
+ doagain = 1;
+ } else
+ doagain = 0;
+diff --git a/src/othptab.c b/src/othptab.c
+index 142c9c2..fe395c2 100644
+--- a/src/othptab.c
++++ b/src/othptab.c
+@@ -410,7 +410,7 @@ void printothpentry(struct othptable *table, struct othptabent *entry,
+ break;
+ }
+
+- sprintf(scratchpad, rarp_mac_addr);
++ sprintf(scratchpad, "%s", rarp_mac_addr);
+ strcat(msgstring, scratchpad);
+ wattrset(table->othpwin, ARPATTR);
+ break;
+@@ -485,7 +485,7 @@ void printothpentry(struct othptable *table, struct othptabent *entry,
+ wattrset(table->othpwin, UNKNIPATTR);
+ protptr = getprotobynumber(entry->protocol);
+ if (protptr != NULL) {
+- sprintf(protname, protptr->p_aliases[0]);
++ sprintf(protname, "%s", protptr->p_aliases[0]);
+ } else {
+ sprintf(protname, "IP protocol");
+ unknown = 1;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/ncurses-config.patch b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/ncurses-config.patch
new file mode 100644
index 000000000..65b92dade
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng/ncurses-config.patch
@@ -0,0 +1,81 @@
+Use pkg-config to search for ncurses libraries
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+Index: iptraf-ng-1.1.4/Makefile
+===================================================================
+--- iptraf-ng-1.1.4.orig/Makefile
++++ iptraf-ng-1.1.4/Makefile
+@@ -205,8 +205,8 @@ endif
+
+ ifndef NCURSES_LDFLAGS
+ ifdef NEEDS_NCURSES5
+- NCURSES_CFLAGS := $(shell ncurses5-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncurses5-config --libs 2>/dev/null)
++ NCURSES_CFLAGS := $(shell pkg-config ncurses --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncurses --libs 2>/dev/null)
+ ifndef NO_PANEL
+ NCURSES_LDFLAGS += -lpanel
+ endif
+@@ -215,8 +215,8 @@ endif
+
+ ifndef NCURSES_LDFLAGS
+ ifdef NEEDS_NCURSESW5
+- NCURSES_CFLAGS := $(shell ncursesw5-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncursesw5-config --libs 2>/dev/null)
++ NCURSES_CFLAGS := $(shell p[k-config ncursesw --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncursesw --libs 2>/dev/null)
+ ifndef NO_PANEL
+ NCURSES_LDFLAGS += -lpanel
+ endif
+@@ -225,8 +225,8 @@ endif
+
+ ifndef NCURSES_LDFLAGS
+ ifdef NEEDS_NCURSES6
+- NCURSES_CFLAGS := $(shell ncurses6-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncurses6-config --libs 2>/dev/null)
++ NCURSES_CFLAGS := $(shell pkg-config ncurses6 --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncurses6 --libs 2>/dev/null)
+ ifndef NO_PANEL
+ NCURSES_LDFLAGS += -lpanel
+ endif
+@@ -235,8 +235,8 @@ endif
+
+ ifndef NCURSES_LDFLAGS
+ ifdef NEEDS_NCURSESW6
+- NCURSES_CFLAGS := $(shell ncursesw6-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncursesw6-config --libs 2>/dev/null)
++ NCURSES_CFLAGS := $(shell pkg-config ncursesw --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncursesw --libs 2>/dev/null)
+ ifndef NO_PANEL
+ NCURSES_LDFLAGS += -lpanel
+ endif
+@@ -246,17 +246,17 @@ endif
+ # try find ncuses by autodetect
+ ifndef NCURSES_LDFLAGS
+ ifneq ($(shell ncursesw6-config --libs 2>/dev/null),)
+- NCURSES_CFLAGS := $(shell ncursesw6-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncursesw6-config --libs 2>/dev/null)
+- else ifneq ($(shell ncurses6-config --libs 2>/dev/null),)
+- NCURSES_CFLAGS := $(shell ncurses6-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncurses6-config --libs 2>/dev/null)
+- else ifneq ($(shell ncursesw5-config --libs 2>/dev/null),)
+- NCURSES_CFLAGS := $(shell ncursesw5-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncursesw5-config --libs 2>/dev/null)
+- else ifneq ($(shell ncurses5-config --libs 2>/dev/null),)
+- NCURSES_CFLAGS := $(shell ncurses5-config --cflags 2>/dev/null)
+- NCURSES_LDFLAGS := $(shell ncurses5-config --libs 2>/dev/null)
++ NCURSES_CFLAGS := $(shell pkg-config ncursesw --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncursesw --libs 2>/dev/null)
++ else ifneq ($(shell pkg-config ncurses --libs 2>/dev/null),)
++ NCURSES_CFLAGS := $(shell pkg-config ncurses --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncurses --libs 2>/dev/null)
++ else ifneq ($(shell pkg-config ncursesw --libs 2>/dev/null),)
++ NCURSES_CFLAGS := $(shell pkg-config ncursesw --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncursesw --libs 2>/dev/null)
++ else ifneq ($(shell pkg-config ncurses --libs 2>/dev/null),)
++ NCURSES_CFLAGS := $(shell pkg-config ncurses --cflags 2>/dev/null)
++ NCURSES_LDFLAGS := $(shell pkg-config ncurses --libs 2>/dev/null)
+ endif
+
+ ifneq ($(NCURSES_LDFLAGS),)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng_1.1.4.bb b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng_1.1.4.bb
new file mode 100644
index 000000000..c53e66300
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/iptraf/iptraf-ng_1.1.4.bb
@@ -0,0 +1,42 @@
+# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "A console-based network monitoring utility"
+DESCRIPTION = "IPTraf-ng is a console-based network monitoring utility. IPTraf gathers \
+data like TCP connection packet and byte counts, interface statistics \
+and activity indicators, TCP/UDP traffic breakdowns, and LAN station \
+packet and byte counts. IPTraf-ng features include an IP traffic monitor \
+which shows TCP flag information, packet and byte counts, ICMP \
+details, OSPF packet types, and oversized IP packet warnings; \
+interface statistics showing IP, TCP, UDP, ICMP, non-IP and other IP \
+packet counts, IP checksum errors, interface activity and packet size \
+counts; a TCP and UDP service monitor showing counts of incoming and \
+outgoing packets for common TCP and UDP application ports, a LAN \
+statistics module that discovers active hosts and displays statistics \
+about their activity; TCP, UDP and other protocol display filters so \
+you can view just the traffic you want; logging; support for Ethernet, \
+FDDI, ISDN, SLIP, PPP, and loopback interfaces; and utilization of the \
+built-in raw socket interface of the Linux kernel, so it can be used \
+on a wide variety of supported network cards."
+
+HOMEPAGE = "https://fedorahosted.org/iptraf-ng/"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e2b3850593b899b1a17594ed4cc4c731"
+DEPENDS = "ncurses"
+
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/iptraf-ng/iptraf-ng-1.1.4.tar.gz/e0f8df3b7baf2b5106709abc4f8c029a/${BP}.tar.gz \
+ file://ncurses-config.patch \
+ file://0001-Fix-printd-formatting-strings.patch \
+ "
+SRC_URI[md5sum] = "e0f8df3b7baf2b5106709abc4f8c029a"
+SRC_URI[sha256sum] = "16b9b05bf5d3725d86409b901696639ad46944d02de6def87b1ceae5310dd35c"
+
+inherit autotools-brokensep pkgconfig
+
+CFLAGS += "-D_GNU_SOURCE"
+
+PROVIDES = "iptraf"
+RPROVIDES_${PN} += "iptraf"
+RREPLACES_${PN} += "iptraf"
+RCONFLICTS_${PN} += "iptraf"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq/Support-without-oniguruma.patch b/meta-openembedded/meta-oe/recipes-devtools/jq/jq/Support-without-oniguruma.patch
new file mode 100644
index 000000000..1dfd955f0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jq/jq/Support-without-oniguruma.patch
@@ -0,0 +1,68 @@
+From 18b4b18b41f5ed396d73449ce8d6ec408d95d6b2 Mon Sep 17 00:00:00 2001
+From: David Tolnay <dtolnay@gmail.com>
+Date: Sat, 21 Nov 2015 10:05:37 -0800
+Subject: [PATCH] Support --without-oniguruma
+
+Upstream-Status: Backport
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+
+---
+ configure.ac | 41 ++++++++++++++++++++---------------------
+ 1 file changed, 20 insertions(+), 21 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9e2c8cf..7f6be34 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,27 +52,26 @@ fi
+ AC_ARG_WITH([oniguruma],
+ [AS_HELP_STRING([--with-oniguruma=prefix],
+ [try this for a non-standard install prefix of the oniguruma library])],
+- [ONIGURUMAPATHSET=1],
+- [ONIGURUMAPATHSET=0])
+-
+-if test $ONIGURUMAPATHSET = 1; then
+- CFLAGS="$CFLAGS -I${with_oniguruma}/include"
+- LDFLAGS="$LDFLAGS -L${with_oniguruma}/lib"
+-fi
+-
+-# check for ONIGURUMA library
+-HAVE_ONIGURUMA=0
+-AC_CHECK_HEADER("oniguruma.h",
+- AC_CHECK_LIB([onig],[onig_version],[LIBS="$LIBS -lonig"; HAVE_ONIGURUMA=1;]))
+-
+-# handle check results
+-if test $HAVE_ONIGURUMA != 1; then
+- AC_MSG_NOTICE([Oniguruma was not found.])
+- AC_MSG_NOTICE([ Try setting the location using '--with-oniguruma=PREFIX' ])
+-else
+- AC_DEFINE([HAVE_ONIGURUMA],1,[Define to 1 if Oniguruma is installed])
+-fi
+-
++ [],
++ [with_oniguruma=yes])
++
++AS_IF([test "x$with_oniguruma" != xno], [
++ AS_IF([test "x$with_oniguruma" != xyes], [
++ CFLAGS="$CFLAGS -I${with_oniguruma}/include"
++ LDFLAGS="$LDFLAGS -L${with_oniguruma}/lib"
++ ])
++ # check for ONIGURUMA library
++ have_oniguruma=0
++ AC_CHECK_HEADER("oniguruma.h",
++ AC_CHECK_LIB([onig],[onig_version],[LIBS="$LIBS -lonig"; have_oniguruma=1;]))
++ # handle check results
++ AS_IF([test $have_oniguruma = 1], [
++ AC_DEFINE([HAVE_ONIGURUMA], 1, [Define to 1 if Oniguruma is installed])
++ ], [
++ AC_MSG_NOTICE([Oniguruma was not found.])
++ AC_MSG_NOTICE([Try setting the location using '--with-oniguruma=PREFIX'])
++ ])
++])
+
+ dnl Check for valgrind
+ AC_CHECK_PROGS(valgrind_cmd, valgrind)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.5.bb b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.5.bb
new file mode 100644
index 000000000..0f40815cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.5.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Lightweight and flexible command-line JSON processor"
+DESCRIPTION = "jq is like sed for JSON data, you can use it to slice and \
+ filter and map and transform structured data with the same \
+ ease that sed, awk, grep and friends let you play with text."
+HOMEPAGE = "https://stedolan.github.io/jq/"
+BUGTRACKER = "https://github.com/stedolan/jq/issues"
+SECTION = "utils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=29dd0c35d7e391bb8d515eacf7592e00"
+
+SRC_URI = "https://github.com/stedolan/${BPN}/releases/download/${BP}/${BP}.tar.gz \
+ file://Support-without-oniguruma.patch \
+"
+
+SRC_URI[md5sum] = "0933532b086bd8b6a41c1b162b1731f9"
+SRC_URI[sha256sum] = "c4d2bfec6436341113419debf479d833692cc5cdab7eb0326b5a4d4fbe9f493c"
+
+inherit autotools
+
+PACKAGECONFIG ?= "oniguruma"
+
+PACKAGECONFIG[docs] = "--enable-docs,--disable-docs,ruby-native"
+PACKAGECONFIG[maintainer-mode] = "--enable-maintainer-mode,--disable-maintainer-mode,flex-native bison-native"
+PACKAGECONFIG[oniguruma] = "--with-oniguruma,--without-oniguruma,onig"
+
+OE_EXTRACONF += " \
+ --disable-valgrind \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Adjust-the-cmake-files.patch b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Adjust-the-cmake-files.patch
new file mode 100644
index 000000000..f7030c553
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Adjust-the-cmake-files.patch
@@ -0,0 +1,145 @@
+From d8986cb065e770017ee1622fb7324387ead60203 Mon Sep 17 00:00:00 2001
+From: Ming Liu <peter.x.liu@external.atlascopco.com>
+Date: Tue, 7 Mar 2017 11:46:52 +0100
+Subject: [PATCH] Adjust the cmake files
+
+- Remove json_test which can not build with boost 1.61.0.
+- Build shared library as well with the original static library.
+- Add FindLibJsonSpirit.cmake to be able to be found by the dependers.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+---
+ CMakeLists.txt | 8 +++---
+ FindLibJsonSpirit.cmake | 64 ++++++++++++++++++++++++++++++++++++++++++++++
+ json_spirit/CMakeLists.txt | 16 +++++++++++-
+ 3 files changed, 83 insertions(+), 5 deletions(-)
+ create mode 100644 FindLibJsonSpirit.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4637a6c..b292f0f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+ PROJECT(json_spirit)
+-SUBDIRS(json_spirit json_demo json_headers_only_demo json_map_demo json_test)
++SUBDIRS(json_spirit json_demo json_headers_only_demo json_map_demo)
+ INCLUDE_DIRECTORIES(json_spirit)
+
+ INSTALL(
+@@ -16,11 +16,11 @@ INSTALL(
+ ${CMAKE_SOURCE_DIR}/json_spirit/json_spirit_writer.h
+ ${CMAKE_SOURCE_DIR}/json_spirit/json_spirit_writer_template.h
+ ${CMAKE_SOURCE_DIR}/json_spirit/json_spirit_writer_options.h
+- DESTINATION include)
++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+ INSTALL(
+ FILES
+- ${CMAKE_BINARY_DIR}/json_spirit/libjson_spirit.a
+- DESTINATION lib)
++ ${CMAKE_SOURCE_DIR}/FindLibJsonSpirit.cmake
++ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/Modules)
+
+ INCLUDE(CPack)
+diff --git a/FindLibJsonSpirit.cmake b/FindLibJsonSpirit.cmake
+new file mode 100644
+index 0000000..7ee7687
+--- /dev/null
++++ b/FindLibJsonSpirit.cmake
+@@ -0,0 +1,64 @@
++# FindLibJsonSpirit - Find libjson_spirit headers and libraries.
++#
++# Sample:
++#
++# SET( LibJsonSpirit_USE_STATIC_LIBS OFF )
++# FIND_PACKAGE( LibJsonSpirit REQUIRED )
++# IF( LibJsonSpirit_FOUND )
++# INCLUDE_DIRECTORIES( ${LibJsonSpirit_INCLUDE_DIRS} )
++# TARGET_LINK_LIBRARIES( ... ${LibJsonSpirit_LIBRARIES} )
++# ENDIF()
++#
++# Variables used by this module need to be set before calling find_package
++#
++# LibJsonSpirit_USE_STATIC_LIBS Can be set to ON to force the use of the static
++# libjson_spirit libraries. Defaults to OFF.
++#
++# Variables provided by this module:
++#
++# LibJsonSpirit_FOUND Include dir, libjson_spirit libraries.
++#
++# LibJsonSpirit_LIBRARIES Link to these to use all the libraries you specified.
++#
++# LibJsonSpirit_INCLUDE_DIRS Include directories.
++#
++# For each component you specify in find_package(), the following (UPPER-CASE)
++# variables are set to pick and choose components instead of just using
++# LibJsonSpirit_LIBRARIES:
++#
++# LIBJSONSPIRIT_FOUND TRUE if libjson_spirit was found
++# LIBJSONSPIRIT_LIBRARY libjson_spirit library
++#
++
++# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
++IF(LibJsonSpirit_USE_STATIC_LIBS)
++ SET( _ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ SET(CMAKE_FIND_LIBRARY_SUFFIXES .a )
++ENDIF()
++
++# Look for the header files
++UNSET(LibJsonSpirit_INCLUDE_DIRS CACHE)
++FIND_PATH(LibJsonSpirit_INCLUDE_DIRS NAMES json_spirit.h)
++
++# Look for the core library
++UNSET(LIBJSONSPIRIT_LIBRARY CACHE)
++FIND_LIBRARY(LIBJSONSPIRIT_LIBRARY NAMES json_spirit)
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibJsonSpirit DEFAULT_MSG LIBJSONSPIRIT_LIBRARY LibJsonSpirit_INCLUDE_DIRS)
++MARK_AS_ADVANCED(
++ LIBJSONSPIRIT_FOUND
++ LIBJSONSPIRIT_LIBRARY
++)
++
++# Prepare return values and collectiong more components
++SET(LibJsonSpirit_FOUND ${LIBJSONSPIRIT_FOUND})
++SET(LibJsonSpirit_LIBRARIES ${LIBJSONSPIRIT_LIBRARY})
++MARK_AS_ADVANCED(
++ LibJsonSpirit_FOUND
++ LibJsonSpirit_LIBRARIES
++ LibJsonSpirit_INCLUDE_DIRS
++)
++
++# Restore CMAKE_FIND_LIBRARY_SUFFIXES
++IF(LibJsonSpirit_USE_STATIC_LIBS)
++ SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} )
++ENDIF()
+diff --git a/json_spirit/CMakeLists.txt b/json_spirit/CMakeLists.txt
+index fb52818..c1613b2 100644
+--- a/json_spirit/CMakeLists.txt
++++ b/json_spirit/CMakeLists.txt
+@@ -13,5 +13,19 @@ json_spirit_writer_template.h )
+ FIND_PACKAGE(Boost 1.34 REQUIRED)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
+-ADD_LIBRARY(json_spirit STATIC ${JSON_SPIRIT_SRCS})
++SET(JSONSPIRIT_SOVERSION_MAJOR "4")
++SET(JSONSPIRIT_SOVERSION_MINOR "0")
++SET(JSONSPIRIT_SOVERSION_PATCH "8")
+
++ADD_LIBRARY(json_spirit SHARED ${JSON_SPIRIT_SRCS})
++SET_TARGET_PROPERTIES(json_spirit PROPERTIES PROJECT_LABEL "Json Spirit Library")
++SET_TARGET_PROPERTIES(json_spirit PROPERTIES COMPILE_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
++SET_TARGET_PROPERTIES(json_spirit PROPERTIES VERSION ${JSONSPIRIT_SOVERSION_MAJOR}.${JSONSPIRIT_SOVERSION_MINOR}.${JSONSPIRIT_SOVERSION_PATCH})
++SET_TARGET_PROPERTIES(json_spirit PROPERTIES SOVERSION ${JSONSPIRIT_SOVERSION_MAJOR})
++INSTALL(TARGETS json_spirit DESTINATION ${CMAKE_INSTALL_LIBDIR})
++
++ADD_LIBRARY(json_spirit_static STATIC ${JSON_SPIRIT_SRCS})
++SET_TARGET_PROPERTIES(json_spirit_static PROPERTIES PROJECT_LABEL "Json Spirit Static Library")
++SET_TARGET_PROPERTIES(json_spirit_static PROPERTIES OUTPUT_NAME "json_spirit")
++SET_TARGET_PROPERTIES(json_spirit_static PROPERTIES SOVERSION ${JSONSPIRIT_SOVERSION_MAJOR})
++INSTALL(TARGETS json_spirit_static DESTINATION ${CMAKE_INSTALL_LIBDIR})
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Link-to-libatomic.patch b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Link-to-libatomic.patch
new file mode 100644
index 000000000..4c8c7b98d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/0001-Link-to-libatomic.patch
@@ -0,0 +1,64 @@
+From bbac9ac3e391253bc1f90cf0f70a2ce1aac9511f Mon Sep 17 00:00:00 2001
+From: Ming Liu <liu.ming50@gmail.com>
+Date: Wed, 30 Aug 2017 16:50:56 +0200
+Subject: [PATCH] Link to libatomic
+
+This is needed for clang compiler.
+
+Upstream-Status: Pending
+
+Signed-off-by: Ming Liu <liu.ming50@gmail.com>
+---
+ json_demo/CMakeLists.txt | 2 +-
+ json_headers_only_demo/CMakeLists.txt | 2 +-
+ json_map_demo/CMakeLists.txt | 2 +-
+ json_test/CMakeLists.txt | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/json_demo/CMakeLists.txt b/json_demo/CMakeLists.txt
+index b1d3c6a..0dfd308 100644
+--- a/json_demo/CMakeLists.txt
++++ b/json_demo/CMakeLists.txt
+@@ -5,5 +5,5 @@ FIND_PACKAGE(Boost 1.34 REQUIRED)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
+ ADD_EXECUTABLE(json_demo ${JSON_DEMO_SRCS})
+-TARGET_LINK_LIBRARIES(json_demo json_spirit)
++TARGET_LINK_LIBRARIES(json_demo json_spirit -latomic)
+
+diff --git a/json_headers_only_demo/CMakeLists.txt b/json_headers_only_demo/CMakeLists.txt
+index a3c787a..6eae11e 100644
+--- a/json_headers_only_demo/CMakeLists.txt
++++ b/json_headers_only_demo/CMakeLists.txt
+@@ -5,5 +5,5 @@ FIND_PACKAGE(Boost 1.34 REQUIRED)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
+ ADD_EXECUTABLE(json_headers_only_demo ${JSON_HEADERS_ONLY_DEMO_SRCS})
+-TARGET_LINK_LIBRARIES(json_headers_only_demo json_spirit)
++TARGET_LINK_LIBRARIES(json_headers_only_demo json_spirit -latomic)
+
+diff --git a/json_map_demo/CMakeLists.txt b/json_map_demo/CMakeLists.txt
+index 599006a..e3e45e8 100644
+--- a/json_map_demo/CMakeLists.txt
++++ b/json_map_demo/CMakeLists.txt
+@@ -5,5 +5,5 @@ FIND_PACKAGE(Boost 1.34 REQUIRED)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
+ ADD_EXECUTABLE(json_map_demo ${JSON_MAP_DEMO_SRCS})
+-TARGET_LINK_LIBRARIES(json_map_demo json_spirit)
++TARGET_LINK_LIBRARIES(json_map_demo json_spirit -latomic)
+
+diff --git a/json_test/CMakeLists.txt b/json_test/CMakeLists.txt
+index 38ffa7f..1ec1365 100644
+--- a/json_test/CMakeLists.txt
++++ b/json_test/CMakeLists.txt
+@@ -11,5 +11,5 @@ FIND_PACKAGE(Boost 1.34 REQUIRED)
+ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
+ ADD_EXECUTABLE(json_test ${JSON_TEST_SRCS})
+-TARGET_LINK_LIBRARIES(json_test json_spirit)
++TARGET_LINK_LIBRARIES(json_test json_spirit -latomic)
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/json_spirit_v4.08.zip b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/json_spirit_v4.08.zip
new file mode 100644
index 000000000..27d46b15a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit/json_spirit_v4.08.zip
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit_4.08.bb b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit_4.08.bb
new file mode 100644
index 000000000..c7c1ad1ec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-spirit/json-spirit_4.08.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A C++ JSON Parser/Generator Implemented with Boost Spirit."
+DESCRIPTION = "JSON Spirit, a C++ library that reads and writes JSON files or streams. \
+It is written using the Boost Spirit parser generator. If you are \
+already using Boost, you can use JSON Spirit without any additional \
+dependencies."
+HOMEPAGE = "https://www.codeproject.com/kb/recipes/json_spirit.aspx"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=278ef6183dec4aae1524fccc4b0113c9"
+
+SRC_URI = "file://json_spirit_v${PV}.zip \
+ file://0001-Adjust-the-cmake-files.patch \
+ file://0001-Link-to-libatomic.patch \
+"
+
+S = "${WORKDIR}/json_spirit_v${PV}"
+
+DEPENDS = "boost"
+
+inherit cmake
+
+FILES_${PN}-dev += "${datadir}/cmake/Modules/FindLibJsonSpirit.cmake"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsoncpp/jsoncpp_1.8.4.bb b/meta-openembedded/meta-oe/recipes-devtools/jsoncpp/jsoncpp_1.8.4.bb
new file mode 100644
index 000000000..88e332032
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsoncpp/jsoncpp_1.8.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "JSON C++ lib used to read and write json file."
+DESCRIPTION = "Jsoncpp is an implementation of a JSON (http://json.org) reader \
+ and writer in C++. JSON (JavaScript Object Notation) is a \
+ lightweight data-interchange format. It is easy for humans to \
+ read and write. It is easy for machines to parse and generate."
+
+HOMEPAGE = "https://github.com/open-source-parsers/jsoncpp"
+
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fa2a23dd1dc6c139f35105379d76df2b"
+
+SRCREV = "ddabf50f72cf369bf652a95c4d9fe31a1865a781"
+SRC_URI = "git://github.com/open-source-parsers/jsoncpp"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON -DJSONCPP_WITH_TESTS=OFF"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-cmake-replace-hardcoded-lib-CMAKE_LIBRARY_PATH-with-.patch b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-cmake-replace-hardcoded-lib-CMAKE_LIBRARY_PATH-with-.patch
new file mode 100644
index 000000000..748e4da1a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-cmake-replace-hardcoded-lib-CMAKE_LIBRARY_PATH-with-.patch
@@ -0,0 +1,77 @@
+From ac61124df17ab76527508bbb9a3115d4d6cc1af6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 21 Nov 2016 11:26:26 -0800
+Subject: [PATCH] cmake: replace hardcoded lib/${CMAKE_LIBRARY_PATH} with
+ {CMAKE_INSTALL_LIBDIR}
+
+Fixes
+| CMake Error at src/jsonrpccpp/CMakeLists.txt:207 (install):
+| install TARGETS given unknown argument "/lib".
+
+and
+
+Wrong install paths during cross compile
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/jsonrpccpp/CMakeLists.txt | 8 ++++----
+ src/stubgenerator/CMakeLists.txt | 6 +++---
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/src/jsonrpccpp/CMakeLists.txt b/src/jsonrpccpp/CMakeLists.txt
+index e4a1eb5..13f9056 100644
+--- a/src/jsonrpccpp/CMakeLists.txt
++++ b/src/jsonrpccpp/CMakeLists.txt
+@@ -205,15 +205,15 @@ if (WIN32)
+ endif()
+
+ install(TARGETS ${ALL_LIBS}
+- LIBRARY DESTINATION lib${LIB_SUFFIX}/${CMAKE_LIBRARY_PATH}
+- ARCHIVE DESTINATION lib${LIB_SUFFIX}/${CMAKE_LIBRARY_PATH}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION bin
+ )
+
+ #set pkg-config
+ get_filename_component(FULL_PATH_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} ABSOLUTE)
+ set(FULL_PATH_INCLUDEDIR "${FULL_PATH_INSTALL_PREFIX}/include")
+-set(FULL_PATH_LIBDIR "${FULL_PATH_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_PATH}")
++set(FULL_PATH_LIBDIR "${FULL_PATH_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+
+ CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/libjsonrpccpp-client.pc.cmake ${CMAKE_BINARY_DIR}/libjsonrpccpp-client.pc)
+ CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/libjsonrpccpp-server.pc.cmake ${CMAKE_BINARY_DIR}/libjsonrpccpp-server.pc)
+@@ -223,6 +223,6 @@ INSTALL(FILES
+ "${CMAKE_BINARY_DIR}/libjsonrpccpp-server.pc"
+ "${CMAKE_BINARY_DIR}/libjsonrpccpp-client.pc"
+ "${CMAKE_BINARY_DIR}/libjsonrpccpp-common.pc"
+- DESTINATION "lib${LIB_SUFFIX}/${CMAKE_LIBRARY_PATH}/pkgconfig")
++ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
+
+diff --git a/src/stubgenerator/CMakeLists.txt b/src/stubgenerator/CMakeLists.txt
+index f9dbe4c..b57b0fe 100644
+--- a/src/stubgenerator/CMakeLists.txt
++++ b/src/stubgenerator/CMakeLists.txt
+@@ -58,15 +58,15 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/libjsonrpccpp-stub.pc.cmake ${CMAKE_BIN
+
+ INSTALL(FILES
+ "${CMAKE_BINARY_DIR}/libjsonrpccpp-stub.pc"
+- DESTINATION "lib/${CMAKE_LIBRARY_PATH}/pkgconfig")
++ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
+ install(DIRECTORY ${CMAKE_SOURCE_DIR}/src/stubgenerator/
+ DESTINATION include/jsonrpccpp/stubgen
+ FILES_MATCHING PATTERN "*.h")
+
+ install(TARGETS ${ALL_LIBS} jsonrpcstub
+- LIBRARY DESTINATION lib${LIB_SUFFIX}/${CMAKE_LIBRARY_PATH}
+- ARCHIVE DESTINATION lib${LIB_SUFFIX}/${CMAKE_LIBRARY_PATH}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION bin
+ )
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorclient-Typecast-min-arguments-correctl.patch b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorclient-Typecast-min-arguments-correctl.patch
new file mode 100644
index 000000000..d21e97950
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorclient-Typecast-min-arguments-correctl.patch
@@ -0,0 +1,33 @@
+From 9500f12f5d827840634311d6ca972d9551211e4d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 21 Nov 2016 01:00:51 -0800
+Subject: [PATCH] filedescriptorclient: Typecast min() arguments correctly
+
+Fixes
+
+| /mnt/a/build/tmp-glibc/work/cortexa7hf-neon-vfpv4-oe-linux-gnueabi/jsonrpc/0.7.0-r0/git/src/jsonrpccp
+p/client/connectors/filedescriptorclient.cpp:47:92: note: deduced conflicting types for parameter 'co
+nst _Tp' ('unsigned int' and 'long unsigned int')
+| ssize_t byteWritten = write(outputfd, toSend.c_str(), min(toSend.size(), MAX_WRITE_SIZE));
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/jsonrpccpp/client/connectors/filedescriptorclient.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/jsonrpccpp/client/connectors/filedescriptorclient.cpp b/src/jsonrpccpp/client/connectors/filedescriptorclient.cpp
+index 77aac7e..6325b5c 100644
+--- a/src/jsonrpccpp/client/connectors/filedescriptorclient.cpp
++++ b/src/jsonrpccpp/client/connectors/filedescriptorclient.cpp
+@@ -43,7 +43,7 @@ void FileDescriptorClient::SendRPCMessage(const std::string& message,
+ string toSend = message;
+ do
+ {
+- ssize_t byteWritten = write(outputfd, toSend.c_str(), min(toSend.size(), MAX_WRITE_SIZE));
++ ssize_t byteWritten = write(outputfd, toSend.c_str(), min((long unsigned int)toSend.size(), MAX_WRITE_SIZE));
+ if (byteWritten < 1)
+ throw JsonRpcException(Errors::ERROR_CLIENT_CONNECTOR,
+ "Unknown error occured while writing to the output file descriptor");
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorserver-Include-sys-select.h-before-oth.patch b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorserver-Include-sys-select.h-before-oth.patch
new file mode 100644
index 000000000..3b9068a7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-filedescriptorserver-Include-sys-select.h-before-oth.patch
@@ -0,0 +1,34 @@
+From c7aad10628949e126f50e3264b5bc7eb417347c6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 21 Nov 2016 01:25:10 -0800
+Subject: [PATCH] filedescriptorserver: Include sys/select.h before other
+ headers
+
+Fixes errors e.g.
+| /mnt/a/build/tmp-glibc/work/cortexa7hf-neon-vfpv4-oe-linux-gnueabi/jsonrpc/0.7.0-r0/git/src/jsonrpccp
+p/server/connectors/filedescriptorserver.h:63:7: error: unknown type name 'fd_set'
+| fd_set read_fds;
+| ^
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/jsonrpccpp/server/connectors/filedescriptorserver.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp b/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
+index 9d74223..8e019ca 100644
+--- a/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
++++ b/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
+@@ -7,8 +7,8 @@
+ * @license See attached LICENSE.txt
+ ************************************************************************/
+
+-#include "filedescriptorserver.h"
+ #include <sys/select.h>
++#include "filedescriptorserver.h"
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-memset-and-family-needs-to-include-string.h.patch b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-memset-and-family-needs-to-include-string.h.patch
new file mode 100644
index 000000000..21ef98bf5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0001-memset-and-family-needs-to-include-string.h.patch
@@ -0,0 +1,26 @@
+From f5416f1c2b2989f94163a2ae4b91c9b9fa13c620 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 31 Mar 2017 13:32:31 -0700
+Subject: [PATCH 1/2] memset() and family needs to include string.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/jsonrpccpp/server/connectors/unixdomainsocketserver.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/jsonrpccpp/server/connectors/unixdomainsocketserver.cpp b/src/jsonrpccpp/server/connectors/unixdomainsocketserver.cpp
+index 9fca57b..e63c49e 100644
+--- a/src/jsonrpccpp/server/connectors/unixdomainsocketserver.cpp
++++ b/src/jsonrpccpp/server/connectors/unixdomainsocketserver.cpp
+@@ -16,7 +16,7 @@
+ #include <cstdio>
+ #include <fcntl.h>
+ #include <unistd.h>
+-#include <string>
++#include <cstring>
+
+ using namespace jsonrpc;
+ using namespace std;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0002-Fix-build-problem-on-Mac.patch b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0002-Fix-build-problem-on-Mac.patch
new file mode 100644
index 000000000..aece45b02
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc/0002-Fix-build-problem-on-Mac.patch
@@ -0,0 +1,27 @@
+From 79050ef9607f242e0d509969b19e9390220c3411 Mon Sep 17 00:00:00 2001
+From: Yongwei Wu <wuyongwei@gmail.com>
+Date: Sat, 31 Dec 2016 11:57:11 +0800
+Subject: [PATCH 2/2] Fix build problem on Mac.
+
+__suseconds_t is not defined on Mac/BSD; use the POSIX-conformant
+suseconds_t.
+---
+ src/jsonrpccpp/server/connectors/filedescriptorserver.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp b/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
+index 8e019ca..68107f2 100644
+--- a/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
++++ b/src/jsonrpccpp/server/connectors/filedescriptorserver.cpp
+@@ -122,7 +122,7 @@ int FileDescriptorServer::WaitForRead() {
+ FD_ZERO(&except_fds);
+ FD_SET(inputfd, &read_fds);
+ timeout.tv_sec = 0;
+- timeout.tv_usec = (__suseconds_t) (READ_TIMEOUT * 1000000);
++ timeout.tv_usec = (suseconds_t) (READ_TIMEOUT * 1000000);
+ // Wait for something to read
+ return select(inputfd + 1, &read_fds, &write_fds, &except_fds, &timeout);
+ }
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_0.7.0.bb b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_0.7.0.bb
new file mode 100644
index 000000000..eb1ff65b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_0.7.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "C++ framework for json-rpc 1.0 and 2.0"
+DESCRIPTION = "JsonRpc-Cpp is an OpenSource implementation of JSON-RPC \
+ protocol in C++. JSON-RPC is a lightweight remote procedure \
+ call protocol similar to XML-RPC."
+HOMEPAGE = "https://github.com/cinemast/libjson-rpc-cpp"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ee72d601854d5d2a065cf642883c489b"
+
+PV = "0.7.0+git${SRCPV}"
+
+SRC_URI = "git://github.com/cinemast/libjson-rpc-cpp \
+ file://0001-cmake-replace-hardcoded-lib-CMAKE_LIBRARY_PATH-with-.patch \
+ file://0001-filedescriptorclient-Typecast-min-arguments-correctl.patch \
+ file://0001-filedescriptorserver-Include-sys-select.h-before-oth.patch \
+ file://0001-memset-and-family-needs-to-include-string.h.patch \
+ file://0002-Fix-build-problem-on-Mac.patch \
+ "
+SRCREV = "ccbdb41388bdd929828941652da816bf52a0580e"
+
+SECTION = "libs"
+
+DEPENDS = "curl jsoncpp libmicrohttpd"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE += "-DCOMPILE_TESTS=NO -DCOMPILE_STUBGEN=NO -DCOMPILE_EXAMPLES=NO \
+ -DBUILD_SHARED_LIBS=YES -DBUILD_STATIC_LIBS=YES \
+ -DCMAKE_LIBRARY_PATH=${libdir} \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Makefile-ensure-frontends-exits-before-writing-into-.patch b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Makefile-ensure-frontends-exits-before-writing-into-.patch
new file mode 100644
index 000000000..a5263c6f8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Makefile-ensure-frontends-exits-before-writing-into-.patch
@@ -0,0 +1,32 @@
+From 780b0b8e48551ba49b011caeeb09101a09c14a61 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Fri, 26 May 2017 17:11:32 +0100
+Subject: [PATCH] Makefile: ensure frontends/ exits before writing into it
+
+As previously, if GCC dependencies are not being written and the build is out of
+tree then frontends/ won't exist so we need to create it.
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
+(cherry picked from commit f7986375129d1ada7dc6abeeec5b9d00ef6f7149)
+Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
+---
+ Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index 1baa110..434db5d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -171,6 +171,7 @@ if COND_kconfig
+ bin_SCRIPTS += frontends/kconfig
+
+ frontends/kconfig: frontends/kconfig.in
++ $(MKDIR_P) $(@D)
+ $(AM_V_GEN)$(SED) -e 's/@KCFG_LIST@/$(kcfg_list)/g' \
+ $< >$@
+ @chmod +x $@
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Switch-utils-kconfig-diff-to-use-Python-3.patch b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Switch-utils-kconfig-diff-to-use-Python-3.patch
new file mode 100644
index 000000000..b8f890481
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/files/0001-Switch-utils-kconfig-diff-to-use-Python-3.patch
@@ -0,0 +1,26 @@
+From 3b9b0f82c33f793a14d44bf06b6c8136bc3fc4bf Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 27 Apr 2017 16:48:42 +0300
+Subject: [PATCH] Switch utils/kconfig-diff to use Python 3
+
+The script supports it, but continues to refer to 2.x in shebang.
+
+Upstream-Status: Pending
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ utils/kconfig-diff | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/kconfig-diff b/utils/kconfig-diff
+index 0db267d..19189f3 100755
+--- a/utils/kconfig-diff
++++ b/utils/kconfig-diff
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python3
+ #
+ # diffconfig - a tool to compare .config files.
+ #
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/kconfig-frontends_4.11.0.1.bb b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/kconfig-frontends_4.11.0.1.bb
new file mode 100644
index 000000000..df08b8b11
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/kconfig-frontends/kconfig-frontends_4.11.0.1.bb
@@ -0,0 +1,41 @@
+# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Linux kernel style configuration framework for other projects"
+DESCRIPTION = "The kconfig-frontends project aims at centralising \
+the effort of keeping an up-to-date, out-of-tree, packaging of the \
+kconfig infrastructure, ready for use by third-party projects. \
+The kconfig-frontends package provides the kconfig parser, as well as all \
+the frontends"
+HOMEPAGE = "http://ymorin.is-a-geek.org/projects/kconfig-frontends"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9b8cf60ff39767ff04b671fca8302408"
+SECTION = "devel"
+DEPENDS += "ncurses flex bison gperf-native"
+RDEPENDS_${PN} += "python3 bash"
+SRC_URI = "git://ymorin.is-a-geek.org/kconfig-frontends;branch=4.11.x \
+ file://0001-Makefile-ensure-frontends-exits-before-writing-into-.patch \
+ file://0001-Switch-utils-kconfig-diff-to-use-Python-3.patch"
+
+SRCREV = "f22fce3a308be1c7790ebefc6bbedb33c5f7c86a"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+do_configure_prepend () {
+ mkdir -p ${S}/scripts/.autostuff/m4
+}
+
+do_install_append() {
+ ln -s kconfig-conf ${D}${bindir}/conf
+ ln -s kconfig-mconf ${D}${bindir}/mconf
+}
+
+EXTRA_OECONF += "--disable-gconf --disable-qconf"
+
+# Some packages have the version preceeding the .so instead properly
+# versioned .so.<version>, so we need to reorder and repackage.
+SOLIBS = "-${@d.getVar('PV')[:-2]}.so"
+FILES_SOLIBSDEV = "${libdir}/libkconfig-parser.so"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lemon/files/lemon.1 b/meta-openembedded/meta-oe/recipes-devtools/lemon/files/lemon.1
new file mode 100644
index 000000000..914ee0701
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lemon/files/lemon.1
@@ -0,0 +1,63 @@
+.Dd 2002-10-04
+.Dt LEMON 1
+.Os "Debian GNU/Linux"
+.\" Manual page created by Guus Sliepen <guus@debian.org>
+.Sh NAME
+.Nm lemon
+.Nd The Lemon Parser Generator
+.Sh SYNOPSIS
+.Nm
+.Op Fl bcgmqsx
+.Ar input
+.Sh DESCRIPTION
+.Nm
+is an LALR(1) parser generator for C or C++.
+It does the same job as bison and yacc.
+But
+.Nm
+is not another bison or yacc clone.
+It uses a different grammar syntax which is designed to reduce the number of coding errors.
+.Nm
+also uses a more sophisticated parsing engine that is faster than yacc and bison
+and which is both reentrant and thread-safe.
+Furthermore,
+.Nm
+implements features that can be used to eliminate resource leaks,
+making is suitable for use in long-running programs such as graphical user interfaces or embedded controllers.
+.Pp
+.Nm
+will read the grammer from
+.Ar input
+and write out a parser for that grammar in the C language.
+.Sh OPTIONS
+.Bl -tag -width indent
+.It Fl b
+Print only the basis in report.
+.It Fl c
+Don't compress the action table.
+.It Fl g
+Print grammar without actions.
+.It Fl m
+Output a makeheaders compatible file.
+.It Fl q
+(Quiet) Don't print the report file.
+.It Fl s
+Print parser stats to standard output.
+.It Fl x
+Print the version number.
+.El
+.Sh FILES
+.Bl -tag -width indent
+.It Pa /usr/share/lemon/lempar.c
+Driver template for the
+.Nm
+parser generator.
+.El
+.Sh AUTHOR
+.Nm
+has been written by
+.An D. Richard Hipp Aq drh@hwaci.com .
+.Pp
+This manual page was written by
+.An Guus Sliepen Aq guus@debian.org
+for the Debian GNU/Linux system.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon.inc b/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon.inc
new file mode 100644
index 000000000..57b9fb710
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "The Lemon Parser Generator"
+HOMEPAGE = "http://www.hwaci.com/sw/lemon/"
+LICENSE = "PD"
+SECTION = "devel"
+
+SRC_URI = "http://www.sqlite.org/sqlite-${PV}.tar.gz \
+ file://lemon.1"
+
+S = "${WORKDIR}/sqlite-${PV}/tool"
+
+do_compile() {
+ ${CC} ${CFLAGS} lemon.c -c -o lemon.o
+ ${CCLD} ${LDFLAGS} lemon.o -o lemon
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 lemon ${D}${bindir}
+ install -m 0644 lempar.c ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ install -m 0644 ${WORKDIR}/lemon.1 ${D}${mandir}/man1/
+}
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon_3.7.3.bb b/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon_3.7.3.bb
new file mode 100644
index 000000000..354db17e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lemon/lemon_3.7.3.bb
@@ -0,0 +1,7 @@
+require lemon.inc
+
+LIC_FILES_CHKSUM = "file://lemon.c;endline=8;md5=c7551a78fa3fdecd96d1ad6761d205ee"
+
+SRC_URI[md5sum] = "5437978aae90350cf984993091e0d695"
+SRC_URI[sha256sum] = "dbf352e8fbb74829f5e7a88f9f6ceeb80a709537f668c36e4b6cdfb271309ef6"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit/stdc-predef.patch b/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit/stdc-predef.patch
new file mode 100644
index 000000000..c95cdc9d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit/stdc-predef.patch
@@ -0,0 +1,17 @@
+__STDC_ISO_10646__ is defined in stdc-predef.h
+therefore include it to see if its there on a platform
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: libedit-20160903-3.1/src/chartype.h
+===================================================================
+--- libedit-20160903-3.1.orig/src/chartype.h
++++ libedit-20160903-3.1/src/chartype.h
+@@ -29,6 +29,7 @@
+ #ifndef _h_chartype_f
+ #define _h_chartype_f
+
++#include <stdc-predef.h>
+ /* Ideally we should also test the value of the define to see if it
+ * supports non-BMP code points without requiring UTF-16, but nothing
+ * seems to actually advertise this properly, despite Unicode 3.1 having
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit_20170329-3.1.bb b/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit_20170329-3.1.bb
new file mode 100644
index 000000000..fc2467112
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libedit/libedit_20170329-3.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "BSD replacement for libreadline"
+DESCRIPTION = "Command line editor library providing generic line editing, \
+history, and tokenization functions"
+HOMEPAGE = "http://www.thrysoee.dk/editline/"
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1e4228d0c5a9093b01aeaaeae6641533"
+
+DEPENDS = "ncurses"
+
+inherit autotools
+
+# upstream site does not allow wget's User-Agent
+FETCHCMD_wget += "-U bitbake"
+SRC_URI = "http://www.thrysoee.dk/editline/${BPN}-${PV}.tar.gz \
+ file://stdc-predef.patch \
+ "
+SRC_URI[md5sum] = "c57a0690e62ef523c083598730272cfd"
+SRC_URI[sha256sum] = "91f2d90fbd2a048ff6dad7131d9a39e690fd8a8fd982a353f1333dd4017dd4be"
+
+S = "${WORKDIR}/${BPN}-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libfribidi/fribidi_0.19.7.bb b/meta-openembedded/meta-oe/recipes-devtools/libfribidi/fribidi_0.19.7.bb
new file mode 100644
index 000000000..423a9148a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libfribidi/fribidi_0.19.7.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Fribidi library for bidirectional text"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+BBCLASSEXTEND = "native"
+
+PROVIDES = "libfribidi"
+DEPENDS = "glib-2.0 libpcre"
+
+inherit autotools lib_package pkgconfig
+
+CFLAGS_append = " -DPAGE_SIZE=4096 "
+SECURITY_CFLAGS_remove_toolchain-clang = "-D_FORTIFY_SOURCE=2"
+
+SRC_URI = "http://fribidi.org/download/fribidi-${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "6c7e7cfdd39c908f7ac619351c1c5c23"
+SRC_URI[sha256sum] = "08222a6212bbc2276a2d55c3bf370109ae4a35b689acbc66571ad2a670595a8e"
+
+CVE_PRODUCT = "gnu_fribidi"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.18.0.bb b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.18.0.bb
new file mode 100644
index 000000000..6386f1ffb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.18.0.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "libgee is a collection library providing GObject-based interfaces \
+and classes for commonly used data structures."
+HOMEPAGE = "http://live.gnome.org/Libgee"
+SECTION = "libs"
+DEPENDS = "glib-2.0"
+
+BBCLASSEXTEND = "native"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+PE = "1"
+
+inherit autotools vala pkgconfig gobject-introspection
+do_configure_prepend() {
+ MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
+ for i in ${MACROS}; do
+ rm -f m4/$i
+ done
+}
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libgee/${SHRT_VER}/${BP}.tar.xz"
+SRC_URI[md5sum] = "29ea6125e653d7e60b49a9a9544abc96"
+SRC_URI[sha256sum] = "4ad99ef937d071b4883c061df40bfe233f7649d50c354cf81235f180b4244399"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Add-CMake-build-files.patch b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Add-CMake-build-files.patch
new file mode 100644
index 000000000..560c3a6d7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Add-CMake-build-files.patch
@@ -0,0 +1,302 @@
+From 613297214d78ee10111e74e90e025166ebbcad9f Mon Sep 17 00:00:00 2001
+From: Peter Liu <peter.x.liu@external.atlascopco.com>
+Date: Sun, 5 Mar 2017 16:15:40 +0100
+Subject: [PATCH] Add CMake build files
+
+Upstream-Status: Pending
+
+Signed-off-by: Peter Liu <peter.x.liu@external.atlascopco.com>
+---
+ CMakeLists.txt | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ FindLibRcf.cmake | 63 +++++++++++++++++++++++
+ VERSION.cmake | 21 ++++++++
+ src/CMakeLists.txt | 25 +++++++++
+ 4 files changed, 256 insertions(+)
+ create mode 100644 CMakeLists.txt
+ create mode 100644 FindLibRcf.cmake
+ create mode 100644 VERSION.cmake
+ create mode 100755 src/CMakeLists.txt
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+new file mode 100644
+index 0000000..f6e24be
+--- /dev/null
++++ b/CMakeLists.txt
+@@ -0,0 +1,147 @@
++PROJECT (librcf)
++
++CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
++
++####################################################################
++# OPTION #
++####################################################################
++OPTION (LIBRCF_USE_OPENSSL "Build with OpenSSL support?" OFF)
++OPTION (LIBRCF_OPENSSL_STATIC "Enable static linking to OpenSSL?" OFF)
++OPTION (LIBRCF_USE_ZLIB "Build with zlib support?" OFF)
++OPTION (LIBRCF_ZLIB_STATIC "Enable static linking to zlib?" OFF)
++OPTION (LIBRCF_USE_SF_SERIALIZATION "Build with SF serialization support?" ON)
++OPTION (LIBRCF_USE_BOOST_SERIALIZATION "Build with Boost.Serialization support?" OFF)
++OPTION (LIBRCF_USE_BOOST_FILESYSTEM "Build with Boost.Filesystem support (required for file transfer support)?" OFF)
++OPTION (LIBRCF_USE_BOOST_ASIO "Build with Boost asio support?" ON)
++OPTION (LIBRCF_USE_PROTOBUF "Build with Protocol Buffer support?" OFF)
++OPTION (LIBRCF_USE_JSON "Build with JSON Spirit (required for JSON-RPC support)?" OFF)
++OPTION (LIBRCF_USE_IPV6 "Build with IPv6 support?" OFF)
++OPTION (LIBRCF_USE_CUSTOM_ALLOCATOR "Build with custom allocator support?" OFF)
++OPTION (LIBRCF_BUILD_DLL "Build a DLL exporting RCF?" OFF)
++OPTION (LIBRCF_AUTO_INIT_DEINIT "Enable automatic RCF initialization and deinitialization?" OFF)
++OPTION (LIBRCF_BUILD_STATIC_LIBS "Build the static library?" ON)
++OPTION (LIBRCF_BUILD_SHARED_LIBS "Build the shared library?" ON)
++OPTION (LIBRCF_BUILD_DEMOS "Build demo programs?" ON)
++
++####################################################################
++# CONFIGURATION #
++####################################################################
++INCLUDE (${CMAKE_SOURCE_DIR}/VERSION.cmake)
++
++SET (LIBRCF_LIBRARIES "-lpthread -ldl -latomic")
++INCLUDE_DIRECTORIES (${CMAKE_SOURCE_DIR}/include)
++
++IF (LIBRCF_USE_OPENSSL)
++ IF (NOT OPENSSL_FOUND)
++ FIND_PACKAGE (OpenSSL REQUIRED)
++ ENDIF (NOT OPENSSL_FOUND)
++ INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR})
++ ADD_DEFINITIONS (-DRCF_USE_OPENSSL)
++ENDIF (LIBRCF_USE_OPENSSL)
++
++IF (LIBRCF_OPENSSL_STATIC)
++ LIST (APPEND LIBRCF_LIBRARIES ${OPENSSL_LIBRARIES})
++ ADD_DEFINITIONS (-DRCF_OPENSSL_STATIC)
++ENDIF (LIBRCF_OPENSSL_STATIC)
++
++IF (LIBRCF_USE_ZLIB)
++ IF (NOT ZLIB_FOUND)
++ FIND_PACKAGE (ZLIB REQUIRED)
++ ENDIF (NOT ZLIB_FOUND)
++ INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIR})
++ ADD_DEFINITIONS (-DRCF_USE_ZLIB)
++ENDIF (LIBRCF_USE_ZLIB)
++
++IF (LIBRCF_ZLIB_STATIC)
++ LIST (APPEND LIBRCF_LIBRARIES ${ZLIB_LIBRARIES})
++ ADD_DEFINITIONS (-DRCF_ZLIB_STATIC)
++ENDIF (LIBRCF_ZLIB_STATIC)
++
++IF (LIBRCF_USE_SF_SERIALIZATION)
++ IF (NOT Boost_SYSTEM_FOUND)
++ FIND_PACKAGE (Boost REQUIRED COMPONENTS system)
++ ENDIF (NOT Boost_SYSTEM_FOUND)
++ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
++ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY})
++ ADD_DEFINITIONS (-DRCF_USE_SF_SERIALIZATION)
++ENDIF (LIBRCF_USE_SF_SERIALIZATION)
++
++IF (LIBRCF_USE_BOOST_SERIALIZATION)
++ IF (NOT Boost_SERIALIZATION_FOUND)
++ FIND_PACKAGE (Boost REQUIRED COMPONENTS serialization)
++ ENDIF (NOT Boost_SERIALIZATION_FOUND)
++ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
++ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SERIALIZATION_LIBRARY})
++ ADD_DEFINITIONS (-DRCF_USE_BOOST_SERIALIZATION)
++ENDIF (LIBRCF_USE_BOOST_SERIALIZATION)
++
++IF (LIBRCF_USE_BOOST_FILESYSTEM)
++ IF (NOT Boost_FILESYSTEM_FOUND)
++ FIND_PACKAGE (Boost REQUIRED COMPONENTS filesystem system)
++ ENDIF (NOT Boost_FILESYSTEM_FOUND)
++ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
++ LIST (APPEND LIBRCF_LIBRARIES ${Boost_FILESYSTEM_LIBRARY})
++ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY})
++ ADD_DEFINITIONS (-DRCF_USE_BOOST_FILESYSTEM)
++ENDIF (LIBRCF_USE_BOOST_FILESYSTEM)
++
++IF (LIBRCF_USE_BOOST_ASIO)
++ IF (NOT Boost_FOUND)
++ FIND_PACKAGE (Boost REQUIRED)
++ ENDIF (NOT Boost_FOUND)
++ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
++ ADD_DEFINITIONS (-DRCF_USE_BOOST_ASIO)
++ENDIF (LIBRCF_USE_BOOST_ASIO)
++
++IF (LIBRCF_USE_PROTOBUF)
++ IF(NOT Protobuf_FOUND)
++ FIND_PACKAGE (Protobuf REQUIRED)
++ ENDIF (NOT Protobuf_FOUND)
++ INCLUDE_DIRECTORIES (${Protobuf_INCLUDE_DIR})
++ LIST (APPEND LIBRCF_LIBRARIES ${Protobuf_LIBRARIES})
++ ADD_DEFINITIONS (-DRCF_USE_PROTOBUF)
++ENDIF (LIBRCF_USE_PROTOBUF)
++
++IF (LIBRCF_USE_JSON)
++ IF (NOT LibJsonSpirit_FOUND)
++ FIND_PACKAGE (LibJsonSpirit REQUIRED)
++ ENDIF (NOT LibJsonSpirit_FOUND)
++ INCLUDE_DIRECTORIES (${LibJsonSpirit_INCLUDE_DIR})
++ LIST (APPEND LIBRCF_LIBRARIES ${LibJsonSpirit_LIBRARIES})
++ ADD_DEFINITIONS (-DRCF_USE_JSON)
++ENDIF (LIBRCF_USE_JSON)
++
++IF (LIBRCF_USE_IPV6)
++ ADD_DEFINITIONS (-DRCF_USE_IPV6)
++ENDIF (LIBRCF_USE_IPV6)
++
++IF (LIBRCF_USE_CUSTOM_ALLOCATOR)
++ ADD_DEFINITIONS (-DRCF_USE_CUSTOM_ALLOCATOR)
++ENDIF (LIBRCF_USE_CUSTOM_ALLOCATOR)
++
++IF (LIBRCF_BUILD_DLL)
++ ADD_DEFINITIONS (-DRCF_BUILD_DLL)
++ENDIF (LIBRCF_BUILD_DLL)
++
++IF (LIBRCF_AUTO_INIT_DEINIT)
++ ADD_DEFINITIONS (-DRCF_AUTO_INIT_DEINIT)
++ENDIF (LIBRCF_AUTO_INIT_DEINIT)
++
++####################################################################
++# SUBDIRECTORY #
++####################################################################
++ADD_SUBDIRECTORY (src)
++
++IF (LIBRCF_BUILD_DEMOS)
++ # Server
++ ADD_EXECUTABLE (RcfServer demo/Server.cpp)
++ TARGET_LINK_LIBRARIES (RcfServer rcf ${LIBRCF_LIBRARIES})
++ INSTALL (TARGETS RcfServer DESTINATION ${CMAKE_INSTALL_BINDIR})
++
++ # Client
++ ADD_EXECUTABLE (RcfClient demo/Client.cpp)
++ TARGET_LINK_LIBRARIES (RcfClient rcf ${LIBRCF_LIBRARIES})
++ INSTALL (TARGETS RcfClient DESTINATION ${CMAKE_INSTALL_BINDIR})
++ENDIF (LIBRCF_BUILD_DEMOS)
++
++INSTALL (FILES ${CMAKE_SOURCE_DIR}/FindLibRcf.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/Modules)
+diff --git a/FindLibRcf.cmake b/FindLibRcf.cmake
+new file mode 100644
+index 0000000..9d7d8cd
+--- /dev/null
++++ b/FindLibRcf.cmake
+@@ -0,0 +1,63 @@
++# FindLibRcf - Find librcf headers and libraries.
++#
++# Sample:
++#
++# SET( LibRcf_USE_STATIC_LIBS OFF )
++# FIND_PACKAGE( LibRcf REQUIRED )
++# IF( LibRcf_FOUND )
++# INCLUDE_DIRECTORIES( ${LibRcf_INCLUDE_DIRS} )
++# TARGET_LINK_LIBRARIES( ... ${LibRcf_LIBRARIES} )
++# ENDIF()
++#
++# Variables used by this module need to be set before calling find_package
++#
++# LibRcf_USE_STATIC_LIBS Can be set to ON to force the use of the static
++# librcf libraries. Defaults to OFF.
++#
++# Variables provided by this module:
++#
++# LibRcf_FOUND Include dir, librcf libraries.
++#
++# LibRcf_LIBRARIES Link to these to use all the libraries you specified.
++#
++# LibRcf_INCLUDE_DIRS Include directories.
++#
++# For each component you specify in find_package(), the following (UPPER-CASE)
++# variables are set to pick and choose components instead of just using LibRcf_LIBRARIES:
++#
++# LIBRCF_FOUND TRUE if librcf was found
++# LIBRCF_LIBRARY librcf libraries
++#
++
++# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
++IF(LibRcf_USE_STATIC_LIBS)
++ SET( _ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
++ SET(CMAKE_FIND_LIBRARY_SUFFIXES .a )
++ENDIF()
++
++# Look for the header files
++UNSET(LibRcf_INCLUDE_DIRS CACHE)
++FIND_PATH(LibRcf_INCLUDE_DIRS NAMES RCF/RcfClient.hpp)
++
++# Look for the core library
++UNSET(LIBRCF_LIBRARY CACHE)
++FIND_LIBRARY(LIBRCF_LIBRARY NAMES rcf)
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibRcf DEFAULT_MSG LIBRCF_LIBRARY LibRcf_INCLUDE_DIRS)
++MARK_AS_ADVANCED(
++ LIBRCF_FOUND
++ LIBRCF_LIBRARY
++)
++
++# Prepare return values and collectiong more components
++SET(LibRcf_FOUND ${LIBRCF_FOUND})
++SET(LibRcf_LIBRARIES ${LIBRCF_LIBRARY})
++MARK_AS_ADVANCED(
++ LibRcf_FOUND
++ LibRcf_LIBRARIES
++ LibRcf_INCLUDE_DIRS
++)
++
++# Restore CMAKE_FIND_LIBRARY_SUFFIXES
++IF(LibRcf_USE_STATIC_LIBS)
++ SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} )
++ENDIF()
+diff --git a/VERSION.cmake b/VERSION.cmake
+new file mode 100644
+index 0000000..8b4bcdc
+--- /dev/null
++++ b/VERSION.cmake
+@@ -0,0 +1,21 @@
++# ==================================================
++# Versioning
++# ==========
++#
++# MAJOR Major number for this branch.
++#
++# MINOR The most recent interface number this
++# library implements.
++#
++# COMPATMINOR The latest binary compatible minor number
++# this library implements.
++#
++# PATCH The implementation number of the current interface.
++#
++#
++# - The package VERSION will be MAJOR.MINOR.PATCH.
++#
++
++SET (LIBRCF_SOVERSION_MAJOR "2")
++SET (LIBRCF_SOVERSION_MINOR "2")
++SET (LIBRCF_SOVERSION_PATCH "0")
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+new file mode 100755
+index 0000000..c227901
+--- /dev/null
++++ b/src/CMakeLists.txt
+@@ -0,0 +1,25 @@
++IF (NOT LIBRCF_BUILD_SHARED_LIBS)
++ ADD_LIBRARY (rcf STATIC RCF/RCF.cpp)
++ELSE (NOT LIBRCF_BUILD_SHARED_LIBS)
++ ADD_LIBRARY (rcf SHARED RCF/RCF.cpp)
++ TARGET_LINK_LIBRARIES (rcf ${LIBRCF_LIBRARIES})
++ SET_TARGET_PROPERTIES (rcf PROPERTIES COMPILE_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
++ SET_TARGET_PROPERTIES (rcf PROPERTIES VERSION ${LIBRCF_SOVERSION_MAJOR}.${LIBRCF_SOVERSION_MINOR}.${LIBRCF_SOVERSION_PATCH})
++ENDIF (NOT LIBRCF_BUILD_SHARED_LIBS)
++
++SET_TARGET_PROPERTIES (rcf PROPERTIES PROJECT_LABEL "RCF Library")
++SET_TARGET_PROPERTIES (rcf PROPERTIES OUTPUT_NAME "rcf")
++SET_TARGET_PROPERTIES (rcf PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR})
++SET_TARGET_PROPERTIES (rcf PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_LIBDIR})
++
++INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/RCF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/SF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++INSTALL (TARGETS rcf LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
++
++IF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS)
++ ADD_LIBRARY (rcf_static STATIC RCF/RCF.cpp)
++ SET_TARGET_PROPERTIES (rcf_static PROPERTIES PROJECT_LABEL "RCF Static Library")
++ SET_TARGET_PROPERTIES (rcf_static PROPERTIES OUTPUT_NAME "rcf")
++ SET_TARGET_PROPERTIES (rcf_static PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR})
++ INSTALL (TARGETS rcf_static LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
++ENDIF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Check-for-__powerpc__-define.patch b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Check-for-__powerpc__-define.patch
new file mode 100644
index 000000000..d91accf1d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-Check-for-__powerpc__-define.patch
@@ -0,0 +1,28 @@
+From ac7316679e30f7013604b19aa0949a0744e91d2f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Jul 2017 13:06:30 -0700
+Subject: [PATCH] Check for __powerpc__ define
+
+Also check for gcc's internal define for ppc platform
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/RCF/ByteOrdering.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/RCF/ByteOrdering.cpp b/src/RCF/ByteOrdering.cpp
+index 278ca80..9f9c446 100755
+--- a/src/RCF/ByteOrdering.cpp
++++ b/src/RCF/ByteOrdering.cpp
+@@ -36,7 +36,7 @@ namespace RCF {
+
+ const ByteOrder MachineByteOrder = BigEndian;
+
+-#elif defined( __ppc__ )
++#elif defined( __ppc__ ) || defined( __powerpc__ )
+
+ const ByteOrder MachineByteOrder = BigEndian;
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-ClientStub.hpp-fix-a-clang-compiling-issue.patch b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-ClientStub.hpp-fix-a-clang-compiling-issue.patch
new file mode 100644
index 000000000..e949dee40
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/0001-ClientStub.hpp-fix-a-clang-compiling-issue.patch
@@ -0,0 +1,35 @@
+From d78851b6f87f2472f041102d7b3726ffc009bfad Mon Sep 17 00:00:00 2001
+From: Ming Liu <peter.x.liu@external.atlascopco.com>
+Date: Tue, 6 Jun 2017 05:54:20 +0200
+Subject: [PATCH] ClientStub.hpp: fix a clang compiling issue
+
+A error was observed with clang compiler, as follows:
+| src/RCF/RCF.cpp:49:
+| src/RCF/ClientStub.cpp:28:
+| include/RCF/Future.hpp:49:26: error: 'enrol' is a private member of 'RCF::ClientStub'
+
+it can be fixed by declaring Future as a friend class of ClientStub.
+
+Upstream-Status: Pending
+
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+---
+ include/RCF/ClientStub.hpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/RCF/ClientStub.hpp b/include/RCF/ClientStub.hpp
+index 9882cf4..8465625 100755
+--- a/include/RCF/ClientStub.hpp
++++ b/include/RCF/ClientStub.hpp
+@@ -372,6 +372,8 @@ namespace RCF {
+
+ private:
+
++ template<typename U>
++ friend class Future;
+ friend class FutureImplBase;
+
+ template<
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/aarch64-support.patch b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/aarch64-support.patch
new file mode 100644
index 000000000..e08efb92f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/aarch64-support.patch
@@ -0,0 +1,13 @@
+Index: RCF-2.2.0.0/src/RCF/ByteOrdering.cpp
+===================================================================
+--- RCF-2.2.0.0.orig/src/RCF/ByteOrdering.cpp
++++ RCF-2.2.0.0/src/RCF/ByteOrdering.cpp
+@@ -60,7 +60,7 @@ namespace RCF {
+
+ const ByteOrder MachineByteOrder = LittleEndian;
+
+-#elif defined(__arm__)
++#elif defined(__arm__) || defined(__aarch64__)
+
+ const ByteOrder MachineByteOrder = LittleEndian;
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/mips-support.patch b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/mips-support.patch
new file mode 100644
index 000000000..4a327f78e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf/mips-support.patch
@@ -0,0 +1,19 @@
+Index: RCF-2.2.0.0/src/RCF/ByteOrdering.cpp
+===================================================================
+--- RCF-2.2.0.0.orig/src/RCF/ByteOrdering.cpp
++++ RCF-2.2.0.0/src/RCF/ByteOrdering.cpp
+@@ -64,6 +64,14 @@ namespace RCF {
+
+ const ByteOrder MachineByteOrder = LittleEndian;
+
++#elif defined(__mipsel__) || defined(__mips64el__)
++
++ const ByteOrder MachineByteOrder = LittleEndian;
++
++#elif defined( __mips__ ) || defined(__mips64__)
++
++ const ByteOrder MachineByteOrder = BigEndian;
++
+ #elif defined(__bfin__)
+
+ const ByteOrder MachineByteOrder = LittleEndian;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf_2.2.0.0.bb b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf_2.2.0.0.bb
new file mode 100644
index 000000000..267c0e79f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/librcf/librcf_2.2.0.0.bb
@@ -0,0 +1,54 @@
+SUMMARY = "RCF (Remote Call Framework) is a cross-platform interprocess communication framework for C++"
+DESCRIPTION = "Unlike other communication frameworks, RCF doesn't use a separate \
+IDL (Interface Definition Language). RCF interfaces are defined directly in C++, \
+and serialization for user-defined data types likewise is implemented in C++. \
+Instead of a separate IDL compiler tool, RCF uses the C++ compiler to generate \
+client and server stubs."
+HOMEPAGE = "http://www.deltavsoft.com/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://license.txt;md5=7586a312b9e978f9d6fac9a5780d1f84"
+
+SRC_URI = "http://www.deltavsoft.com/downloads/RCF-${PV}.tar.gz \
+ file://0001-Add-CMake-build-files.patch \
+ file://aarch64-support.patch \
+ file://0001-ClientStub.hpp-fix-a-clang-compiling-issue.patch \
+ file://mips-support.patch \
+ file://0001-Check-for-__powerpc__-define.patch \
+ "
+
+SRC_URI[md5sum] = "7ecb3c73f7eb66dba8790b659374f690"
+SRC_URI[sha256sum] = "bbfcc88de502c39604878c395f516b03fff4eac63eb4f7f44c07d433839712dd"
+
+S = "${WORKDIR}/RCF-${PV}"
+
+inherit cmake dos2unix
+
+PACKAGECONFIG ?= "zlib openssl sf-serialization boost-filesystem boost-asio protobuf json dll static shared demos"
+PACKAGECONFIG[zlib] = "-DLIBRCF_USE_ZLIB=ON,-DLIBRCF_USE_ZLIB=OFF,zlib,zlib"
+PACKAGECONFIG[zlib-static] = "-DLIBRCF_USE_ZLIB=ON -DLIBRCF_ZLIB_STATIC=ON,-DLIBRCF_ZLIB_STATIC=OFF,zlib,"
+PACKAGECONFIG[openssl] = "-DLIBRCF_USE_OPENSSL=ON,-DLIBRCF_USE_OPENSSL=OFF,openssl,libssl libcrypto"
+PACKAGECONFIG[openssl-static] = "-DLIBRCF_USE_OPENSSL=ON -DLIBRCF_OPENSSL_STATIC=ON,-DLIBRCF_OPENSSL_STATIC=OFF,openssl,"
+PACKAGECONFIG[sf-serialization] = "-DLIBRCF_USE_SF_SERIALIZATION=ON,-DLIBRCF_USE_SF_SERIALIZATION=OFF,boost,"
+PACKAGECONFIG[boost-serialization] = "-DLIBRCF_USE_BOOST_SERIALIZATION=ON,-DLIBRCF_USE_BOOST_SERIALIZATION=OFF,boost,"
+PACKAGECONFIG[boost-filesystem] = "-DLIBRCF_USE_BOOST_FILESYSTEM=ON,-DLIBRCF_USE_BOOST_FILESYSTEM=OFF,boost,"
+PACKAGECONFIG[boost-asio] = "-DLIBRCF_USE_BOOST_ASIO=ON,-DLIBRCF_USE_BOOST_ASIO=OFF,boost,"
+PACKAGECONFIG[protobuf] = "-DLIBRCF_USE_PROTOBUF=ON,-DLIBRCF_USE_PROTOBUF=OFF,protobuf,protobuf"
+PACKAGECONFIG[json] = "-DLIBRCF_USE_JSON=ON,-DLIBRCF_USE_JSON=OFF,json-spirit,json-spirit"
+PACKAGECONFIG[ipv6] = "-DLIBRCF_USE_IPV6=ON,-DLIBRCF_USE_IPV6=OFF,"
+PACKAGECONFIG[custom-allocator] = "-DLIBRCF_USE_CUSTOM_ALLOCATOR=ON,-DLIBRCF_USE_CUSTOM_ALLOCATOR=OFF,"
+PACKAGECONFIG[dll] = "-DLIBRCF_BUILD_DLL=ON,-DLIBRCF_BUILD_DLL=OFF,"
+PACKAGECONFIG[auto-init-deinit] = "-DLIBRCF_AUTO_INIT_DEINIT=ON,-DLIBRCF_AUTO_INIT_DEINIT=OFF,"
+PACKAGECONFIG[static] = "-DLIBRCF_BUILD_STATIC_LIBS=ON,-DLIBRCF_BUILD_STATIC_LIBS=OFF,"
+PACKAGECONFIG[shared] = "-DLIBRCF_BUILD_SHARED_LIBS=ON,-DLIBRCF_BUILD_SHARED_LIBS=OFF,"
+PACKAGECONFIG[demos] = "-DLIBRCF_BUILD_DEMOS=ON,-DLIBRCF_BUILD_DEMOS=OFF,"
+
+PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'demos', '${PN}-demos', '', d)}"
+
+FILES_${PN}-demos = "${bindir}/*"
+FILES_${PN}-dev += "${datadir}/cmake/Modules/FindLibRcf.cmake"
+
+BBCLASSEXTEND = "nativesdk"
+
+PNBLACKLIST[librcf] = " error: invalid use of incomplete type 'RCF::AsioIoService {aka class boost::asio::io_service}; among others?"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3/0001-configure.ac-fix-cross-compiling-issue.patch b/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3/0001-configure.ac-fix-cross-compiling-issue.patch
new file mode 100644
index 000000000..1a6928707
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3/0001-configure.ac-fix-cross-compiling-issue.patch
@@ -0,0 +1,31 @@
+From 9c2ffe825e28d63e2a771135f297e8ffac0dbe81 Mon Sep 17 00:00:00 2001
+From: Ming Liu <liu.ming50@gmail.com>
+Date: Tue, 11 Jul 2017 14:35:30 +0200
+Subject: [PATCH] configure.ac: fix cross-compiling issue
+
+Avoid checking for file existence when cross compiling.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Ming Liu <liu.ming50@gmail.com>
+---
+ configure.ac | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9978852..06b16e3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -120,9 +120,6 @@ AC_ARG_WITH(unicode-version,
+ AC_HELP_STRING(--with-unicode-version=VERSION,
+ [version of Unicode Standard @<:@default=current version@:>@]),
+ UNICODE_VERSION=$withval,UNICODE_VERSION=$DEFAULT_UNICODE_VERSION)
+-AC_CHECK_FILE([lib/$UNICODE_VERSION.c],
+- AC_MSG_RESULT($UNICODE_VERSION),
+- AC_MSG_ERROR(Unknown Unicode version $UNICODE_VERSION.))
+ AC_SUBST(UNICODE_VERSION)
+
+ # check if code to debug memory allocation is enabled.
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3_2.4.0.bb b/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3_2.4.0.bb
new file mode 100644
index 000000000..b83e86a48
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libsombok3/libsombok3_2.4.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Sombok - Unicode Text Segmentation Package."
+DESCRIPTION = "Sombok library package performs Line Breaking Algorithm described in \
+Unicode Standard Annex #14 (UAX #14). East_Asian_Width informative \
+properties defined by Annex #11 (UAX #11) may be concerned to determin \
+breaking positions. This package also implements "default" Grapheme \
+Cluster segmentation described in Annex #29 (UAX #29)."
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5b122a36d0f6dc55279a0ebc69f3c60b"
+
+SRC_URI = "git://github.com/hatukanezumi/sombok.git;protocol=https \
+ file://0001-configure.ac-fix-cross-compiling-issue.patch \
+ "
+
+inherit autotools pkgconfig
+
+# sombok-2.4.0
+SRCREV = "0098d85a037ef5c99a648a3669a077781a45e8cc"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+# Disable libthai support
+EXTRA_OECONF = "--disable-libthai"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/0001-version-libraries.patch b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/0001-version-libraries.patch
new file mode 100644
index 000000000..02117fa8d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/0001-version-libraries.patch
@@ -0,0 +1,28 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57804cf..1aa7f27 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -18,6 +18,7 @@ ENDIF()
+ SET(SOURCES avl.c avl-cmp.c blob.c blobmsg.c uloop.c usock.c ustream.c ustream-fd.c vlist.c utils.c safe_list.c runqueue.c md5.c kvlist.c ulog.c base64.c)
+
+ ADD_LIBRARY(ubox SHARED ${SOURCES})
++SET_TARGET_PROPERTIES(ubox PROPERTIES VERSION 1.0.1 SOVERSION 1)
+ ADD_LIBRARY(ubox-static STATIC ${SOURCES})
+ SET_TARGET_PROPERTIES(ubox-static PROPERTIES OUTPUT_NAME ubox)
+
+@@ -46,6 +47,7 @@ find_library(json NAMES json-c)
+ IF(EXISTS ${json})
+ ADD_LIBRARY(blobmsg_json SHARED blobmsg_json.c)
+ TARGET_LINK_LIBRARIES(blobmsg_json ubox ${json})
++ SET_TARGET_PROPERTIES(blobmsg_json PROPERTIES VERSION 1.0.1 SOVERSION 1)
+
+ ADD_LIBRARY(blobmsg_json-static STATIC blobmsg_json.c)
+ SET_TARGET_PROPERTIES(blobmsg_json-static
+@@ -55,6 +57,7 @@ IF(EXISTS ${json})
+ TARGET_LINK_LIBRARIES(jshn blobmsg_json ${json})
+
+ ADD_LIBRARY(json_script SHARED json_script.c)
++ SET_TARGET_PROPERTIES(json_script PROPERTIES VERSION 1.0.1 SOVERSION 1)
+ TARGET_LINK_LIBRARIES(json_script ubox)
+
+ INSTALL(TARGETS blobmsg_json blobmsg_json-static jshn json_script
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/fix-libdir.patch b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/fix-libdir.patch
new file mode 100644
index 000000000..6f09c8b29
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox/fix-libdir.patch
@@ -0,0 +1,40 @@
+[PATCH] fix the CMAKE_INSTALL_LIBDIR
+
+Upstream-Status: Pending
+
+libdir maybe /usr/lib64 for 64bit machine
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ CMakeLists.txt | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57804cf..2c7bdc1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -35,8 +35,8 @@ INSTALL(FILES ${headers}
+ DESTINATION include/libubox
+ )
+ INSTALL(TARGETS ubox ubox-static
+- ARCHIVE DESTINATION lib
+- LIBRARY DESTINATION lib
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ )
+
+ ADD_SUBDIRECTORY(lua)
+@@ -58,8 +58,8 @@ IF(EXISTS ${json})
+ TARGET_LINK_LIBRARIES(json_script ubox)
+
+ INSTALL(TARGETS blobmsg_json blobmsg_json-static jshn json_script
+- ARCHIVE DESTINATION lib
+- LIBRARY DESTINATION lib
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION bin
+ )
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox_git.bb b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox_git.bb
new file mode 100644
index 000000000..f9f4e08b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/libubox/libubox_git.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "C utility functions for OpenWrt"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "\
+ file://avl.c;endline=39;md5=00810155fed3d604816ec5814523d60a \
+ file://avl-cmp.c;endline=15;md5=1603e6094b432a5f3f320877a06f41b5 \
+ file://base64.c;endline=61;md5=51fdff010d45b0086ac0a6e035693dc0 \
+ file://blobmsg.c;endline=15;md5=7ed64c1570e8c9b46c4fc6fbd16c489e \
+ file://list.h;endline=28;md5=2d5f5475fbd0f08741354c5a99c2e983 \
+ file://md5.h;endline=39;md5=048bf9f68963c207a0c2b3a94c9d2aaa \
+ file://md5.c;endline=51;md5=0a448eea0bcbc89e3c7e6608f2d119a0 \
+ file://usock.h;endline=18;md5=f0dfdc8de858e66d66d74036611bba14 \
+"
+
+SRC_URI = "\
+ git://git.openwrt.org/project/libubox.git \
+ file://0001-version-libraries.patch \
+ file://fix-libdir.patch \
+"
+
+SRCREV = "155bf39896f126b1ba121b816922a88dc34c31e3"
+PV = "1.0.1+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+DEPENDS = "json-c"
+
+EXTRA_OECMAKE = "-DBUILD_EXAMPLES=OFF -DBUILD_LUA=OFF"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_1.2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_1.2.0.bb
new file mode 100644
index 000000000..31ab9a69c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_1.2.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "log4cplus provides a simple C++ logging API for log management"
+SECTION = "libs"
+HOMEPAGE = "http://sourceforge.net/projects/log4cplus/"
+BUGTRACKER = "http://sourceforge.net/p/log4cplus/bugs/"
+
+LICENSE = "Apache-2.0 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cedaa287ececcb94f9f2880d9c4ef085"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}-stable/${PV}/${BP}.tar.gz"
+SRC_URI[md5sum] = "e250f0f431c0723f8b625323e7b6465d"
+SRC_URI[sha256sum] = "ad5ec3b62f2f0bdc7f06fa398bde61091fd2493e91059e17315b5197420dcf04"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-ARM-code-has-unreachable-code-after-switch-statement.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-ARM-code-has-unreachable-code-after-switch-statement.patch
new file mode 100644
index 000000000..4d0e0392f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-ARM-code-has-unreachable-code-after-switch-statement.patch
@@ -0,0 +1,40 @@
+From 95ff340a74af16cca89fd5c5ca99890821053209 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 22 Apr 2017 00:47:16 -0700
+Subject: [PATCH] ARM code has unreachable code after switch statement move
+ initialization
+
+Fixed
+sysdeps/linux-gnu/arm/trace.c:173:33: error: statement will never be executed [-Werror=switch-unreachable]
+ uint32_t operand1, operand2, result = 0;
+ ^~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/linux-gnu/arm/trace.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/sysdeps/linux-gnu/arm/trace.c b/sysdeps/linux-gnu/arm/trace.c
+index 5e51e91..f974d1f 100644
+--- a/sysdeps/linux-gnu/arm/trace.c
++++ b/sysdeps/linux-gnu/arm/trace.c
+@@ -155,6 +155,8 @@ arm_get_next_pcs(struct process *proc,
+ const unsigned cond = BITS(this_instr, 28, 31);
+ const unsigned opcode = BITS(this_instr, 24, 27);
+
++ uint32_t operand1, operand2, result = 0;
++
+ if (cond == COND_NV)
+ switch (opcode) {
+ arch_addr_t addr;
+@@ -170,7 +172,6 @@ arm_get_next_pcs(struct process *proc,
+ }
+ else
+ switch (opcode) {
+- uint32_t operand1, operand2, result = 0;
+ case 0x0:
+ case 0x1: /* data processing */
+ case 0x2:
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Add-support-for-mips64-n32-n64.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Add-support-for-mips64-n32-n64.patch
new file mode 100644
index 000000000..d0daf1466
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Add-support-for-mips64-n32-n64.patch
@@ -0,0 +1,1148 @@
+From 5f6dfafb80bdc2566fe91d5fde96769175fabf35 Mon Sep 17 00:00:00 2001
+From: Faraz Shahbazker <faraz.shahbazker@imgtec.com>
+Date: Sat, 1 Jul 2017 10:56:59 -0700
+Subject: [PATCH] Add support for mips64 n32/n64
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+Source: http://lists.alioth.debian.org/pipermail/ltrace-devel/2015-May/001327.html
+
+ backend.h | 8 +
+ ltrace-elf.c | 12 ++
+ proc.h | 1 +
+ sysdeps/linux-gnu/mips/Makefile.am | 1 +
+ sysdeps/linux-gnu/mips/abi.c | 64 +++++++
+ sysdeps/linux-gnu/mips/arch.h | 24 ++-
+ sysdeps/linux-gnu/mips/plt.c | 68 ++++++--
+ sysdeps/linux-gnu/mips/signalent1.h | 52 ++++++
+ sysdeps/linux-gnu/mips/syscallent1.h | 328 +++++++++++++++++++++++++++++++++++
+ sysdeps/linux-gnu/mips/trace.c | 241 ++++++++++++++++++-------
+ sysdeps/linux-gnu/mksyscallent_mips | 9 +-
+ 11 files changed, 728 insertions(+), 80 deletions(-)
+ create mode 100644 sysdeps/linux-gnu/mips/abi.c
+ create mode 100644 sysdeps/linux-gnu/mips/signalent1.h
+ create mode 100644 sysdeps/linux-gnu/mips/syscallent1.h
+
+diff --git a/backend.h b/backend.h
+index e25daa0..0d6926a 100644
+--- a/backend.h
++++ b/backend.h
+@@ -314,6 +314,14 @@ int arch_process_exec(struct process *proc);
+ int arch_get_sym_info(struct ltelf *lte, const char *filename, size_t sym_index,
+ GElf_Rela *rela, GElf_Sym *sym);
+
++/* The following callback has to be implemented in backend if arch.h
++ * defines ARCH_HAVE_GET_ABI
++ *
++ * This is called from read_module just once, when reading the main module.
++ * The value returned is an architecture specific ID for the current ABI
++ * to be used later for ABI-specific operations. */
++char arch_get_abi(GElf_Ehdr ehdr);
++
+ enum plt_status {
+ PLT_FAIL,
+ PLT_OK,
+diff --git a/ltrace-elf.c b/ltrace-elf.c
+index f439cb0..a85edca 100644
+--- a/ltrace-elf.c
++++ b/ltrace-elf.c
+@@ -1131,6 +1131,14 @@ populate_symtab(struct process *proc, const char *filename,
+ only_exported_names);
+ }
+
++#ifndef ARCH_HAVE_GET_ABI
++char
++arch_get_abi(GElf_Ehdr ehdr)
++{
++ return 0;
++}
++#endif
++
+ static int
+ read_module(struct library *lib, struct process *proc,
+ const char *filename, GElf_Addr bias, int main)
+@@ -1151,6 +1159,10 @@ read_module(struct library *lib, struct process *proc,
+ * with 32-bit ltrace. It is desirable to preserve this. */
+ proc->e_machine = lte.ehdr.e_machine;
+ proc->e_class = lte.ehdr.e_ident[EI_CLASS];
++ /* Another candidate for the ABI module. We probably
++ * want to do all of the e_* stuff only once, for main */
++ if (main)
++ proc->e_abi = arch_get_abi(lte.ehdr);
+ get_arch_dep(proc);
+
+ /* Find out the base address. For PIE main binaries we look
+diff --git a/proc.h b/proc.h
+index a611456..00094e1 100644
+--- a/proc.h
++++ b/proc.h
+@@ -117,6 +117,7 @@ struct process {
+ * nauseam. */
+ short e_machine;
+ char e_class;
++ char e_abi;
+
+ #if defined(HAVE_LIBDW)
+ /* Unwind info for leader, NULL for non-leader procs. */
+diff --git a/sysdeps/linux-gnu/mips/Makefile.am b/sysdeps/linux-gnu/mips/Makefile.am
+index 1fd8c2a..571ee0d 100644
+--- a/sysdeps/linux-gnu/mips/Makefile.am
++++ b/sysdeps/linux-gnu/mips/Makefile.am
+@@ -20,6 +20,7 @@ noinst_LTLIBRARIES = \
+ ../libcpu.la
+
+ ___libcpu_la_SOURCES = \
++ abi.c \
+ plt.c \
+ regs.c \
+ trace.c
+diff --git a/sysdeps/linux-gnu/mips/abi.c b/sysdeps/linux-gnu/mips/abi.c
+new file mode 100644
+index 0000000..64e3c10
+--- /dev/null
++++ b/sysdeps/linux-gnu/mips/abi.c
+@@ -0,0 +1,64 @@
++/*
++ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 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
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ */
++
++#include <stdio.h>
++#include <gelf.h>
++#include "arch.h"
++
++/*
++ * There is no bit in the header-flags to mark N64 ABI, it must be
++ * determined by exclusion of other ABIs. The following values are
++ * from elfcpp/mips.h in binutils sources
++ */
++enum
++{
++ E_MIPS_ABI_MASK = 0x0000F000,
++ E_MIPS_ABI_N32 = 0x00000020,
++ E_MIPS_ABI_O32 = 0x00001000,
++ E_MIPS_ABI_O64 = 0x00002000,
++ E_MIPS_ABI_EABI32 = 0x00003000,
++ E_MIPS_ABI_EABI64 = 0x00004000,
++};
++
++char
++arch_get_abi(GElf_Ehdr ehdr)
++{
++ enum mips_abi_type abi;
++ switch (ehdr.e_flags & E_MIPS_ABI_MASK) {
++ case E_MIPS_ABI_O32:
++ abi = ABI_O32; break;
++ case E_MIPS_ABI_O64:
++ abi = ABI_O64; break;
++ case E_MIPS_ABI_EABI32:
++ case E_MIPS_ABI_EABI64:
++ fprintf(stderr, "%s: MIPS EABI is not supported\n", __func__);
++ abi = -1;
++ break;
++ default:
++ if (ehdr.e_flags & E_MIPS_ABI_N32)
++ abi = ABI_N32;
++ else
++ abi = ABI_N64;
++ }
++
++ return abi;
++}
++
++/**@}*/
+diff --git a/sysdeps/linux-gnu/mips/arch.h b/sysdeps/linux-gnu/mips/arch.h
+index 16273d2..8b75df2 100644
+--- a/sysdeps/linux-gnu/mips/arch.h
++++ b/sysdeps/linux-gnu/mips/arch.h
+@@ -1,5 +1,6 @@
+ /*
+ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
+ * Copyright (C) 2013,2014 Petr Machata, Red Hat Inc.
+ * Copyright (C) 2006 Eric Vaitl
+ *
+@@ -38,8 +39,12 @@
+ #define BREAKPOINT_LENGTH 4
+ #define DECR_PC_AFTER_BREAK 0
+
+-#define LT_ELFCLASS ELFCLASS32
++#ifdef __LP64__
++#define LT_ELFCLASS ELFCLASS64
+ #define LT_ELF_MACHINE EM_MIPS
++#endif /* __LP64__ */
++#define LT_ELFCLASS2 ELFCLASS32
++#define LT_ELF_MACHINE2 EM_MIPS
+
+ #define ARCH_HAVE_LTELF_DATA
+ struct arch_ltelf_data {
+@@ -53,8 +58,14 @@ struct arch_ltelf_data {
+ #define ARCH_HAVE_ADD_PLT_ENTRY
+ #define ARCH_HAVE_SW_SINGLESTEP
+ #define ARCH_HAVE_SYMBOL_RET
+-
++#define ARCH_HAVE_GET_ABI
+ #define ARCH_HAVE_LIBRARY_SYMBOL_DATA
++
++#ifdef __LP64__
++#define ARCH_HAVE_SIZEOF
++#define ARCH_HAVE_ALIGNOF
++#endif /* __LP64__ */
++
+ enum mips_plt_type
+ {
+ /* A symbol has associated PLT entry. */
+@@ -73,7 +84,14 @@ enum mips_plt_type
+ MIPS_PLT_NEED_UNRESOLVE,
+ };
+
+-struct mips_unresolve_data;
++enum mips_abi_type
++{
++ ABI_O32,
++ ABI_N32,
++ ABI_N64,
++ ABI_O64,
++};
++
+ struct arch_library_symbol_data {
+ enum mips_plt_type type;
+ union {
+diff --git a/sysdeps/linux-gnu/mips/plt.c b/sysdeps/linux-gnu/mips/plt.c
+index f3c12da..2d85ad9 100644
+--- a/sysdeps/linux-gnu/mips/plt.c
++++ b/sysdeps/linux-gnu/mips/plt.c
+@@ -1,5 +1,6 @@
+ /*
+ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
+ * Copyright (C) 2012,2013,2014 Petr Machata, Red Hat Inc.
+ * Copyright (C) 2012 Edgar E. Iglesias, Axis Communications
+ * Copyright (C) 2008,2009 Juan Cespedes
+@@ -182,6 +183,11 @@ arch_find_dl_debug(struct process *proc, arch_addr_t dyn_addr,
+ {
+ arch_addr_t rld_addr;
+ int r;
++#ifdef __LP64__
++ size_t addrsize = proc->mask_32bit ? 4 : (sizeof *ret);
++#else /* !__LP64__ */
++ size_t addrsize = sizeof *ret;
++#endif /* !__LP64__ */
+
+ /* MIPS puts the address of the r_debug structure into the
+ * DT_MIPS_RLD_MAP entry instead of into the DT_DEBUG entry. */
+@@ -189,7 +195,7 @@ arch_find_dl_debug(struct process *proc, arch_addr_t dyn_addr,
+ DT_MIPS_RLD_MAP, &rld_addr);
+ if (r == 0) {
+ if (umovebytes(proc, rld_addr,
+- ret, sizeof *ret) != sizeof *ret) {
++ ret, addrsize) != addrsize) {
+ r = -1;
+ }
+ }
+@@ -295,14 +301,25 @@ arch_elf_init(struct ltelf *lte, struct library *lib)
+
+ for (j = 0; j < data->d_size / 16; ++j) {
+ uint32_t insn;
++ int got_size = 4;
++ uint32_t load_inst = 0x24180000U; /* addui t8,0,xx */
++
++#ifdef __LP64__
++ if (arch_get_abi(lte->ehdr) == ABI_N64
++ || arch_get_abi(lte->ehdr) == ABI_O64) {
++ got_size = 8;
++ load_inst = 0x64180000U; /* daddui t8,0,xx */
++ }
++#endif /* __LP64__ */
++
+ if (elf_read_u32(data, j * 16 + 12, &insn) < 0)
+ goto fail_stubs;
+
+ if (insn == 0)
+ continue;
+
+- /* 0x2418XXXX encodes lbu 0,t8,XXXX or li t8,XXXX. */
+- if ((insn & 0xffff0000U) != 0x24180000U)
++ /* 0x[62]418XXXX encodes [d]addiu t8, 0, XXXX. */
++ if ((insn & 0xffff0000U) != load_inst)
+ goto fail_stubs;
+
+ unsigned idx = insn & 0xffff;
+@@ -323,8 +340,8 @@ arch_elf_init(struct ltelf *lte, struct library *lib)
+ + lte->arch.mips_local_gotno;
+ /* XXX Double cast. */
+ arch_addr_t got_entry_addr
+- = (arch_addr_t) (uintptr_t) lte->arch.pltgot_addr
+- + got_idx * 4;
++ = (arch_addr_t) (uintptr_t) (lte->arch.pltgot_addr
++ + got_idx * got_size);
+
+ GElf_Rela rela = {
+ /* XXX double cast. */
+@@ -336,7 +353,7 @@ arch_elf_init(struct ltelf *lte, struct library *lib)
+ if (VECT_PUSHBACK(&lte->plt_relocs, &rela) < 0)
+ goto fail_stubs;
+
+- fprintf(stderr,
++ debug(2,
+ "added stub entry for symbol %u at %#lx, GOT @%p\n",
+ idx, (unsigned long) rela.r_addend, got_entry_addr);
+ }
+@@ -362,8 +379,17 @@ read_got_entry(struct process *proc, GElf_Addr addr, GElf_Addr *valp)
+ {
+ /* XXX double cast. */
+ arch_addr_t a = (arch_addr_t) (uintptr_t) addr;
+- uint32_t l;
+- if (proc_read_32(proc, a, &l) < 0) {
++ uint64_t l = 0;
++ int result;
++
++#ifdef __LP64__
++ if (!proc->mask_32bit)
++ result = proc_read_64(proc, a, &l);
++ else
++#endif /* __LP64__ */
++ result = proc_read_32(proc, a, (uint32_t *) &l);
++
++ if (result < 0) {
+ fprintf(stderr, "ptrace read got entry @%#" PRIx64 ": %s\n",
+ addr, strerror(errno));
+ return -1;
+@@ -426,13 +452,13 @@ arch_elf_add_plt_entry(struct process *proc, struct ltelf *lte,
+ GElf_Addr stub_addr = rela->r_addend + lte->bias;
+
+ debug(2, "PLT-less arch_elf_add_plt_entry %s = %#llx\n",
+- a_name, stub_addr);
++ a_name, (unsigned long long) stub_addr);
+
+ struct library_symbol *libsym = NULL;
+ if (default_elf_add_plt_entry(proc, lte, a_name, rela, ndx,
+ &libsym) < 0) {
+- fprintf(stderr, "%s: failed %s(%#llx): %s\n", __func__,
+- a_name, stub_addr, strerror(errno));
++ fprintf(stderr, "%s: failed %s(%#lx): %s\n", __func__,
++ a_name, (unsigned long) stub_addr, strerror(errno));
+ goto fail;
+ }
+
+@@ -503,13 +529,27 @@ jump_to_entry_point(struct process *proc, struct breakpoint *bp)
+ static int
+ unresolve_got_entry(struct process *proc, GElf_Addr addr, GElf_Addr value)
+ {
+- uint32_t v32 = (uint32_t) value;
+- uint32_t a32 = (uint32_t) addr;
+- if (ptrace(PTRACE_POKETEXT, proc->pid, a32, v32) < 0) {
++ arch_addr_t a = (arch_addr_t) (uintptr_t) addr;
++#ifdef __LP64__
++ /* To write 32-bit value in 64-bit mode, we must read-modify-write
++ the 64-bit value with only the lower 32 bits modified. */
++ if (proc->mask_32bit) {
++ GElf_Addr orig = ptrace(PTRACE_PEEKTEXT, proc->pid, a, 0);
++ char *obytes = (char *) &orig;
++ char *nbytes = (char *) &value;
++ unsigned i;
++
++ for (i = 0; i < 4; i++)
++ obytes[i] = nbytes[i];
++ value = orig;
++ }
++#endif /* __LP64__ */
++ if (ptrace(PTRACE_POKETEXT, proc->pid, a, (unsigned long) value) < 0) {
+ fprintf(stderr, "failed to unresolve GOT entry: %s\n",
+ strerror(errno));
+ return -1;
+ }
++
+ return 0;
+ }
+
+diff --git a/sysdeps/linux-gnu/mips/signalent1.h b/sysdeps/linux-gnu/mips/signalent1.h
+new file mode 100644
+index 0000000..9e9d1f7
+--- /dev/null
++++ b/sysdeps/linux-gnu/mips/signalent1.h
+@@ -0,0 +1,52 @@
++/*
++ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 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
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ */
++
++ "SIG_0", /* 0 */
++ "SIGHUP", /* 1 */
++ "SIGINT", /* 2 */
++ "SIGQUIT", /* 3 */
++ "SIGILL", /* 4 */
++ "SIGTRAP", /* 5 */
++ "SIGIOT", /* 6 */
++ "SIGEMT", /* 7 */
++ "SIGFPE", /* 8 */
++ "SIGKILL", /* 9 */
++ "SIGBUS", /* 10 */
++ "SIGSEGV", /* 11 */
++ "SIGSYS", /* 12 */
++ "SIGPIPE", /* 13 */
++ "SIGALRM", /* 14 */
++ "SIGTERM", /* 15 */
++ "SIGUSR1", /* 16 */
++ "SIGUSR2", /* 17 */
++ "SIGCHLD", /* 18 */
++ "SIGPWR", /* 19 */
++ "SIGWINCH", /* 20 */
++ "SIGURG", /* 21 */
++ "SIGIO", /* 22 */
++ "SIGSTOP", /* 23 */
++ "SIGTSTP", /* 24 */
++ "SIGCONT", /* 25 */
++ "SIGTTIN", /* 26 */
++ "SIGTTOU", /* 27 */
++ "SIGVTALRM", /* 28 */
++ "SIGPROF", /* 29 */
++ "SIGXCPU", /* 30 */
++ "SIGXFSZ", /* 31 */
+diff --git a/sysdeps/linux-gnu/mips/syscallent1.h b/sysdeps/linux-gnu/mips/syscallent1.h
+new file mode 100644
+index 0000000..dfa4954
+--- /dev/null
++++ b/sysdeps/linux-gnu/mips/syscallent1.h
+@@ -0,0 +1,328 @@
++/*
++ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 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
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ */
++
++/* MIPS64 */
++
++ "read", /* 0 */
++ "write", /* 1 */
++ "open", /* 2 */
++ "close", /* 3 */
++ "stat", /* 4 */
++ "fstat", /* 5 */
++ "lstat", /* 6 */
++ "poll", /* 7 */
++ "lseek", /* 8 */
++ "mmap", /* 9 */
++ "mprotect", /* 10 */
++ "munmap", /* 11 */
++ "brk", /* 12 */
++ "rt_sigaction", /* 13 */
++ "rt_sigprocmask", /* 14 */
++ "ioctl", /* 15 */
++ "pread64", /* 16 */
++ "pwrite64", /* 17 */
++ "readv", /* 18 */
++ "writev", /* 19 */
++ "access", /* 20 */
++ "pipe", /* 21 */
++ "_newselect", /* 22 */
++ "sched_yield", /* 23 */
++ "mremap", /* 24 */
++ "msync", /* 25 */
++ "mincore", /* 26 */
++ "madvise", /* 27 */
++ "shmget", /* 28 */
++ "shmat", /* 29 */
++ "shmctl", /* 30 */
++ "dup", /* 31 */
++ "dup2", /* 32 */
++ "pause", /* 33 */
++ "nanosleep", /* 34 */
++ "getitimer", /* 35 */
++ "setitimer", /* 36 */
++ "alarm", /* 37 */
++ "getpid", /* 38 */
++ "sendfile", /* 39 */
++ "socket", /* 40 */
++ "connect", /* 41 */
++ "accept", /* 42 */
++ "sendto", /* 43 */
++ "recvfrom", /* 44 */
++ "sendmsg", /* 45 */
++ "recvmsg", /* 46 */
++ "shutdown", /* 47 */
++ "bind", /* 48 */
++ "listen", /* 49 */
++ "getsockname", /* 50 */
++ "getpeername", /* 51 */
++ "socketpair", /* 52 */
++ "setsockopt", /* 53 */
++ "getsockopt", /* 54 */
++ "clone", /* 55 */
++ "fork", /* 56 */
++ "execve", /* 57 */
++ "exit", /* 58 */
++ "wait4", /* 59 */
++ "kill", /* 60 */
++ "uname", /* 61 */
++ "semget", /* 62 */
++ "semop", /* 63 */
++ "semctl", /* 64 */
++ "shmdt", /* 65 */
++ "msgget", /* 66 */
++ "msgsnd", /* 67 */
++ "msgrcv", /* 68 */
++ "msgctl", /* 69 */
++ "fcntl", /* 70 */
++ "flock", /* 71 */
++ "fsync", /* 72 */
++ "fdatasync", /* 73 */
++ "truncate", /* 74 */
++ "ftruncate", /* 75 */
++ "getdents", /* 76 */
++ "getcwd", /* 77 */
++ "chdir", /* 78 */
++ "fchdir", /* 79 */
++ "rename", /* 80 */
++ "mkdir", /* 81 */
++ "rmdir", /* 82 */
++ "creat", /* 83 */
++ "link", /* 84 */
++ "unlink", /* 85 */
++ "symlink", /* 86 */
++ "readlink", /* 87 */
++ "chmod", /* 88 */
++ "fchmod", /* 89 */
++ "chown", /* 90 */
++ "fchown", /* 91 */
++ "lchown", /* 92 */
++ "umask", /* 93 */
++ "gettimeofday", /* 94 */
++ "getrlimit", /* 95 */
++ "getrusage", /* 96 */
++ "sysinfo", /* 97 */
++ "times", /* 98 */
++ "ptrace", /* 99 */
++ "getuid", /* 100 */
++ "syslog", /* 101 */
++ "getgid", /* 102 */
++ "setuid", /* 103 */
++ "setgid", /* 104 */
++ "geteuid", /* 105 */
++ "getegid", /* 106 */
++ "setpgid", /* 107 */
++ "getppid", /* 108 */
++ "getpgrp", /* 109 */
++ "setsid", /* 110 */
++ "setreuid", /* 111 */
++ "setregid", /* 112 */
++ "getgroups", /* 113 */
++ "setgroups", /* 114 */
++ "setresuid", /* 115 */
++ "getresuid", /* 116 */
++ "setresgid", /* 117 */
++ "getresgid", /* 118 */
++ "getpgid", /* 119 */
++ "setfsuid", /* 120 */
++ "setfsgid", /* 121 */
++ "getsid", /* 122 */
++ "capget", /* 123 */
++ "capset", /* 124 */
++ "rt_sigpending", /* 125 */
++ "rt_sigtimedwait", /* 126 */
++ "rt_sigqueueinfo", /* 127 */
++ "rt_sigsuspend", /* 128 */
++ "sigaltstack", /* 129 */
++ "utime", /* 130 */
++ "mknod", /* 131 */
++ "personality", /* 132 */
++ "ustat", /* 133 */
++ "statfs", /* 134 */
++ "fstatfs", /* 135 */
++ "sysfs", /* 136 */
++ "getpriority", /* 137 */
++ "setpriority", /* 138 */
++ "sched_setparam", /* 139 */
++ "sched_getparam", /* 140 */
++ "sched_setscheduler", /* 141 */
++ "sched_getscheduler", /* 142 */
++ "sched_get_priority_max", /* 143 */
++ "sched_get_priority_min", /* 144 */
++ "sched_rr_get_interval", /* 145 */
++ "mlock", /* 146 */
++ "munlock", /* 147 */
++ "mlockall", /* 148 */
++ "munlockall", /* 149 */
++ "vhangup", /* 150 */
++ "pivot_root", /* 151 */
++ "_sysctl", /* 152 */
++ "prctl", /* 153 */
++ "adjtimex", /* 154 */
++ "setrlimit", /* 155 */
++ "chroot", /* 156 */
++ "sync", /* 157 */
++ "acct", /* 158 */
++ "settimeofday", /* 159 */
++ "mount", /* 160 */
++ "umount2", /* 161 */
++ "swapon", /* 162 */
++ "swapoff", /* 163 */
++ "reboot", /* 164 */
++ "sethostname", /* 165 */
++ "setdomainname", /* 166 */
++ "create_module", /* 167 */
++ "init_module", /* 168 */
++ "delete_module", /* 169 */
++ "get_kernel_syms", /* 170 */
++ "query_module", /* 171 */
++ "quotactl", /* 172 */
++ "nfsservctl", /* 173 */
++ "getpmsg", /* 174 */
++ "putpmsg", /* 175 */
++ "afs_syscall", /* 176 */
++ "reserved177", /* 177 */
++ "gettid", /* 178 */
++ "readahead", /* 179 */
++ "setxattr", /* 180 */
++ "lsetxattr", /* 181 */
++ "fsetxattr", /* 182 */
++ "getxattr", /* 183 */
++ "lgetxattr", /* 184 */
++ "fgetxattr", /* 185 */
++ "listxattr", /* 186 */
++ "llistxattr", /* 187 */
++ "flistxattr", /* 188 */
++ "removexattr", /* 189 */
++ "lremovexattr", /* 190 */
++ "fremovexattr", /* 191 */
++ "tkill", /* 192 */
++ "reserved193", /* 193 */
++ "futex", /* 194 */
++ "sched_setaffinity", /* 195 */
++ "sched_getaffinity", /* 196 */
++ "cacheflush", /* 197 */
++ "cachectl", /* 198 */
++ "sysmips", /* 199 */
++ "io_setup", /* 200 */
++ "io_destroy", /* 201 */
++ "io_getevents", /* 202 */
++ "io_submit", /* 203 */
++ "io_cancel", /* 204 */
++ "exit_group", /* 205 */
++ "lookup_dcookie", /* 206 */
++ "epoll_create", /* 207 */
++ "epoll_ctl", /* 208 */
++ "epoll_wait", /* 209 */
++ "remap_file_pages", /* 210 */
++ "rt_sigreturn", /* 211 */
++ "set_tid_address", /* 212 */
++ "restart_syscall", /* 213 */
++ "semtimedop", /* 214 */
++ "fadvise64", /* 215 */
++ "timer_create", /* 216 */
++ "timer_settime", /* 217 */
++ "timer_gettime", /* 218 */
++ "timer_getoverrun", /* 219 */
++ "timer_delete", /* 220 */
++ "clock_settime", /* 221 */
++ "clock_gettime", /* 222 */
++ "clock_getres", /* 223 */
++ "clock_nanosleep", /* 224 */
++ "tgkill", /* 225 */
++ "utimes", /* 226 */
++ "mbind", /* 227 */
++ "get_mempolicy", /* 228 */
++ "set_mempolicy", /* 229 */
++ "mq_open", /* 230 */
++ "mq_unlink", /* 231 */
++ "mq_timedsend", /* 232 */
++ "mq_timedreceive", /* 233 */
++ "mq_notify", /* 234 */
++ "mq_getsetattr", /* 235 */
++ "vserver", /* 236 */
++ "waitid", /* 237 */
++ "238", /* 238 */
++ "add_key", /* 239 */
++ "request_key", /* 240 */
++ "keyctl", /* 241 */
++ "set_thread_area", /* 242 */
++ "inotify_init", /* 243 */
++ "inotify_add_watch", /* 244 */
++ "inotify_rm_watch", /* 245 */
++ "migrate_pages", /* 246 */
++ "openat", /* 247 */
++ "mkdirat", /* 248 */
++ "mknodat", /* 249 */
++ "fchownat", /* 250 */
++ "futimesat", /* 251 */
++ "newfstatat", /* 252 */
++ "unlinkat", /* 253 */
++ "renameat", /* 254 */
++ "linkat", /* 255 */
++ "symlinkat", /* 256 */
++ "readlinkat", /* 257 */
++ "fchmodat", /* 258 */
++ "faccessat", /* 259 */
++ "pselect6", /* 260 */
++ "ppoll", /* 261 */
++ "unshare", /* 262 */
++ "splice", /* 263 */
++ "sync_file_range", /* 264 */
++ "tee", /* 265 */
++ "vmsplice", /* 266 */
++ "move_pages", /* 267 */
++ "set_robust_list", /* 268 */
++ "get_robust_list", /* 269 */
++ "kexec_load", /* 270 */
++ "getcpu", /* 271 */
++ "epoll_pwait", /* 272 */
++ "ioprio_set", /* 273 */
++ "ioprio_get", /* 274 */
++ "utimensat", /* 275 */
++ "signalfd", /* 276 */
++ "timerfd", /* 277 */
++ "eventfd", /* 278 */
++ "fallocate", /* 279 */
++ "timerfd_create", /* 280 */
++ "timerfd_gettime", /* 281 */
++ "timerfd_settime", /* 282 */
++ "signalfd4", /* 283 */
++ "eventfd2", /* 284 */
++ "epoll_create1", /* 285 */
++ "dup3", /* 286 */
++ "pipe2", /* 287 */
++ "inotify_init1", /* 288 */
++ "preadv", /* 289 */
++ "pwritev", /* 290 */
++ "rt_tgsigqueueinfo", /* 291 */
++ "perf_event_open", /* 292 */
++ "accept4", /* 293 */
++ "recvmmsg", /* 294 */
++ "fanotify_init", /* 295 */
++ "fanotify_mark", /* 296 */
++ "prlimit64", /* 297 */
++ "name_to_handle_at", /* 298 */
++ "open_by_handle_at", /* 299 */
++ "clock_adjtime", /* 300 */
++ "syncfs", /* 301 */
++ "sendmmsg", /* 302 */
++ "setns", /* 303 */
++ "process_vm_readv", /* 304 */
++ "process_vm_writev", /* 305 */
+diff --git a/sysdeps/linux-gnu/mips/trace.c b/sysdeps/linux-gnu/mips/trace.c
+index e81b374..d54818e 100644
+--- a/sysdeps/linux-gnu/mips/trace.c
++++ b/sysdeps/linux-gnu/mips/trace.c
+@@ -1,5 +1,6 @@
+ /*
+ * This file is part of ltrace.
++ * Copyright (C) 2015 Imagination Technologies Limited
+ * Copyright (C) 2013 Petr Machata, Red Hat Inc.
+ * Copyright (C) 2012 Edgar E. Iglesias, Axis Communications
+ * Copyright (C) 2010 Arnaud Patard, Mandriva SA
+@@ -29,6 +30,7 @@
+ #include <signal.h>
+ #include <sys/ptrace.h>
+ #include <asm/ptrace.h>
++#include <asm/unistd.h>
+ #include <assert.h>
+ #include <asm/unistd.h>
+
+@@ -68,6 +70,44 @@
+ void
+ get_arch_dep(struct process *proc)
+ {
++#ifdef __LP64__
++ proc->mask_32bit = (proc->e_class == ELFCLASS32);
++#endif /* __LP64__ */
++ /* n32 personality is best approximated by n64,
++ at least for syscall numbers */
++ proc->personality = (proc->e_class == ELFCLASS64
++ || proc->e_abi == ABI_N32);
++}
++
++/**
++ \param abi ABI of current process, from mips_abi_type enum
++ \param list An array of 4 elements, each corresponding to an ABI, in
++ the order: o32, n32, n64, o64
++
++ return value from array corresponding to requested ABI
++ */
++static int
++abi_select(const int abi, const int list[])
++{
++ int retval;
++ switch (abi)
++ {
++ case ABI_N32:
++ retval = list[1];
++ break;
++ case ABI_N64:
++ retval = list[2];
++ break;
++ case ABI_O64:
++ retval = list[3];
++ break;
++ case ABI_O32:
++ default:
++ retval = list[0];
++ break;
++ }
++
++ return retval;
+ }
+
+ /**
+@@ -90,53 +130,94 @@ get_arch_dep(struct process *proc)
+ int
+ syscall_p(struct process *proc, int status, int *sysnum)
+ {
+- if (WIFSTOPPED(status)
+- && WSTOPSIG(status) == (SIGTRAP | proc->tracesysgood)) {
+- /* get the user's pc (plus 8) */
+- long pc = (long)get_instruction_pointer(proc);
+- /* fetch the SWI instruction */
+- int insn = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 4, 0);
+- int num = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 8, 0);
+-
+- /*
+- On a mips, syscall looks like:
+- 24040fa1 li v0, 0x0fa1 # 4001 --> _exit syscall
+- 0000000c syscall
+- */
+- if(insn!=0x0000000c){
+- /* sigreturn returns control to the point
+- where the signal was received; skip check
+- for preceeding syscall instruction */
+- int depth = proc->callstack_depth;
+- struct callstack_element *top = NULL;
+- if (depth > 0)
+- top = &proc->callstack[depth - 1];
+-
+- if (top != NULL && top->is_syscall &&
+- (top->c_un.syscall == (__NR_rt_sigreturn -
+- __NR_Linux) ||
+- top->c_un.syscall == (__NR_sigreturn -
+- __NR_Linux))) {
+- *sysnum = top->c_un.syscall;
+- return 2;
+- }
+- else
+- return 0;
+- }
+-
+- *sysnum = (num & 0xFFFF) - 4000;
+- /* if it is a syscall, return 1 or 2 */
+- if (proc->callstack_depth > 0 &&
+- proc->callstack[proc->callstack_depth - 1].is_syscall &&
+- proc->callstack[proc->callstack_depth - 1].c_un.syscall == *sysnum) {
++ unsigned long pc;
++ int insn, prev;
++ int min_syscall, max_syscall, sigreturn, rt_sigreturn;
++ struct callstack_element *top = NULL;
++ int depth = proc->callstack_depth;
++ const int syscallbase[] = {__NR_O32_Linux, __NR_N32_Linux,
++ __NR_64_Linux, __NR_O32_Linux};
++ const int syscallnum[] = {__NR_O32_Linux_syscalls,
++ __NR_N32_Linux_syscalls,
++ __NR_64_Linux_syscalls,
++ __NR_O32_Linux_syscalls};
++ const int rt_sigreturn_list[] = {193, 211, 211, 193};
++ const int sigreturn_list[] = {119, -1, -1, 119};
++
++ if (!WIFSTOPPED(status)
++ || WSTOPSIG(status) != (SIGTRAP | proc->tracesysgood))
++ return 0;
++
++ /* get the user's pc (plus 8) */
++ pc = (unsigned long)get_instruction_pointer(proc);
++ /* fetch the SWI instruction */
++ insn = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 4, 0);
++ prev = ptrace(PTRACE_PEEKTEXT, proc->pid, pc - 8, 0);
++
++ if (depth > 0)
++ top = &proc->callstack[depth - 1];
++
++ /* Range of syscall numbers varies with ABI; ref:asm/unistd.h */
++ min_syscall = abi_select(proc->e_abi, syscallbase);
++ max_syscall = min_syscall + abi_select(proc->e_abi, syscallnum);
++ sigreturn = min_syscall + abi_select(proc->e_abi, sigreturn_list);
++ rt_sigreturn = min_syscall + abi_select(proc->e_abi, rt_sigreturn_list);
++
++ /* not a syscall instruction */
++ if(insn!=0x0000000c){
++ /* sigreturn returns control to the point where the signal was
++ received; skip check for preceeding syscall instruction */
++ if (top != NULL && top->is_syscall
++ && (top->c_un.syscall == (rt_sigreturn - min_syscall)
++ || top->c_un.syscall == (sigreturn - min_syscall))) {
++ *sysnum = top->c_un.syscall;
+ return 2;
+ }
++ else
++ return 0;
++ }
+
+- if (*sysnum >= 0) {
+- return 1;
+- }
++ /*
++ On a mips, syscall looks like:
++ 24020fa1 li v0, 0x0fa1 # 4001 --> _exit syscall
++ 0000000c syscall
++ */
++ if ((prev & 0xFFFF0000) == 0x24020000) {
++ *sysnum = (prev & 0xFFFF) - min_syscall;
+ }
+- return 0;
++ /*
++ The above is not necessary in Linux kernel > v2.6.35. Recent
++ kernels have a fancy-pants method of restarting syscalls.
++ We must read v0 instead, to get the syscall number.
++
++ Unfortunately, v0 is not preserved till the point of return.
++ If already in syscall and v0 is invalid, assume this event
++ to be a return without attempting to match previous syscall.
++
++ Caveat: logic fails if v0 incidentally contains a valid
++ syscall number, distinct from the current syscall number,
++ at the point of return from a nested syscall.
++ */
++ else {
++ int v0 = ptrace(PTRACE_PEEKUSER, proc->pid, off_v0, 0);
++
++ if ((v0 >= min_syscall) && (v0 <= max_syscall))
++ *sysnum = v0 - min_syscall;
++ else if (depth > 0 && top->is_syscall)
++ *sysnum = top->c_un.syscall;
++ else /* syscall instruction without valid number - ignored */
++ return 0;
++ }
++
++ /* if it is a syscall, return 1 or 2 */
++ if (depth > 0 && top->is_syscall && top->c_un.syscall == *sysnum) {
++ return 2;
++ }
++
++ if (*sysnum >= 0)
++ return 1;
++ else
++ return 0;
+ }
+
+ /* Based on GDB code. */
+@@ -162,9 +243,11 @@ mips32_relative_offset (uint32_t inst)
+ return ((itype_immediate(inst) ^ 0x8000) - 0x8000) << 2;
+ }
+
+-int mips_next_pcs(struct process *proc, uint32_t pc, uint32_t *newpc)
++int mips_next_pcs(struct process *proc, unsigned long pc,
++ unsigned long *newpc)
+ {
+- uint32_t inst, rx;
++ uint32_t inst;
++ unsigned long rx;
+ int op;
+ int rn;
+ int nr = 0;
+@@ -277,8 +360,8 @@ int mips_next_pcs(struct process *proc, uint32_t pc, uint32_t *newpc)
+ return nr;
+
+ fail:
+- printf("nr=%d pc=%x\n", nr, pc);
+- printf("pc=%x %x\n", newpc[0], newpc[1]);
++ printf("nr=%d pc=%lx\n", nr, pc);
++ printf("pc=%lx %lx\n", newpc[0], newpc[1]);
+ return 0;
+ }
+
+@@ -304,17 +387,27 @@ fail:
+ * branches within the LL-SC sequence.
+ */
+ #define inrange(x,lo,hi) ((x)<=(hi) && (x)>=(lo))
++/* Instruction encodings for atomic operations */
++#ifdef __mips64
++#define op_SC_p(op) (op == 0x38 || op == 0x3c)
++#define op_LL_p(op) (op == 0x30 || op == 0x34)
++#else /* !__mips64 */
++#define op_SC_p(op) (op == 0x38)
++#define op_LL_p(op) (op == 0x30)
++#endif /* !__mips64 */
++
+ static int
+-mips_atomic_next_pcs(struct process *proc, uint32_t lladdr, uint32_t *newpcs)
++mips_atomic_next_pcs(struct process *proc, unsigned long lladdr,
++ unsigned long *newpcs)
+ {
+ int nr = 0;
+
+- uint32_t scaddr;
++ unsigned long scaddr;
+ for (scaddr = lladdr + 4; scaddr - lladdr <= 2048; scaddr += 4) {
+ /* Found SC, now stepover trailing branch */
+ uint32_t inst;
+ if (proc_read_32(proc, (arch_addr_t)scaddr, &inst) >= 0 &&
+- itype_op(inst) == 0x38) {
++ op_SC_p (itype_op(inst))) {
+ newpcs[nr++] = scaddr + 4;
+ break;
+ }
+@@ -327,16 +420,16 @@ mips_atomic_next_pcs(struct process *proc, uint32_t lladdr, uint32_t *newpcs)
+ }
+
+ /* Scan LL<->SC range for branches going outside that range */
+- uint32_t spc;
++ unsigned long spc;
+ for (spc = lladdr + 4; spc < scaddr; spc += 4) {
+- uint32_t scanpcs[2];
++ unsigned long scanpcs[2];
+ int snr = mips_next_pcs(proc, spc, scanpcs);
+
+ int i;
+ for (i = 0; i < snr; ++i) {
+ if (!inrange(scanpcs[i], lladdr, scaddr)) {
+- uint32_t *tmp = realloc(newpcs, (nr + 1) *
+- sizeof *newpcs);
++ unsigned long *tmp = realloc(newpcs, (nr + 1)
++ * sizeof *newpcs);
+ if (tmp == NULL) {
+ perror("malloc atomic next pcs");
+ return -1;
+@@ -357,8 +450,8 @@ arch_sw_singlestep(struct process *proc, struct breakpoint *bp,
+ int (*add_cb)(arch_addr_t, struct sw_singlestep_data *),
+ struct sw_singlestep_data *add_cb_data)
+ {
+- uint32_t pc = (uint32_t) get_instruction_pointer(proc);
+- uint32_t *newpcs;
++ unsigned long pc = (unsigned long) get_instruction_pointer(proc);
++ unsigned long *newpcs;
+ int nr;
+ uint32_t inst;
+
+@@ -369,7 +462,7 @@ arch_sw_singlestep(struct process *proc, struct breakpoint *bp,
+ return SWS_FAIL;
+
+ /* Starting an atomic read-modify-write sequence */
+- if (itype_op(inst) == 0x30)
++ if (op_LL_p(itype_op(inst)))
+ nr = mips_atomic_next_pcs(proc, pc, newpcs);
+ else
+ nr = mips_next_pcs(proc, pc, newpcs);
+@@ -462,7 +555,7 @@ gimme_arg(enum tof type, struct process *proc, int arg_num,
+ debug(2,"ret = %#lx",addr);
+ return addr;
+ }
+- ret = addr + 4*arg_num;
++ ret = addr + sizeof(long) * arg_num;
+ ret=ptrace(PTRACE_PEEKTEXT,proc->pid,addr,0);
+ debug(2,"ret = %#lx",ret);
+ return ret;
+@@ -474,7 +567,7 @@ gimme_arg(enum tof type, struct process *proc, int arg_num,
+ debug(2,"ret = %#lx",addr);
+ return addr;
+ }
+- ret = addr + 4*arg_num;
++ ret = addr + sizeof(long) * arg_num;
+ ret=ptrace(PTRACE_PEEKTEXT,proc->pid,addr,0);
+ debug(2,"ret = %#lx",ret);
+ return ret;
+@@ -483,4 +576,34 @@ gimme_arg(enum tof type, struct process *proc, int arg_num,
+ return 0;
+ }
+
++#ifdef __LP64__
++size_t
++arch_type_sizeof(struct process *proc, struct arg_type_info *info)
++{
++ if (proc == NULL)
++ return (size_t)-2;
++
++ switch (info->type) {
++ case ARGTYPE_LONG:
++ case ARGTYPE_ULONG:
++ return proc->mask_32bit ? 4 : sizeof (long);
++
++ case ARGTYPE_POINTER:
++ return proc->mask_32bit ? 4 : sizeof (void *);
++
++ default:
++ /* Use default value. */
++ return (size_t)-2;
++ }
++}
++
++size_t
++arch_type_alignof(struct process *proc, struct arg_type_info *info)
++{
++ if (proc == NULL)
++ return (size_t)-2;
++
++ return arch_type_sizeof(proc, info);
++}
++#endif /* __LP64__ */
+ /**@}*/
+diff --git a/sysdeps/linux-gnu/mksyscallent_mips b/sysdeps/linux-gnu/mksyscallent_mips
+index f3961b4..f8dcfe1 100755
+--- a/sysdeps/linux-gnu/mksyscallent_mips
++++ b/sysdeps/linux-gnu/mksyscallent_mips
+@@ -19,9 +19,7 @@
+
+ # hack expression to generate arch/syscallent.h from <asm/unistd.h>
+ # It reads from stdin and writes to stdout
+-# It should work OK on i386,m68k,arm,ia64
+-# It does NOT work in mips, s390
+-# It is untested in other architectures
++# Default is o32; arch=mips64 generates n64 syscalls
+
+ BEGIN {
+ max=0;
+@@ -31,7 +29,10 @@ BEGIN {
+ {
+ #debug
+ #printf("/%s/%s/%s/%s/\n", $1, $2, $3, $4);
+- if ($2 ~ /__NR_Linux/ && $3 ~ /4000/) {
++ min=4000
++ if (arch ~ "mips64") min=5000
++
++ if ($2 ~ /__NR_Linux/ && $3 ~ min) {
+ syscall=1;
+ }
+ if ($2 ~ /__NR_Linux_syscalls/) {
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Fix-tautological-compare-warning.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Fix-tautological-compare-warning.patch
new file mode 100644
index 000000000..a599d0e19
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Fix-tautological-compare-warning.patch
@@ -0,0 +1,261 @@
+From 0af8ced6376f2256b9daac301c851e1c99c3b035 Mon Sep 17 00:00:00 2001
+From: Adam Trhon <adam.trhon@tbs-biometrics.com>
+Date: Fri, 12 May 2017 13:39:11 +0200
+Subject: [PATCH] Fix tautological compare warning
+
+By default, gcc ignores warning from code generated by macros
+(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80369). When
+ltrace is compiled under icecream the warning *is generated*
+(https://github.com/icecc/icecream/issues/202)
+and the compilation fails (because of -Werror).
+
+Upstream-Status: Submitted [ltrace-devel@lists.alioth.debian.org]
+
+Signed-off-by: Adam Trhon <adam.trhon@tbs-biometrics.com>
+---
+ filter.c | 4 ++--
+ sysdeps/linux-gnu/arm/fetch.c | 2 +-
+ sysdeps/linux-gnu/arm/trace.c | 2 +-
+ sysdeps/linux-gnu/ia64/fetch.c | 2 +-
+ sysdeps/linux-gnu/metag/trace.c | 2 +-
+ sysdeps/linux-gnu/mips/plt.c | 2 +-
+ sysdeps/linux-gnu/ppc/fetch.c | 2 +-
+ sysdeps/linux-gnu/ppc/plt.c | 2 +-
+ sysdeps/linux-gnu/ppc/trace.c | 4 ++--
+ sysdeps/linux-gnu/s390/fetch.c | 2 +-
+ sysdeps/linux-gnu/s390/trace.c | 4 ++--
+ sysdeps/linux-gnu/x86/fetch.c | 2 +-
+ sysdeps/linux-gnu/x86/trace.c | 4 ++--
+ value.c | 4 ++--
+ 14 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/filter.c b/filter.c
+index ba50c40..a65856d 100644
+--- a/filter.c
++++ b/filter.c
+@@ -79,7 +79,7 @@ filter_lib_matcher_name_init(struct filter_lib_matcher *matcher,
+ {
+ switch (type) {
+ case FLM_MAIN:
+- assert(type != type);
++ assert(!"Unexpected value of type");
+ abort();
+
+ case FLM_SONAME:
+@@ -137,7 +137,7 @@ matcher_matches_library(struct filter_lib_matcher *matcher, struct library *lib)
+ case FLM_MAIN:
+ return lib->type == LT_LIBTYPE_MAIN;
+ }
+- assert(matcher->type != matcher->type);
++ assert(!"Unexpected value of matcher->type");
+ abort();
+ }
+
+diff --git a/sysdeps/linux-gnu/arm/fetch.c b/sysdeps/linux-gnu/arm/fetch.c
+index b500448..8f75fcf 100644
+--- a/sysdeps/linux-gnu/arm/fetch.c
++++ b/sysdeps/linux-gnu/arm/fetch.c
+@@ -317,7 +317,7 @@ arch_fetch_retval(struct fetch_context *ctx, enum tof type,
+ memmove(data, ctx->regs.uregs, sz);
+ return 0;
+ }
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+
+diff --git a/sysdeps/linux-gnu/arm/trace.c b/sysdeps/linux-gnu/arm/trace.c
+index 5e51e91..e76bf63 100644
+--- a/sysdeps/linux-gnu/arm/trace.c
++++ b/sysdeps/linux-gnu/arm/trace.c
+@@ -701,7 +701,7 @@ arch_type_sizeof(struct process *proc, struct arg_type_info *info)
+ return (size_t)-2;
+
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ }
+diff --git a/sysdeps/linux-gnu/ia64/fetch.c b/sysdeps/linux-gnu/ia64/fetch.c
+index 171c7a2..ee2fbc7 100644
+--- a/sysdeps/linux-gnu/ia64/fetch.c
++++ b/sysdeps/linux-gnu/ia64/fetch.c
+@@ -409,7 +409,7 @@ arch_fetch_arg_next(struct fetch_context *ctx, enum tof type,
+ case ARGTYPE_ARRAY:
+ /* Arrays decay into pointers. XXX Fortran? */
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ }
+diff --git a/sysdeps/linux-gnu/metag/trace.c b/sysdeps/linux-gnu/metag/trace.c
+index ad5fffe..7a843d6 100644
+--- a/sysdeps/linux-gnu/metag/trace.c
++++ b/sysdeps/linux-gnu/metag/trace.c
+@@ -142,7 +142,7 @@ get_regval_from_unit(enum metag_unitnum unit, unsigned int reg,
+ return regs->ax[reg][0];
+ /* We really shouldn't be here. */
+ default:
+- assert(unit != unit);
++ assert(!"Unexpected value of unit");
+ abort();
+ }
+ return 0;
+diff --git a/sysdeps/linux-gnu/mips/plt.c b/sysdeps/linux-gnu/mips/plt.c
+index c7c10ac..ca2307d 100644
+--- a/sysdeps/linux-gnu/mips/plt.c
++++ b/sysdeps/linux-gnu/mips/plt.c
+@@ -651,7 +651,7 @@ mips_stub_bp_continue(struct breakpoint *bp, struct process *proc)
+ break;
+ }
+
+- assert(bp->libsym->arch.type != bp->libsym->arch.type);
++ assert(!"Unexpected value of bp->libsym->arch.type");
+ abort();
+ }
+
+diff --git a/sysdeps/linux-gnu/ppc/fetch.c b/sysdeps/linux-gnu/ppc/fetch.c
+index c6cbd71..5db5675 100644
+--- a/sysdeps/linux-gnu/ppc/fetch.c
++++ b/sysdeps/linux-gnu/ppc/fetch.c
+@@ -502,7 +502,7 @@ allocate_argument(struct fetch_context *ctx, struct process *proc,
+ case ARGTYPE_ARRAY:
+ /* Arrays decay into pointers. XXX Fortran? */
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+
+diff --git a/sysdeps/linux-gnu/ppc/plt.c b/sysdeps/linux-gnu/ppc/plt.c
+index 5f81889..781da03 100644
+--- a/sysdeps/linux-gnu/ppc/plt.c
++++ b/sysdeps/linux-gnu/ppc/plt.c
+@@ -1085,7 +1085,7 @@ ppc_plt_bp_continue(struct breakpoint *bp, struct process *proc)
+ break;
+ }
+
+- assert(bp->libsym->arch.type != bp->libsym->arch.type);
++ assert(!"Unexpected value of bp->libsym->arch.type");
+ abort();
+ }
+
+diff --git a/sysdeps/linux-gnu/ppc/trace.c b/sysdeps/linux-gnu/ppc/trace.c
+index 5aab538..caa6035 100644
+--- a/sysdeps/linux-gnu/ppc/trace.c
++++ b/sysdeps/linux-gnu/ppc/trace.c
+@@ -217,7 +217,7 @@ arch_type_sizeof(struct process *proc, struct arg_type_info *info)
+ return (size_t)-2;
+
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ break;
+ }
+@@ -231,7 +231,7 @@ arch_type_alignof(struct process *proc, struct arg_type_info *info)
+
+ switch (info->type) {
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ break;
+
+diff --git a/sysdeps/linux-gnu/s390/fetch.c b/sysdeps/linux-gnu/s390/fetch.c
+index 4ad5951..4721c30 100644
+--- a/sysdeps/linux-gnu/s390/fetch.c
++++ b/sysdeps/linux-gnu/s390/fetch.c
+@@ -266,7 +266,7 @@ arch_fetch_arg_next(struct fetch_context *ctx, enum tof type,
+ return allocate_gpr(ctx, proc, info, valuep, sz);
+
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ return -1;
+diff --git a/sysdeps/linux-gnu/s390/trace.c b/sysdeps/linux-gnu/s390/trace.c
+index 78b04c3..24f7801 100644
+--- a/sysdeps/linux-gnu/s390/trace.c
++++ b/sysdeps/linux-gnu/s390/trace.c
+@@ -213,7 +213,7 @@ arch_type_sizeof(struct process *proc, struct arg_type_info *info)
+ return (size_t)-2;
+
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ }
+@@ -226,7 +226,7 @@ arch_type_alignof(struct process *proc, struct arg_type_info *info)
+
+ switch (info->type) {
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ break;
+
+ case ARGTYPE_CHAR:
+diff --git a/sysdeps/linux-gnu/x86/fetch.c b/sysdeps/linux-gnu/x86/fetch.c
+index 6868101..ae2ed79 100644
+--- a/sysdeps/linux-gnu/x86/fetch.c
++++ b/sysdeps/linux-gnu/x86/fetch.c
+@@ -523,7 +523,7 @@ classify(struct process *proc, struct fetch_context *context,
+
+ default:
+ /* Unsupported type. */
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ abort();
+diff --git a/sysdeps/linux-gnu/x86/trace.c b/sysdeps/linux-gnu/x86/trace.c
+index 6a1a6a5..d8d2115 100644
+--- a/sysdeps/linux-gnu/x86/trace.c
++++ b/sysdeps/linux-gnu/x86/trace.c
+@@ -145,7 +145,7 @@ arch_type_sizeof(struct process *proc, struct arg_type_info *info)
+ return (size_t)-2;
+
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ }
+ }
+@@ -158,7 +158,7 @@ arch_type_alignof(struct process *proc, struct arg_type_info *info)
+
+ switch (info->type) {
+ default:
+- assert(info->type != info->type);
++ assert(!"Unexpected value of info->type");
+ abort();
+ break;
+
+diff --git a/value.c b/value.c
+index 2125ba9..30edb4e 100644
+--- a/value.c
++++ b/value.c
+@@ -363,7 +363,7 @@ value_set_word(struct value *value, long word)
+ u.u64 = word;
+ break;
+ default:
+- assert(sz != sz);
++ assert(!"Unexpected value of sz");
+ abort();
+ }
+
+@@ -414,7 +414,7 @@ value_extract_word(struct value *value, long *retp,
+ *retp = (long)u.u64;
+ return 0;
+ default:
+- assert(sz != sz);
++ assert(!"Unexpected value of sz");
+ abort();
+ }
+ }
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Use-correct-enum-type.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Use-correct-enum-type.patch
new file mode 100644
index 000000000..01a35842c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-Use-correct-enum-type.patch
@@ -0,0 +1,28 @@
+From df490528d1e81a98ba2991c700c92a8e6c969083 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 6 Mar 2017 21:32:22 -0800
+Subject: [PATCH 1/2] Use correct enum type
+
+Clang warns about wrong enum initializtion
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/linux-gnu/aarch64/fetch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sysdeps/linux-gnu/aarch64/fetch.c b/sysdeps/linux-gnu/aarch64/fetch.c
+index 2744df0..1dcf7cc 100644
+--- a/sysdeps/linux-gnu/aarch64/fetch.c
++++ b/sysdeps/linux-gnu/aarch64/fetch.c
+@@ -173,7 +173,7 @@ static struct fetch_script
+ pass_arg(struct fetch_context const *context,
+ struct process *proc, struct arg_type_info *info)
+ {
+- enum fetch_method cvt = CVT_NOP;
++ enum convert_method cvt = CVT_NOP;
+
+ size_t sz = type_sizeof(proc, info);
+ if (sz == (size_t) -1)
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-configure-Recognise-linux-musl-as-a-host-OS.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-configure-Recognise-linux-musl-as-a-host-OS.patch
new file mode 100644
index 000000000..52264a17e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-configure-Recognise-linux-musl-as-a-host-OS.patch
@@ -0,0 +1,25 @@
+From c1d3aaf5ec810c2594938438c7b4ccd20943f255 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Jul 2017 10:20:52 -0700
+Subject: [PATCH] configure: Recognise linux-musl as a host OS
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 3e8667f..95d6642 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -35,6 +35,7 @@ AC_CANONICAL_HOST
+ case "${host_os}" in
+ linux-gnu*) HOST_OS="linux-gnu" ;;
+ linux-uclibc*) HOST_OS="linux-gnu" ;;
++ linux-musl*) HOST_OS="linux-gnu" ;;
+ *) AC_MSG_ERROR([unkown host-os ${host_os}]) ;;
+ esac
+ AC_SUBST(HOST_OS)
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-mips-plt.c-Delete-include-error.h.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-mips-plt.c-Delete-include-error.h.patch
new file mode 100644
index 000000000..76ba7de78
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-mips-plt.c-Delete-include-error.h.patch
@@ -0,0 +1,27 @@
+From 19a3e590c97420bd3952301bf376067c75d0ee32 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 18 Sep 2017 23:45:54 -0700
+Subject: [PATCH] mips/plt.c: Delete include error.h
+
+Its not needed
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/linux-gnu/mips/plt.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/sysdeps/linux-gnu/mips/plt.c b/sysdeps/linux-gnu/mips/plt.c
+index 2d85ad9..9c3ae2f 100644
+--- a/sysdeps/linux-gnu/mips/plt.c
++++ b/sysdeps/linux-gnu/mips/plt.c
+@@ -24,7 +24,6 @@
+
+ #include <sys/ptrace.h>
+ #include <errno.h>
+-#include <error.h>
+ #include <gelf.h>
+ #include <inttypes.h>
+ #include <string.h>
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-replace-readdir_r-with-readdir.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-replace-readdir_r-with-readdir.patch
new file mode 100644
index 000000000..65c7d535e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0001-replace-readdir_r-with-readdir.patch
@@ -0,0 +1,36 @@
+From 64f98f84fd88797e219f9dde1ca387fee4b509f0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 24 Apr 2016 16:58:17 -0700
+Subject: [PATCH] replace readdir_r with readdir
+
+glibc 2.24 has deprecated readdir_r
+
+https://sourceware.org/ml/libc-alpha/2016-02/msg00093.html
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ sysdeps/linux-gnu/proc.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/sysdeps/linux-gnu/proc.c b/sysdeps/linux-gnu/proc.c
+index 953fd86..edb716d 100644
+--- a/sysdeps/linux-gnu/proc.c
++++ b/sysdeps/linux-gnu/proc.c
+@@ -242,9 +242,10 @@ process_tasks(pid_t pid, pid_t **ret_tasks, size_t *ret_n)
+ size_t alloc = 0;
+
+ while (1) {
+- struct dirent entry;
+ struct dirent *result;
+- if (readdir_r(d, &entry, &result) != 0) {
++ errno = 0;
++ result = readdir(d);
++ if (errno != 0) {
+ fail:
+ free(tasks);
+ closedir(d);
+--
+2.8.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0002-Fix-const-qualifier-error.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0002-Fix-const-qualifier-error.patch
new file mode 100644
index 000000000..c15277192
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/0002-Fix-const-qualifier-error.patch
@@ -0,0 +1,76 @@
+From 4d3ec1a514f9b1df8ce3a1b04c8a2823d977377f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 6 Mar 2017 21:34:01 -0800
+Subject: [PATCH 2/2] Fix const qualifier error
+
+Fixes clang warning
+error: duplicate 'const' declaration specifier [-Werror,-Wduplicate-decl-specifier]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dict.h | 2 +-
+ library.c | 2 +-
+ vect.h | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+Index: git/dict.h
+===================================================================
+--- git.orig/dict.h
++++ git/dict.h
+@@ -90,7 +90,7 @@ int dict_clone(struct dict *target, cons
+ assert(_source_d->values.elt_size == sizeof(VALUE_TYPE)); \
+ /* Check that callbacks are typed properly. */ \
+ void (*_key_dtor_cb)(KEY_TYPE *, void *) = DTOR_KEY; \
+- int (*_key_clone_cb)(KEY_TYPE *, const KEY_TYPE *, \
++ int (*_key_clone_cb)(KEY_TYPE *, KEY_TYPE *, \
+ void *) = CLONE_KEY; \
+ void (*_value_dtor_cb)(VALUE_TYPE *, void *) = DTOR_VALUE; \
+ int (*_value_clone_cb)(VALUE_TYPE *, const VALUE_TYPE *, \
+Index: git/library.c
+===================================================================
+--- git.orig/library.c
++++ git/library.c
+@@ -353,7 +353,7 @@ static void
+ library_exported_names_init(struct library_exported_names *names)
+ {
+ DICT_INIT(&names->names,
+- const char*, uint64_t,
++ char*, uint64_t,
+ dict_hash_string, dict_eq_string, NULL);
+ DICT_INIT(&names->addrs,
+ uint64_t, struct vect*,
+Index: git/vect.h
+===================================================================
+--- git.orig/vect.h
++++ git/vect.h
+@@ -66,7 +66,7 @@ int vect_clone(struct vect *target, cons
+ assert(_source_vec->elt_size == sizeof(ELT_TYPE)); \
+ /* Check that callbacks are typed properly. */ \
+ void (*_dtor_callback)(ELT_TYPE *, void *) = DTOR; \
+- int (*_clone_callback)(ELT_TYPE *, const ELT_TYPE *, \
++ int (*_clone_callback)(ELT_TYPE *, ELT_TYPE *, \
+ void *) = CLONE; \
+ vect_clone((TGT_VEC), _source_vec, \
+ (int (*)(void *, const void *, \
+Index: git/value_dict.c
+===================================================================
+--- git.orig/value_dict.c
++++ git/value_dict.c
+@@ -40,7 +40,7 @@ val_dict_init(struct value_dict *dict)
+ }
+
+ static int
+-value_clone_cb(struct value *tgt, const struct value *src, void *data)
++value_clone_cb(struct value *tgt, struct value *src, void *data)
+ {
+ return value_clone(tgt, src);
+ }
+@@ -53,7 +53,7 @@ value_dtor(struct value *val, void *data
+
+ static int
+ named_value_clone(struct named_value *tgt,
+- const struct named_value *src, void *data)
++ struct named_value *src, void *data)
+ {
+ tgt->name = strdup(src->name);
+ if (tgt->name == NULL)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/configure-allow-to-disable-selinux-support.patch b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/configure-allow-to-disable-selinux-support.patch
new file mode 100644
index 000000000..4f89d8f2e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace/configure-allow-to-disable-selinux-support.patch
@@ -0,0 +1,36 @@
+From 887a403e38f590ebf1d04ce600d94cb7a351744c Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Mon, 1 Dec 2014 00:57:42 -0500
+Subject: [PATCH] ltrace: allow to enable/disable selinux support
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.ac | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6fe5e3b..189885a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -125,8 +125,14 @@ AC_SUBST(libstdcxx_LIBS)
+
+
+ dnl Check security_get_boolean_active availability.
+-AC_CHECK_HEADERS(selinux/selinux.h)
+-AC_CHECK_LIB(selinux, security_get_boolean_active)
++AC_ARG_ENABLE([selinux],
++ AS_HELP_STRING([--enable-selinux],[enable SELinux support [default=auto]]),
++ [], [enable_selinux=auto])
++
++if test x$enable_selinux != xno; then
++ AC_CHECK_HEADERS(selinux/selinux.h)
++ AC_CHECK_LIB(selinux, security_get_boolean_active)
++fi
+
+ dnl Whether (and which) elfutils libdw.so to use for unwinding.
+ AC_ARG_WITH(elfutils,
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb
new file mode 100644
index 000000000..abe015de2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb
@@ -0,0 +1,39 @@
+SUMMARY = "ltrace intercepts and records dynamic library calls"
+
+DESCRIPTION = "ltrace intercepts and records dynamic library calls \
+which are called by an executed process and the signals received by that process. \
+It can also intercept and print the system calls executed by the program.\
+"
+HOMEPAGE = "http://ltrace.org/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
+
+PE = "1"
+PV = "7.91+git${SRCPV}"
+SRCREV = "c22d359433b333937ee3d803450dc41998115685"
+
+DEPENDS = "elfutils"
+RDEPENDS_${PN} = "elfutils"
+SRC_URI = "git://anonscm.debian.org/collab-maint/ltrace.git;branch=master \
+ file://configure-allow-to-disable-selinux-support.patch \
+ file://0001-replace-readdir_r-with-readdir.patch \
+ file://0001-Use-correct-enum-type.patch \
+ file://0002-Fix-const-qualifier-error.patch \
+ file://0001-ARM-code-has-unreachable-code-after-switch-statement.patch \
+ file://0001-Fix-tautological-compare-warning.patch \
+ file://0001-Add-support-for-mips64-n32-n64.patch \
+ file://0001-configure-Recognise-linux-musl-as-a-host-OS.patch \
+ file://0001-mips-plt.c-Delete-include-error.h.patch \
+ "
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}"
+PACKAGECONFIG[unwind] = "--with-libunwind,--without-libunwind,libunwind"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,libselinux"
+
+do_configure_prepend () {
+ ( cd ${S}; ./autogen.sh )
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua/lua.pc.in b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/lua.pc.in
new file mode 100644
index 000000000..c27e86e85
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/lua.pc.in
@@ -0,0 +1,10 @@
+prefix=/usr
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: Lua
+Description: Lua language engine
+Version: @VERSION@
+Requires:
+Libs: -L${libdir} -llua -lm -ldl
+Cflags: -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/run-ptest
new file mode 100644
index 000000000..8e085e1af
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/run-ptest
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+cd test
+lua -e"_U=true" all.lua > lua-test.tmp
+
+echo "--- test output ---"
+cat lua-test.tmp
+echo ""
+echo ""
+echo "--- ptest result ---"
+
+grep "final OK \!\!\!" lua-test.tmp > /dev/null
+if [ $? -eq 0 ]; then
+ echo "PASS: lua"
+else
+ echo "FAIL: lua"
+fi
+
+rm -f lua-test.tmp
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua/uclibc-pthread.patch b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/uclibc-pthread.patch
new file mode 100644
index 000000000..f4cdc5d8c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/uclibc-pthread.patch
@@ -0,0 +1,13 @@
+Index: lua-5.1.4/src/Makefile
+===================================================================
+--- a/src/Makefile.orig 2013-10-22 22:17:19.929103523 -0400
++++ a/src/Makefile 2013-10-22 22:18:27.992104545 -0400
+@@ -9,7 +9,7 @@
+ CC= gcc
+ CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)
+ LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
+-LIBS= -lm $(SYSLIBS) $(MYLIBS)
++LIBS= -lm -lpthread $(SYSLIBS) $(MYLIBS)
+
+ AR= ar rcu
+ RANLIB= ranlib
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.4.bb b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.4.bb
new file mode 100644
index 000000000..8f4e8fe68
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.4.bb
@@ -0,0 +1,59 @@
+DESCRIPTION = "Lua is a powerful light-weight programming language designed \
+for extending applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://doc/readme.html;beginline=318;endline=352;md5=60aa5cfdbd40086501778d9b6ebf29ee"
+HOMEPAGE = "http://www.lua.org/"
+
+DEPENDS = "readline"
+SRC_URI = "http://www.lua.org/ftp/lua-${PV}.tar.gz;name=tarballsrc \
+ file://lua.pc.in \
+ "
+SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', \
+ 'http://www.lua.org/tests/lua-${PV}-tests.tar.gz;name=tarballtest \
+ file://run-ptest \
+ ', '', d)}"
+
+SRC_URI[tarballsrc.md5sum] = "53a9c68bcc0eda58bdc2095ad5cdfc63"
+SRC_URI[tarballsrc.sha256sum] = "f681aa518233bc407e23acf0f5887c884f17436f000d453b2491a9f11a52400c"
+SRC_URI[tarballtest.md5sum] = "b14fe3748c1cb2d74e3acd1943629ba3"
+SRC_URI[tarballtest.sha256sum] = "b80771238271c72565e5a1183292ef31bd7166414cd0d43a8eb79845fa7f599f"
+
+inherit pkgconfig binconfig ptest
+
+UCLIBC_PATCHES += "file://uclibc-pthread.patch"
+SRC_URI_append_libc-uclibc = "${UCLIBC_PATCHES}"
+
+TARGET_CC_ARCH += " -fPIC ${LDFLAGS}"
+EXTRA_OEMAKE = "'CC=${CC} -fPIC' 'MYCFLAGS=${CFLAGS} -DLUA_USE_LINUX -fPIC' MYLDFLAGS='${LDFLAGS}'"
+
+do_configure_prepend() {
+ sed -i -e s:/usr/local:${prefix}:g src/luaconf.h
+}
+
+do_compile () {
+ oe_runmake linux
+}
+
+do_install () {
+ oe_runmake \
+ 'INSTALL_TOP=${D}${prefix}' \
+ 'INSTALL_BIN=${D}${bindir}' \
+ 'INSTALL_INC=${D}${includedir}/' \
+ 'INSTALL_MAN=${D}${mandir}/man1' \
+ 'INSTALL_SHARE=${D}${datadir}/lua' \
+ 'INSTALL_LIB=${D}${libdir}' \
+ 'INSTALL_CMOD=${D}${libdir}/lua/5.3' \
+ install
+ install -d ${D}${libdir}/pkgconfig
+
+ sed -e s/@VERSION@/${PV}/ ${WORKDIR}/lua.pc.in > ${WORKDIR}/lua.pc
+ install -m 0644 ${WORKDIR}/lua.pc ${D}${libdir}/pkgconfig/
+ rmdir ${D}${datadir}/lua/5.3
+ rmdir ${D}${datadir}/lua
+}
+
+do_install_ptest () {
+ cp -R --no-dereference --preserve=mode,links -v ${WORKDIR}/lua-${PV}-tests ${D}${PTEST_PATH}/test
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch
new file mode 100644
index 000000000..f123b3f55
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch
@@ -0,0 +1,33 @@
+From 528009f5ca0685c95ef27f6c8957160499c0576a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 10 May 2013 10:42:45 -0700
+Subject: [PATCH] Do not strip automatically, this leaves the stripping
+ busines to OE
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 278324a..5ecd6d5 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -665,12 +665,10 @@ $(LUAJIT_A): $(LJVMCORE_O)
+ $(LUAJIT_SO): $(LJVMCORE_O)
+ $(E) "DYNLINK $@"
+ $(Q)$(TARGET_LD) $(TARGET_ASHLDFLAGS) -o $@ $(LJVMCORE_DYNO) $(TARGET_ALIBS)
+- $(Q)$(TARGET_STRIP) $@
+
+ $(LUAJIT_T): $(TARGET_O) $(LUAJIT_O) $(TARGET_DEP)
+ $(E) "LINK $@"
+ $(Q)$(TARGET_LD) $(TARGET_ALDFLAGS) -o $@ $(LUAJIT_O) $(TARGET_O) $(TARGET_ALIBS)
+- $(Q)$(TARGET_STRIP) $@
+ $(E) "OK Successfully built LuaJIT"
+
+ ##############################################################################
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch
new file mode 100644
index 000000000..c39ef6fd4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch
@@ -0,0 +1,19 @@
+clang pretends to be gcc 4.2.0 which is a big lie when it comes
+to features, its same as latest gcc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: LuaJIT-2.0.5/src/lj_arch.h
+===================================================================
+--- LuaJIT-2.0.5.orig/src/lj_arch.h
++++ LuaJIT-2.0.5/src/lj_arch.h
+@@ -313,7 +313,7 @@
+ #error "Need at least GCC 4.2 or newer"
+ #endif
+ #elif !LJ_TARGET_PS3
+-#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3)
++#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) && !defined(__clang__)
+ #error "Need at least GCC 4.3 or newer"
+ #endif
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb
new file mode 100644
index 000000000..1d69b3c12
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb
@@ -0,0 +1,95 @@
+SUMMARY = "Just-In-Time Compiler for Lua"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=10a96c93403affcc34765f4c2612bc22"
+HOMEPAGE = "http://luajit.org"
+
+SRC_URI = "http://luajit.org/download/LuaJIT-${PV}.tar.gz \
+ file://0001-Do-not-strip-automatically-this-leaves-the-stripping.patch \
+ file://clang.patch \
+"
+SRC_URI[md5sum] = "48353202cbcacab84ee41a5a70ea0a2c"
+SRC_URI[sha256sum] = "874b1f8297c697821f561f9b73b57ffd419ed8f4278c82e05b48806d30c1e979"
+
+S = "${WORKDIR}/LuaJIT-${PV}"
+
+inherit pkgconfig binconfig siteinfo
+
+BBCLASSEXTEND = "native"
+
+# http://luajit.org/install.html#cross
+# Host luajit needs to be compiled with the same pointer size
+# If you want to cross-compile to any 32 bit target on an x64 OS,
+# you need to install the multilib development package (e.g.
+# libc6-dev-i386 on Debian/Ubuntu) and build a 32 bit host part
+# (HOST_CC="gcc -m32").
+BUILD_CC_ARCH_append = " ${@['-m32',''][d.getVar('SITEINFO_BITS', True) != '32']}"
+
+# The lua makefiles expect the TARGET_SYS to be from uname -s
+# Values: Windows, Linux, Darwin, iOS, SunOS, PS3, GNU/kFreeBSD
+LUA_TARGET_OS = "Unknown"
+LUA_TARGET_OS_darwin = "Darwin"
+LUA_TARGET_OS_linux = "Linux"
+LUA_TARGET_OS_linux-gnueabi = "Linux"
+LUA_TARGET_OS_mingw32 = "Windows"
+
+# We don't want the lua buildsystem's compiler optimizations, or its
+# stripping, and we don't want it to pick up CFLAGS or LDFLAGS, as those apply
+# to both host and target compiles
+EXTRA_OEMAKE = "\
+ Q= E='@:' \
+ \
+ CCOPT= CCOPT_x86= CFLAGS= LDFLAGS= TARGET_STRIP='@:' \
+ \
+ 'TARGET_SYS=${LUA_TARGET_OS}' \
+ \
+ 'CC=${CC}' \
+ 'TARGET_AR=${AR} rcus' \
+ 'TARGET_CFLAGS=${CFLAGS}' \
+ 'TARGET_LDFLAGS=${LDFLAGS}' \
+ 'TARGET_SHLDFLAGS=${LDFLAGS}' \
+ 'HOST_CC=${BUILD_CC}' \
+ 'HOST_CFLAGS=${BUILD_CFLAGS}' \
+ 'HOST_LDFLAGS=${BUILD_LDFLAGS}' \
+ \
+ 'PREFIX=${prefix}' \
+ 'MULTILIB=${baselib}' \
+ 'LDCONFIG=:' \
+"
+
+do_compile () {
+ oe_runmake
+}
+
+# There's INSTALL_LIB and INSTALL_SHARE also, but the lua binary hardcodes the
+# '/share' and '/' + LUA_MULTILIB paths, so we don't want to break those
+# expectations.
+EXTRA_OEMAKEINST = "\
+ 'DESTDIR=${D}' \
+ 'INSTALL_BIN=${D}${bindir}' \
+ 'INSTALL_INC=${D}${includedir}/luajit-$(MAJVER).$(MINVER)' \
+ 'INSTALL_MAN=${D}${mandir}/man1' \
+"
+do_install () {
+ oe_runmake ${EXTRA_OEMAKEINST} install
+ rmdir ${D}${datadir}/lua/5.* \
+ ${D}${datadir}/lua \
+ ${D}${libdir}/lua/5.* \
+ ${D}${libdir}/lua
+}
+
+PACKAGES += 'luajit-common'
+
+# See the comment for EXTRA_OEMAKEINST. This is needed to ensure the hardcoded
+# paths are packaged regardless of what the libdir and datadir paths are.
+FILES_${PN} += "${prefix}/${baselib} ${prefix}/share"
+FILES_${PN} += "${libdir}/libluajit-5.1.so.2 \
+ ${libdir}/libluajit-5.1.so.${PV} \
+"
+FILES_${PN}-dev += "${libdir}/libluajit-5.1.a \
+ ${libdir}/libluajit-5.1.so \
+ ${libdir}/pkgconfig/luajit.pc \
+"
+FILES_luajit-common = "${datadir}/${BPN}-${PV}"
+
+# Aarch64 is not supported in this release
+COMPATIBLE_HOST = "^(?!aarch64).*"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mcpp/files/ice-mcpp.patch b/meta-openembedded/meta-oe/recipes-devtools/mcpp/files/ice-mcpp.patch
new file mode 100644
index 000000000..8103cf092
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/mcpp/files/ice-mcpp.patch
@@ -0,0 +1,208 @@
+diff -r -c -N ../mcpp-2.7.2-old/noconfig/vc2010.dif ./noconfig/vc2010.dif
+*** ../mcpp-2.7.2-old/noconfig/vc2010.dif Wed Dec 31 20:30:00 1969
+--- ./noconfig/vc2010.dif Fri May 14 12:47:22 2010
+***************
+*** 0 ****
+--- 1,67 ----
++ *** noconfig.H Thu Sep 25 15:34:56 2008
++ --- noconfig.H.vc2005 Thu Sep 25 17:23:49 2008
++ ***************
++ *** 15,21 ****
++ */
++
++ /* Define target operating-system. */
++ ! #define SYSTEM SYS_FREEBSD
++
++ /* Define target compiler. */
++ #ifndef COMPILER
++ --- 15,21 ----
++ */
++
++ /* Define target operating-system. */
++ ! #define SYSTEM SYS_WIN32
++
++ /* Define target compiler. */
++ #ifndef COMPILER
++ ***************
++ *** 26,36 ****
++ #define HOST_SYSTEM SYSTEM
++
++ /* Define host compiler. */
++ ! #define HOST_COMPILER GNUC
++
++ /* Version message. */
++ /* "MCPP V.2.* (200y/mm) compiled by " precedes VERSION_MSG */
++ ! #define VERSION_MSG "GCC 3.4"
++ #if 0
++ "LCC-Win32 2006-03"
++ "Visual C 2005"
++ --- 26,36 ----
++ #define HOST_SYSTEM SYSTEM
++
++ /* Define host compiler. */
++ ! #define HOST_COMPILER MSC
++
++ /* Version message. */
++ /* "MCPP V.2.* (200y/mm) compiled by " precedes VERSION_MSG */
++ ! #define VERSION_MSG "Visual C 2010"
++ #if 0
++ "LCC-Win32 2006-03"
++ "Visual C 2005"
++ ***************
++ *** 212,221 ****
++ #define ONE_PASS TRUE
++ #endif
++ #define COMPILER_EXT "_MSC_VER"
++ ! #define COMPILER_EXT_VAL "1500" /* VC 6.0: "1200" */
++ /* VC 2002: "1300", VC 2003: "1310", VC 2005: "1400", VC 2008: "1500" */
++ #define COMPILER_EXT2 "_MSC_FULL_VER"
++ ! #define COMPILER_EXT2_VAL "150021022" /* VC 6.0: "12008804" */
++ /* VC 2002: "13009466", VC 2003: "13103077", VC 2005: "140050320" */
++ /* VC 2008: "150021022" */
++ #define COMPILER_SP1 "_MSC_EXTENSIONS"
++ --- 212,221 ----
++ #define ONE_PASS TRUE
++ #endif
++ #define COMPILER_EXT "_MSC_VER"
++ ! #define COMPILER_EXT_VAL "1600" /* VC 6.0: "1200" */
++ /* VC 2002: "1300", VC 2003: "1310", VC 2005: "1400", VC 2008: "1500" */
++ #define COMPILER_EXT2 "_MSC_FULL_VER"
++ ! #define COMPILER_EXT2_VAL "160030319" /* VC 6.0: "12008804" */
++ /* VC 2002: "13009466", VC 2003: "13103077", VC 2005: "140050320" */
++ /* VC 2008: "150021022" */
++ #define COMPILER_SP1 "_MSC_EXTENSIONS"
+diff -r -c -N ../mcpp-2.7.2-old/src/internal.H ./src/internal.H
+*** ../mcpp-2.7.2-old/src/internal.H Wed Aug 27 10:31:16 2008
+--- ./src/internal.H Fri May 14 12:40:56 2010
+***************
+*** 390,395 ****
+--- 390,397 ----
+ extern char identifier[]; /* Lastly scanned name */
+ extern IFINFO ifstack[]; /* Information of #if nesting */
+ extern char work_buf[];
++ extern FILEINFO * sh_file;
++ extern int sh_line;
+ /* Temporary buffer for directive line and macro expansion */
+
+ /* main.c */
+***************
+*** 557,562 ****
+ #endif
+ #endif
+
+! #if HOST_HAVE_STPCPY
+ extern char * stpcpy( char * dest, const char * src);
+ #endif
+--- 559,564 ----
+ #endif
+ #endif
+
+! #if HOST_HAVE_STPCPY && !defined(stpcpy)
+ extern char * stpcpy( char * dest, const char * src);
+ #endif
+diff -r -c -N ../mcpp-2.7.2-old/src/main.c ./src/main.c
+*** ../mcpp-2.7.2-old/src/main.c Wed Nov 5 05:04:46 2008
+--- ./src/main.c Fri May 14 12:40:56 2010
+***************
+*** 326,331 ****
+--- 326,333 ----
+ = FALSE;
+ option_flags.trig = TRIGRAPHS_INIT;
+ option_flags.dig = DIGRAPHS_INIT;
++ sh_file = NULL;
++ sh_line = 0;
+ }
+
+ int mcpp_lib_main
+diff -r -c -N ../mcpp-2.7.2-old/src/support.c ./src/support.c
+*** ../mcpp-2.7.2-old/src/support.c Tue Jun 10 06:02:33 2008
+--- ./src/support.c Fri May 14 12:40:56 2010
+***************
+*** 188,194 ****
+ size_t length
+ )
+ {
+! if (mem_buf_p->bytes_avail < length) { /* Need to allocate more memory */
+ size_t size = MAX( BUF_INCR_SIZE, length);
+
+ if (mem_buf_p->buffer == NULL) { /* 1st append */
+--- 188,194 ----
+ size_t length
+ )
+ {
+! if (mem_buf_p->bytes_avail < length + 1) { /* Need to allocate more memory */
+ size_t size = MAX( BUF_INCR_SIZE, length);
+
+ if (mem_buf_p->buffer == NULL) { /* 1st append */
+***************
+*** 1722,1727 ****
+--- 1722,1729 ----
+ sp -= 2;
+ while (*sp != '\n') /* Until end of line */
+ mcpp_fputc( *sp++, OUT);
++ mcpp_fputc( '\n', OUT);
++ wrong_line = TRUE;
+ }
+ goto end_line;
+ default: /* Not a comment */
+diff -r -c -N ../mcpp-2.7.2-old/src/system.c ./src/system.c
+*** ../mcpp-2.7.2-old/src/system.c 2008-11-26 10:53:51.000000000 +0100
+--- ./src/system.c 2011-02-21 16:18:05.678058106 +0100
+***************
+*** 3534,3539 ****
+--- 3534,3565 ----
+ FILEINFO * file;
+ const char * too_many_include_nest =
+ "More than %.0s%ld nesting of #include"; /* _F_ _W4_ */
++
++ //
++ // When encoding is UTF-8, skip BOM if present.
++ //
++ if(mbchar == UTF8 && fp != NULL && ftell(fp) == 0)
++ {
++ const unsigned char UTF8_BOM[3] = {0xEF, 0xBB, 0xBF};
++ unsigned char FILE_HEAD[3] = {0, 0, 0};
++ int i;
++ for(i = 0; i < 3; ++i)
++ {
++ FILE_HEAD[i] = getc(fp);
++ if(FILE_HEAD[i] != UTF8_BOM[i])
++ {
++ if(FILE_HEAD[i] == (unsigned char)EOF)
++ {
++ i--;
++ }
++ for(; i >= 0; --i)
++ {
++ ungetc(FILE_HEAD[i], fp);
++ }
++ break;
++ }
++ }
++ }
+
+ filename = set_fname( filename); /* Search or append to fnamelist[] */
+ fullname = set_fname( fullname); /* Search or append to fnamelist[] */
+***************
+*** 3858,3863 ****
+--- 3884,3892 ----
+ }
+ #endif
+
++ FILEINFO* sh_file;
++ int sh_line;
++
+ void sharp(
+ FILEINFO * sharp_file,
+ int flag /* Flag to append to the line for GCC */
+***************
+*** 3868,3875 ****
+ * else (i.e. 'sharp_file' is NULL) 'infile'.
+ */
+ {
+- static FILEINFO * sh_file;
+- static int sh_line;
+ FILEINFO * file;
+ int line;
+
+--- 3897,3902 ----
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mcpp/mcpp_2.7.2.bb b/meta-openembedded/meta-oe/recipes-devtools/mcpp/mcpp_2.7.2.bb
new file mode 100644
index 000000000..a7163a35a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/mcpp/mcpp_2.7.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "MCPP is a portable C/C++ preprocessor"
+HOMEPAGE = "http://mcpp.sourceforge.net/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ca370b75ec890321888a00cea9bc1d5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+ file://ice-mcpp.patch "
+SRC_URI[md5sum] = "512de48c87ab023a69250edc7a0c7b05"
+SRC_URI[sha256sum] = "3b9b4421888519876c4fc68ade324a3bbd81ceeb7092ecdbbc2055099fcb8864"
+
+inherit autotools
+
+EXTRA_OECONF = " --enable-mcpplib "
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat/0001-Include-limits.h-for-PATH_MAX-definition.patch b/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat/0001-Include-limits.h-for-PATH_MAX-definition.patch
new file mode 100644
index 000000000..9a0a17e0e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat/0001-Include-limits.h-for-PATH_MAX-definition.patch
@@ -0,0 +1,29 @@
+From 4b6c957372314562bf7b9117103e3a08643eb7b8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 17:47:28 -0700
+Subject: [PATCH] Include limits.h for PATH_MAX definition
+
+Fixes
+
+error: use of undeclared identifier 'PATH_MAX'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ memstat.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/memstat.c b/memstat.c
+index 5039fb0..3ff6ee4 100644
+--- a/memstat.c
++++ b/memstat.c
+@@ -19,6 +19,7 @@
+ #include <unistd.h>
+ #include <getopt.h>
+ #include <errno.h>
++#include <limits.h>
+
+ /* blacklist devices that just map physical memory */
+ char *blacklist[] = {
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat_1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat_1.0.bb
new file mode 100644
index 000000000..91a9200c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/memstat/memstat_1.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Display virtual memory allocation"
+DESCRIPTION = "Lists all the processes, executables, and shared libraries \
+that are using up virtual memory. It's helpful to see how the shared memory \
+is used and which 'old' libs are loaded. \
+"
+HOMEPAGE = "http://memstattool.sourceforge.net/"
+SECTION = "devtool"
+
+LICENSE = "GPLv2"
+
+S = "${WORKDIR}/memstattool"
+
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=87be186443b1ac2cfa466f475e1ee0cb"
+
+SRC_URI = "http://sourceforge.net/projects/memstattool/files/memstat_${PV}.tar.gz \
+ file://0001-Include-limits.h-for-PATH_MAX-definition.patch \
+ "
+
+SRC_URI[md5sum] = "2c3acc0c62b2a18f6601b84e54aa7462"
+SRC_URI[sha256sum] = "245d5fc7fb87bcfd14486cd34917cae2856e799559ac568434af12c4852bce94"
+
+do_install_append(){
+ install -d ${D}${bindir}
+ install -m 0755 memstat ${D}${bindir}
+ install -d ${D}${sysconfdir}
+ install -m 0755 memstat.conf ${D}${sysconfdir}
+ install -d ${D}${mandir}/man1
+ install -m 0644 memstat.1 ${D}${mandir}/man1
+ install -d ${D}${docdir}/${BPN}
+ install -m 0644 memstat-tutorial.txt ${D}${docdir}/${BPN}
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_4.4.bb b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_4.4.bb
new file mode 100644
index 000000000..90524974b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_4.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "The Mercurial distributed SCM"
+HOMEPAGE = "http://mercurial.selenic.com/"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "python python-native"
+DEPENDS_class-native = "python-native"
+RDEPENDS_${PN} = "python python-modules"
+
+inherit python-dir
+
+SRC_URI = "https://www.mercurial-scm.org/release/${BP}.tar.gz"
+SRC_URI[md5sum] = "c1d9fad1b7ed7077b0d4ae82e71154db"
+SRC_URI[sha256sum] = "234af4a67565c85923b0a1910c704ab44bcf12f69b85532687208776563d87de"
+
+S = "${WORKDIR}/mercurial-${PV}"
+
+BBCLASSEXTEND = "native"
+
+EXTRA_OEMAKE = "STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
+ PREFIX=${prefix}"
+
+do_configure_append () {
+ sed -i -e 's:PYTHON=python:PYTHON=${STAGING_BINDIR_NATIVE}/python-native/python:g' ${S}/Makefile
+}
+
+do_install () {
+ oe_runmake -e install-bin DESTDIR=${D} PREFIX=${prefix}
+}
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb b/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb
new file mode 100644
index 000000000..51b313cef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Message Passing Interface (MPI) implementation"
+HOMEPAGE = "http://www.mpich.org/"
+SECTION = "devel"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=2106f0435056f3dd9349747a766e5816"
+
+SRC_URI = " \
+ http://www.mpich.org/static/downloads/${PV}/mpich-${PV}.tar.gz \
+"
+
+SRC_URI[md5sum] = "f414cfa77099cd1fa1a5ae4e22db508a"
+SRC_URI[sha256sum] = "0778679a6b693d7b7caff37ff9d2856dc2bfc51318bf8373859bfa74253da3dc"
+
+RDEPENDS_${PN} += "bash perl libxml2"
+S = "${WORKDIR}/${BP}"
+
+EXTRA_OECONF = "--enable-debuginfo \
+ --enable-fast \
+ --enable-shared \
+ --with-pm=gforker \
+ --disable-rpath \
+ --disable-f77 \
+ --disable-fc \
+ --disable-fortran \
+ --disable-cxx \
+ BASH_SHELL='${USRBINPATH}/env bash' \
+ PERL='${USRBINPATH}/env perl' \
+"
+
+inherit autotools-brokensep gettext
+
+do_configure_prepend() {
+ for d in confdb test/mpi/confdb src/openpa/confdb src/pm/hydra/confdb src/pm/hydra/tools/topo/hwloc/hwloc/config src/pm/hydra/mpl/confdb src/mpl/confdb src/mpi/romio/confdb; do
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/$d
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/$d
+ done
+
+ autoreconf --verbose --install --force -I . -I confdb/ -I maint/
+ oe_runconf
+ exit
+}
+
+do_install_append() {
+ sed -i 's,${S}/,,g' ${D}/${libdir}/libmpi.la
+ sed -i 's,${DEBUG_PREFIX_MAP},,g' ${D}/${libdir}/pkgconfig/mpich.pc
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c/0001-Fix-Werror-class-memaccess.patch b/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c/0001-Fix-Werror-class-memaccess.patch
new file mode 100644
index 000000000..b0d772d93
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c/0001-Fix-Werror-class-memaccess.patch
@@ -0,0 +1,35 @@
+From a05d92ae85024d0648f69f95307a1d3e8e51109c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Apr 2018 19:55:38 -0700
+Subject: [PATCH] Fix -Werror=class-memaccess
+
+Casting to void* make gcc happy since its upset about
+object types and rightly so
+
+Fixes
+
+'void* memcpy(void*, const void*, size_t)' copying an object of non-trivial type 'struct msgpack::v2::object' from an array of 'const msgpack_object' {aka 'const struct msgpack_object'} [-Werror=class-memaccess]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/msgpack/msgpack-c/pull/659]
+
+ include/msgpack/v1/object.hpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/msgpack/v1/object.hpp b/include/msgpack/v1/object.hpp
+index 64da8c53..9721f705 100644
+--- a/include/msgpack/v1/object.hpp
++++ b/include/msgpack/v1/object.hpp
+@@ -661,7 +661,7 @@ inline object::object(const msgpack_object& o)
+ inline void operator<< (msgpack::object& o, const msgpack_object& v)
+ {
+ // FIXME beter way?
+- std::memcpy(&o, &v, sizeof(v));
++ std::memcpy(static_cast<void*>(&o), &v, sizeof(v));
+ }
+
+ inline object::operator msgpack_object() const
+--
+2.16.3
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c_2.1.5.bb b/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c_2.1.5.bb
new file mode 100644
index 000000000..02c0cd296
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/msgpack/msgpack-c_2.1.5.bb
@@ -0,0 +1,22 @@
+SUMMARY = "MessagePack implementation for C and C++"
+DESCRIPTION = "MessagePack is an efficient binary serialization format. It's like JSON. but fast and small"
+HOMEPAGE = "http://msgpack.org/index.html"
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://NOTICE;md5=7a858c074723608e08614061dc044352 \
+ file://COPYING;md5=0639c4209b6f2abf1437c813b208f2d3 \
+ file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c \
+ "
+
+PV .= "+git${SRCPV}"
+
+SRCREV = "208595b2620cf6260ce3d6d4cf8543f13b206449"
+
+SRC_URI = "git://github.com/msgpack/msgpack-c \
+ file://0001-Fix-Werror-class-memaccess.patch \
+ "
+
+inherit cmake pkgconfig
+
+S = "${WORKDIR}/git"
+
+FILES_${PN}-dev += "${libdir}/cmake/msgpack/*.cmake"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/msr-tools/msr-tools_1.3.bb b/meta-openembedded/meta-oe/recipes-devtools/msr-tools/msr-tools_1.3.bb
new file mode 100644
index 000000000..e4701afa8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/msr-tools/msr-tools_1.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "utilies to read and write Intel model-specific registers"
+HOMEPAGE = "https://01.org/msr-tools"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://Makefile;beginline=1;endline=11;md5=678a3928c856042424c734f4a7586e65"
+SECTION = "devel"
+
+SRC_URI = "https://01.org/sites/default/files/downloads/msr-tools/msr-tools-${PV}.zip"
+SRC_URI[md5sum] = "67d18527f64fd707c9b7a79f13d19fd5"
+SRC_URI[sha256sum] = "f9457b5340f5f274da4239a461f0db6b514142b40461559d9c6150f05aab1d1e"
+
+S = "${WORKDIR}/msr-tools-master"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 rdmsr ${D}${sbindir}
+ install -m 0755 wrmsr ${D}${sbindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch
new file mode 100644
index 000000000..324a4683d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch
@@ -0,0 +1,29 @@
+From c2aff16cc196a61f4ab1cdae4a91c7926123c239 Mon Sep 17 00:00:00 2001
+From: Zuzana Svetlikova <zsvetlik@redhat.com>
+Date: Thu, 27 Apr 2017 14:25:42 +0200
+Subject: [PATCH] Disable running gyp on shared deps
+
+---
+ Makefile | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 0a217bd893..e1229ad07f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -79,10 +79,9 @@ $(NODE_G_EXE): config.gypi out/Makefile
+ $(MAKE) -C out BUILDTYPE=Debug V=$(V)
+ if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi
+
+-out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp \
+- deps/zlib/zlib.gyp deps/v8/gypfiles/toolchain.gypi \
+- deps/v8/gypfiles/features.gypi deps/v8/src/v8.gyp node.gyp \
+- config.gypi
++out/Makefile: common.gypi deps/http_parser/http_parser.gyp \
++ deps/v8/gypfiles/toolchain.gypi deps/v8/gypfiles/features.gypi \
++ deps/v8/src/v8.gyp node.gyp config.gypi
+ $(PYTHON) tools/gyp_node.py -f make
+
+ config.gypi: configure
+--
+2.12.2
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_8.9.4.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_8.9.4.bb
new file mode 100644
index 000000000..8930cd902
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_8.9.4.bb
@@ -0,0 +1,90 @@
+DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
+HOMEPAGE = "http://nodejs.org"
+LICENSE = "MIT & BSD & Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=270f7477a1705f7cd3e29d3d4512915d"
+
+DEPENDS = "openssl10 zlib"
+
+COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
+COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
+COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"
+
+SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
+ file://0001-Disable-running-gyp-files-for-bundled-deps.patch \
+"
+SRC_URI[md5sum] = "631ed102fe58c13cf63bc92a68cf4759"
+SRC_URI[sha256sum] = "6cdcde9c9c1ca9f450a0b24eafa229ca759e576daa0fae892ce74d541ecdc86f"
+
+S = "${WORKDIR}/node-v${PV}"
+
+# v8 errors out if you have set CCACHE
+CCACHE = ""
+
+def map_nodejs_arch(a, d):
+ import re
+
+ if re.match('i.86$', a): return 'ia32'
+ elif re.match('x86_64$', a): return 'x64'
+ elif re.match('aarch64$', a): return 'arm64'
+ elif re.match('(powerpc64|ppc64le)$', a): return 'ppc64'
+ elif re.match('powerpc$', a): return 'ppc'
+ return a
+
+ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)} \
+ ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-arm-fpu=neon', \
+ bb.utils.contains('TUNE_FEATURES', 'vfpv3d16', '--with-arm-fpu=vfpv3-d16', \
+ bb.utils.contains('TUNE_FEATURES', 'vfpv3', '--with-arm-fpu=vfpv3', \
+ '--with-arm-fpu=vfp', d), d), d)}"
+GYP_DEFINES_append_mipsel = " mips_arch_variant='r1' "
+ARCHFLAGS ?= ""
+
+# Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi
+do_configure () {
+ rm -rf ${S}/deps/openssl
+ export LD="${CXX}"
+ GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES
+ # $TARGET_ARCH settings don't match --dest-cpu settings
+ ./configure --prefix=${prefix} --without-intl --without-snapshot --shared-openssl --shared-zlib \
+ --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH'), d)}" \
+ --dest-os=linux \
+ ${ARCHFLAGS}
+}
+
+do_compile () {
+ export LD="${CXX}"
+ oe_runmake BUILDTYPE=Release
+}
+
+do_install () {
+ oe_runmake install DESTDIR=${D}
+}
+
+do_install_append_class-native() {
+ # use node from PATH instead of absolute path to sysroot
+ # node-v0.10.25/tools/install.py is using:
+ # shebang = os.path.join(node_prefix, 'bin/node')
+ # update_shebang(link_path, shebang)
+ # and node_prefix can be very long path to bindir in native sysroot and
+ # when it exceeds 128 character shebang limit it's stripped to incorrect path
+ # and npm fails to execute like in this case with 133 characters show in log.do_install:
+ # updating shebang of /home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/work/x86_64-linux/nodejs-native/0.10.15-r0/image/home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/sysroots/x86_64-linux/usr/bin/npm to /home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/sysroots/x86_64-linux/usr/bin/node
+ # /usr/bin/npm is symlink to /usr/lib/node_modules/npm/bin/npm-cli.js
+ # use sed on npm-cli.js because otherwise symlink is replaced with normal file and
+ # npm-cli.js continues to use old shebang
+ sed "1s^.*^#\!/usr/bin/env node^g" -i ${D}${exec_prefix}/lib/node_modules/npm/bin/npm-cli.js
+}
+
+do_install_append_class-target() {
+ sed "1s^.*^#\!${bindir}/env node^g" -i ${D}${exec_prefix}/lib/node_modules/npm/bin/npm-cli.js
+}
+
+PACKAGES =+ "${PN}-npm"
+FILES_${PN}-npm = "${exec_prefix}/lib/node_modules ${bindir}/npm ${bindir}/npx"
+RDEPENDS_${PN}-npm = "bash python-shell python-datetime python-subprocess python-textutils \
+ python-compiler python-misc python-multiprocessing"
+
+PACKAGES =+ "${PN}-systemtap"
+FILES_${PN}-systemtap = "${datadir}/systemtap"
+
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Add-fallthrough-comments.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Add-fallthrough-comments.patch
new file mode 100644
index 000000000..644146c4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Add-fallthrough-comments.patch
@@ -0,0 +1,155 @@
+From 8f85163b030e7b957648f90cd8fa599fb04d5d65 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 23:32:49 -0700
+Subject: [PATCH 1/5] Add fallthrough comments
+
+Fixes
+
+src/svf/svf.c:663:7: error: this statement may fall through [-Werror=implicit-fallthrough=]
+ i = -1;
+ ~~^~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/flash/mflash.c | 3 ++-
+ src/flash/nand/mx3.c | 1 +
+ src/jtag/drivers/ftdi.c | 1 +
+ src/svf/svf.c | 2 ++
+ src/target/arm_adi_v5.c | 9 +++++++++
+ src/target/arm_disassembler.c | 1 +
+ src/target/target.c | 1 +
+ 7 files changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/src/flash/mflash.c b/src/flash/mflash.c
+index b69995542..3254a3d56 100644
+--- a/src/flash/mflash.c
++++ b/src/flash/mflash.c
+@@ -259,10 +259,11 @@ static int mg_dsk_wait(mg_io_type_wait wait_local, uint32_t time_var)
+ case mg_io_wait_rdy:
+ if (status & mg_io_rbit_status_ready)
+ return ERROR_OK;
+-
++ /* fallthru */
+ case mg_io_wait_drq:
+ if (status & mg_io_rbit_status_data_req)
+ return ERROR_OK;
++ /* fallthru */
+
+ default:
+ break;
+diff --git a/src/flash/nand/mx3.c b/src/flash/nand/mx3.c
+index b61e47535..0a55929ed 100644
+--- a/src/flash/nand/mx3.c
++++ b/src/flash/nand/mx3.c
+@@ -281,6 +281,7 @@ static int imx31_command(struct nand_device *nand, uint8_t command)
+ * offset == one half of page size
+ */
+ in_sram_address = MX3_NF_MAIN_BUFFER0 + (nand->page_size >> 1);
++ /* fallthru */
+ default:
+ in_sram_address = MX3_NF_MAIN_BUFFER0;
+ }
+diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c
+index 00fe37faf..20f17d810 100644
+--- a/src/jtag/drivers/ftdi.c
++++ b/src/jtag/drivers/ftdi.c
+@@ -855,6 +855,7 @@ COMMAND_HANDLER(ftdi_handle_set_signal_command)
+ ftdi_set_signal(sig, *CMD_ARGV[1]);
+ break;
+ }
++ /* fallthru */
+ default:
+ LOG_ERROR("unknown signal level '%s', use 0, 1 or z", CMD_ARGV[1]);
+ return ERROR_COMMAND_SYNTAX_ERROR;
+diff --git a/src/svf/svf.c b/src/svf/svf.c
+index e7e815c10..7b261cc72 100644
+--- a/src/svf/svf.c
++++ b/src/svf/svf.c
+@@ -661,11 +661,13 @@ static int svf_read_command_from_file(FILE *fd)
+ if (svf_getline(&svf_read_line, &svf_read_line_size, svf_fd) <= 0)
+ return ERROR_FAIL;
+ i = -1;
++ /* fallthru */
+ case '\r':
+ slash = 0;
+ /* Don't save '\r' and '\n' if no data is parsed */
+ if (!cmd_pos)
+ break;
++ /* fallthru */
+ default:
+ /* The parsing code currently expects a space
+ * before parentheses -- "TDI (123)". Also a
+diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
+index eafc2ddc0..d444db2b1 100644
+--- a/src/target/arm_adi_v5.c
++++ b/src/target/arm_adi_v5.c
+@@ -346,10 +346,13 @@ static int mem_ap_write(struct adiv5_ap *ap, const uint8_t *buffer, uint32_t siz
+ case 4:
+ outvalue |= (uint32_t)*buffer++ << 8 * (address++ & 3);
+ outvalue |= (uint32_t)*buffer++ << 8 * (address++ & 3);
++ /* fallthru */
+ case 2:
+ outvalue |= (uint32_t)*buffer++ << 8 * (address++ & 3);
++ /* fallthru */
+ case 1:
+ outvalue |= (uint32_t)*buffer++ << 8 * (address++ & 3);
++ /* fallthru */
+ }
+ }
+
+@@ -509,20 +512,26 @@ static int mem_ap_read(struct adiv5_ap *ap, uint8_t *buffer, uint32_t size, uint
+ case 4:
+ *buffer++ = *read_ptr >> 8 * (3 - (address++ & 3));
+ *buffer++ = *read_ptr >> 8 * (3 - (address++ & 3));
++ /* fallthru */
+ case 2:
+ *buffer++ = *read_ptr >> 8 * (3 - (address++ & 3));
++ /* fallthru */
+ case 1:
+ *buffer++ = *read_ptr >> 8 * (3 - (address++ & 3));
++ /* fallthru */
+ }
+ } else {
+ switch (this_size) {
+ case 4:
+ *buffer++ = *read_ptr >> 8 * (address++ & 3);
+ *buffer++ = *read_ptr >> 8 * (address++ & 3);
++ /* fallthru */
+ case 2:
+ *buffer++ = *read_ptr >> 8 * (address++ & 3);
++ /* fallthru */
+ case 1:
+ *buffer++ = *read_ptr >> 8 * (address++ & 3);
++ /* fallthru */
+ }
+ }
+
+diff --git a/src/target/arm_disassembler.c b/src/target/arm_disassembler.c
+index 5277b94d8..2eb21ea33 100644
+--- a/src/target/arm_disassembler.c
++++ b/src/target/arm_disassembler.c
+@@ -3299,6 +3299,7 @@ static int t2ev_data_immed(uint32_t opcode, uint32_t address,
+ case 0x10:
+ case 0x12:
+ is_signed = true;
++ /* fallthru */
+ case 0x18:
+ case 0x1a:
+ /* signed/unsigned saturated add */
+diff --git a/src/target/target.c b/src/target/target.c
+index e04ecc470..597b4b13d 100644
+--- a/src/target/target.c
++++ b/src/target/target.c
+@@ -3684,6 +3684,7 @@ COMMAND_HANDLER(handle_bp_command)
+ addr = 0;
+ return handle_bp_command_set(CMD_CTX, addr, asid, length, hw);
+ }
++ /* fallthru */
+
+ case 4:
+ hw = BKPT_HARD;
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0002-Workaround-new-warnings-generated-by-GCC-7.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0002-Workaround-new-warnings-generated-by-GCC-7.patch
new file mode 100644
index 000000000..aa99735f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0002-Workaround-new-warnings-generated-by-GCC-7.patch
@@ -0,0 +1,53 @@
+From 8daaa8c27794653d02854c5982669a7638473224 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 23:52:46 -0700
+Subject: [PATCH 2/5] Workaround new warnings generated by GCC 7
+
+src/flash/nor/xmc4xxx.c: In function 'xmc4xxx_get_info_command':
+src/flash/nor/xmc4xxx.c:939:43: error: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 6 [-Werror=format-truncation=]
+ snprintf(otp_str, sizeof(otp_str), "- %d\n", i);
+ ^~
+src/flash/nor/xmc4xxx.c:939:40: note: directive argument in the range [0, 2147483647]
+ snprintf(otp_str, sizeof(otp_str), "- %d\n", i);
+ ^~~~~~~~
+src/flash/nor/xmc4xxx.c:939:5: note: 'snprintf' output between 5 and 14 bytes into a destination of size 8
+ snprintf(otp_str, sizeof(otp_str), "- %d\n", i);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/flash/nor/xmc4xxx.c | 2 +-
+ src/target/arm_adi_v5.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/flash/nor/xmc4xxx.c b/src/flash/nor/xmc4xxx.c
+index 02df46a3f..e6c398ff9 100644
+--- a/src/flash/nor/xmc4xxx.c
++++ b/src/flash/nor/xmc4xxx.c
+@@ -931,7 +931,7 @@ static int xmc4xxx_get_info_command(struct flash_bank *bank, char *buf, int buf_
+
+ /* If OTP Write protection is enabled (User 2), list each
+ * sector that has it enabled */
+- char otp_str[8];
++ char otp_str[14];
+ if (otp_enabled) {
+ strcat(prot_str, "\nOTP Protection is enabled for sectors:\n");
+ for (int i = 0; i < bank->num_sectors; i++) {
+diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
+index d444db2b1..d0d95121f 100644
+--- a/src/target/arm_adi_v5.c
++++ b/src/target/arm_adi_v5.c
+@@ -1062,7 +1062,7 @@ static int dap_rom_display(struct command_context *cmd_ctx,
+ int retval;
+ uint64_t pid;
+ uint32_t cid;
+- char tabs[7] = "";
++ char tabs[16] = "";
+
+ if (depth > 16) {
+ command_print(cmd_ctx, "\tTables too deep");
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0003-armv7a-Add-missing-break-to-fix-fallthrough-warning.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0003-armv7a-Add-missing-break-to-fix-fallthrough-warning.patch
new file mode 100644
index 000000000..bcfbfc92b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0003-armv7a-Add-missing-break-to-fix-fallthrough-warning.patch
@@ -0,0 +1,27 @@
+From 8e5051e83fedb078170565a24d1f5de6c2ce4428 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 00:01:51 -0700
+Subject: [PATCH 3/5] armv7a: Add missing break to fix fallthrough warning
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/target/armv7a.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/target/armv7a.c b/src/target/armv7a.c
+index 6021def4e..bad806b3d 100644
+--- a/src/target/armv7a.c
++++ b/src/target/armv7a.c
+@@ -355,6 +355,7 @@ int armv7a_mmu_translate_va_pa(struct target *target, uint32_t va,
+ break;
+ case 7:
+ LOG_INFO("inner: Write-Back, no Write-Allocate");
++ break;
+
+ default:
+ LOG_INFO("inner: %" PRIx32 " ???", INNER);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0004-Fix-overflow-warning.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0004-Fix-overflow-warning.patch
new file mode 100644
index 000000000..bfc5627c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0004-Fix-overflow-warning.patch
@@ -0,0 +1,30 @@
+From d3ca56370a2be7e737d48bd14d474d790a0ab8ac Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 00:04:00 -0700
+Subject: [PATCH 4/5] Fix overflow warning
+
+Remove an empty space which makes it fit into 11 byte string
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/target/nds32_cmd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/target/nds32_cmd.c b/src/target/nds32_cmd.c
+index edb4872e4..73355073c 100644
+--- a/src/target/nds32_cmd.c
++++ b/src/target/nds32_cmd.c
+@@ -821,7 +821,7 @@ static int jim_nds32_bulk_read(Jim_Interp *interp, int argc, Jim_Obj * const *ar
+ jim_wide i;
+ Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+ for (i = 0; i < count; i++) {
+- sprintf(data_str, "0x%08" PRIx32 " ", data[i]);
++ sprintf(data_str, "0x%08" PRIx32 "", data[i]);
+ Jim_AppendStrings(interp, Jim_GetResult(interp), data_str, NULL);
+ }
+
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0005-command-Move-the-fall-through-comment-to-right-scope.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0005-command-Move-the-fall-through-comment-to-right-scope.patch
new file mode 100644
index 000000000..60f75da2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0005-command-Move-the-fall-through-comment-to-right-scope.patch
@@ -0,0 +1,27 @@
+From 29dbf92ffdbdda29662b4190a2f8eb09caad8b51 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 00:06:32 -0700
+Subject: [PATCH 5/5] command: Move the fall through comment to right scope
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/helper/command.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/helper/command.c b/src/helper/command.c
+index 5deaee859..287c14857 100644
+--- a/src/helper/command.c
++++ b/src/helper/command.c
+@@ -1456,8 +1456,8 @@ COMMAND_HELPER(handle_command_parse_bool, bool *out, const char *label)
+ LOG_ERROR("%s: argument '%s' is not valid", CMD_NAME, in);
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+- /* fall through */
+ }
++ /* fall through */
+ case 0:
+ LOG_INFO("%s is %s", label, *out ? "enabled" : "disabled");
+ break;
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
new file mode 100644
index 000000000..20bc663f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Free and Open On-Chip Debugging, In-System Programming and Boundary-Scan Testing"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "libusb-compat libftdi"
+RDEPENDS_${PN} = "libusb1"
+
+SRC_URI = "git://repo.or.cz/openocd.git \
+ file://0001-Add-fallthrough-comments.patch \
+ file://0002-Workaround-new-warnings-generated-by-GCC-7.patch \
+ file://0003-armv7a-Add-missing-break-to-fix-fallthrough-warning.patch \
+ file://0004-Fix-overflow-warning.patch \
+ file://0005-command-Move-the-fall-through-comment-to-right-scope.patch \
+"
+SRCREV = "1025be363e2bf42f1613083223a2322cc3a9bd4c"
+
+PV = "0.10+gitr${SRCPV}"
+S = "${WORKDIR}/git"
+
+inherit pkgconfig autotools-brokensep gettext
+
+BBCLASSEXTEND += "nativesdk"
+
+EXTRA_OECONF = "--enable-ftdi --disable-doxygen-html "
+
+do_configure() {
+ ./bootstrap
+ oe_runconf ${EXTRA_OECONF}
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+ if [ -e "${D}${infodir}" ]; then
+ rm -Rf ${D}${infodir}
+ fi
+ if [ -e "${D}${mandir}" ]; then
+ rm -Rf ${D}${mandir}
+ fi
+ if [ -e "${D}${bindir}/.debug" ]; then
+ rm -Rf ${D}${bindir}/.debug
+ fi
+}
+
+FILES_${PN} = " \
+ ${datadir}/openocd/* \
+ ${bindir}/openocd \
+ "
+
+PACKAGECONFIG[sysfsgpio] = "--enable-sysfsgpio,--disable-sysfsgpio"
+PACKAGECONFIG ??= "sysfsgpio"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/packagegroups/packagegroup-sdk-target.bb b/meta-openembedded/meta-oe/recipes-devtools/packagegroups/packagegroup-sdk-target.bb
new file mode 100644
index 000000000..53fc159c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/packagegroups/packagegroup-sdk-target.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Packages required for a target (on-device) SDK"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+PR = "r1"
+
+inherit packagegroup
+
+RPROVIDES_${PN} += "packagegroup-native-sdk"
+RREPLACES_${PN} += "packagegroup-native-sdk"
+RCONFLICTS_${PN} += "packagegroup-native-sdk"
+RDEPENDS_${PN} = "gcc-symlinks g++-symlinks cpp cpp-symlinks \
+ binutils-symlinks \
+ perl-modules \
+ flex flex-dev \
+ bison \
+ gawk \
+ sed \
+ grep \
+ autoconf automake \
+ make \
+ patch diffstat diffutils \
+ libstdc++-dev \
+ libtool libtool-dev \
+ pkgconfig"
+
+# usefull, but not in oe-core/meta-oe yet: patchutils
+RRECOMMENDS_${PN} = " g77-symlinks gfortran-symlinks"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_0.96.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_0.96.bb
new file mode 100644
index 000000000..08c966da9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_0.96.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "\
+IPC::Run allows you run and interact with child processes \
+using files, pipes, and pseudo-ttys. Both system()-style and scripted \
+usages are supported and may be mixed. Likewise, functional and OO API \
+styles are both supported and may be mixed."
+HOMEPAGE = "https://metacpan.org/release/IPC-Run"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0ebd37caf53781e8b7223e6b99b63f4e"
+DEPENDS = "perl"
+
+SRC_URI = "git://github.com/toddr/IPC-Run.git"
+SRCREV = "96066366ac8c401dff9c979d04f25dc8219ffcc1"
+
+S = "${WORKDIR}/git"
+
+inherit cpan
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libdbd-mysql-perl_4.043.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbd-mysql-perl_4.043.bb
new file mode 100644
index 000000000..bd8ba780a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbd-mysql-perl_4.043.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A Perl DBI driver for MySQL"
+DESCRIPTION = "DBD::mysql is the Perl5 Database Interface driver for \
+the MySQL database. In other words: DBD::mysql is an interface between \
+the Perl programming language and the MySQL programming API that comes \
+with the MySQL relational database management system. Most functions \
+provided by this programming API are supported. Some rarely used \
+functions are missing, mainly because no-one ever requested them. \
+"
+HOMEPAGE = "http://search.cpan.org/~michielb/DBD-mysql-4.036/lib/DBD/mysql.pm"
+
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+DEPENDS += "libdbi-perl-native libmysqlclient"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d0a06964340e5c0cde88b7af611f755c"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MI/MICHIELB/DBD-mysql-${PV}.tar.gz \
+"
+
+SRC_URI[md5sum] = "4a00dd7f1c057931147c65dfc4901c36"
+SRC_URI[sha256sum] = "629f865e8317f52602b2f2efd2b688002903d2e4bbcba5427cb6188b043d6f99"
+
+S = "${WORKDIR}/DBD-mysql-${PV}"
+
+inherit cpan
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.641.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.641.bb
new file mode 100644
index 000000000..24a1245fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.641.bb
@@ -0,0 +1,36 @@
+SUMMARY = "The Perl Database Interface"
+DESCRIPTION = "DBI is a database access Application Programming Interface \
+(API) for the Perl Language. The DBI API Specification defines a set \
+of functions, variables and conventions that provide a consistent \
+database interface independent of the actual database being used. \
+"
+HOMEPAGE = "http://search.cpan.org/dist/DBI/"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+RDEPENDS_${PN} = " perl-module-carp \
+ perl-module-exporter \
+ perl-module-exporter-heavy \
+ perl-module-dynaloader \
+"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=10982c7148e0a012c0fd80534522f5c5"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-${PV}.tar.gz"
+SRC_URI[md5sum] = "e77fd37fcf77fc88fde029c1b75ded54"
+SRC_URI[sha256sum] = "5509e532cdd0e3d91eda550578deaac29e2f008a12b64576e8c261bb92e8c2c1"
+
+S = "${WORKDIR}/DBI-${PV}"
+
+inherit cpan ptest-perl
+
+do_install_prepend() {
+ # test requires "-T" (taint) command line option
+ rm -rf ${B}/t/pod-coverage.t
+ rm -rf ${B}/t/13taint.t
+ # source of test failure not obvious
+ rm -rf ${B}/t/85gofer.t
+ # unclear why there are several duplicates of tests in tarball
+ rm -rf ${B}/t/z*.t
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb
new file mode 100644
index 000000000..b1a95e577
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Perl module for pseudo tty IO"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://META.yml;beginline=11;endline=12;md5=b2562f94907eeb42e8ce9d45f628e587"
+
+SRC_URI = "http://www.cpan.org/modules/by-module/IO/IO-Tty-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "11695a1a516b3bd1b90ce75ff0ce3e6d"
+SRC_URI[sha256sum] = "a2ef8770d3309178203f8c8ac25e623e63cf76e97830fd3be280ade1a555290d"
+
+S = "${WORKDIR}/IO-Tty-${PV}"
+
+inherit cpan
+
+FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/IO/Tty/.debug/"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php.inc b/meta-openembedded/meta-oe/recipes-devtools/php/php.inc
new file mode 100644
index 000000000..066b97cd2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php.inc
@@ -0,0 +1,263 @@
+SUMMARY = "A server-side, HTML-embedded scripting language"
+HOMEPAGE = "http://www.php.net"
+SECTION = "console/network"
+
+LICENSE = "PHP-3.0"
+
+BBCLASSEXTEND = "native"
+DEPENDS = "zlib bzip2 libxml2 virtual/libiconv php-native lemon-native \
+ openssl"
+DEPENDS_class-native = "zlib-native libxml2-native"
+
+PHP_MAJOR_VERSION = "${@d.getVar('PV', True).split('.')[0]}"
+
+SRC_URI = "http://php.net/distributions/php-${PV}.tar.bz2 \
+ file://0001-php-don-t-use-broken-wrapper-for-mkdir.patch \
+ "
+
+SRC_URI_append_class-target = " \
+ file://iconv.patch \
+ file://imap-fix-autofoo.patch \
+ file://php_exec_native.patch \
+ file://php-fpm.conf \
+ file://php-fpm-apache.conf \
+ file://0001-acinclude.m4-don-t-unset-cache-variables.patch \
+ file://70_mod_php${PHP_MAJOR_VERSION}.conf \
+ file://php-fpm.service \
+ "
+S = "${WORKDIR}/php-${PV}"
+
+inherit autotools pkgconfig pythonnative gettext
+
+# phpize is not scanned for absolute paths by default (but php-config is).
+#
+SSTATE_SCAN_FILES += "phpize"
+SSTATE_SCAN_FILES += "build-defs.h"
+
+PHP_LIBDIR = "${libdir}/php${PHP_MAJOR_VERSION}"
+
+# Common EXTRA_OECONF
+COMMON_EXTRA_OECONF = "--enable-sockets \
+ --enable-pcntl \
+ --enable-shared \
+ --disable-rpath \
+ --with-pic \
+ --libdir=${PHP_LIBDIR} \
+"
+EXTRA_OECONF = "--enable-mbstring \
+ --enable-wddx \
+ --enable-fpm \
+ --enable-zip \
+ --with-libdir=${baselib} \
+ --with-gettext=${STAGING_LIBDIR}/.. \
+ --with-zlib=${STAGING_LIBDIR}/.. \
+ --with-iconv=${STAGING_LIBDIR}/.. \
+ --with-bz2=${STAGING_DIR_TARGET}${exec_prefix} \
+ --with-config-file-path=${sysconfdir}/php/apache2-php${PHP_MAJOR_VERSION} \
+ ${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'ac_cv_c_bigendian_php=no', 'ac_cv_c_bigendian_php=yes', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'pam', '', 'ac_cv_lib_pam_pam_start=no', d)} \
+ ${COMMON_EXTRA_OECONF} \
+"
+
+CACHED_CONFIGUREVARS += "ac_cv_func_dlopen=yes ac_cv_lib_dl_dlopen=yes"
+
+EXTRA_OECONF_class-native = " \
+ --with-zlib=${STAGING_LIBDIR_NATIVE}/.. \
+ --without-iconv \
+ ${COMMON_EXTRA_OECONF} \
+"
+
+PACKAGECONFIG ??= "mysql sqlite3 imap opcache \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} \
+"
+PACKAGECONFIG_class-native = ""
+
+PACKAGECONFIG[mysql] = "--with-mysql=${STAGING_DIR_TARGET}${prefix} \
+ --with-mysqli=${STAGING_BINDIR_CROSS}/mysql_config \
+ --with-pdo-mysql=${STAGING_BINDIR_CROSS}/mysql_config \
+ ,--without-mysql --without-mysqli --without-pdo-mysql \
+ ,mysql5"
+
+PACKAGECONFIG[sqlite3] = "--with-sqlite3=${STAGING_LIBDIR}/.. \
+ --with-pdo-sqlite=${STAGING_LIBDIR}/.. \
+ , \
+ ,sqlite3"
+PACKAGECONFIG[pgsql] = "--with-pgsql=${STAGING_DIR_TARGET}${exec_prefix},--without-pgsql,postgresql"
+PACKAGECONFIG[soap] = "--enable-libxml --enable-soap, --disable-soap, libxml2"
+PACKAGECONFIG[apache2] = "--with-apxs2=${STAGING_BINDIR_CROSS}/apxs,,apache2-native apache2"
+PACKAGECONFIG[pam] = ",,libpam"
+PACKAGECONFIG[imap] = "--with-imap=${STAGING_DIR_HOST} \
+ --with-imap-ssl=${STAGING_DIR_HOST} \
+ ,--without-imap --without-imap-ssl \
+ ,uw-imap"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[opcache] = ",--disable-opcache"
+
+export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
+export PHP_PEAR_PHP_BIN = "${STAGING_BINDIR_NATIVE}/php"
+CFLAGS += " -D_GNU_SOURCE -g -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED -I${STAGING_INCDIR}/apache2"
+CFLAGS_append_aarch64 = " -O2"
+
+EXTRA_OEMAKE = "INSTALL_ROOT=${D}"
+
+acpaths = ""
+
+do_configure_prepend () {
+ rm -f ${S}/build/libtool.m4 ${S}/ltmain.sh ${S}/aclocal.m4
+ find ${S} -name config.m4 | xargs -n1 sed -i 's!APXS_HTTPD=.*!APXS_HTTPD=${STAGING_BINDIR_NATIVE}/httpd!'
+}
+
+do_configure_append() {
+ # No, libtool, we really don't want rpath set...
+ sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' ${HOST_SYS}-libtool
+ sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' ${HOST_SYS}-libtool
+}
+
+do_install_append_class-native() {
+ rm -rf ${D}/${PHP_LIBDIR}/php/.registry
+ rm -rf ${D}/${PHP_LIBDIR}/php/.channels
+ rm -rf ${D}/${PHP_LIBDIR}/php/.[a-z]*
+}
+
+do_install_prepend() {
+ cat ${ACLOCALDIR}/libtool.m4 ${ACLOCALDIR}/lt~obsolete.m4 ${ACLOCALDIR}/ltoptions.m4 \
+ ${ACLOCALDIR}/ltsugar.m4 ${ACLOCALDIR}/ltversion.m4 > ${S}/build/libtool.m4
+}
+
+do_install_prepend_class-target() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'apache2', 'true', 'false', d)}; then
+ # Install dummy config file so apxs doesn't fail
+ install -d ${D}${sysconfdir}/apache2
+ printf "\nLoadModule dummy_module modules/mod_dummy.so\n" > ${D}${sysconfdir}/apache2/httpd.conf
+ fi
+}
+
+# fixme
+do_install_append_class-target() {
+ install -d ${D}${sysconfdir}/
+ if [ -d ${RECIPE_SYSROOT_NATIVE}${sysconfdir} ];then
+ install -m 0644 ${RECIPE_SYSROOT_NATIVE}${sysconfdir}/pear.conf ${D}${sysconfdir}/
+ fi
+ rm -rf ${D}/${TMPDIR}
+ rm -rf ${D}/.registry
+ rm -rf ${D}/.channels
+ rm -rf ${D}/.[a-z]*
+ rm -rf ${D}/var
+ rm -f ${D}/${sysconfdir}/php-fpm.conf.default
+ sed -i 's:${STAGING_DIR_NATIVE}::g' ${D}${sysconfdir}/pear.conf
+ install -m 0644 ${WORKDIR}/php-fpm.conf ${D}/${sysconfdir}/php-fpm.conf
+ install -d ${D}/${sysconfdir}/apache2/conf.d
+ install -m 0644 ${WORKDIR}/php-fpm-apache.conf ${D}/${sysconfdir}/apache2/conf.d/php-fpm.conf
+ install -d ${D}${sysconfdir}/init.d
+ sed -i 's:=/usr/sbin:=${sbindir}:g' ${B}/sapi/fpm/init.d.php-fpm
+ sed -i 's:=/etc:=${sysconfdir}:g' ${B}/sapi/fpm/init.d.php-fpm
+ sed -i 's:=/var:=${localstatedir}:g' ${B}/sapi/fpm/init.d.php-fpm
+ install -m 0755 ${B}/sapi/fpm/init.d.php-fpm ${D}${sysconfdir}/init.d/php-fpm
+ install -m 0644 ${WORKDIR}/php-fpm-apache.conf ${D}/${sysconfdir}/apache2/conf.d/php-fpm.conf
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)};then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/php-fpm.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
+ ${D}${systemd_unitdir}/system/php-fpm.service
+ fi
+
+ TMP=`dirname ${D}/${TMPDIR}`
+ while test ${TMP} != ${D}; do
+ if [ -d ${TMP} ]; then
+ rmdir ${TMP}
+ fi
+ TMP=`dirname ${TMP}`;
+ done
+
+ if ${@bb.utils.contains('PACKAGECONFIG', 'apache2', 'true', 'false', d)}; then
+ install -d ${D}${libdir}/apache2/modules
+ install -d ${D}${sysconfdir}/apache2/modules.d
+ install -d ${D}${sysconfdir}/php/apache2-php${PHP_MAJOR_VERSION}
+ install -m 755 libs/libphp${PHP_MAJOR_VERSION}.so ${D}${libdir}/apache2/modules
+ install -m 644 ${WORKDIR}/70_mod_php${PHP_MAJOR_VERSION}.conf ${D}${sysconfdir}/apache2/modules.d
+ sed -i s,lib/,${libdir}/, ${D}${sysconfdir}/apache2/modules.d/70_mod_php${PHP_MAJOR_VERSION}.conf
+ cat ${S}/php.ini-production | \
+ sed -e 's,extension_dir = \"\./\",extension_dir = \"/usr/lib/extensions\",' \
+ > ${D}${sysconfdir}/php/apache2-php${PHP_MAJOR_VERSION}/php.ini
+ rm -f ${D}${sysconfdir}/apache2/httpd.conf*
+ fi
+}
+
+SYSROOT_PREPROCESS_FUNCS += "php_sysroot_preprocess"
+
+php_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/phpize ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/php-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+
+ sed -i 's!eval echo /!eval echo ${STAGING_DIR_HOST}/!' ${SYSROOT_DESTDIR}${bindir_crossscripts}/phpize
+ sed -i 's!^include_dir=.*!include_dir=${STAGING_INCDIR}/php!' ${SYSROOT_DESTDIR}${bindir_crossscripts}/php-config
+}
+
+MODPHP_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'apache2', '${PN}-modphp', '', d)}"
+
+PACKAGES = "${PN}-dbg ${PN}-cli ${PN}-cgi ${PN}-fpm ${PN}-fpm-apache2 ${PN}-pear ${PN}-phar ${MODPHP_PACKAGE} ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}-opcache ${PN}"
+
+RDEPENDS_${PN} += "libgcc"
+RDEPENDS_${PN}-pear = "${PN}"
+RDEPENDS_${PN}-phar = "${PN}-cli"
+RDEPENDS_${PN}-cli = "${PN}"
+RDEPENDS_${PN}-modphp = "${PN} apache2"
+RDEPENDS_${PN}-opcache = "${PN}"
+
+INITSCRIPT_PACKAGES = "${PN}-fpm"
+inherit update-rc.d
+
+FILES_${PN}-dbg =+ "${bindir}/.debug \
+ ${libdir}/apache2/modules/.debug"
+FILES_${PN}-doc += "${PHP_LIBDIR}/php/doc"
+FILES_${PN}-cli = "${bindir}/php"
+FILES_${PN}-phar = "${bindir}/phar*"
+FILES_${PN}-cgi = "${bindir}/php-cgi"
+FILES_${PN}-fpm = "${sbindir}/php-fpm ${sysconfdir}/php-fpm.conf ${datadir}/fpm ${sysconfdir}/init.d/php-fpm ${systemd_unitdir}/system/php-fpm.service"
+FILES_${PN}-fpm-apache2 = "${sysconfdir}/apache2/conf.d/php-fpm.conf"
+CONFFILES_${PN}-fpm = "${sysconfdir}/php-fpm.conf"
+CONFFILES_${PN}-fpm-apache2 = "${sysconfdir}/apache2/conf.d/php-fpm.conf"
+INITSCRIPT_NAME_${PN}-fpm = "php-fpm"
+INITSCRIPT_PARAMS_${PN}-fpm = "defaults 60"
+FILES_${PN}-pear = "${bindir}/pear* ${bindir}/pecl ${PHP_LIBDIR}/php/PEAR \
+ ${PHP_LIBDIR}/php/PEAR*.php ${PHP_LIBDIR}/php/System.php \
+ ${PHP_LIBDIR}/php/peclcmd.php ${PHP_LIBDIR}/php/pearcmd.php \
+ ${PHP_LIBDIR}/php/.channels ${PHP_LIBDIR}/php/.channels/.alias \
+ ${PHP_LIBDIR}/php/.registry ${PHP_LIBDIR}/php/Archive/Tar.php \
+ ${PHP_LIBDIR}/php/Console/Getopt.php ${PHP_LIBDIR}/php/OS/Guess.php \
+ ${PHP_LIBDIR}/php/data/PEAR \
+ ${sysconfdir}/pear.conf"
+FILES_${PN}-dev = "${includedir}/php ${PHP_LIBDIR}/build ${bindir}/phpize \
+ ${bindir}/php-config ${PHP_LIBDIR}/php/.depdb \
+ ${PHP_LIBDIR}/php/.depdblock ${PHP_LIBDIR}/php/.filemap \
+ ${PHP_LIBDIR}/php/.lock ${PHP_LIBDIR}/php/test"
+FILES_${PN}-staticdev += "${PHP_LIBDIR}/extensions/*/*.a"
+FILES_${PN}-opcache = "${PHP_LIBDIR}/extensions/*/opcache${SOLIBSDEV}"
+FILES_${PN} = "${PHP_LIBDIR}/php"
+FILES_${PN} += "${bindir}"
+
+SUMMARY_${PN}-modphp = "PHP module for the Apache HTTP server"
+FILES_${PN}-modphp = "${libdir}/apache2 ${sysconfdir}"
+
+MODPHP_OLDPACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'apache2', 'modphp', '', d)}"
+RPROVIDES_${PN}-modphp = "${MODPHP_OLDPACKAGE}"
+RREPLACES_${PN}-modphp = "${MODPHP_OLDPACKAGE}"
+RCONFLICTS_${PN}-modphp = "${MODPHP_OLDPACKAGE}"
+
+do_install_append_class-native() {
+ create_wrapper ${D}${bindir}/php \
+ PHP_PEAR_SYSCONF_DIR=${sysconfdir}/
+}
+
+
+# Fails to build with thumb-1 (qemuarm)
+# | {standard input}: Assembler messages:
+# | {standard input}:3719: Error: selected processor does not support Thumb mode `smull r0,r2,r9,r3'
+# | {standard input}:3720: Error: unshifted register required -- `sub r2,r2,r0,asr#31'
+# | {standard input}:3796: Error: selected processor does not support Thumb mode `smull r0,r2,r3,r3'
+# | {standard input}:3797: Error: unshifted register required -- `sub r2,r2,r0,asr#31'
+# | make: *** [ext/standard/math.lo] Error 1
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Add-lpthread-to-link.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Add-lpthread-to-link.patch
new file mode 100644
index 000000000..f70e550ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Add-lpthread-to-link.patch
@@ -0,0 +1,38 @@
+From ed0a954983d50267c2fc0bc13aba929ea0cad971 Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 2 May 2017 06:34:40 +0000
+Subject: [PATCH] Add -lpthread to link
+
+When building the php-5.6.26, the following errors occured:
+
+ ld: TSRM/.libs/TSRM.o: undefined reference to symbol
+ 'pthread_sigmask@@GLIBC_2.2.5'
+
+ error adding symbols: DSO missing from command line
+
+This is because no pthread to link, so we should add it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ configure.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index a467dff1..9afef652 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1058,7 +1058,8 @@ case $php_sapi_module in
+ ;;
+ esac
+
+-EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS"
++PTHREAD_LIBS="-lpthread"
++EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS $PTHREAD_LIBS"
+
+ dnl this has to be here to prevent the openssl crypt() from
+ dnl overriding the system provided crypt().
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude-use-pkgconfig-for-libxml2-config.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude-use-pkgconfig-for-libxml2-config.patch
new file mode 100644
index 000000000..51a5e43b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude-use-pkgconfig-for-libxml2-config.patch
@@ -0,0 +1,90 @@
+From 003c9feaae6ed5c173edcea51193e49bc94ac39a Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Tue, 17 Jun 2014 09:53:00 +0200
+Subject: [PATCH 3/8] acinclude: use pkgconfig for libxml2 config
+
+Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
+Upstream-Status: pending
+---
+ acinclude.m4 | 63 ++++++++++++++++++++++--------------------------------------
+ 1 file changed, 23 insertions(+), 40 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 206fcbf..a6c0d84 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -2530,48 +2530,31 @@ dnl
+ dnl Common setup macro for libxml
+ dnl
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+-AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+-[
+-
+- ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
+-
++PKG_CHECK_MODULES([LIBXML], [libxml-2.0 > 2.6.11], [
++ PHP_EVAL_LIBLINE($LIBXML_LIBS, $1)
++ PHP_EVAL_INCLINE($LIBXML_CFLAGS)
++
++ dnl Check that build works with given libs
++ AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [
++ PHP_TEST_BUILD(xmlInitParser,
++ [
++ php_cv_libxml_build_works=yes
++ AC_MSG_RESULT(yes)
++ ], [
++ AC_MSG_RESULT(no)
++ AC_MSG_ERROR([build test failed. Please check the config.log for details.])
++ ], [
++ [$]$1
++ ])
++ ])
++ if test "$php_cv_libxml_build_works" = "yes"; then
++ AC_DEFINE(HAVE_LIBXML, 1, [ ])
++ fi
++ $2
++], [
++ AC_MSG_ERROR([$LIBXML_PKG_ERRORS])
+ ])
+
+- if test -x "$ac_cv_php_xml2_config_path"; then
+- XML2_CONFIG="$ac_cv_php_xml2_config_path"
+- libxml_full_version=`$XML2_CONFIG --version`
+- ac_IFS=$IFS
+- IFS="."
+- set $libxml_full_version
+- IFS=$ac_IFS
+- LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
+- if test "$LIBXML_VERSION" -ge "2006011"; then
+- LIBXML_LIBS=`$XML2_CONFIG --libs`
+- LIBXML_INCS=`$XML2_CONFIG --cflags`
+- PHP_EVAL_LIBLINE($LIBXML_LIBS, $1)
+- PHP_EVAL_INCLINE($LIBXML_INCS)
+-
+- dnl Check that build works with given libs
+- AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [
+- PHP_TEST_BUILD(xmlInitParser,
+- [
+- php_cv_libxml_build_works=yes
+- ], [
+- AC_MSG_RESULT(no)
+- AC_MSG_ERROR([build test failed. Please check the config.log for details.])
+- ], [
+- [$]$1
+- ])
+- ])
+- if test "$php_cv_libxml_build_works" = "yes"; then
+- AC_DEFINE(HAVE_LIBXML, 1, [ ])
+- fi
+- $2
+- else
+- AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.])
+- fi
+-ifelse([$3],[],,[else $3])
+- fi
+ ])
+
+ dnl -------------------------------------------------------------------------
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch
new file mode 100644
index 000000000..a250cac83
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch
@@ -0,0 +1,39 @@
+From dfebe81f946a83fe2499fc84d4f3dbdc5612276c Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Tue, 3 Apr 2018 11:35:03 +0800
+Subject: [PATCH] acinclude.m4: don't unset cache variables
+
+Unsetting prevents cache variable from being passed to configure.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ acinclude.m4 | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index f6a55ec..d3346df 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -1890,8 +1890,6 @@ define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,]))
+ dnl
+ AC_DEFUN([PHP_CHECK_FUNC_LIB],[
+ ifelse($2,,:,[
+- unset ac_cv_lib_$2[]_$1
+- unset ac_cv_lib_$2[]___$1
+ unset found
+ AC_CHECK_LIB($2, $1, [found=yes], [
+ AC_CHECK_LIB($2, __$1, [found=yes], [found=no])
+@@ -1923,8 +1921,6 @@ dnl in the default libraries and as a fall back in the specified library.
+ dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS.
+ dnl
+ AC_DEFUN([PHP_CHECK_FUNC],[
+- unset ac_cv_func_$1
+- unset ac_cv_func___$1
+ unset found
+
+ AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ])
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch
new file mode 100644
index 000000000..15329261b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch
@@ -0,0 +1,56 @@
+From a2d146b8dd9d02f523d1e205d79792626a71dec3 Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Mon, 2 Apr 2018 15:27:09 +0800
+Subject: [PATCH] acinclude.m4: skip binconfig check for libxml
+
+We want libxml flags to be picked up using pkg-config instead of the
+xml2-config file.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+---
+ acinclude.m4 | 29 -----------------------------
+ 1 file changed, 29 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index d42d708..d32766a 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -2525,35 +2525,6 @@ dnl
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ found_libxml=no
+
+- dnl First try to find xml2-config
+- AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+- [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
+- ])
+-
+- if test -x "$ac_cv_php_xml2_config_path"; then
+- XML2_CONFIG="$ac_cv_php_xml2_config_path"
+- libxml_full_version=`$XML2_CONFIG --version`
+- ac_IFS=$IFS
+- IFS="."
+- set $libxml_full_version
+- IFS=$ac_IFS
+- LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
+- if test "$LIBXML_VERSION" -ge "2006011"; then
+- found_libxml=yes
+- LIBXML_LIBS=`$XML2_CONFIG --libs`
+- LIBXML_INCS=`$XML2_CONFIG --cflags`
+- else
+- AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.])
+- fi
+- fi
+-
+- dnl If xml2-config fails, try pkg-config
+ if test "$found_libxml" = "no"; then
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-fix-error-caused-by-a-new-variable-is-declared-after.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-fix-error-caused-by-a-new-variable-is-declared-after.patch
new file mode 100644
index 000000000..6ab101b41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-fix-error-caused-by-a-new-variable-is-declared-after.patch
@@ -0,0 +1,45 @@
+From 0d88d735887c6f2fa00a743c27124c7a52006a41 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sun, 15 Apr 2018 19:17:27 -0700
+Subject: [PATCH] fix error caused by a new variable is declared after the
+ label
+
+There is a build failure on mips:
+...
+|sljitNativeMIPS_common.c: In function 'sljit_has_cpu_feature':
+|sljitNativeMIPS_common.c:506:3: error: a label can only be part
+of a statement and a declaration is not a statement
+| sljit_sw fir;
+| ^~~~~~~~
+...
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c b/ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c
+index ee207fe..adfd342 100644
+--- a/ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c
++++ b/ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c
+@@ -498,12 +498,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
+
+ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)
+ {
++#if defined(__GNUC__)
++ sljit_sw fir;
++#endif
+ switch (feature_type) {
+ case SLJIT_HAS_FPU:
+ #ifdef SLJIT_IS_FPU_AVAILABLE
+ return SLJIT_IS_FPU_AVAILABLE;
+ #elif defined(__GNUC__)
+- sljit_sw fir;
+ asm ("cfc1 %0, $0" : "=r"(fir));
+ return (fir >> 22) & 0x1;
+ #else
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch
new file mode 100644
index 000000000..fce9738f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch
@@ -0,0 +1,63 @@
+From 2842aa2a078eb1cad55540b61e7edf111395150d Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Date: Mon, 26 Feb 2018 19:30:55 +0100
+Subject: [PATCH] main/php_ini.c: build empty php_load_zend_extension_cb() when
+ !HAVE_LIBDL
+
+Commit 0782a7fc6314c8bd3cbfd57f12d0479bf9cc8dc7 ("Fixed bug #74866
+extension_dir = "./ext" now use current directory for base") modified
+the php_load_zend_extension_cb() function to use php_load_shlib(), and
+pass a handle to the newly introduced zend_load_extension_handle()
+function instead of passing the extension path to
+zend_load_extension().
+
+While doing so, it introduced a call to php_load_shlib() from code
+that is built even when HAVE_LIBDL is not defined. However,
+php_load_shlib() is not implemented when HAVE_LIBDL is not defined,
+for obvious reasons.
+
+It turns out that zend_load_extension_handle() anyway doesn't do
+anything when ZEND_EXTENSIONS_SUPPORT is defined to 0, and
+ZEND_EXTENSIONS_SUPPORT is not defined when HAVE_LIBDL is not defined
+(Zend/zend_portability.h).
+
+Fixes the following build failure when building on a system that
+doesn't have libdl:
+
+main/php_ini.o: In function `php_load_zend_extension_cb':
+php_ini.c:(.text+0x478): undefined reference to `php_load_shlib'
+php_ini.c:(.text+0x4b0): undefined reference to `php_load_shlib'
+collect2: error: ld returned 1 exit status
+
+Upstream-Status: Backport [http://git.php.net/?p=php-src.git;a=commit;h=2842aa2a078eb1cad55540b61e7edf111395150d]
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ main/php_ini.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/main/php_ini.c b/main/php_ini.c
+index ba58eb1..fca263e 100644
+--- a/main/php_ini.c
++++ b/main/php_ini.c
+@@ -350,6 +350,7 @@ static void php_load_php_extension_cb(void *arg)
+
+ /* {{{ php_load_zend_extension_cb
+ */
++#ifdef HAVE_LIBDL
+ static void php_load_zend_extension_cb(void *arg)
+ {
+ char *filename = *((char **) arg);
+@@ -409,6 +410,9 @@ static void php_load_zend_extension_cb(void *arg)
+ efree(libpath);
+ }
+ }
++#else
++static void php_load_zend_extension_cb(void *arg) { }
++#endif
+ /* }}} */
+
+ /* {{{ php_init_config
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch
new file mode 100644
index 000000000..0d24d34f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch
@@ -0,0 +1,385 @@
+From b2fb725dc404d471371731b663234e87cb0fca84 Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Mon, 2 Apr 2018 17:54:52 +0800
+Subject: [PATCH] opcache/config.m4: enable opcache
+
+We can't use AC_TRY_RUN to run programs in a cross compile environment. Set
+the variables directly instead since we know that we'd be running on latest
+enough linux kernel.
+
+Upstream-Status: Inappropriate [Configuration]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ ext/opcache/config.m4 | 349 ++------------------------------------------------
+ 1 file changed, 8 insertions(+), 341 deletions(-)
+
+diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4
+index 7b500f0..10bb99a 100644
+--- a/ext/opcache/config.m4
++++ b/ext/opcache/config.m4
+@@ -28,353 +28,20 @@ if test "$PHP_OPCACHE" != "no"; then
+
+ AC_CHECK_HEADERS([unistd.h sys/uio.h])
+
+- AC_MSG_CHECKING(for sysvipc shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/ipc.h>
+-#include <sys/shm.h>
+-#include <unistd.h>
+-#include <string.h>
++ AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
+
+-int main() {
+- pid_t pid;
+- int status;
+- int ipc_id;
+- char *shm;
+- struct shmid_ds shmbuf;
++ AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
+
+- ipc_id = shmget(IPC_PRIVATE, 4096, (IPC_CREAT | SHM_R | SHM_W));
+- if (ipc_id == -1) {
+- return 1;
+- }
++ AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
+
+- shm = shmat(ipc_id, NULL, 0);
+- if (shm == (void *)-1) {
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 2;
+- }
+-
+- if (shmctl(ipc_id, IPC_STAT, &shmbuf) != 0) {
+- shmdt(shm);
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 3;
+- }
+-
+- shmbuf.shm_perm.uid = getuid();
+- shmbuf.shm_perm.gid = getgid();
+- shmbuf.shm_perm.mode = 0600;
+-
+- if (shmctl(ipc_id, IPC_SET, &shmbuf) != 0) {
+- shmdt(shm);
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 4;
+- }
+-
+- shmctl(ipc_id, IPC_RMID, NULL);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <unistd.h>
+-#include <string.h>
+-
+-#ifndef MAP_ANON
+-# ifdef MAP_ANONYMOUS
+-# define MAP_ANON MAP_ANONYMOUS
+-# endif
+-#endif
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- char *shm;
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
+- if (shm == MAP_FAILED) {
+- return 1;
+- }
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+-
+- fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 1;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 2;
+- }
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+- char tmpname[4096];
+-
+- sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
+- if (mktemp(tmpname) == NULL) {
+- return 1;
+- }
+- fd = shm_open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 2;
+- }
+- if (ftruncate(fd, 4096) < 0) {
+- close(fd);
+- shm_unlink(tmpname);
+- return 3;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 4;
+- }
+- shm_unlink(tmpname);
+- close(fd);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
++ AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
+
+ AC_MSG_CHECKING(for mmap() using regular file shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+- char tmpname[4096];
+-
+- sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
+- if (mktemp(tmpname) == NULL) {
+- return 1;
+- }
+- fd = open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 2;
+- }
+- if (ftruncate(fd, 4096) < 0) {
+- close(fd);
+- unlink(tmpname);
+- return 3;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 4;
+- }
+- unlink(tmpname);
+- close(fd);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+-flock_type=unknown
+-AC_MSG_CHECKING("whether flock struct is linux ordered")
+-AC_TRY_RUN([
+- #include <fcntl.h>
+- struct flock lock = { 1, 2, 3, 4, 5 };
+- int main() {
+- if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 3 && lock.l_len == 4) {
+- return 0;
+- }
+- return 1;
+- }
+-], [
+- flock_type=linux
+- AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
+- AC_MSG_RESULT("yes")
+-], AC_MSG_RESULT("no") )
++
++ AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
+
+-AC_MSG_CHECKING("whether flock struct is BSD ordered")
+-AC_TRY_RUN([
+- #include <fcntl.h>
+- struct flock lock = { 1, 2, 3, 4, 5 };
+- int main() {
+- if(lock.l_start == 1 && lock.l_len == 2 && lock.l_type == 4 && lock.l_whence == 5) {
+- return 0;
+- }
+- return 1;
+- }
+-], [
+- flock_type=bsd
+- AC_DEFINE([HAVE_FLOCK_BSD], [], [Struct flock is BSD-type])
+- AC_MSG_RESULT("yes")
+-], AC_MSG_RESULT("no") )
++ flock_type=linux
++ AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
+
+ if test "$flock_type" = "unknown"; then
+ AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch
new file mode 100644
index 000000000..2f7d58155
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch
@@ -0,0 +1,26 @@
+From ebc101e0728b9db6c687cff525e5dfc8eb0edbf3 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 3 Nov 2011 14:27:15 +0100
+Subject: [PATCH 2/8] php: don't use broken wrapper for mkdir
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+
+Upstream-Status: Inappropriate
+
+ Makefile.global | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.global b/Makefile.global
+index ff858c2..ae554b4 100644
+--- a/Makefile.global
++++ b/Makefile.global
+@@ -1,4 +1,4 @@
+-mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
++mkinstalldirs = mkdir -p
+ INSTALL = $(top_srcdir)/build/shtool install -c
+ INSTALL_DATA = $(INSTALL) -m 644
+
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf b/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf
new file mode 100644
index 000000000..1de6fb11a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf
@@ -0,0 +1,12 @@
+# vim: ft=apache sw=4 ts=4
+<IfDefine PHP5>
+ # Load the module first
+ <IfModule !sapi_apache2.c>
+ LoadModule php5_module lib/apache2/modules/libphp5.so
+ </IfModule>
+
+ # Set it to handle the files
+ AddHandler php5-script .php .phtml .php3 .php4 .php5
+ AddType application/x-httpd-php-source .phps
+ DirectoryIndex index.html index.html.var index.php index.phtml
+</IfDefine>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php7.conf b/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php7.conf
new file mode 100644
index 000000000..d206265a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php7.conf
@@ -0,0 +1,9 @@
+LoadModule php7_module lib/apache2/modules/libphp7.so
+
+<FilesMatch "\.ph(p[2-7]?|tml)$">
+ SetHandler application/x-httpd-php
+</FilesMatch>
+
+<FilesMatch "\.phps$">
+ SetHandler application/x-httpd-php-source
+</FilesMatch>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/acinclude-xml2-config.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/acinclude-xml2-config.patch
new file mode 100644
index 000000000..30811a74b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/acinclude-xml2-config.patch
@@ -0,0 +1,25 @@
+Upstream-status: Unknown
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 4fd452e..206fcbf 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -2532,12 +2532,9 @@ dnl
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+ [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
++
++ ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
++
+ ])
+
+ if test -x "$ac_cv_php_xml2_config_path"; then
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/change-AC_TRY_RUN-to-AC_TRY_LINK.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/change-AC_TRY_RUN-to-AC_TRY_LINK.patch
new file mode 100644
index 000000000..3e901841b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/change-AC_TRY_RUN-to-AC_TRY_LINK.patch
@@ -0,0 +1,61 @@
+From 3bfcc7fdd22261eaed10949714de0a90d31e10ab Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Thu, 20 Aug 2015 16:29:35 +0800
+Subject: [PATCH] [PATCH] config.m4: change AC_TRY_RUN to AC_TRY_LINK
+
+Upstream-Status: Pending
+
+AC_TRY_RUN is not suitable for cross-compile
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+%% original patch: change-AC_TRY_RUN-to-AC_TRY_LINK.patch
+---
+ ext/fileinfo/config.m4 | 31 ++++++-------------------------
+ 1 file changed, 6 insertions(+), 25 deletions(-)
+
+diff --git a/ext/fileinfo/config.m4 b/ext/fileinfo/config.m4
+index 523b4fd..0aaa4c8 100644
+--- a/ext/fileinfo/config.m4
++++ b/ext/fileinfo/config.m4
+@@ -14,31 +14,12 @@ if test "$PHP_FILEINFO" != "no"; then
+ libmagic/readcdf.c libmagic/softmagic.c libmagic/der.c"
+
+ AC_MSG_CHECKING([for strcasestr])
+- AC_TRY_RUN([
+-#include <string.h>
+-#include <strings.h>
+-#include <stdlib.h>
+-
+-int main(void)
+-{
+- char *s0, *s1, *ret;
+-
+- s0 = (char *) malloc(42);
+- s1 = (char *) malloc(8);
+-
+- memset(s0, 'X', 42);
+- s0[24] = 'Y';
+- s0[26] = 'Z';
+- s0[41] = '\0';
+- memset(s1, 'x', 8);
+- s1[0] = 'y';
+- s1[2] = 'Z';
+- s1[7] = '\0';
+-
+- ret = strcasestr(s0, s1);
+-
+- return !(NULL != ret);
+-}
++ AC_TRY_COMPILE([
++ #include <string.h>
++ #include <strings.h>
++ #include <stdlib.h>
++ ],[
++ strcasestr(NULL, NULL);
+ ],[
+ dnl using the platform implementation
+ AC_MSG_RESULT(yes)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch
new file mode 100644
index 000000000..b6e3ceb0b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch
@@ -0,0 +1,37 @@
+From 17cc5645f3acf943a5a06465d09d0ebcfea987bd Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Upstream-status: Unknown
+
+---
+ acinclude.m4 | 3 ++-
+ ext/iconv/config.m4 | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index d32766a..ad5166e 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -2445,7 +2445,8 @@ AC_DEFUN([PHP_SETUP_ICONV], [
+ dnl Check libc first if no path is provided in --with-iconv
+ dnl
+
+- if test "$PHP_ICONV" = "yes"; then
++ dnl must check against no, not against yes as PHP_ICONV can also include a path, which implies yes
++ if test "$PHP_ICONV" != "no"; then
+ dnl Reset LIBS temporarily as it may have already been included
+ dnl -liconv in.
+ LIBS_save="$LIBS"
+diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4
+index 6a05697..973e750 100644
+--- a/ext/iconv/config.m4
++++ b/ext/iconv/config.m4
+@@ -15,7 +15,7 @@ if test "$PHP_ICONV" != "no"; then
+
+ if test "$iconv_avail" != "no"; then
+ if test -z "$ICONV_DIR"; then
+- for i in /usr/local /usr; do
++ for i in $PHP_ICONV /usr/local /usr; do
+ if test -f "$i/include/iconv.h" || test -f "$i/include/giconv.h"; then
+ PHP_ICONV_PREFIX="$i"
+ break
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch
new file mode 100644
index 000000000..b5fb7d4fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch
@@ -0,0 +1,51 @@
+From c084c8349d1780980e232cb28b60a109e3d89438 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Upstream-status: Unknown
+
+---
+ acinclude.m4 | 2 +-
+ ext/imap/config.m4 | 10 ++--------
+ 2 files changed, 3 insertions(+), 9 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index ad5166e..f6a55ec 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -2350,7 +2350,7 @@ AC_DEFUN([PHP_SETUP_OPENSSL],[
+ PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl"
+ fi
+
+- for i in $PHP_OPENSSL_DIR; do
++ for i in $PHP_OPENSSL_DIR $PHP_OPENSSL_DIR/usr; do
+ if test -r $i/include/openssl/evp.h; then
+ OPENSSL_INCDIR=$i/include
+ fi
+diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
+index badb6e2..8ff803c 100644
+--- a/ext/imap/config.m4
++++ b/ext/imap/config.m4
+@@ -109,7 +109,7 @@ if test "$PHP_IMAP" != "no"; then
+ PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared)
+ AC_DEFINE(HAVE_IMAP,1,[ ])
+
+- for i in $PHP_IMAP /usr/local /usr; do
++ for i in $PHP_IMAP $PHP_IMAP/usr /usr/local /usr; do
+ IMAP_INC_CHK()
+ el[]IMAP_INC_CHK(/include/c-client)
+ el[]IMAP_INC_CHK(/include/imap)
+@@ -198,13 +198,7 @@ if test "$PHP_IMAP" != "no"; then
+ AC_MSG_ERROR(Cannot find rfc822.h. Please check your c-client installation.)
+ fi
+
+- if test ! -r "$IMAP_DIR/c-client/libc-client.a" && test -r "$IMAP_DIR/c-client/c-client.a" ; then
+- ln -s "$IMAP_DIR/c-client/c-client.a" "$IMAP_DIR/c-client/libc-client.a" >/dev/null 2>&1
+- elif test ! -r "$IMAP_DIR/$PHP_LIBDIR/libc-client.a" && test -r "$IMAP_DIR/$PHP_LIBDIR/c-client.a"; then
+- ln -s "$IMAP_DIR/$PHP_LIBDIR/c-client.a" "$IMAP_DIR/$PHP_LIBDIR/libc-client.a" >/dev/null 2>&1
+- fi
+-
+- for lib in c-client4 c-client imap; do
++ for lib in /usr/lib c-client4 c-client imap; do
+ IMAP_LIB=$lib
+ IMAP_LIB_CHK($PHP_LIBDIR)
+ IMAP_LIB_CHK(c-client)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/pear-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/pear-makefile.patch
new file mode 100644
index 000000000..4bc102526
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/pear-makefile.patch
@@ -0,0 +1,22 @@
+From edd575a546d56bb5683aff19782b16963d61fd0b Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Upstream-status: Unknown
+
+---
+ pear/Makefile.frag | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pear/Makefile.frag b/pear/Makefile.frag
+index bbe8ec3..16f43e2 100644
+--- a/pear/Makefile.frag
++++ b/pear/Makefile.frag
+@@ -12,7 +12,7 @@ PEAR_SUFFIX = -ds a$(program_suffix)
+ PEAR_INSTALLER_URL = https://pear.php.net/install-pear-nozlib.phar
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch
new file mode 100644
index 000000000..336cf0d62
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch
@@ -0,0 +1,42 @@
+From 08962a56f69963e01892d98ca5b75de8354bd3f5 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Fix phar packaging
+
+Inherited from OE-Classic, with some additions to fix host paths leaking
+into the target package.
+
+Upstream-Status: Inappropriate [config]
+
+---
+ ext/phar/Makefile.frag | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
+
+diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag
+index 0e3713f..22f7898 100644
+--- a/ext/phar/Makefile.frag
++++ b/ext/phar/Makefile.frag
+@@ -10,20 +10,9 @@ pharcmd: $(builddir)/phar.php $(builddir)/phar.phar
+
+ PHP_PHARCMD_SETTINGS = -n -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' -d phar.readonly=0 -d 'safe_mode=0'
+ PHP_PHARCMD_EXECUTABLE = ` \
+- if test -x "$(top_builddir)/$(SAPI_CLI_PATH)"; then \
+- $(top_srcdir)/build/shtool echo -n -- "$(top_builddir)/$(SAPI_CLI_PATH) -n"; \
+- if test "x$(PHP_MODULES)" != "x"; then \
+- $(top_srcdir)/build/shtool echo -n -- " -d extension_dir=$(top_builddir)/modules"; \
+- for i in bz2 zlib phar; do \
+- if test -f "$(top_builddir)/modules/$$i.la"; then \
+- . $(top_builddir)/modules/$$i.la; $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; \
+- fi; \
+- done; \
+- fi; \
+- else \
+- $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; \
+- fi;`
+-PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(INSTALL_ROOT)$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
++ $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; `
++
++PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
+
+ $(builddir)/phar/phar.inc: $(srcdir)/phar/phar.inc
+ -@test -d $(builddir)/phar || mkdir $(builddir)/phar
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm-apache.conf b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm-apache.conf
new file mode 100644
index 000000000..77cdd82a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm-apache.conf
@@ -0,0 +1,6 @@
+# Taken from http://wiki.apache.org/httpd/PHP-FPM
+
+LoadModule proxy_module lib/apache2/modules/mod_proxy.so
+LoadModule proxy_fcgi_module lib/apache2/modules/mod_proxy_fcgi.so
+
+ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/apache2/htdocs/
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.conf b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.conf
new file mode 100644
index 000000000..21e3dfb5c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.conf
@@ -0,0 +1,510 @@
+;;;;;;;;;;;;;;;;;;;;;
+; FPM Configuration ;
+;;;;;;;;;;;;;;;;;;;;;
+
+; All relative paths in this configuration file are relative to PHP's install
+; prefix (/usr). This prefix can be dynamicaly changed by using the
+; '-p' argument from the command line.
+
+; Include one or more files. If glob(3) exists, it is used to include a bunch of
+; files from a glob(3) pattern. This directive can be used everywhere in the
+; file.
+; Relative path can also be used. They will be prefixed by:
+; - the global prefix if it's been set (-p arguement)
+; - /usr otherwise
+;include=etc/fpm.d/*.conf
+
+;;;;;;;;;;;;;;;;;;
+; Global Options ;
+;;;;;;;;;;;;;;;;;;
+
+[global]
+; Pid file
+; Note: the default prefix is /var
+; Default Value: none
+;pid = run/php-fpm.pid
+
+; Error log file
+; If it's set to "syslog", log is sent to syslogd instead of being written
+; in a local file.
+; Note: the default prefix is /var
+; Default Value: log/php-fpm.log
+;error_log = log/php-fpm.log
+
+; syslog_facility is used to specify what type of program is logging the
+; message. This lets syslogd specify that messages from different facilities
+; will be handled differently.
+; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
+; Default Value: daemon
+;syslog.facility = daemon
+
+; syslog_ident is prepended to every message. If you have multiple FPM
+; instances running on the same server, you can change the default value
+; which must suit common needs.
+; Default Value: php-fpm
+;syslog.ident = php-fpm
+
+; Log level
+; Possible Values: alert, error, warning, notice, debug
+; Default Value: notice
+;log_level = notice
+
+; If this number of child processes exit with SIGSEGV or SIGBUS within the time
+; interval set by emergency_restart_interval then FPM will restart. A value
+; of '0' means 'Off'.
+; Default Value: 0
+;emergency_restart_threshold = 0
+
+; Interval of time used by emergency_restart_interval to determine when
+; a graceful restart will be initiated. This can be useful to work around
+; accidental corruptions in an accelerator's shared memory.
+; Available Units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;emergency_restart_interval = 0
+
+; Time limit for child processes to wait for a reaction on signals from master.
+; Available units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;process_control_timeout = 0
+
+; The maximum number of processes FPM will fork. This has been design to control
+; the global number of processes when using dynamic PM within a lot of pools.
+; Use it with caution.
+; Note: A value of 0 indicates no limit
+; Default Value: 0
+; process.max = 128
+
+; Specify the nice(2) priority to apply to the master process (only if set)
+; The value can vary from -19 (highest priority) to 20 (lower priority)
+; Note: - It will only work if the FPM master process is launched as root
+; - The pool process will inherit the master process priority
+; unless it specified otherwise
+; Default Value: no set
+; process.priority = -19
+
+; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
+; Default Value: yes
+;daemonize = yes
+
+; Set open file descriptor rlimit for the master process.
+; Default Value: system defined value
+;rlimit_files = 1024
+
+; Set max core size rlimit for the master process.
+; Possible Values: 'unlimited' or an integer greater or equal to 0
+; Default Value: system defined value
+;rlimit_core = 0
+
+; Specify the event mechanism FPM will use. The following is available:
+; - select (any POSIX os)
+; - poll (any POSIX os)
+; - epoll (linux >= 2.5.44)
+; - kqueue (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
+; - /dev/poll (Solaris >= 7)
+; - port (Solaris >= 10)
+; Default Value: not set (auto detection)
+; events.mechanism = epoll
+
+;;;;;;;;;;;;;;;;;;;;
+; Pool Definitions ;
+;;;;;;;;;;;;;;;;;;;;
+
+; Multiple pools of child processes may be started with different listening
+; ports and different management options. The name of the pool will be
+; used in logs and stats. There is no limitation on the number of pools which
+; FPM can handle. Your system will tell you anyway :)
+
+; Start a new pool named 'www'.
+; the variable $pool can we used in any directive and will be replaced by the
+; pool name ('www' here)
+[www]
+
+; Per pool prefix
+; It only applies on the following directives:
+; - 'slowlog'
+; - 'listen' (unixsocket)
+; - 'chroot'
+; - 'chdir'
+; - 'php_values'
+; - 'php_admin_values'
+; When not set, the global prefix (or /usr) applies instead.
+; Note: This directive can also be relative to the global prefix.
+; Default Value: none
+;prefix = /path/to/pools/$pool
+
+; Unix user/group of processes
+; Note: The user is mandatory. If the group is not set, the default user's group
+; will be used.
+user = nobody
+;group = nobody
+
+; The address on which to accept FastCGI requests.
+; Valid syntaxes are:
+; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
+; a specific port;
+; 'port' - to listen on a TCP socket to all addresses on a
+; specific port;
+; '/path/to/unix/socket' - to listen on a unix socket.
+; Note: This value is mandatory.
+listen = 127.0.0.1:9000
+
+; Set listen(2) backlog. A value of '-1' means unlimited.
+; Default Value: 128 (-1 on FreeBSD and OpenBSD)
+;listen.backlog = -1
+
+; Set permissions for unix socket, if one is used. In Linux, read/write
+; permissions must be set in order to allow connections from a web server. Many
+; BSD-derived systems allow connections regardless of permissions.
+; Default Values: user and group are set as the running user
+; mode is set to 0666
+;listen.owner = nobody
+;listen.group = nobody
+;listen.mode = 0666
+
+; List of ipv4 addresses of FastCGI clients which are allowed to connect.
+; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
+; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
+; must be separated by a comma. If this value is left blank, connections will be
+; accepted from any ip address.
+; Default Value: any
+;listen.allowed_clients = 127.0.0.1
+
+; Specify the nice(2) priority to apply to the pool processes (only if set)
+; The value can vary from -19 (highest priority) to 20 (lower priority)
+; Note: - It will only work if the FPM master process is launched as root
+; - The pool processes will inherit the master process priority
+; unless it specified otherwise
+; Default Value: no set
+; priority = -19
+
+; Choose how the process manager will control the number of child processes.
+; Possible Values:
+; static - a fixed number (pm.max_children) of child processes;
+; dynamic - the number of child processes are set dynamically based on the
+; following directives. With this process management, there will be
+; always at least 1 children.
+; pm.max_children - the maximum number of children that can
+; be alive at the same time.
+; pm.start_servers - the number of children created on startup.
+; pm.min_spare_servers - the minimum number of children in 'idle'
+; state (waiting to process). If the number
+; of 'idle' processes is less than this
+; number then some children will be created.
+; pm.max_spare_servers - the maximum number of children in 'idle'
+; state (waiting to process). If the number
+; of 'idle' processes is greater than this
+; number then some children will be killed.
+; ondemand - no children are created at startup. Children will be forked when
+; new requests will connect. The following parameter are used:
+; pm.max_children - the maximum number of children that
+; can be alive at the same time.
+; pm.process_idle_timeout - The number of seconds after which
+; an idle process will be killed.
+; Note: This value is mandatory.
+pm = dynamic
+
+; The number of child processes to be created when pm is set to 'static' and the
+; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
+; This value sets the limit on the number of simultaneous requests that will be
+; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
+; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
+; CGI. The below defaults are based on a server without much resources. Don't
+; forget to tweak pm.* to fit your needs.
+; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
+; Note: This value is mandatory.
+pm.max_children = 5
+
+; The number of child processes created on startup.
+; Note: Used only when pm is set to 'dynamic'
+; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
+pm.start_servers = 2
+
+; The desired minimum number of idle server processes.
+; Note: Used only when pm is set to 'dynamic'
+; Note: Mandatory when pm is set to 'dynamic'
+pm.min_spare_servers = 1
+
+; The desired maximum number of idle server processes.
+; Note: Used only when pm is set to 'dynamic'
+; Note: Mandatory when pm is set to 'dynamic'
+pm.max_spare_servers = 3
+
+; The number of seconds after which an idle process will be killed.
+; Note: Used only when pm is set to 'ondemand'
+; Default Value: 10s
+;pm.process_idle_timeout = 10s;
+
+; The number of requests each child process should execute before respawning.
+; This can be useful to work around memory leaks in 3rd party libraries. For
+; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
+; Default Value: 0
+;pm.max_requests = 500
+
+; The URI to view the FPM status page. If this value is not set, no URI will be
+; recognized as a status page. It shows the following informations:
+; pool - the name of the pool;
+; process manager - static, dynamic or ondemand;
+; start time - the date and time FPM has started;
+; start since - number of seconds since FPM has started;
+; accepted conn - the number of request accepted by the pool;
+; listen queue - the number of request in the queue of pending
+; connections (see backlog in listen(2));
+; max listen queue - the maximum number of requests in the queue
+; of pending connections since FPM has started;
+; listen queue len - the size of the socket queue of pending connections;
+; idle processes - the number of idle processes;
+; active processes - the number of active processes;
+; total processes - the number of idle + active processes;
+; max active processes - the maximum number of active processes since FPM
+; has started;
+; max children reached - number of times, the process limit has been reached,
+; when pm tries to start more children (works only for
+; pm 'dynamic' and 'ondemand');
+; Value are updated in real time.
+; Example output:
+; pool: www
+; process manager: static
+; start time: 01/Jul/2011:17:53:49 +0200
+; start since: 62636
+; accepted conn: 190460
+; listen queue: 0
+; max listen queue: 1
+; listen queue len: 42
+; idle processes: 4
+; active processes: 11
+; total processes: 15
+; max active processes: 12
+; max children reached: 0
+;
+; By default the status page output is formatted as text/plain. Passing either
+; 'html', 'xml' or 'json' in the query string will return the corresponding
+; output syntax. Example:
+; http://www.foo.bar/status
+; http://www.foo.bar/status?json
+; http://www.foo.bar/status?html
+; http://www.foo.bar/status?xml
+;
+; By default the status page only outputs short status. Passing 'full' in the
+; query string will also return status for each pool process.
+; Example:
+; http://www.foo.bar/status?full
+; http://www.foo.bar/status?json&full
+; http://www.foo.bar/status?html&full
+; http://www.foo.bar/status?xml&full
+; The Full status returns for each process:
+; pid - the PID of the process;
+; state - the state of the process (Idle, Running, ...);
+; start time - the date and time the process has started;
+; start since - the number of seconds since the process has started;
+; requests - the number of requests the process has served;
+; request duration - the duration in µs of the requests;
+; request method - the request method (GET, POST, ...);
+; request URI - the request URI with the query string;
+; content length - the content length of the request (only with POST);
+; user - the user (PHP_AUTH_USER) (or '-' if not set);
+; script - the main script called (or '-' if not set);
+; last request cpu - the %cpu the last request consumed
+; it's always 0 if the process is not in Idle state
+; because CPU calculation is done when the request
+; processing has terminated;
+; last request memory - the max amount of memory the last request consumed
+; it's always 0 if the process is not in Idle state
+; because memory calculation is done when the request
+; processing has terminated;
+; If the process is in Idle state, then informations are related to the
+; last request the process has served. Otherwise informations are related to
+; the current request being served.
+; Example output:
+; ************************
+; pid: 31330
+; state: Running
+; start time: 01/Jul/2011:17:53:49 +0200
+; start since: 63087
+; requests: 12808
+; request duration: 1250261
+; request method: GET
+; request URI: /test_mem.php?N=10000
+; content length: 0
+; user: -
+; script: /home/fat/web/docs/php/test_mem.php
+; last request cpu: 0.00
+; last request memory: 0
+;
+; Note: There is a real-time FPM status monitoring sample web page available
+; It's available in: /usr/share/fpm/status.html
+;
+; Note: The value must start with a leading slash (/). The value can be
+; anything, but it may not be a good idea to use the .php extension or it
+; may conflict with a real PHP file.
+; Default Value: not set
+;pm.status_path = /status
+
+; The ping URI to call the monitoring page of FPM. If this value is not set, no
+; URI will be recognized as a ping page. This could be used to test from outside
+; that FPM is alive and responding, or to
+; - create a graph of FPM availability (rrd or such);
+; - remove a server from a group if it is not responding (load balancing);
+; - trigger alerts for the operating team (24/7).
+; Note: The value must start with a leading slash (/). The value can be
+; anything, but it may not be a good idea to use the .php extension or it
+; may conflict with a real PHP file.
+; Default Value: not set
+;ping.path = /ping
+
+; This directive may be used to customize the response of a ping request. The
+; response is formatted as text/plain with a 200 response code.
+; Default Value: pong
+;ping.response = pong
+
+; The access log file
+; Default: not set
+;access.log = log/$pool.access.log
+
+; The access log format.
+; The following syntax is allowed
+; %%: the '%' character
+; %C: %CPU used by the request
+; it can accept the following format:
+; - %{user}C for user CPU only
+; - %{system}C for system CPU only
+; - %{total}C for user + system CPU (default)
+; %d: time taken to serve the request
+; it can accept the following format:
+; - %{seconds}d (default)
+; - %{miliseconds}d
+; - %{mili}d
+; - %{microseconds}d
+; - %{micro}d
+; %e: an environment variable (same as $_ENV or $_SERVER)
+; it must be associated with embraces to specify the name of the env
+; variable. Some exemples:
+; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
+; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
+; %f: script filename
+; %l: content-length of the request (for POST request only)
+; %m: request method
+; %M: peak of memory allocated by PHP
+; it can accept the following format:
+; - %{bytes}M (default)
+; - %{kilobytes}M
+; - %{kilo}M
+; - %{megabytes}M
+; - %{mega}M
+; %n: pool name
+; %o: ouput header
+; it must be associated with embraces to specify the name of the header:
+; - %{Content-Type}o
+; - %{X-Powered-By}o
+; - %{Transfert-Encoding}o
+; - ....
+; %p: PID of the child that serviced the request
+; %P: PID of the parent of the child that serviced the request
+; %q: the query string
+; %Q: the '?' character if query string exists
+; %r: the request URI (without the query string, see %q and %Q)
+; %R: remote IP address
+; %s: status (response code)
+; %t: server time the request was received
+; it can accept a strftime(3) format:
+; %d/%b/%Y:%H:%M:%S %z (default)
+; %T: time the log has been written (the request has finished)
+; it can accept a strftime(3) format:
+; %d/%b/%Y:%H:%M:%S %z (default)
+; %u: remote user
+;
+; Default: "%R - %u %t \"%m %r\" %s"
+;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
+
+; The log file for slow requests
+; Default Value: not set
+; Note: slowlog is mandatory if request_slowlog_timeout is set
+;slowlog = log/$pool.log.slow
+
+; The timeout for serving a single request after which a PHP backtrace will be
+; dumped to the 'slowlog' file. A value of '0s' means 'off'.
+; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
+; Default Value: 0
+;request_slowlog_timeout = 0
+
+; The timeout for serving a single request after which the worker process will
+; be killed. This option should be used when the 'max_execution_time' ini option
+; does not stop script execution for some reason. A value of '0' means 'off'.
+; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
+; Default Value: 0
+;request_terminate_timeout = 0
+
+; Set open file descriptor rlimit.
+; Default Value: system defined value
+;rlimit_files = 1024
+
+; Set max core size rlimit.
+; Possible Values: 'unlimited' or an integer greater or equal to 0
+; Default Value: system defined value
+;rlimit_core = 0
+
+; Chroot to this directory at the start. This value must be defined as an
+; absolute path. When this value is not set, chroot is not used.
+; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
+; of its subdirectories. If the pool prefix is not set, the global prefix
+; will be used instead.
+; Note: chrooting is a great security feature and should be used whenever
+; possible. However, all PHP paths will be relative to the chroot
+; (error_log, sessions.save_path, ...).
+; Default Value: not set
+;chroot =
+
+; Chdir to this directory at the start.
+; Note: relative path can be used.
+; Default Value: current directory or / when chroot
+;chdir = /var/www
+
+; Redirect worker stdout and stderr into main error log. If not set, stdout and
+; stderr will be redirected to /dev/null according to FastCGI specs.
+; Note: on highloaded environement, this can cause some delay in the page
+; process time (several ms).
+; Default Value: no
+;catch_workers_output = yes
+
+; Limits the extensions of the main script FPM will allow to parse. This can
+; prevent configuration mistakes on the web server side. You should only limit
+; FPM to .php extensions to prevent malicious users to use other extensions to
+; exectute php code.
+; Note: set an empty value to allow all extensions.
+; Default Value: .php
+;security.limit_extensions = .php .php3 .php4 .php5
+
+; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
+; the current environment.
+; Default Value: clean env
+;env[HOSTNAME] = $HOSTNAME
+;env[PATH] = /usr/local/bin:/usr/bin:/bin
+;env[TMP] = /tmp
+;env[TMPDIR] = /tmp
+;env[TEMP] = /tmp
+
+; Additional php.ini defines, specific to this pool of workers. These settings
+; overwrite the values previously defined in the php.ini. The directives are the
+; same as the PHP SAPI:
+; php_value/php_flag - you can set classic ini defines which can
+; be overwritten from PHP call 'ini_set'.
+; php_admin_value/php_admin_flag - these directives won't be overwritten by
+; PHP call 'ini_set'
+; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
+
+; Defining 'extension' will load the corresponding shared extension from
+; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
+; overwrite previously defined php.ini values, but will append the new value
+; instead.
+
+; Note: path INI options can be relative and will be expanded with the prefix
+; (pool, global or /usr)
+
+; Default Value: nothing is defined by default except the values in php.ini and
+; specified at startup with the -d argument
+;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
+;php_flag[display_errors] = off
+;php_admin_value[error_log] = /var/log/fpm-php.www.log
+;php_admin_flag[log_errors] = on
+;php_admin_value[memory_limit] = 32M
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.service b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.service
new file mode 100644
index 000000000..ac79dc931
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php-fpm.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=PHP-FPM
+After=network.target
+[Service]
+Type=forking
+PIDFile=@LOCALSTATEDIR@/run/php-fpm.pid
+ExecStart=@SYSCONFDIR@/init.d/php-fpm start
+ExecStop=@SYSCONFDIR@/init.d/php-fpm stop
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-0001-opcache-config.m4-enable-opcache.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-0001-opcache-config.m4-enable-opcache.patch
new file mode 100644
index 000000000..7be67ea94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-0001-opcache-config.m4-enable-opcache.patch
@@ -0,0 +1,387 @@
+From fafcfac0933c17e1bf551600080eb0541186caf5 Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Mon, 2 Apr 2018 17:54:52 +0800
+Subject: [PATCH] opcache/config.m4: enable opcache
+
+We can't use AC_TRY_RUN to run programs in a cross compile environment. Set
+the variables directly instead since we know that we'd be running on latest
+enough linux kernel.
+
+Upstream-Status: Inappropriate [Configuration]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+%% original patch: php5-0001-opcache-config.m4-enable-opcache.patch
+---
+ ext/opcache/config.m4 | 349 ++------------------------------------------------
+ 1 file changed, 8 insertions(+), 341 deletions(-)
+
+diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4
+index 5a8b86c..6e87fa5 100644
+--- a/ext/opcache/config.m4
++++ b/ext/opcache/config.m4
+@@ -11,353 +11,20 @@ if test "$PHP_OPCACHE" != "no"; then
+ AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function])
+ ])
+
+- AC_MSG_CHECKING(for sysvipc shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/ipc.h>
+-#include <sys/shm.h>
+-#include <unistd.h>
+-#include <string.h>
++ AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
+
+-int main() {
+- pid_t pid;
+- int status;
+- int ipc_id;
+- char *shm;
+- struct shmid_ds shmbuf;
++ AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
+
+- ipc_id = shmget(IPC_PRIVATE, 4096, (IPC_CREAT | SHM_R | SHM_W));
+- if (ipc_id == -1) {
+- return 1;
+- }
++ AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
+
+- shm = shmat(ipc_id, NULL, 0);
+- if (shm == (void *)-1) {
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 2;
+- }
+-
+- if (shmctl(ipc_id, IPC_STAT, &shmbuf) != 0) {
+- shmdt(shm);
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 3;
+- }
+-
+- shmbuf.shm_perm.uid = getuid();
+- shmbuf.shm_perm.gid = getgid();
+- shmbuf.shm_perm.mode = 0600;
+-
+- if (shmctl(ipc_id, IPC_SET, &shmbuf) != 0) {
+- shmdt(shm);
+- shmctl(ipc_id, IPC_RMID, NULL);
+- return 4;
+- }
+-
+- shmctl(ipc_id, IPC_RMID, NULL);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <unistd.h>
+-#include <string.h>
+-
+-#ifndef MAP_ANON
+-# ifdef MAP_ANONYMOUS
+-# define MAP_ANON MAP_ANONYMOUS
+-# endif
+-#endif
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- char *shm;
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
+- if (shm == MAP_FAILED) {
+- return 1;
+- }
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+-
+- fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 1;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 2;
+- }
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+- AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+- char tmpname[4096];
+-
+- sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
+- if (mktemp(tmpname) == NULL) {
+- return 1;
+- }
+- fd = shm_open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 2;
+- }
+- if (ftruncate(fd, 4096) < 0) {
+- close(fd);
+- shm_unlink(tmpname);
+- return 3;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 4;
+- }
+- shm_unlink(tmpname);
+- close(fd);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
++ AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
+
+ AC_MSG_CHECKING(for mmap() using regular file shared memory support)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-#ifndef MAP_FAILED
+-# define MAP_FAILED ((void*)-1)
+-#endif
+-
+-int main() {
+- pid_t pid;
+- int status;
+- int fd;
+- char *shm;
+- char tmpname[4096];
+-
+- sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
+- if (mktemp(tmpname) == NULL) {
+- return 1;
+- }
+- fd = open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
+- if (fd == -1) {
+- return 2;
+- }
+- if (ftruncate(fd, 4096) < 0) {
+- close(fd);
+- unlink(tmpname);
+- return 3;
+- }
+-
+- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+- if (shm == MAP_FAILED) {
+- return 4;
+- }
+- unlink(tmpname);
+- close(fd);
+-
+- strcpy(shm, "hello");
+-
+- pid = fork();
+- if (pid < 0) {
+- return 5;
+- } else if (pid == 0) {
+- strcpy(shm, "bye");
+- return 6;
+- }
+- if (wait(&status) != pid) {
+- return 7;
+- }
+- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
+- return 8;
+- }
+- if (strcmp(shm, "bye") != 0) {
+- return 9;
+- }
+- return 0;
+-}
+-],dnl
+- AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
+- msg=yes,msg=no,msg=no)
+- AC_MSG_RESULT([$msg])
+-
+-flock_type=unknown
+-AC_MSG_CHECKING("whether flock struct is linux ordered")
+-AC_TRY_RUN([
+- #include <fcntl.h>
+- struct flock lock = { 1, 2, 3, 4, 5 };
+- int main() {
+- if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 3 && lock.l_len == 4) {
+- return 0;
+- }
+- return 1;
+- }
+-], [
+- flock_type=linux
+- AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
+- AC_MSG_RESULT("yes")
+-], AC_MSG_RESULT("no") )
++
++ AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
+
+-AC_MSG_CHECKING("whether flock struct is BSD ordered")
+-AC_TRY_RUN([
+- #include <fcntl.h>
+- struct flock lock = { 1, 2, 3, 4, 5 };
+- int main() {
+- if(lock.l_start == 1 && lock.l_len == 2 && lock.l_type == 4 && lock.l_whence == 5) {
+- return 0;
+- }
+- return 1;
+- }
+-], [
+- flock_type=bsd
+- AC_DEFINE([HAVE_FLOCK_BSD], [], [Struct flock is BSD-type])
+- AC_MSG_RESULT("yes")
+-], AC_MSG_RESULT("no") )
++ flock_type=linux
++ AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
+
+ if test "$flock_type" = "unknown"; then
+ AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch
new file mode 100644
index 000000000..1d21f8c56
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch
@@ -0,0 +1,63 @@
+From 5f49987e88dfcbdb84be6e0c9025432fbd998709 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Thu, 20 Aug 2015 16:29:35 +0800
+Subject: [PATCH] config.m4: change AC_TRY_RUN to AC_TRY_LINK
+
+Upstream-Status: Pending
+
+AC_TRY_RUN is not suitable for cross-compile
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+%% original patch: change-AC_TRY_RUN-to-AC_TRY_LINK.patch
+
+%% original patch: php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch
+---
+ ext/fileinfo/config.m4 | 31 ++++++-------------------------
+ 1 file changed, 6 insertions(+), 25 deletions(-)
+
+diff --git a/ext/fileinfo/config.m4 b/ext/fileinfo/config.m4
+index 7e98d62..8a8ea0e 100644
+--- a/ext/fileinfo/config.m4
++++ b/ext/fileinfo/config.m4
+@@ -14,31 +14,12 @@ if test "$PHP_FILEINFO" != "no"; then
+ libmagic/readcdf.c libmagic/softmagic.c"
+
+ AC_MSG_CHECKING([for strcasestr])
+- AC_TRY_RUN([
+-#include <string.h>
+-#include <strings.h>
+-#include <stdlib.h>
+-
+-int main(void)
+-{
+- char *s0, *s1, *ret;
+-
+- s0 = (char *) malloc(42);
+- s1 = (char *) malloc(8);
+-
+- memset(s0, 'X', 42);
+- s0[24] = 'Y';
+- s0[26] = 'Z';
+- s0[41] = '\0';
+- memset(s1, 'x', 8);
+- s1[0] = 'y';
+- s1[2] = 'Z';
+- s1[7] = '\0';
+-
+- ret = strcasestr(s0, s1);
+-
+- return !(NULL != ret);
+-}
++ AC_TRY_COMPILE([
++ #include <string.h>
++ #include <strings.h>
++ #include <stdlib.h>
++ ],[
++ strcasestr(NULL, NULL);
+ ],[
+ dnl using the platform implementation
+ AC_MSG_RESULT(yes)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-pear-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-pear-makefile.patch
new file mode 100644
index 000000000..cff6426ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-pear-makefile.patch
@@ -0,0 +1,26 @@
+From 79725e82d5981fc94eb657f0f46a499dbfc1cc40 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Upstream-status: Unknown
+
+%% original patch: php5-pear-makefile.patch
+---
+ pear/Makefile.frag | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pear/Makefile.frag b/pear/Makefile.frag
+index 00bacae..739eeca 100644
+--- a/pear/Makefile.frag
++++ b/pear/Makefile.frag
+@@ -11,7 +11,7 @@ PEAR_PREFIX = -dp a${program_prefix}
+ PEAR_SUFFIX = -ds a$(program_suffix)
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-phar-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-phar-makefile.patch
new file mode 100644
index 000000000..4e1efd40c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php5-phar-makefile.patch
@@ -0,0 +1,46 @@
+From 3ea626a8d081f56b01004b7992534d4e6b81a9cc Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Fix phar packaging
+
+Inherited from OE-Classic, with some additions to fix host paths leaking
+into the target package.
+
+Upstream-Status: Inappropriate [config]
+
+%% original patch: php5-phar-makefile.patch
+---
+ ext/phar/Makefile.frag | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
+
+diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag
+index b8b1b42..1005b2d 100644
+--- a/ext/phar/Makefile.frag
++++ b/ext/phar/Makefile.frag
+@@ -5,20 +5,9 @@ pharcmd: $(builddir)/phar.php $(builddir)/phar.phar
+
+ PHP_PHARCMD_SETTINGS = -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' -d phar.readonly=0 -d 'safe_mode=0'
+ PHP_PHARCMD_EXECUTABLE = ` \
+- if test -x "$(top_builddir)/$(SAPI_CLI_PATH)"; then \
+- $(top_srcdir)/build/shtool echo -n -- "$(top_builddir)/$(SAPI_CLI_PATH) -n"; \
+- if test "x$(PHP_MODULES)" != "x"; then \
+- $(top_srcdir)/build/shtool echo -n -- " -d extension_dir=$(top_builddir)/modules"; \
+- for i in bz2 zlib phar; do \
+- if test -f "$(top_builddir)/modules/$$i.la"; then \
+- . $(top_builddir)/modules/$$i.la; $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; \
+- fi; \
+- done; \
+- fi; \
+- else \
+- $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; \
+- fi;`
+-PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(INSTALL_ROOT)$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
++ $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; `
++
++PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
+
+ $(builddir)/phar/phar.inc: $(srcdir)/phar/phar.inc
+ -@test -d $(builddir)/phar || mkdir $(builddir)/phar
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch
new file mode 100644
index 000000000..6af0dc81a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch
@@ -0,0 +1,22 @@
+From d251b5aa3d23803d016ca16818e2e1d2f2b70a02 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 2 Nov 2011 16:54:57 +0100
+Subject: [PATCH] Upstream-status: Inappriate
+
+---
+ sapi/cli/config.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sapi/cli/config.m4 b/sapi/cli/config.m4
+index 2168151..20a81db 100644
+--- a/sapi/cli/config.m4
++++ b/sapi/cli/config.m4
+@@ -50,7 +50,7 @@ if test "$PHP_CLI" != "no"; then
+ esac
+
+ dnl Set executable for tests
+- PHP_EXECUTABLE="\$(top_builddir)/\$(SAPI_CLI_PATH)"
++ PHP_EXECUTABLE="${PHP_NATIVE_DIR}/php"
+ PHP_SUBST(PHP_EXECUTABLE)
+
+ dnl Expose to Makefile
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/pthread-check-threads-m4.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/pthread-check-threads-m4.patch
new file mode 100644
index 000000000..0c564cd88
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/pthread-check-threads-m4.patch
@@ -0,0 +1,30 @@
+From d8067ceacbf54e79c9c6b68675332c09eaa0b55d Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Mon, 8 Apr 2013 14:29:51 +0800
+Subject: [PATCH] pthread-check
+
+Enable pthreads support when cross-compiling
+
+Upstream-Status: Inapproprate [config]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ TSRM/threads.m4 | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/TSRM/threads.m4 b/TSRM/threads.m4
+index 38494ce..15d9454 100644
+--- a/TSRM/threads.m4
++++ b/TSRM/threads.m4
+@@ -86,7 +86,7 @@ int main() {
+ pthreads_working=no
+ ], [
+ dnl For cross compiling running this test is of no use. NetWare supports pthreads
+- pthreads_working=no
++ pthreads_working=yes
+ case $host_alias in
+ *netware*)
+ pthreads_working=yes
+--
+1.7.4.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php_5.6.35.bb b/meta-openembedded/meta-oe/recipes-devtools/php/php_5.6.35.bb
new file mode 100644
index 000000000..c17c0d6a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php_5.6.35.bb
@@ -0,0 +1,23 @@
+require php.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b602636d46a61c0ac0432bbf5c078fe4"
+
+SRC_URI += "file://php5-change-AC_TRY_RUN-to-AC_TRY_LINK.patch \
+ file://pthread-check-threads-m4.patch \
+ file://0001-Add-lpthread-to-link.patch \
+ file://acinclude-xml2-config.patch \
+ file://0001-acinclude-use-pkgconfig-for-libxml2-config.patch \
+ "
+
+SRC_URI_append_class-target = " \
+ file://php5-pear-makefile.patch \
+ file://php5-phar-makefile.patch \
+ file://php5-0001-opcache-config.m4-enable-opcache.patch \
+ "
+
+SRC_URI[md5sum] = "905ae5f586351f3ca29d044c9484d475"
+SRC_URI[sha256sum] = "ee78a7e9ca21d8ea394d037c55effff477a49dbae31c7753c547036f5bd73b92"
+
+DEPENDS += "libmcrypt"
+EXTRA_OECONF += "--with-mcrypt=${STAGING_DIR_TARGET}${exec_prefix} \
+ "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.2.4.bb b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.2.4.bb
new file mode 100644
index 000000000..2fd1e66c7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.2.4.bb
@@ -0,0 +1,24 @@
+require php.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=67e369bc8d1f2e641236b8002039a6a2"
+
+SRC_URI += "file://change-AC_TRY_RUN-to-AC_TRY_LINK.patch \
+ file://0001-acinclude.m4-skip-binconfig-check-for-libxml.patch \
+ file://0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch \
+ file://0001-fix-error-caused-by-a-new-variable-is-declared-after.patch \
+ "
+SRC_URI_append_class-target = " \
+ file://pear-makefile.patch \
+ file://phar-makefile.patch \
+ file://0001-opcache-config.m4-enable-opcache.patch \
+ "
+
+SRC_URI[md5sum] = "864c64ffd2f1686b035ef8ce6a6d8478"
+SRC_URI[sha256sum] = "11658a0d764dc94023b9fb60d4b5eb75d438ad17981efe70abb0d0d09a447ef3"
+
+PACKAGECONFIG[mysql] = "--with-mysqli=${STAGING_BINDIR_CROSS}/mysql_config \
+ --with-pdo-mysql=${STAGING_BINDIR_CROSS}/mysql_config \
+ ,--without-mysqli --without-pdo-mysql \
+ ,mysql5"
+
+FILES_${PN}-fpm += "${sysconfdir}/php-fpm.d/www.conf.default"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch
new file mode 100644
index 000000000..7ccdab0f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch
@@ -0,0 +1,66 @@
+From 03a886252f6555d6b0af76b654e76459642b89da Mon Sep 17 00:00:00 2001
+From: Yunguo Wei <yunguo.wei@windriver.com>
+Date: Tue, 3 Dec 2013 18:12:50 +0800
+Subject: [PATCH] pmtools: switch to dynamic buffer for huge ACPI tables
+
+For servers like Canoe Pass or Thunder Ridge, there are much more
+entries in ACPI table, so original 1K buffer is insufficient.
+
+We switch to dynamic buffer on this situation.
+
+Signed-off-by: Yunguo Wei <yunguo.wei@windriver.com>
+
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ madt/madt.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/madt/madt.c b/madt/madt.c
+index aed965c..8770cd5 100644
+--- a/madt/madt.c
++++ b/madt/madt.c
+@@ -51,7 +51,9 @@ get_next_entry(acpi_table_entry_header * entry_header)
+ return retval;
+ }
+
+-u8 buffer[1024];
++
++u8 buf[1024];
++u8 *buffer = buf;
+
+ main()
+ {
+@@ -75,6 +77,17 @@ main()
+
+ if (verbose) printf("header.length %d\n", madt_header->header.length);
+
++ /* if 1K buffer is insufficient for acpi table, switch to a larger memory buffer */
++ if(expected_length > sizeof(buf)) {
++ buffer = malloc(expected_length);
++ if (!buffer) {
++ perror("malloc");
++ exit(1);
++ }
++ memset(buffer, 0, expected_length);
++ memcpy(buffer, buf, sizeof(struct acpi_table_madt));
++ }
++
+ acpi_table_print((void*)&(buffer[bytes_read]), 0);
+
+ bytes_read = sizeof(struct acpi_table_madt);
+@@ -118,6 +131,9 @@ done:
+ printf("Checksum 0x%x != 0; 0x%x in header ERROR\n", csum,
+ madt_header->header.checksum);
+
++ if(buffer != buf)
++ free(buffer);
++
+ return 0;
+ }
+
+--
+1.8.1.2
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools_git.bb b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools_git.bb
new file mode 100644
index 000000000..8491fc904
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools_git.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "This is a small collection of power management \
+ test and investigation tools"
+HOMEPAGE = "http://lesswatts.org/projects/acpi"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+PV = "20130209+git${SRCPV}"
+
+SRC_URI = "git://github.com/anyc/pmtools.git \
+ file://pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch \
+"
+SRCREV = "3ebe0e54c54061b4c627236cbe35d820de2e1168"
+
+COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
+
+S = "${WORKDIR}/git"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE_${PN} = "acpixtract"
+
+do_configure[noexec] = "1"
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir} ${D}${docdir}
+ install -m 755 ${S}/acpidump/acpidump ${D}${bindir}
+ install -m 755 ${S}/acpixtract/acpixtract ${D}${bindir}
+ install -m 755 ${S}/madt/madt ${D}${bindir}
+ install -m 644 ${S}/README ${D}${docdir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb
new file mode 100644
index 000000000..fe1e6e5fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Protocol Buffers - structured data serialisation mechanism"
+DESCRIPTION = "This is protobuf-c, a C implementation of the Google Protocol Buffers data \
+serialization format. It includes libprotobuf-c, a pure C library that \
+implements protobuf encoding and decoding, and protoc-c, a code generator that \
+converts Protocol Buffer .proto files to C descriptor code, based on the \
+original protoc. protobuf-c formerly included an RPC implementation; that code \
+has been split out into the protobuf-c-rpc project."
+HOMEPAGE = "https://github.com/protobuf-c/protobuf-c"
+SECTION = "console/tools"
+LICENSE = "BSD-2-Clause"
+
+DEPENDS = "protobuf-native protobuf"
+
+PACKAGE_BEFORE_PN = "${PN}-compiler"
+RDEPENDS_${PN}-compiler = "protobuf-compiler"
+RDEPENDS_${PN}-dev += "${PN}-compiler"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cb901168715f4782a2b06c3ddaefa558"
+
+PV .= "+git${SRCPV}"
+SRCREV = "dac1a65feac4ad72f612aab99f487056fbcf5c1a"
+
+SRC_URI = "git://github.com/protobuf-c/protobuf-c.git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN}-compiler = "${bindir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/run-ptest
new file mode 100644
index 000000000..7c3a8d1b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/run-ptest
@@ -0,0 +1,38 @@
+#!/bin/bash
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+TEST_FILE="/tmp/test.data"
+
+RETVAL=0
+# Test every writing test application
+for write_exe_full_path in ${DIR}/add_person_*; do
+ if [ -x "${write_exe_full_path}" ]; then
+ write_exe=`basename ${write_exe_full_path}`
+ echo "Generating new test file using ${write_exe}..."
+ ${write_exe_full_path} "${TEST_FILE}"
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] || exit $RETVAL
+
+ # Test every reading test application
+ for read_exe_full_path in ${DIR}/list_people_*; do
+ read_exe=`basename ${read_exe_full_path}`
+ echo "Test: Write with ${write_exe}; Read with ${read_exe}..."
+ if [ -x "${read_exe_full_path}" ]; then
+ ${read_exe_full_path} "${TEST_FILE}"
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] || exit $RETVAL
+ fi
+ done
+
+ # Cleanup...
+ if [ -e "${TEST_FILE}" ]; then
+ rm "${TEST_FILE}"
+ fi
+ fi
+done
+
+if [ $RETVAL -eq 0 ] ; then
+ echo "PASS: protobuf"
+else
+ echo "FAIL: protobuf"
+fi
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.5.1.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.5.1.bb
new file mode 100644
index 000000000..1ffb79da7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.5.1.bb
@@ -0,0 +1,84 @@
+SUMMARY = "Protocol Buffers - structured data serialisation mechanism"
+DESCRIPTION = "Protocol Buffers are a way of encoding structured data in an \
+efficient yet extensible format. Google uses Protocol Buffers for almost \
+all of its internal RPC protocols and file formats."
+HOMEPAGE = "https://github.com/google/protobuf"
+SECTION = "console/tools"
+LICENSE = "BSD-3-Clause"
+
+PACKAGE_BEFORE_PN = "${PN}-compiler ${PN}-lite"
+
+DEPENDS = "zlib"
+DEPENDS_append_class-target = " protobuf-native"
+RDEPENDS_${PN}-compiler = "${PN}"
+RDEPENDS_${PN}-dev += "${PN}-compiler"
+RDEPENDS_${PN}-ptest = "bash python-protobuf"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=35953c752efc9299b184f91bef540095"
+
+SRCREV = "106ffc04be1abf3ff3399f54ccf149815b287dd9"
+
+PV = "3.5.1+git${SRCPV}"
+
+SRC_URI = "git://github.com/google/protobuf.git;branch=3.5.x \
+ file://run-ptest \
+ "
+
+EXTRA_OECONF += " --with-protoc=echo"
+
+inherit autotools-brokensep pkgconfig ptest
+
+S = "${WORKDIR}/git"
+TEST_SRC_DIR="examples"
+LANG_SUPPORT="cpp python"
+
+do_compile_ptest() {
+ # Modify makefile to use the cross-compiler
+ sed -e "s|c++|${CXX} \$(LDFLAGS)|g" -i "${S}/${TEST_SRC_DIR}/Makefile"
+
+ mkdir -p "${B}/${TEST_SRC_DIR}"
+
+ # Add the location of the cross-compiled header and library files
+ # which haven't been installed yet.
+ cp "${B}/protobuf.pc" "${B}/${TEST_SRC_DIR}/protobuf.pc"
+ sed -e 's|libdir=|libdir=${PKG_CONFIG_SYSROOT_DIR}|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+ sed -e 's|Cflags:|Cflags: -I${S}/src|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+ sed -e 's|Libs:|Libs: -L${B}/src/.libs|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+ export PKG_CONFIG_PATH="${B}/${TEST_SRC_DIR}"
+
+ # Save the pkgcfg sysroot variable, and update it to nothing so
+ # that it doesn't append the sysroot to the beginning of paths.
+ # The header and library files aren't installed to the target
+ # system yet. So the absolute paths were specified above.
+ save_pkg_config_sysroot_dir=$PKG_CONFIG_SYSROOT_DIR
+ export PKG_CONFIG_SYSROOT_DIR=
+
+ # Compile the tests
+ for lang in ${LANG_SUPPORT}; do
+ oe_runmake -C "${S}/${TEST_SRC_DIR}" ${lang}
+ done
+
+ # Restore the pkgconfig sysroot variable
+ export PKG_CONFIG_SYSROOT_DIR=$save_pkg_config_sysroot_dir
+}
+
+do_install_ptest() {
+ local olddir=`pwd`
+
+ cd "${S}/${TEST_SRC_DIR}"
+ install -d "${D}/${PTEST_PATH}"
+ for i in add_person* list_people*; do
+ if [ -x "$i" ]; then
+ install "$i" "${D}/${PTEST_PATH}"
+ fi
+ done
+ cp "${S}/${TEST_SRC_DIR}/addressbook_pb2.py" "${D}/${PTEST_PATH}"
+ cd "$olddir"
+}
+
+FILES_${PN}-compiler = "${bindir} ${libdir}/libprotoc${SOLIBS}"
+FILES_${PN}-lite = "${bindir} ${libdir}/libprotobuf-lite${SOLIBS}"
+
+MIPS_INSTRUCTION_SET = "mips"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.5.7.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.5.7.bb
new file mode 100644
index 000000000..156e52a3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.5.7.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Cpuset is a Python application to make using the cpusets facilities in the Linux kernel easier"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+S = "${WORKDIR}/git"
+SRCREV = "ae629aa1dc959342745ad97406adddf63bb6dbdd"
+SRC_URI = "git://github.com/lpechacek/cpuset.git;protocol=https;"
+
+inherit distutils
+
+RDEPENDS_${PN} = "\
+ python-core \
+ python-re \
+ python-logging \
+ python-textutils \
+ python-unixadmin \
+ "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb
new file mode 100644
index 000000000..56dd33d7f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb
@@ -0,0 +1,9 @@
+require python-distutils-extra.inc
+
+inherit setuptools
+
+DISTUTILS_INSTALL_ARGS += "--install-lib=${libdir}/${PYTHON_DIR}/site-packages"
+
+RDEPENDS_${PN} = "\
+ python-distutils \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.inc b/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.inc
new file mode 100644
index 000000000..4d87d77cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.inc
@@ -0,0 +1,13 @@
+SUMMARY = "python-distutils extension"
+DESCRITION = "python-distutils extension integrating gettext support, themed icons and scrollkeeper based documentation"
+HOMEPAGE = "https://launchpad.net/python-distutils-extra"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4325afd396febcb659c36b49533135d4"
+
+PV = "2.39"
+SRC_URI = "https://launchpad.net/python-distutils-extra/trunk/${PV}/+download/python-distutils-extra-${PV}.tar.gz"
+SRC_URI[md5sum] = "16e06db0ef73a35b4bff4b9eed5699b5"
+SRC_URI[sha256sum] = "723f24f4d65fc8d99b33a002fbbb3771d4cc9d664c97085bf37f3997ae8063af"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.2.0.bb
new file mode 100644
index 000000000..3ee945fc9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.2.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "The concurrent.futures module provides a high-level interface for asynchronously executing callables."
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=834d982f973c48b6d662b5944c5ab567"
+HOMEPAGE = "https://github.com/agronholm/pythonfutures"
+DEPENDS = "python"
+
+SRC_URI[md5sum] = "d1b299a06b96ccb59f70324716dc0016"
+SRC_URI[sha256sum] = "9ec02aa7d674acb8618afb127e27fde7fc68994c0437ad759fa094a574adb265"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch
new file mode 100644
index 000000000..9a11442f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch
@@ -0,0 +1,28 @@
+From 5e5350d730f85957a42c6d846d347d080e7dd996 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 23 Oct 2015 12:40:34 +0300
+Subject: [PATCH] configure.ac: add sysroot path to GI_DATADIR; don't set
+ introspection scanner and compiler paths
+
+Upstream-Status: Pending [review on oe-core maillist]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ configure.ac | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2c0cfbd..cfcb3bf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -155,7 +155,7 @@ PKG_CHECK_MODULES(GI,
+
+ GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
+
+-GI_DATADIR=$($PKG_CONFIG --variable=gidatadir gobject-introspection-1.0)
++GI_DATADIR=$PKG_CONFIG_SYSROOT_DIR$($PKG_CONFIG --variable=gidatadir gobject-introspection-1.0)
+ AC_SUBST(GI_DATADIR)
+
+ if test "$enable_cairo" != no; then
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.28.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.28.0.bb
new file mode 100644
index 000000000..ab65ba1dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.28.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Python GObject bindings"
+HOMEPAGE = "http://www.pygtk.org/"
+SECTION = "devel/python"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+inherit autotools pkgconfig gnomebase distutils-base gobject-introspection
+
+PYTHON_BASEVERSION = "2.7"
+PYTHON_PN = "python"
+
+DEPENDS += "gnome-common-native python glib-2.0"
+
+SRCNAME="pygobject"
+SRC_URI = " \
+ http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz \
+ file://0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch \
+"
+
+SRC_URI[md5sum] = "b29d69edb63ae1f555afeb19f90b9996"
+SRC_URI[sha256sum] = "42b47b261b45aedfc77e02e3c90a01cd74d6f86c3273c1860a054d531d606e5a"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+BBCLASSEXTEND = "native"
+
+EXTRA_OECONF = "--disable-cairo --with-python=${PYTHON}"
+
+RDEPENDS_${PN} += "python-setuptools"
+RDEPENDS_${PN}_class-native = ""
+
+do_install_append() {
+ # Remove files that clash with python3-pygobject; their content is same
+ rm -rf ${D}${includedir}/pygobject-3.0//pygobject.h ${D}${libdir}/pkgconfig
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python3-distutils-extra.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python3-distutils-extra.bb
new file mode 100644
index 000000000..af242b850
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/python/python3-distutils-extra.bb
@@ -0,0 +1,11 @@
+require python-distutils-extra.inc
+
+inherit setuptools3
+
+S = "${WORKDIR}/python-distutils-extra-${PV}"
+
+DISTUTILS_INSTALL_ARGS += "--install-lib=${libdir}/${PYTHON_DIR}/site-packages"
+
+RDEPENDS_${PN} = "\
+ python3-setuptools \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson/remove-march-native-from-CMAKE_CXX_FLAGS.patch b/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson/remove-march-native-from-CMAKE_CXX_FLAGS.patch
new file mode 100644
index 000000000..cf3e16ea5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson/remove-march-native-from-CMAKE_CXX_FLAGS.patch
@@ -0,0 +1,40 @@
+From 827155e5e659b2a5065b00d701bc59b57feab2bf Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Mon, 19 Dec 2016 01:37:11 -0800
+Subject: [PATCH] remove -march=native from CMAKE_CXX_FLAGS
+
+Not appropriate when cross compiling.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: git/CMakeLists.txt
+===================================================================
+--- git.orig/CMakeLists.txt
++++ git/CMakeLists.txt
+@@ -51,10 +51,10 @@ endif(CCACHE_FOUND)
+
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64le")
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ else()
+ #FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ endif()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
+ set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wsign-conversion)
+@@ -84,7 +84,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "C
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
+ else()
+ #FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ endif()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-missing-field-initializers")
+ set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough -Weverything)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson_git.bb b/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson_git.bb
new file mode 100644
index 000000000..8ab35d224
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/rapidjson/rapidjson_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A fast JSON parser/generator for C++ with both SAX/DOM style API"
+HOMEPAGE = "http://rapidjson.org/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://license.txt;md5=ba04aa8f65de1396a7e59d1d746c2125"
+
+SRC_URI = "git://github.com/miloyip/rapidjson.git;nobranch=1 \
+ file://remove-march-native-from-CMAKE_CXX_FLAGS.patch \
+"
+
+SRCREV = "e5635fb27feab7f6e8d7b916aa20ad799045a641"
+
+PV = "1.1.0+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE += "-DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF"
+
+# RapidJSON is a header-only C++ library, so the main package will be empty.
+
+FILES_${PN}-dev += "${libdir}/cmake"
+RDEPENDS_${PN}-dev = ""
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
new file mode 100644
index 000000000..f69254a29
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
@@ -0,0 +1,81 @@
+From 059d5512e840fe68e2bb37add6c9208fa9c34d15 Mon Sep 17 00:00:00 2001
+From: Sekhar Nori <nsekhar@ti.com>
+Date: Tue, 24 Feb 2015 22:16:37 +0530
+Subject: [PATCH 1/2] Add option to enable internal loopback
+
+Upstream-status: Pending
+---
+ serialcheck.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/serialcheck.c b/serialcheck.c
+index 4f5b747..4100c37 100644
+--- a/serialcheck.c
++++ b/serialcheck.c
+@@ -12,6 +12,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/serial.h>
+
++#define TIOCM_LOOP 0x8000
++
+ #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
+ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
+ #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
+@@ -40,6 +42,7 @@ struct g_opt {
+ unsigned char hflow;
+ unsigned char do_termios;
+ unsigned char *cmp_buff;
++ unsigned char loopback;
+ };
+
+ /* name, key, arg, flags, doc, group */
+@@ -51,6 +54,7 @@ static struct argp_option options[] = {
+ {"mode", 'm', "M", 0, "transfer mode (d = duplex, t = send r = receive)", 0},
+ {"loops", 'l', "NUM", 0, "loops to perform (0 => wait fot CTRL-C", 0},
+ {"no-termios", 'n', NULL, 0, "No termios change (baud rate etc. remains unchanged)", 0},
++ {"loopback", 'k', NULL, 0, "loopback mode", 0},
+ {NULL, 0, NULL, 0, NULL, 0}
+ };
+
+@@ -67,6 +71,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
+ go->baudrate = 115200;
+ go->loops = UINT_MAX;
+ go->do_termios = 1;
++ go->loopback = 0;
+ break;
+ case ARGP_KEY_ARG:
+ ret = ARGP_ERR_UNKNOWN;
+@@ -113,6 +118,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
+ } else
+ go->loops = num;
+ break;
++ case 'k':
++ go->loopback = 1;
++ break;
+ default:
+ ret = ARGP_ERR_UNKNOWN;
+ }
+@@ -487,6 +495,21 @@ int main(int argc, char *argv[])
+ die("tcflush failed: %m\n");
+ }
+
++ if (opts.loopback) {
++ unsigned int mcr;
++
++ ret = ioctl(fd, TIOCMGET, &mcr);
++ if (ret < 0)
++ die("mcr get failed: %m\n");
++
++ mcr |= TIOCM_LOOP;
++
++ ret = ioctl(fd, TIOCMSET, &mcr);
++ if (ret < 0)
++ die ("mcr set failed: %m\n");
++
++ }
++
+ ret = fcntl(fd, F_SETFL, 0);
+ if (ret)
+ printf("Failed to remove nonblock mode\n");
+--
+1.9.1
diff --git a/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Makefile-Change-order-of-link-flags.patch b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Makefile-Change-order-of-link-flags.patch
new file mode 100644
index 000000000..2ab48345d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Makefile-Change-order-of-link-flags.patch
@@ -0,0 +1,34 @@
+From efc8a4e717ba919c869c2da1c7de2d08bc976926 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 24 Feb 2016 18:48:07 +0000
+Subject: [PATCH] Makefile: Change order of link flags
+
+This helps in injectcting LDFLAGS from env to take effect
+as it appears last on cmdline now
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ Makefile | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index ba2bfbb..6d13e68 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,3 +1,9 @@
+-CFLAGS=-O2 -Wall -Wextra -g -Wno-sign-compare -Wno-pointer-sign
+-CC=gcc
++CFLAGS?=-O2 -Wall -Wextra -g -Wno-sign-compare -Wno-pointer-sign
++CC?=gcc
+ all: serialcheck
++serialcheck : serialcheck.o
++ $(CC) -o serialcheck serialcheck.o $(CFLAGS) $(LDFLAGS)
++
++%.o : %.c
++ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
++
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
new file mode 100644
index 000000000..1b8c95b10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
@@ -0,0 +1,49 @@
+From a6e5813d2f8402bf3a311c8bcda02623bfb76882 Mon Sep 17 00:00:00 2001
+From: Carlos Hernandez <ceh@ti.com>
+Date: Tue, 24 Feb 2015 16:00:34 -0500
+Subject: [PATCH 2/2] Restore original loopback config
+
+If loopback option is enabled, disable it at the end of the test.
+
+Signed-off-by: Carlos Hernandez <ceh@ti.com>
+Upstream-status: Pending
+---
+ serialcheck.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/serialcheck.c b/serialcheck.c
+index 4100c37..06470f7 100644
+--- a/serialcheck.c
++++ b/serialcheck.c
+@@ -427,6 +427,7 @@ int main(int argc, char *argv[])
+ unsigned char *data;
+ unsigned int open_mode;
+ off_t data_len;
++ unsigned int mcr;
+
+ argp_parse(&argp, argc, argv, 0, NULL, &opts);
+ if (!opts.file_trans)
+@@ -496,8 +497,6 @@ int main(int argc, char *argv[])
+ }
+
+ if (opts.loopback) {
+- unsigned int mcr;
+-
+ ret = ioctl(fd, TIOCMGET, &mcr);
+ if (ret < 0)
+ die("mcr get failed: %m\n");
+@@ -535,6 +534,12 @@ int main(int argc, char *argv[])
+ ret = tcsetattr(fd, TCSAFLUSH, &old_term);
+ if (ret)
+ printf("tcsetattr() of old ones failed: %m\n");
++ if (opts.loopback) {
++ mcr &= ~(TIOCM_LOOP);
++ ret = ioctl(fd, TIOCMSET, &mcr);
++ }
++ if (ret)
++ printf("disabling loopback failed: %m\n");
+
+ close(fd);
+ return status;
+--
+1.9.1
diff --git a/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb
new file mode 100644
index 000000000..cd5e0a4e5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Application to verify operation of serial ports"
+HOMEPAGE = "http://git.breakpoint.cc/cgit/bigeasy/serialcheck.git/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://git.breakpoint.cc/bigeasy/serialcheck.git \
+ file://0001-Add-option-to-enable-internal-loopback.patch \
+ file://0002-Restore-original-loopback-config.patch \
+ file://0001-Makefile-Change-order-of-link-flags.patch \
+ "
+
+SRCREV = "63854a2d0c0129efab132ec328a75279e013fb84"
+
+S = "${WORKDIR}/git"
+
+DEPENDS_append_libc-musl = " argp-standalone"
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+CFLAGS_prepend = "-Wall -Wextra -Wno-sign-compare -Wno-pointer-sign "
+LDFLAGS_append_libc-musl = " -largp"
+
+do_install() {
+ install -d ${D}${bindir}
+ install ${S}/serialcheck ${D}${bindir}
+ install -d ${D}${docdir}/${BP}
+ install ${S}/Readme.txt ${D}${docdir}/${BP}
+}
+CLEANBROKEN = "1"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.8.bb b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.8.bb
new file mode 100644
index 000000000..ea944b32f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.8.bb
@@ -0,0 +1,42 @@
+SUMMARY = "SIP is a C++/Python Wrapper Generator"
+HOMEPAGE = "http://www.riverbankcomputing.co.uk/sip"
+SECTION = "devel"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE-GPL2;md5=e91355d8a6f8bd8f7c699d62863c7303"
+
+inherit python-dir
+
+DEPENDS = "python"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/pyqt/sip/sip-${PV}/sip-${PV}.tar.gz"
+SRC_URI[md5sum] = "0625fb20347d4ff1b5da551539be0727"
+SRC_URI[sha256sum] = "7eaf7a2ea7d4d38a56dd6d2506574464bddf7cf284c960801679942377c297bc"
+
+BBCLASSEXTEND = "native"
+
+PACKAGES += "python-sip"
+
+do_configure_prepend_class-target() {
+ echo "py_platform = linux" > sip.cfg
+ echo "py_inc_dir = %(sysroot)/${includedir}/python%(py_major).%(py_minor)" >> sip.cfg
+ echo "sip_bin_dir = ${D}/${bindir}" >> sip.cfg
+ echo "sip_inc_dir = ${D}/${includedir}" >> sip.cfg
+ echo "sip_module_dir = ${D}/${libdir}/python%(py_major).%(py_minor)/site-packages" >> sip.cfg
+ echo "sip_sip_dir = ${D}/${datadir}/sip" >> sip.cfg
+ python configure.py --configuration sip.cfg --sysroot ${STAGING_DIR_HOST} CC="${CC}" CXX="${CXX}" LINK="${CXX}" STRIP="" LINK_SHLIB="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LFLAGS="${LDFLAGS}"
+}
+do_configure_prepend_class-native() {
+ echo "py_platform = linux" > sip.cfg
+ echo "py_inc_dir = ${includedir}/python%(py_major).%(py_minor)" >> sip.cfg
+ echo "sip_bin_dir = ${D}/${bindir}" >> sip.cfg
+ echo "sip_inc_dir = ${D}/${includedir}" >> sip.cfg
+ echo "sip_module_dir = ${D}/${libdir}/python%(py_major).%(py_minor)/site-packages" >> sip.cfg
+ echo "sip_sip_dir = ${D}/${datadir}/sip" >> sip.cfg
+ python configure.py --configuration sip.cfg --sysroot ${STAGING_DIR_NATIVE}
+}
+do_install() {
+ oe_runmake install
+}
+
+FILES_python-sip = "${libdir}/${PYTHON_DIR}/site-packages/"
+FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap/Makefile.am-disable-docs.patch b/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap/Makefile.am-disable-docs.patch
new file mode 100644
index 000000000..358cbefdd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap/Makefile.am-disable-docs.patch
@@ -0,0 +1,31 @@
+From c209ed0e7ffca32fe3714bad9cc54bdb00c286bb Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28495@freescale.com>
+Date: Mon, 15 Apr 2013 16:28:37 +0800
+Subject: [PATCH] Makefile.am: disable docs
+
+Upstream-Status: Inappropriate [OE specific]
+
+docs need some generating tool (for example, doxygen) from host which may
+be not available. Disable it to avoid build issue.
+
+Signed-off-by: Ting Liu <b28495@freescale.com>
+---
+ Makefile.am | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 0a6ebc9..6b42f41 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,7 +1,7 @@
+
+ ACLOCAL_AMFLAGS = -I config
+
+-SUBDIRS = include examples docs tests msc config
++SUBDIRS = include examples tests msc config
+
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = $(PACKAGE).pc
+--
+1.7.5
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap_1.2.1.bb b/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap_1.2.1.bb
new file mode 100644
index 000000000..3eadbe45f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tclap/tclap_1.2.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Templatized C++ Command Line Parser"
+HOMEPAGE = "http://tclap.sourceforge.net/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c8ab0ff134bcc584d0e6b5b9f8732453"
+
+SRCREV = "3627d9402e529770df9b0edf2aa8c0e0d6c6bb41"
+SRC_URI = "git://git.code.sf.net/p/tclap/code \
+ file://Makefile.am-disable-docs.patch \
+"
+
+S = "${WORKDIR}/git"
+inherit autotools
+
+ALLOW_EMPTY_${PN} = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/configure.use.fontconfig.with.xft.patch b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/configure.use.fontconfig.with.xft.patch
new file mode 100644
index 000000000..a0c157f5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/configure.use.fontconfig.with.xft.patch
@@ -0,0 +1,13 @@
+--- a/configure.in.orig 2014-05-10 14:35:39.859147385 +0000
++++ b/configure.in 2014-05-10 14:36:20.282925184 +0000
+@@ -554,8 +554,8 @@
+ dnl make sure package configurator (xft-config or pkg-config
+ dnl says that xft is present.
+ found_xft=yes
+- XFT_CFLAGS=`pkg-config --cflags xft 2>/dev/null` || found_xft="no"
+- XFT_LIBS=`pkg-config --libs xft 2>/dev/null` || found_xft="no"
++ XFT_CFLAGS=`pkg-config --cflags xft fontconfig 2>/dev/null` || found_xft="no"
++ XFT_LIBS=`pkg-config --libs xft fontconfig 2>/dev/null` || found_xft="no"
+ AC_MSG_RESULT([$found_xft])
+ dnl make sure that compiling against Xft header file doesn't bomb
+ if test "$found_xft" = "yes" ; then
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/confsearch.diff b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/confsearch.diff
new file mode 100644
index 000000000..4dbd9a4f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/confsearch.diff
@@ -0,0 +1,35 @@
+Patch by Sergei Golovan allows to find tclConfig.sh in /usr/share/tcltk/tcl8.5
+and tkConfig.sh in /usr/share/tcltk/tk8.5 where they are located in Debian
+installation.
+
+--- tk8.5-8.5.8.orig/unix/configure
++++ tk8.5-8.5.8/unix/configure
+@@ -1431,7 +1431,8 @@
+ `ls -d /usr/contrib/lib 2>/dev/null` \
+ `ls -d /usr/local/lib 2>/dev/null` \
+ `ls -d /usr/pkg/lib 2>/dev/null` \
++ `ls -d /usr/share/tcltk/tcl8.5 2>/dev/null` \
+ `ls -d /usr/lib 2>/dev/null` \
+ `ls -d /usr/lib64 2>/dev/null` \
+ ; do
+ if test -f "$i/tclConfig.sh" ; then
+--- tk8.5-8.5.8.orig/unix/tcl.m4
++++ tk8.5-8.5.8/unix/tcl.m4
+@@ -93,7 +93,8 @@
+ `ls -d /usr/contrib/lib 2>/dev/null` \
+ `ls -d /usr/local/lib 2>/dev/null` \
+ `ls -d /usr/pkg/lib 2>/dev/null` \
++ `ls -d /usr/share/tcltk/tcl8.5 2>/dev/null` \
+ `ls -d /usr/lib 2>/dev/null` \
+ `ls -d /usr/lib64 2>/dev/null` \
+ ; do
+ if test -f "$i/tclConfig.sh" ; then
+@@ -223,7 +224,8 @@
+ `ls -d ${prefix}/lib 2>/dev/null` \
+ `ls -d /usr/local/lib 2>/dev/null` \
+ `ls -d /usr/contrib/lib 2>/dev/null` \
++ `ls -d /usr/share/tcltk/tk8.5 2>/dev/null` \
+ `ls -d /usr/lib 2>/dev/null` \
+ `ls -d /usr/lib64 2>/dev/null` \
+ ; do
+ if test -f "$i/tkConfig.sh" ; then
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/fix-xft.diff b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/fix-xft.diff
new file mode 100644
index 000000000..d1bb7105c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/fix-xft.diff
@@ -0,0 +1,16 @@
+--- /tmp/configure.in 2010-05-19 13:29:03.000000000 +0200
++++ unix/configure.in 2010-05-19 13:42:05.000000000 +0200
+@@ -526,13 +526,9 @@
+ found_xft="yes"
+ dnl make sure package configurator (xft-config or pkg-config
+ dnl says that xft is present.
+- XFT_CFLAGS=`xft-config --cflags 2>/dev/null` || found_xft="no"
+- XFT_LIBS=`xft-config --libs 2>/dev/null` || found_xft="no"
+- if test "$found_xft" = "no" ; then
+ found_xft=yes
+ XFT_CFLAGS=`pkg-config --cflags xft 2>/dev/null` || found_xft="no"
+ XFT_LIBS=`pkg-config --libs xft 2>/dev/null` || found_xft="no"
+- fi
+ AC_MSG_RESULT([$found_xft])
+ dnl make sure that compiling against Xft header file doesn't bomb
+ if test "$found_xft" = "yes" ; then
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/non-linux.diff b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/non-linux.diff
new file mode 100644
index 000000000..7d31f9fdc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/non-linux.diff
@@ -0,0 +1,27 @@
+Patch by Sergei Golovan (originally by Mike Markley and Chris Waters) fixes
+building on non-linux Debian architectures.
+
+--- tk8.5-8.5.8.orig/unix/configure
++++ tk8.5-8.5.8/unix/configure
+@@ -4447,6 +4447,9 @@
+ if test "`uname -s`" = "AIX" ; then
+ tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
+ fi
++ if test "`uname -s`" = "NetBSD" -a -f /etc/debian_version ; then
++ tcl_cv_sys_version=NetBSD-Debian
++ fi
+ fi
+ fi
+
+--- tk8.5-8.5.8.orig/unix/tcl.m4
++++ tk8.5-8.5.8/unix/tcl.m4
+@@ -962,6 +962,9 @@
+ if test "`uname -s`" = "AIX" ; then
+ tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
+ fi
++ if test "`uname -s`" = "NetBSD" -a -f /etc/debian_version ; then
++ tcl_cv_sys_version=NetBSD-Debian
++ fi
+ fi
+ fi
+ ])
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tklibrary.diff b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tklibrary.diff
new file mode 100644
index 000000000..ee38c2a1a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tklibrary.diff
@@ -0,0 +1,22 @@
+--- tk8.5-8.5.8.orig/unix/configure
++++ tk8.5-8.5.8/unix/configure
+@@ -11070,7 +11070,7 @@
+ TCL_STUB_FLAGS="-DUSE_TCL_STUBS"
+ fi
+
+-TK_LIBRARY='$(prefix)/lib/tk$(VERSION)'
++test -z "$TK_LIBRARY" && TK_LIBRARY='$(prefix)/lib/tk$(VERSION)'
+ PRIVATE_INCLUDE_DIR='$(includedir)'
+ HTML_DIR='$(DISTDIR)/html'
+ TK_PKG_DIR='tk$(VERSION)'
+--- tk8.5-8.5.8.orig/unix/configure.in
++++ tk8.5-8.5.8/unix/configure.in
+@@ -607,7 +607,7 @@
+ TCL_STUB_FLAGS="-DUSE_TCL_STUBS"
+ fi
+
+-TK_LIBRARY='$(prefix)/lib/tk$(VERSION)'
++test -z "$TK_LIBRARY" && TK_LIBRARY='$(prefix)/lib/tk$(VERSION)'
+ PRIVATE_INCLUDE_DIR='$(includedir)'
+ HTML_DIR='$(DISTDIR)/html'
+ TK_PKG_DIR='tk$(VERSION)'
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tkprivate.diff b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tkprivate.diff
new file mode 100644
index 000000000..4e1546973
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk/tkprivate.diff
@@ -0,0 +1,41 @@
+Patch by Chris Waters sets path which are normally point to a directory
+with Tk sources to a subdirectory of /usr/include/tcl8.4 (debian/rules
+puts private Tk headers there).
+
+--- tk8.5-8.5.8.orig/unix/tkConfig.sh.in
++++ tk8.5-8.5.8/unix/tkConfig.sh.in
+@@ -55,7 +55,7 @@
+
+ # String to pass to linker to pick up the Tk library from its
+ # build directory.
+-TK_BUILD_LIB_SPEC='@TK_BUILD_LIB_SPEC@'
++TK_BUILD_LIB_SPEC='@TK_LIB_SPEC@'
+
+ # String to pass to linker to pick up the Tk library from its
+ # installed directory.
+@@ -71,7 +71,7 @@
+ # different place than the directory containing the source files, this
+ # points to the location of the sources, not the location where Tk was
+ # compiled.
+-TK_SRC_DIR='@TK_SRC_DIR@'
++TK_SRC_DIR='@includedir@/tk-private'
+
+ # Needed if you want to make a 'fat' shared library library
+ # containing tk objects or link a different wish.
+@@ -86,14 +86,14 @@
+
+ # String to pass to linker to pick up the Tk stub library from its
+ # build directory.
+-TK_BUILD_STUB_LIB_SPEC='@TK_BUILD_STUB_LIB_SPEC@'
++TK_BUILD_STUB_LIB_SPEC='@TK_STUB_LIB_SPEC@'
+
+ # String to pass to linker to pick up the Tk stub library from its
+ # installed directory.
+ TK_STUB_LIB_SPEC='@TK_STUB_LIB_SPEC@'
+
+ # Path to the Tk stub library in the build directory.
+-TK_BUILD_STUB_LIB_PATH='@TK_BUILD_STUB_LIB_PATH@'
++TK_BUILD_STUB_LIB_PATH='@TK_STUB_LIB_PATH@'
+
+ # Path to the Tk stub library in the install directory.
+ TK_STUB_LIB_PATH='@TK_STUB_LIB_PATH@'
diff --git a/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk_8.6.8.bb b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk_8.6.8.bb
new file mode 100644
index 000000000..13dc4d751
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/tcltk/tk_8.6.8.bb
@@ -0,0 +1,79 @@
+SUMMARY = "Tool Command Language ToolKit Extension"
+HOMEPAGE = "http://tcl.sourceforge.net"
+SECTION = "devel/tcltk"
+
+# http://www.tcl.tk/software/tcltk/license.html
+LICENSE = "tcl"
+LIC_FILES_CHKSUM = "file://../license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../compat/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../doc/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../library/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../macosx/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../tests/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../unix/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../win/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+ file://../xlib/license.terms;md5=c88f99decec11afa967ad33d314f87fe \
+"
+
+DEPENDS = "tcl virtual/libx11 libxt"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/tcl/${BPN}${PV}-src.tar.gz \
+ file://confsearch.diff;striplevel=2 \
+ file://non-linux.diff;striplevel=2 \
+ file://tklibrary.diff;striplevel=2 \
+ file://tkprivate.diff;striplevel=2 \
+ file://fix-xft.diff \
+ file://configure.use.fontconfig.with.xft.patch \
+"
+SRC_URI[md5sum] = "5e0faecba458ee1386078fb228d008ba"
+SRC_URI[sha256sum] = "49e7bca08dde95195a27f594f7c850b088be357a7c7096e44e1158c7a5fd7b33"
+
+S = "${WORKDIR}/${BPN}${PV}/unix"
+
+# Short version format: "8.6"
+VER = "${@os.path.splitext(d.getVar('PV'))[0]}"
+
+LDFLAGS += "-Wl,-rpath,${libdir}/tcltk/${PV}/lib"
+inherit autotools distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECONF = "\
+ --enable-threads \
+ --with-x \
+ --with-tcl=${STAGING_BINDIR_CROSS} \
+ --libdir=${libdir} \
+"
+
+do_install_append() {
+ ln -sf libtk${VER}.so ${D}${libdir}/libtk${VER}.so.0
+ oe_libinstall -so libtk${VER} ${D}${libdir}
+ ln -sf wish${VER} ${D}${bindir}/wish
+
+ # Even after passing libdir=${libdir} at config, some incorrect dirs are still generated for the multilib build
+ if [ "$libdir" != "/usr/lib" ]; then
+ # Move files to correct library directory
+ mv ${D}/usr/lib/tk${VER}/* ${D}/${libdir}/tk${VER}/
+ # Remove unneeded/incorrect dir ('usr/lib/')
+ rm -rf ${D}/usr/lib
+ fi
+}
+
+PACKAGECONFIG ??= "xft"
+PACKAGECONFIG[xft] = "--enable-xft,--disable-xft,xft"
+PACKAGECONFIG[xss] = "--enable-xss,--disable-xss,libxscrnsaver libxext"
+
+PACKAGES =+ "${PN}-lib"
+
+FILES_${PN}-lib = "${libdir}/libtk${VER}.so*"
+FILES_${PN} += "${libdir}/tk*"
+
+# isn't getting picked up by shlibs code
+RDEPENDS_${PN} += "tk-lib"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
+
+# Fix the path in sstate
+SSTATE_SCAN_FILES += "*Config.sh"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.8.bb b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.8.bb
new file mode 100644
index 000000000..82b179521
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.8.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Trace and analyze execution of a program written in C/C++"
+HOMEPAGE = "https://github.com/namhyung/uftrace"
+BUGTRACKER = "https://github.com/namhyung/uftrace/issues"
+SECTION = "devel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "elfutils"
+DEPENDS_append_libc-musl = " argp-standalone"
+
+inherit autotools
+
+SRCREV = "5af9ff9fa89c340617e52c8ed05798b352a7145c"
+SRC_URI = "git://github.com/namhyung/${BPN}"
+S = "${WORKDIR}/git"
+
+LDFLAGS_append_libc-musl = " -largp"
+EXTRA_OECONF = "ARCH=${TARGET_ARCH}"
+
+do_configure() {
+ ${S}/configure ${EXTRA_OECONF}
+}
+
+FILES_SOLIBSDEV = ""
+FILES_${PN} += "${libdir}/*.so"
+
+COMPATIBLE_HOST = "(x86_64|aarch64|arm)"
+
+# uftrace supports armv6 and above
+COMPATIBLE_HOST_armv4 = 'null'
+COMPATIBLE_HOST_armv5 = 'null'
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007e-shared.patch b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007e-shared.patch
new file mode 100644
index 000000000..4434e839f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007e-shared.patch
@@ -0,0 +1,82 @@
+Fix linking libraries built with -fPIC with this library
+
+Patch borrowed from Fedora
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Pending
+
+diff -up imap-2007e/src/osdep/unix/Makefile.shared imap-2007e/src/osdep/unix/Makefile
+--- imap-2007e/src/osdep/unix/Makefile.shared 2009-07-07 19:28:02.909755512 -0500
++++ imap-2007e/src/osdep/unix/Makefile 2009-07-07 19:29:35.870006799 -0500
+@@ -170,6 +170,10 @@ BUILD=$(MAKE) build EXTRACFLAGS='$(EXTRA
+ EXTRADRIVERS='$(EXTRADRIVERS)' EXTRAAUTHENTICATORS='$(EXTRAAUTHENTICATORS)'\
+ PASSWDTYPE=$(PASSWDTYPE) SSLTYPE=$(SSLTYPE) IP=$(IP)
+
++# Need this for the shared library rule to work correctly
++.SUFFIXES: .o .so
++SOFILES=${BINARIES:.o=.so}
++
+
+ # Here if no make argument established
+
+@@ -845,18 +849,24 @@ vu2: # VAX Ultrix 2.3, etc.
+
+ # Build it!
+
+-build: clean once $(ARCHIVE)
++build: clean once $(ARCHIVE) $(SHLIBNAME)
+
+-all: $(ARCHIVE)
++all: $(ARCHIVE) $(SHLIBNAME)
+
+ $(ARCHIVE): $(BINARIES)
+ sh -c '$(RM) $(ARCHIVE) || true'
+ @$(CAT) ARCHIVE
+ @$(SH) ARCHIVE
+
+-.c.o:
+- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` $*.c
++$(SHLIBNAME): $(SOFILES)
++ gcc -shared -Wl,-soname,$(SHLIBNAME) -o $(SHLIBNAME) $(SOFILES) `cat LDFLAGS`
++ ln -s $(SHLIBNAME) lib$(SHLIBBASE).so
+
++.c.so: osdep.h
++ $(CC) -fPIC -DPIC -D_REENTRANT -c `$(CAT) CFLAGS` ${@:.so=.c} -o $@
++
++.c.o:
++ $(CC) -fPIC -DPIC -D_REENTRANT -c `$(CAT) CFLAGS` $*.c
+
+ # Cleanup
+
+@@ -895,8 +905,7 @@ utf8aux.o: mail.h misc.h osdep.h utf8.h
+
+
+ # OS-dependent
+-
+-osdep.o:mail.h misc.h env.h fs.h ftl.h nl.h tcp.h \
++OSDEPS= mail.h misc.h env.h fs.h ftl.h nl.h tcp.h \
+ osdep.h env_unix.h tcp_unix.h \
+ osdep.c env_unix.c fs_unix.c ftl_unix.c nl_unix.c tcp_unix.c ip_unix.c\
+ auths.c crexcl.c flockcyg.c flocklnx.c flocksim.c fsync.c \
+@@ -910,12 +919,19 @@ osdep.o:mail.h misc.h env.h fs.h ftl.h n
+ write.c sslstdio.c \
+ strerror.c strpbrk.c strstr.c strtok.c strtoul.c \
+ OSCFLAGS
++
++osdep.o: $(OSDEPS)
++ $(CC) -fPIC -DPIC -D_REENTRANT `$(CAT) CFLAGS` `$(CAT) OSCFLAGS` -c osdep.c
++ @echo ========================================================================
+ @echo Building OS-dependent module
+ @echo If you get No such file error messages for files x509.h, ssl.h,
+ @echo pem.h, buffer.h, bio.h, and crypto.h, that means that OpenSSL
+ @echo is not installed on your system. Either install OpenSSL first
+ @echo or build with command: make `$(CAT) OSTYPE` SSLTYPE=none
+- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` `$(CAT) OSCFLAGS` -c osdep.c
++ @echo ========================================================================
++
++osdep.so: $(OSDEPS)
++ $(CC) -fPIC -DPIC -D_REENTRANT `$(CAT) CFLAGS` `cat OSCFLAGS` -c osdep.c -o $@
+
+ osdep.c: osdepbas.c osdepckp.c osdeplog.c osdepssl.c
+ $(CAT) osdepbas.c osdepckp.c osdeplog.c osdepssl.c > osdep.c
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007f-format-security.patch b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007f-format-security.patch
new file mode 100644
index 000000000..6ec04761a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/imap-2007f-format-security.patch
@@ -0,0 +1,20 @@
+Fix error found with "-Werror=format-security" flag
+
+Patch borrowed from Fedora
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Pending
+
+diff -Naur imap-2007f.orig/src/osdep/unix/flocklnx.c imap-2007f/src/osdep/unix/flocklnx.c
+--- imap-2007f.orig/src/osdep/unix/flocklnx.c 2011-07-23 02:20:11.000000000 +0200
++++ imap-2007f/src/osdep/unix/flocklnx.c 2014-04-14 19:17:46.429000000 +0200
+@@ -57,7 +57,7 @@
+ case ENOLCK: /* lock table is full */
+ sprintf (tmp,"File locking failure: %s",strerror (errno));
+ mm_log (tmp,WARN); /* give the user a warning of what happened */
+- if (!logged++) syslog (LOG_ERR,tmp);
++ if (!logged++) syslog (LOG_ERR, "%s", tmp);
+ /* return failure if non-blocking lock */
+ if (op & LOCK_NB) return -1;
+ sleep (5); /* slow down in case it loops */
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/quote_cctype.patch b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/quote_cctype.patch
new file mode 100644
index 000000000..f729ee207
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap/quote_cctype.patch
@@ -0,0 +1,12 @@
+diff -urN imap-2007.orig/Makefile imap-2007/Makefile
+--- imap-2007.orig/Makefile 2007-12-20 23:11:10.000000000 +0100
++++ imap-2007/Makefile 2008-03-19 14:08:47.000000000 +0100
+@@ -690,7 +690,7 @@
+ @$(SH) -c '(test $(BUILDTYPE) = rebuild -o $(BUILDTYPE) = `$(CAT) OSTYPE`) || (echo Already built for `$(CAT) OSTYPE` -- you must do \"make clean\" first && exit 1)'
+ @echo Rebuilding c-client for `$(CAT) OSTYPE`...
+ @$(TOUCH) SPECIALS
+- $(CD) c-client;$(MAKE) all CC=`$(CAT) CCTYPE` \
++ $(CD) c-client;$(MAKE) all CC="`$(CAT) CCTYPE`" \
+ CFLAGS="`$(CAT) CFLAGS`" `$(CAT) SPECIALS`
+
+ rebuildclean:
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap_2007f.bb b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap_2007f.bb
new file mode 100644
index 000000000..91003f6e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/uw-imap/uw-imap_2007f.bb
@@ -0,0 +1,44 @@
+SUMMARY = "UW c-client library for mail protocols"
+SECTION = "devel"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a6a4ddbb7cd2999f6827ee143f6fcd97"
+
+DEPENDS = "openssl"
+
+SRC_URI = "https://fossies.org/linux/misc/old/imap-${PV}.tar.gz \
+ file://quote_cctype.patch \
+ file://imap-2007e-shared.patch \
+ file://imap-2007f-format-security.patch \
+ "
+
+SRC_URI[md5sum] = "2126fd125ea26b73b20f01fcd5940369"
+SRC_URI[sha256sum] = "53e15a2b5c1bc80161d42e9f69792a3fa18332b7b771910131004eb520004a28"
+
+S = "${WORKDIR}/imap-${PV}"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG[pam] = ",,libpam"
+
+EXTRA_OEMAKE = "CC='${CC}' ARRC='${AR} -rc' RANLIB='${RANLIB}'"
+
+HEADERS = "src/c-client/*.h src/osdep/unix/*.h c-client/auths.c c-client/linkage.c c-client/linkage.h c-client/osdep.h"
+
+do_compile() {
+ echo "SSLINCLUDE=${STAGING_INCDIR} SSLLIB=${STAGING_LIBDIR}" > ${S}/SPECIALS
+ oe_runmake ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'lnp', 'slx', d)}
+}
+
+do_install() {
+ install -d ${D}${includedir}/c-client
+ install ${HEADERS} ${D}${includedir}/c-client
+ install -d ${D}${libdir}
+ install c-client/c-client.a ${D}${libdir}/libc-client.a
+}
+
+RPROVIDES_${PN} = "libc-client"
+RREPLACES_${PN} = "libc-client"
+RCONFLICTS_${PN} = "libc-client"
+
+ALLOW_EMPTY_${PN} = "1"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xerces-c/xerces-c_3.1.4.bb b/meta-openembedded/meta-oe/recipes-devtools/xerces-c/xerces-c_3.1.4.bb
new file mode 100644
index 000000000..64ac74723
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/xerces-c/xerces-c_3.1.4.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Xerces-c is a validating xml parser written in C++"
+DESCRIPTION = "Xerces-C++ makes it easy to give your application \
+ the ability to read and write XML data. \
+ A shared library is provided for parsing, generating, \
+ manipulating, and validating XML documents using \
+ the DOM, SAX, and SAX2 APIs."
+HOMEPAGE = "http://xerces.apache.org/xerces-c/"
+SECTION = "libs"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "http://apache.lauf-forum.at/xerces/c/3/sources/${BP}.tar.bz2"
+SRC_URI[md5sum] = "d04ae9d8b2dee2157c6db95fa908abfd"
+SRC_URI[sha256sum] = "9408f12c1628ecf80730bedbe8b2caad810edd01bb4c66f77b60c873e8cc6891"
+
+inherit autotools
+
+PACKAGECONFIG ??= "curl icu"
+PACKAGECONFIG[curl] = "--with-curl=${STAGING_DIR_TARGET}${prefix},--with-curl=no,curl"
+PACKAGECONFIG[icu] = "--with-icu=${STAGING_DIR_TARGET}${prefix},--with-icu=no,icu"
+
+do_install_prepend () {
+ sed -i -e 's:-L${STAGING_DIR}/lib:-L\$\{libdir\}:g' ${B}/xerces-c.pc
+}
+
+PACKAGES = "libxerces-c \
+ libxerces-c-dbg \
+ libxerces-c-dev \
+ xerces-c-samples \
+ xerces-c-samples-dbg \
+ libxerces-c-staticdev \
+"
+
+FILES_libxerces-c = "${libdir}/libxerces-c-3.1.so"
+FILES_libxerces-c-dbg = "${libdir}/.debug \
+ ${prefix}/src/debug \
+"
+FILES_libxerces-c-dev = "${libdir}/lib*.la \
+ ${libdir}/libxerces-c.so \
+ ${libdir}/pkgconfig/xerces-c.pc \
+ ${includedir}/xercesc \
+"
+FILES_xerces-c-samples = "${bindir}/*"
+FILES_xerces-c-samples-dbg = "${bindir}/.debug/"
+FILES_libxerces-c-staticdev = "${libdir}/lib*.a"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0001-fix-compile-failure-against-musl-C-library.patch b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0001-fix-compile-failure-against-musl-C-library.patch
new file mode 100644
index 000000000..234d696f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0001-fix-compile-failure-against-musl-C-library.patch
@@ -0,0 +1,52 @@
+From 950b27f8320b841490cafcb3e6e3b818c7174c0d Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 22:32:50 -0400
+Subject: [PATCH] fix compile failure against musl C library
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ test/cpp/server_abyss.cpp | 2 +-
+ tools/xmlrpc_pstream/xmlrpc_pstream.cpp | 10 +++++++---
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/test/cpp/server_abyss.cpp b/test/cpp/server_abyss.cpp
+index 2458a8f..82f91da 100644
+--- a/test/cpp/server_abyss.cpp
++++ b/test/cpp/server_abyss.cpp
+@@ -18,7 +18,7 @@
+ #ifdef WIN32
+ #include <winsock2.h>
+ #else
+- #include <sys/unistd.h>
++ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
+ #include <netinet/in.h>
+diff --git a/tools/xmlrpc_pstream/xmlrpc_pstream.cpp b/tools/xmlrpc_pstream/xmlrpc_pstream.cpp
+index d39e105..1fd8900 100644
+--- a/tools/xmlrpc_pstream/xmlrpc_pstream.cpp
++++ b/tools/xmlrpc_pstream/xmlrpc_pstream.cpp
+@@ -15,11 +15,15 @@
+ #include "xmlrpc-c/girerr.hpp"
+ using girerr::throwf;
+
+-#include <features.h> // for __BEGIN_DECLS
++#ifdef __cplusplus
++extern "C" {
++#endif
+
+-__BEGIN_DECLS
+ #include "dumpvalue.h" /* An internal Xmlrpc-c header file ! */
+-__END_DECLS
++
++#ifdef __cplusplus
++}
++#endif
+
+
+ #include <xmlrpc-c/base.hpp>
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0002-fix-formatting-issues.patch b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0002-fix-formatting-issues.patch
new file mode 100644
index 000000000..9d92e4712
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0002-fix-formatting-issues.patch
@@ -0,0 +1,34 @@
+From 14f15cb0f03defa8efb4c8e2fece58e50655be6b Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sun, 23 Jul 2017 22:20:29 -0400
+Subject: [PATCH] src/xmlrpc_server_abyss.c: fix formatting issues
+
+Fixed when compile with "-Wformat -Wformat-security -Werror=format-security":
+|src/xmlrpc_server_abyss.c:771:13: error: format not a string literal
+and no format arguments [-Werror=format-security]
+| xmlrpc_faultf(envP, error);
+| ^~~~~~~~~~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/xmlrpc_server_abyss.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xmlrpc_server_abyss.c b/src/xmlrpc_server_abyss.c
+index 2388652..3843f10 100644
+--- a/src/xmlrpc_server_abyss.c
++++ b/src/xmlrpc_server_abyss.c
+@@ -768,7 +768,7 @@ createServer(xmlrpc_env * const envP,
+ ServerInit2(abyssServerP, &error);
+
+ if (error) {
+- xmlrpc_faultf(envP, error);
++ xmlrpc_faultf(envP, "%s", error);
+ xmlrpc_strfree(error);
+ }
+ }
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.31.0.bb b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.31.0.bb
new file mode 100644
index 000000000..efa58f198
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.31.0.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "XML-RPC for C/C++ is programming libraries and related tools to help you \
+write an XML-RPC server or client in C or C++."
+
+HOMEPAGE = "http://xmlrpc-c.sourceforge.net/"
+LICENSE = "BSD & MIT"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=aefbf81ba0750f02176b6f86752ea951"
+
+SRC_URI = "git://github.com/ensc/xmlrpc-c.git;branch=master \
+ file://0001-fix-compile-failure-against-musl-C-library.patch \
+ file://0002-fix-formatting-issues.patch \
+"
+SRCREV = "81443a9dc234cc275449dbc17867ad77ae189124"
+S = "${WORKDIR}/git"
+
+DEPENDS = "curl libxml2"
+RDEPENDS_${PN} = "curl perl"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-D_lib:STRING=${baselib}"
+
+BBCLASSEXTEND = "native"
+
+TARGET_CFLAGS += "-Wno-narrowing"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_1.0.12.bb b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_1.0.12.bb
new file mode 100644
index 000000000..8ced7b84f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_1.0.12.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Yet Another JSON Library."
+
+DESCRIPTION = "YAJL is a small event-driven (SAX-style) JSON parser \
+written in ANSI C, and a small validating JSON generator."
+
+HOMEPAGE = "http://lloyd.github.com/yajl/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da2e9aa80962d54e7c726f232a2bd1e8"
+
+# Use 1.0.12 tag
+SRCREV = "17b1790fb9c8abbb3c0f7e083864a6a014191d56"
+SRC_URI = "git://github.com/lloyd/yajl;nobranch=1"
+
+inherit cmake lib_package
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
new file mode 100644
index 000000000..d9a5821cb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Yet Another JSON Library."
+
+DESCRIPTION = "YAJL is a small event-driven (SAX-style) JSON parser \
+written in ANSI C, and a small validating JSON generator."
+
+HOMEPAGE = "http://lloyd.github.com/yajl/"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://COPYING;md5=39af6eb42999852bdd3ea00ad120a36d"
+
+SRC_URI = "git://github.com/lloyd/yajl"
+SRCREV = "a0ecdde0c042b9256170f2f8890dd9451a4240aa"
+
+S = "${WORKDIR}/git"
+
+inherit cmake lib_package
+
+EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/boinc-AM_CONDITIONAL.patch b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/boinc-AM_CONDITIONAL.patch
new file mode 100644
index 000000000..7becb94e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/boinc-AM_CONDITIONAL.patch
@@ -0,0 +1,24 @@
+Add configure check for gtk2+ and objc++
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+--- A/configure.ac
++++ B/configure.ac
+@@ -39,6 +39,7 @@ AC_PROG_CC
+ AC_PROG_CXX
+ AC_PROG_F77
+ AC_PROG_CPP
++AC_PROG_OBJCXX
+ AC_PROG_MAKE_SET
+ SAH_LINKS
+ AC_LANG_PUSH(C)
+@@ -744,6 +745,8 @@ AM_CONDITIONAL(ENABLE_LIBRARIES, [test "
+ AM_CONDITIONAL(INSTALL_HEADERS, [test "${enable_install_headers}" = yes])
+ AM_CONDITIONAL(HAVE_CUDA_LIB, [test "${enable_client}" = yes -a -f ./coprocs/CUDA/posix/${boinc_platform}/libcudart.so])
+
++PKG_CHECK_MODULES([GTK2], [gtk+-2.0])
++
+ dnl ======================================================================
+ dnl some more vodoo required for building portable client-binary (client, clientgui)
+ dnl ======================================================================
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/cross-compile.patch b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/cross-compile.patch
new file mode 100644
index 000000000..287391a52
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/cross-compile.patch
@@ -0,0 +1,98 @@
+Remove rpath, its bad for cross compiling to encode
+build time rpaths
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: boinc-client_release-7.6-7.6.33/api/Makefile.am
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/api/Makefile.am
++++ boinc-client_release-7.6-7.6.33/api/Makefile.am
+@@ -43,18 +43,18 @@ endif
+
+ lib_LTLIBRARIES = libboinc_api.la
+ libboinc_api_la_SOURCES = $(api_files)
+-libboinc_api_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libboinc_api_la_LDFLAGS = -version-number $(LIBBOINC_VERSION)
+
+ if BUILD_GRAPHICS_API
+ lib_LTLIBRARIES += libboinc_graphics2.la
+ libboinc_graphics2_la_SOURCES = $(graphics2_files)
+ libboinc_graphics2_la_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_srcdir)/samples/image_libs
+-libboinc_graphics2_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION) -ljpeg
++libboinc_graphics2_la_LDFLAGS = -version-number $(LIBBOINC_VERSION) -ljpeg
+ endif #BUILD_GRAPHICS_API
+
+ lib_LTLIBRARIES += libboinc_opencl.la
+ libboinc_opencl_la_SOURCES = $(opencl_files)
+-libboinc_opencl_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libboinc_opencl_la_LDFLAGS = -version-number $(LIBBOINC_VERSION)
+
+ if INSTALL_HEADERS
+ ## install only headers that are meant for exporting the API !!
+Index: boinc-client_release-7.6-7.6.33/lib/Makefile.am
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/lib/Makefile.am
++++ boinc-client_release-7.6-7.6.33/lib/Makefile.am
+@@ -173,7 +173,7 @@ lib_LTLIBRARIES = libboinc.la
+ libboinc_la_SOURCES = $(generic_sources) $(mac_sources) $(win_sources)
+ libboinc_la_CFLAGS = $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
+ libboinc_la_CXXFLAGS = $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
+-libboinc_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -static -version-number $(LIBBOINC_VERSION)
++libboinc_la_LDFLAGS = -static -version-number $(LIBBOINC_VERSION)
+ libboinc_la_LIBADD =
+
+ if ENABLE_BOINCCRYPT
+@@ -181,7 +181,7 @@ lib_LTLIBRARIES += libboinc_crypt.la
+ libboinc_crypt_la_SOURCES = crypt.cpp
+ libboinc_crypt_la_CFLAGS = $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS) $(SSL_CFLAGS)
+ libboinc_crypt_la_CXXFLAGS = $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS) $(SSL_CXXFLAGS)
+-libboinc_crypt_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -static -version-number $(LIBBOINC_VERSION)
++libboinc_crypt_la_LDFLAGS = -static -version-number $(LIBBOINC_VERSION)
+ libboinc_crypt_la_LIBADD =
+ endif
+
+@@ -190,7 +190,7 @@ lib_LTLIBRARIES += libboinc_fcgi.la
+ libboinc_fcgi_la_SOURCES = $(libfcgi_sources) $(mac_sources) $(win_sources)
+ libboinc_fcgi_la_CFLAGS = -D_USING_FCGI_ $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
+ libboinc_fcgi_la_CXXFLAGS = -D_USING_FCGI_ $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
+-libboinc_fcgi_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libboinc_fcgi_la_LDFLAGS = -version-number $(LIBBOINC_VERSION)
+ libboinc_fcgi_la_LIBADD =
+ endif
+ # end of "if ENABLE_FCGI"
+Index: boinc-client_release-7.6-7.6.33/sched/Makefile.am
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/sched/Makefile.am
++++ boinc-client_release-7.6-7.6.33/sched/Makefile.am
+@@ -26,7 +26,7 @@ lib_LTLIBRARIES = libsched.la
+ libsched_la_SOURCES = $(libsched_sources)
+ libsched_la_CFLAGS = $(AM_CPPFLAGS)
+ libsched_la_CXXFLAGS = $(AM_CPPFLAGS)
+-libsched_la_LDFLAGS= -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libsched_la_LDFLAGS= -version-number $(LIBBOINC_VERSION)
+ libsched_la_LIBADD= $(SSL_LIBS)
+
+ ## install only headers that are meant for exporting the API !!
+@@ -48,7 +48,7 @@ lib_LTLIBRARIES += libsched_fcgi.la
+ libsched_fcgi_la_SOURCES = $(libsched_sources)
+ libsched_fcgi_la_CFLAGS = -D_USING_FCGI_ $(AM_CPPFLAGS)
+ libsched_fcgi_la_CXXFLAGS = -D_USING_FCGI_ $(AM_CPPFLAGS)
+-libsched_fcgi_la_LDFLAGS= -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libsched_fcgi_la_LDFLAGS= -version-number $(LIBBOINC_VERSION)
+ libsched_fcgi_la_LIBADD=
+
+ endif
+Index: boinc-client_release-7.6-7.6.33/zip/Makefile.am
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/zip/Makefile.am
++++ boinc-client_release-7.6-7.6.33/zip/Makefile.am
+@@ -61,7 +61,7 @@ endif
+
+ lib_LTLIBRARIES = libboinc_zip.la
+ libboinc_zip_la_SOURCES = $(libboinc_zip_sources)
+-libboinc_zip_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
++libboinc_zip_la_LDFLAGS = -version-number $(LIBBOINC_VERSION)
+ libboinc_zip_la_LIBADD =
+
+ # Some OSs may not prefix libraries with lib.
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/gtk-configure.patch b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/gtk-configure.patch
new file mode 100644
index 000000000..4ae8d580d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/gtk-configure.patch
@@ -0,0 +1,29 @@
+Check for gtk2+ only when manager is enabled
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: boinc-client_release-7.6-7.6.33/configure.ac
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/configure.ac
++++ boinc-client_release-7.6-7.6.33/configure.ac
+@@ -1033,6 +1033,11 @@ else
+ AM_CONDITIONAL([GUI_GTK], false)
+ fi
+
++dnl ---------- GTK+2.0-----------------------------------------------------
++if test "X${no_x}" != "Xyes"; then
++ PKG_CHECK_MODULES([GTK2], [gtk+-2.0])
++fi
++
+ dnl ---------- libNotify --------------------------------------------------
+ if test "${enable_manager}" = yes ; then
+ PKG_CHECK_MODULES(LIBNOTIFY, [libnotify])
+@@ -1082,7 +1087,6 @@ AM_CONDITIONAL(ENABLE_BOINCCRYPT, [test
+ AM_CONDITIONAL(INSTALL_HEADERS, [test "${enable_install_headers}" = yes])
+ AM_CONDITIONAL(HAVE_CUDA_LIB, [test "${enable_client}" = yes -a -f ./coprocs/CUDA/posix/${boinc_platform}/libcudart.so])
+
+-PKG_CHECK_MODULES([GTK2], [gtk+-2.0])
+
+ dnl ======================================================================
+ dnl some more vodoo required for building portable client-binary (client, clientgui)
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/opengl_m4_check.patch b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/opengl_m4_check.patch
new file mode 100644
index 000000000..0b057eabc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client/opengl_m4_check.patch
@@ -0,0 +1,19 @@
+Do not add prefix/lib to library search path
+let sysroot take care of that
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate[Cross-compile specific]
+
+Index: boinc-client_release-7.6-7.6.33/m4/ax_check_gl.m4
+===================================================================
+--- boinc-client_release-7.6-7.6.33.orig/m4/ax_check_gl.m4
++++ boinc-client_release-7.6-7.6.33/m4/ax_check_gl.m4
+@@ -58,7 +58,7 @@ else
+ else
+ ax_try_lib="${ax_lib}"
+ fi
+- LIBS="-L${prefix}/lib ${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
++ LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+ # if HAVE_WINDOWS_H && defined(_WIN32)
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.6.33.bb b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.6.33.bb
new file mode 100644
index 000000000..99b43fa3f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.6.33.bb
@@ -0,0 +1,79 @@
+# Copyright (C) 2016 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Open-source software for volunteer computing"
+DESCRIPTION = "The Berkeley Open Infrastructure for Network Computing (BOINC) is an open- \
+source software platform which supports distributed computing, primarily in \
+the form of volunteer computing and desktop Grid computing. It is well \
+suited for problems which are often described as trivially parallel. BOINC \
+is the underlying software used by projects such as SETI@home, Einstein@Home, \
+ClimatePrediciton.net, the World Community Grid, and many other distributed \
+computing projects. \
+This package installs the BOINC client software, which will allow your \
+computer to participate in one or more BOINC projects, using your spare \
+computer time to search for cures for diseases, model protein folding, study \
+global warming, discover sources of gravitational waves, and many other types \
+of scientific and mathematical research."
+
+HOMEPAGE = "http://boinc.berkeley.edu/"
+LICENSE = "LGPLv2+ & GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LESSER;md5=6a6a8e020838b23406c81b19c1d46df6"
+SECTION = "applications"
+DEPENDS = "curl \
+ jpeg \
+ openssl \
+ sqlite3 \
+ virtual/libgl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'libnotify', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk+ libnotify xcb-util libxscrnsaver', '', d)} \
+ nettle \
+"
+
+SRC_URI = "https://github.com/BOINC/boinc/archive/client_release/7.6/${PV}.tar.gz \
+ file://boinc-AM_CONDITIONAL.patch \
+ file://opengl_m4_check.patch \
+ file://cross-compile.patch \
+ file://gtk-configure.patch \
+"
+SRC_URI[md5sum] = "437b4b98e384b4bda4ef7056e68166ac"
+SRC_URI[sha256sum] = "c4b1c29b9655013e0ac61dddf47ad7f30f38c46159f02a9d9dc8ab854e99aa6d"
+
+inherit gettext autotools-brokensep pkgconfig distro_features_check
+
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+S = "${WORKDIR}/${BPN}_release-7.6-${PV}"
+
+EXTRA_OECONF += "\
+ --enable-libraries \
+ --enable-unicode \
+ --enable-shared \
+ --enable-dynamic-client-linkage \
+ --enable-client \
+ --disable-server \
+ --disable-static \
+ --disable-manager \
+ --with-ssl=${STAGING_EXECPREFIXDIR} \
+ --without-wxdir \
+ --without-x \
+ --with-boinc-platform=${TARGET_SYS} \
+"
+export PKG_CONFIG = "${STAGING_BINDIR_NATIVE}/pkg-config"
+
+do_configure_prepend () {
+ if "${@bb.utils.contains('DEPENDS', 'gtk+', '1', '0', d)}" = "0"
+ then
+ export GTK2_CFLAGS=""
+ export GTK2_LIBS=""
+ fi
+}
+
+do_compile_prepend () {
+ # Disable rpaths
+ sed -i -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' ${B}/${TARGET_SYS}-libtool
+ sed -i -e 's|^sys_lib_dlsearch_path_spec=.*|sys_lib_dlsearch_path_spec=""|g' ${B}/${TARGET_SYS}-libtool
+ sed -i -e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' ${B}/${TARGET_SYS}-libtool
+}
+
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc
new file mode 100644
index 000000000..9bdafd244
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc
@@ -0,0 +1,23 @@
+SUMMARY = "Berkeley LALR Yacc parser generator"
+HOMEPAGE = "http://invisible-island.net/byacc/"
+DESCRIPTION = "A parser generator utility that reads a grammar specification from a file and generates an LR(1) \
+parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C \
+programming language."
+SECTION = "devel"
+LICENSE = "PD"
+
+SRC_URI = "ftp://invisible-island.net/byacc/byacc-${PV}.tgz \
+ file://byacc-open.patch \
+ file://0001-byacc-do-not-reorder-CC-and-CFLAGS.patch"
+
+EXTRA_OECONF += "--program-transform-name='s,^,b,'"
+
+BBCLASSEXTEND = "native"
+
+inherit autotools
+
+do_configure() {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
+ oe_runconf
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/0001-byacc-do-not-reorder-CC-and-CFLAGS.patch b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/0001-byacc-do-not-reorder-CC-and-CFLAGS.patch
new file mode 100644
index 000000000..7cd2510c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/0001-byacc-do-not-reorder-CC-and-CFLAGS.patch
@@ -0,0 +1,161 @@
+Subject: byacc: do not reorder $CC and $CFLAGS
+
+byacc tries to process $CC and decide which part should belong to CC and which
+part should below to CFLAGS and then do reordering. It doesn't make much sense
+for OE. And it doesn't do its work correctly. Some options are dropped.
+
+Delete all these stuff so that we could have all options we need.
+
+Upstream-Status: Inappropriate [OE Specific]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ aclocal.m4 | 1 -
+ configure | 119 -------------------------------------------------------------
+ 2 files changed, 120 deletions(-)
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 917a848..62ef241 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -1021,7 +1021,6 @@ CF_GCC_VERSION
+ CF_ACVERSION_CHECK(2.52,
+ [AC_PROG_CC_STDC],
+ [CF_ANSI_CC_REQD])
+-CF_CC_ENV_FLAGS
+ ])dnl
+ dnl ---------------------------------------------------------------------------
+ dnl CF_PROG_GROFF version: 2 updated: 2015/07/04 11:16:27
+diff --git a/configure b/configure
+index 9707e50..4f0497c 100755
+--- a/configure
++++ b/configure
+@@ -1946,125 +1946,6 @@ esac
+ # This should have been defined by AC_PROG_CC
+ : ${CC:=cc}
+
+-echo "$as_me:1949: checking \$CC variable" >&5
+-echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
+-case "$CC" in
+-(*[\ \ ]-*)
+- echo "$as_me:1953: result: broken" >&5
+-echo "${ECHO_T}broken" >&6
+- { echo "$as_me:1955: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
+-echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
+- # humor him...
+- cf_flags=`echo "$CC" | sed -e 's/^.*[ ]\(-[^ ]\)/\1/'`
+- CC=`echo "$CC " | sed -e 's/[ ]-[^ ].*$//' -e 's/[ ]*$//'`
+- for cf_arg in $cf_flags
+- do
+- case "x$cf_arg" in
+- (x-[IUDfgOW]*)
+-
+-cf_fix_cppflags=no
+-cf_new_cflags=
+-cf_new_cppflags=
+-cf_new_extra_cppflags=
+-
+-for cf_add_cflags in $cf_flags
+-do
+-case $cf_fix_cppflags in
+-(no)
+- case $cf_add_cflags in
+- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+- case $cf_add_cflags in
+- (-D*)
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+-
+- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=yes
+-
+- if test $cf_fix_cppflags = yes ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- elif test "${cf_tst_cflags}" = "\"'" ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- fi
+- ;;
+- esac
+- case "$CPPFLAGS" in
+- (*$cf_add_cflags)
+- ;;
+- (*)
+- case $cf_add_cflags in
+- (-D*)
+- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+-
+-CPPFLAGS=`echo "$CPPFLAGS" | \
+- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+-
+- ;;
+- esac
+- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+- ;;
+- esac
+- ;;
+- (*)
+- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+- ;;
+- esac
+- ;;
+-(yes)
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+-
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+-
+- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=no
+- ;;
+-esac
+-done
+-
+-if test -n "$cf_new_cflags" ; then
+-
+- CFLAGS="$CFLAGS $cf_new_cflags"
+-fi
+-
+-if test -n "$cf_new_cppflags" ; then
+-
+- CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+-fi
+-
+-if test -n "$cf_new_extra_cppflags" ; then
+-
+- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+-fi
+-
+- ;;
+- (*)
+- CC="$CC $cf_arg"
+- ;;
+- esac
+- done
+- test -n "$verbose" && echo " resulting CC: '$CC'" 1>&6
+-
+-echo "${as_me:-configure}:2051: testing resulting CC: '$CC' ..." 1>&5
+-
+- test -n "$verbose" && echo " resulting CFLAGS: '$CFLAGS'" 1>&6
+-
+-echo "${as_me:-configure}:2055: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5
+-
+- test -n "$verbose" && echo " resulting CPPFLAGS: '$CPPFLAGS'" 1>&6
+-
+-echo "${as_me:-configure}:2059: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5
+-
+- ;;
+-(*)
+- echo "$as_me:2063: result: ok" >&5
+-echo "${ECHO_T}ok" >&6
+- ;;
+-esac
+-
+ echo "$as_me:2068: checking whether ${MAKE-make} sets \${MAKE}" >&5
+ echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+ set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+--
+2.8.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/byacc-open.patch b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/byacc-open.patch
new file mode 100644
index 000000000..005831130
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc/byacc-open.patch
@@ -0,0 +1,25 @@
+Ubuntu defaults to passing _FORTIFY_SOURCE=2 which breaks byacc as it doesn't
+pass enough arguments to open():
+
+ inlined from 'open_tmpfile' at byacc-20150711/main.c:588:5:
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h:50:24: error: call to '__open_missing_mode' declared with attribute error:
+ open with O_CREAT in second argument needs 3 arguments
+
+Add a mode of 0666 to fix this.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/main.c b/main.c
+index 620ce3f..82071a4 100644
+--- a/main.c
++++ b/main.c
+@@ -526,7 +526,7 @@ my_mkstemp(char *temp)
+ }
+ if ((name = tempnam(dname, fname)) != 0)
+ {
+- fd = open(name, O_CREAT | O_EXCL | O_RDWR);
++ fd = open(name, O_CREAT | O_EXCL | O_RDWR, 0666);
+ strcpy(temp, name);
+ }
+ else
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20170201.bb b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20170201.bb
new file mode 100644
index 000000000..702c4c99e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20170201.bb
@@ -0,0 +1,12 @@
+# Sigh. This is one of those places where everyone licenses it differently. Someone
+# even apply UCB to it (Free/Net/OpenBSD). The maintainer states that:
+# "I've found no reliable source which states that byacc must bear a UCB copyright."
+# Setting to PD as this is what the upstream has it as.
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://package/debian/copyright;md5=9176bfb16dab43ebcb8e50d9ee9550b6"
+require byacc.inc
+
+SRC_URI[md5sum] = "4bb274bbd7b648d4251c2b9ca36ed0c9"
+SRC_URI[sha256sum] = "90b768d177f91204e6e7cef226ae1dc7cac831b625774cebd3e233a917754f91"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.10.2.bb b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.10.2.bb
new file mode 100644
index 000000000..b52e7cc08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.10.2.bb
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2014 - 2017 Wind River Systems, Inc.
+#
+SUMMARY = "Base policy for CFEngine"
+
+DESCRIPTION = "CFEngine is an IT infrastructure automation framework \
+that helps engineers, system administrators and other stakeholders \
+in an IT system to manage and understand IT infrastructure throughout \
+its lifecycle. CFEngine takes systems from Build to Deploy, Manage and Audit. \
+ \
+This package is intended to provide a stable base policy for \
+installations and upgrades, and is used by CFEngine 3.6 and newer. \
+ \
+The contents of this packge are intended to live in `/var/cfengine/masterfiles` \
+or wherever `$(sys.masterdir)` points. \
+"
+
+HOMEPAGE = "http://cfengine.com"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9f76426f9ef8c6f6739fadd21d817a4f"
+
+SRC_URI = "https://cfengine-package-repos.s3.amazonaws.com/tarballs/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "1247ef4e8f3cee5efa98da50c326e5a4"
+SRC_URI[sha256sum] = "5d18a8d71f451d0b5dd1f5e579452b29b99b664f2bb0827dbba9a615f2764df6"
+
+inherit autotools
+
+export EXPLICIT_VERSION="${PV}"
+
+EXTRA_OECONF = "--prefix=${datadir}/cfengine"
+
+FILES_${PN} = "${datadir}/cfengine"
+
+RDEPENDS_${PN} += "python-core"
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/change-hard-coded-lib-path.patch b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/change-hard-coded-lib-path.patch
new file mode 100644
index 000000000..2295e415c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/change-hard-coded-lib-path.patch
@@ -0,0 +1,28 @@
+Upstream-Status: Inappropriate [configuration]
+
+projlibdir use a hard coded lib path, this will cause error when build a 64bit
+target. So change it to suitable path.
+
+Signed-off-by: Song.Li <Song.Li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 38e2b9c..bc6b996 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -188,7 +188,7 @@ AS_IF([test x"$enable_fhs" = xyes], [
+ fi
+
+ sbindir='${exec_prefix}/bin' # /var/cfengine/bin despite being sbin_?
+- projlibdir='${exec_prefix}/lib'
++ projlibdir='${libdir}'
+ mandir='${exec_prefix}/share/man'
+ ])
+
+--
+1.7.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/set-path-of-default-config-file.patch b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/set-path-of-default-config-file.patch
new file mode 100644
index 000000000..b9526f284
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine/set-path-of-default-config-file.patch
@@ -0,0 +1,23 @@
+Upstream-Status: Inappropriate [configuration]
+
+Set the path of default configure file.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/misc/init.d/cfengine3.in b/misc/init.d/cfengine3.in
+index d6ae26f..1dee283 100644
+--- a/misc/init.d/cfengine3.in
++++ b/misc/init.d/cfengine3.in
+@@ -101,11 +101,7 @@ if [ -z "$LOCKDIR" ]; then
+ fi
+
+ # default control file
+-if [ "$DEBIAN" = "1" ]; then
+- DEFAULT=/etc/default/cfengine3
+-else
+- DEFAULT=/etc/sysconfig/cfengine3
+-fi
++DEFAULT=/etc/default/cfengine3
+
+ if [ -f $DEFAULT ]; then
+ . $DEFAULT
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.10.2.bb b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.10.2.bb
new file mode 100644
index 000000000..b86b0a1f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.10.2.bb
@@ -0,0 +1,73 @@
+#
+# Copyright (C) 2014 - 2017 Wind River Systems, Inc.
+#
+SUMMARY = "CFEngine is an IT infrastructure automation framework"
+
+DESCRIPTION = "CFEngine is an IT infrastructure automation framework \
+that helps engineers, system administrators and other stakeholders \
+in an IT system to manage and understand IT infrastructure throughout \
+its lifecycle. CFEngine takes systems from Build to Deploy, Manage and Audit."
+
+HOMEPAGE = "http://cfengine.com"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f8b34828ab373d6b1bb4b0fc60a78494"
+
+DEPENDS = "attr tokyocabinet"
+
+SRC_URI = "https://cfengine-package-repos.s3.amazonaws.com/tarballs/${BP}.tar.gz \
+ file://change-hard-coded-lib-path.patch \
+ file://set-path-of-default-config-file.patch \
+"
+
+SRC_URI[md5sum] = "c16baf08189a1af6fcf2e2ff61102992"
+SRC_URI[sha256sum] = "d4fa9ac7276dba7b85d6757aab2f0929ab8d3b115cb0e7b0cf984760347429d7"
+
+inherit autotools systemd
+
+export EXPLICIT_VERSION="${PV}"
+
+SYSTEMD_SERVICE_${PN} = "cfengine3.service cf-apache.service cf-hub.service cf-postgres.service \
+ cf-runalerts.service cf-consumer.service cf-execd.service \
+ cf-monitord.service cf-redis-server.service cf-serverd.service \
+"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
+
+PACKAGECONFIG ??= "libpcre openssl \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)} \
+"
+PACKAGECONFIG[libxml2] = "--with-libxml2=yes,--with-libxml2=no,libxml2,"
+PACKAGECONFIG[mysql] = "--with-mysql=yes,--with-mysql=no,mysql,"
+PACKAGECONFIG[postgresql] = "--with-postgresql=yes,--with-postgresql=no,postgresql,"
+PACKAGECONFIG[acl] = "--with-libacl=yes,--with-libacl=no,acl,"
+PACKAGECONFIG[libvirt] = "--with-libvirt=yes,--with-libvirt=no,libvirt,"
+PACKAGECONFIG[libpcre] = "--with-pcre=yes,--with-pcre=no,libpcre,"
+PACKAGECONFIG[openssl] = "--with-openssl=yes,--with-openssl=no,openssl,"
+PACKAGECONFIG[pam] = "--with-pam=yes,--with-pam=no,libpam,"
+PACKAGECONFIG[libyaml] = "--with-libyaml,--without-libyaml,libyaml,"
+PACKAGECONFIG[systemd] = "--with-systemd-service=${systemd_system_unitdir},--without-systemd-service"
+PACKAGECONFIG[libcurl] = "--with-libcurl,--without-libcurl,curl,"
+
+EXTRA_OECONF = "hw_cv_func_va_copy=yes --with-init-script=${sysconfdir}/init.d --with-tokyocabinet"
+
+do_install_append() {
+ install -d ${D}${localstatedir}/${BPN}/bin
+ for f in `ls ${D}${bindir}`; do
+ ln -s ${bindir}/`basename $f` ${D}${localstatedir}/${BPN}/bin/
+ done
+
+ install -d ${D}${sysconfdir}/default
+ cat << EOF > ${D}${sysconfdir}/default/cfengine3
+RUN_CF_SERVERD=1
+RUN_CF_EXECD=1
+RUN_CF_MONITORD=1
+RUN_CF_HUB=0
+EOF
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -m 0755 -D ${D}${sysconfdir}/init.d/cfengine3 ${D}${datadir}/${BPN}/cfengine3
+ sed -i -e 's#/etc/init.d#${datadir}/${BPN}#' ${D}${systemd_system_unitdir}/*.service
+ fi
+}
+
+RDEPENDS_${PN} += "${BPN}-masterfiles"
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Add-PYTHON_ABI-suffix-to-the-python-library-name.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Add-PYTHON_ABI-suffix-to-the-python-library-name.patch
new file mode 100644
index 000000000..b2a149b0f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Add-PYTHON_ABI-suffix-to-the-python-library-name.patch
@@ -0,0 +1,27 @@
+From a701ed30ac1bc2f77d063c237d6ae040a2d53f6b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 16 May 2016 16:52:24 +0300
+Subject: [PATCH] Add 'm' suffix to the python library name.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ swig/python/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/swig/python/CMakeLists.txt b/swig/python/CMakeLists.txt
+index 128798b..391cef7 100644
+--- a/swig/python/CMakeLists.txt
++++ b/swig/python/CMakeLists.txt
+@@ -49,7 +49,7 @@ ADD_DEFINITIONS(-DCMPI_PLATFORM_LINUX_GENERIC_GNU -DCMPI_VERSION=200)
+ SET( NAME pyCmpiProvider )
+ ADD_LIBRARY( ${NAME} SHARED ${SWIG_OUTPUT})
+ #TARGET_LINK_LIBRARIES( ${NAME} ${PYTHON_LIBRARIES} )
+-TARGET_LINK_LIBRARIES( ${NAME} python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION} )
++TARGET_LINK_LIBRARIES( ${NAME} python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}m )
+ TARGET_LINK_LIBRARIES( ${NAME} pthread )
+ TARGET_LINK_LIBRARIES( ${NAME} dl )
+ TARGET_LINK_LIBRARIES( ${NAME} util )
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Fix-error.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Fix-error.patch
new file mode 100644
index 000000000..d1a303cf4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Fix-error.patch
@@ -0,0 +1,26 @@
+From b8e791ce93a467081fb1594b91841e2f57c634a0 Mon Sep 17 00:00:00 2001
+From: Qian Lei <qianl.fnst@cn.fujitsu.com>
+Date: Fri, 16 Jan 2015 18:37:26 +0800
+Subject: [PATCH] Fix error
+
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+---
+ swig/python/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/swig/python/CMakeLists.txt b/swig/python/CMakeLists.txt
+index 3976296..8073fc8 100644
+--- a/swig/python/CMakeLists.txt
++++ b/swig/python/CMakeLists.txt
+@@ -27,7 +27,7 @@ SET( SWIG_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/../cmpi.i" )
+ ADD_CUSTOM_COMMAND (
+ OUTPUT ${SWIG_OUTPUT}
+ COMMAND ${CMAKE_COMMAND} -E echo_append "Creating wrapper code for Python ..."
+- COMMAND ${SWIG_EXECUTABLE} -python -Wall -threads -features autodoc -o ${SWIG_OUTPUT} -outdir ${CMAKE_CURRENT_BINARY_DIR} -I/usr/include ${SWIG_INPUT}
++ COMMAND ${SWIG_EXECUTABLE} -python -Wall -threads -features autodoc -o ${SWIG_OUTPUT} -outdir ${CMAKE_CURRENT_BINARY_DIR} -I$ENV{STAGING_INCDIR} ${SWIG_INPUT}
+ COMMAND ${CMAKE_COMMAND} -E echo "Done."
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../*.i
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Modify-cmakelist.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Modify-cmakelist.patch
new file mode 100644
index 000000000..92e5e5662
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-Modify-cmakelist.patch
@@ -0,0 +1,41 @@
+From 070822507befe7c1b8bb1be2d36cb12141d03b8f Mon Sep 17 00:00:00 2001
+From: Qian Lei <qianl.fnst@cn.fujitsu.com>
+Date: Tue, 6 Jan 2015 18:38:32 +0800
+Subject: [PATCH] Change the install path in cmakelist
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+---
+ swig/python/CMakeLists.txt | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/swig/python/CMakeLists.txt b/swig/python/CMakeLists.txt
+index 3976296..93c87c1 100644
+--- a/swig/python/CMakeLists.txt
++++ b/swig/python/CMakeLists.txt
+@@ -56,18 +56,18 @@ TARGET_LINK_LIBRARIES( ${NAME} util )
+
+ INSTALL(TARGETS ${NAME} LIBRARY DESTINATION ${CMPI_LIBRARY_DIR})
+ # .py: swig generated
+-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmpi.py DESTINATION ${PYTHON_SITE_DIR} )
++INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmpi.py DESTINATION $ENV{ENV_INSTALL_PATH} )
+
+
+ #
+ # cmpi_pywbem_bindings.py: provider implementation
+ #
+-INSTALL(FILES cmpi_pywbem_bindings.py DESTINATION ${PYTHON_SITE_DIR} )
++INSTALL(FILES cmpi_pywbem_bindings.py DESTINATION $ENV{ENV_INSTALL_PATH} )
+ #INSTALL(FILES Py_UnixProcessProvider.py DESTINATION /usr/lib/pycim )
+
+-INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"from py_compile import compile; compile('\$ENV{DESTDIR}${PYTHON_SITE_DIR}/cmpi.py', dfile='${PYTHON_SITE_DIR}/cmpi.py')\")")
++INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"from py_compile import compile; compile('\$ENV{DESTDIR}$ENV{ENV_INSTALL_PATH}/cmpi.py', dfile='\$ENV{ENV_INSTALL_PATH}/cmpi.py')\")")
+
+-INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"from py_compile import compile; compile('\$ENV{DESTDIR}${PYTHON_SITE_DIR}/cmpi_pywbem_bindings.py', dfile='${PYTHON_SITE_DIR}/cmpi_pywbem_bindings.py')\")")
++INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"from py_compile import compile; compile('\$ENV{DESTDIR}$ENV{ENV_INSTALL_PATH}/cmpi_pywbem_bindings.py', dfile='$ENV{ENV_INSTALL_PATH}/cmpi_pywbem_bindings.py')\")")
+
+
+
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-fix-the-build-error-when-python-3.0.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-fix-the-build-error-when-python-3.0.patch
new file mode 100644
index 000000000..0d6f029e4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/0001-fix-the-build-error-when-python-3.0.patch
@@ -0,0 +1,31 @@
+From 323ced03a66e6cd963d8277b66cfcc7dce740be7 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Fri, 17 Jul 2015 01:33:43 -0700
+Subject: [PATCH] fix Xthe build error when python>3.0
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ src/target_python.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/target_python.c b/src/target_python.c
+index 90b43a1..2b76c9e 100644
+--- a/src/target_python.c
++++ b/src/target_python.c
+@@ -167,7 +167,12 @@ PyGlobalInitialize(const CMPIBroker* broker, CMPIStatus* st)
+
+ Py_SetProgramName("cmpi_swig");
+ Py_Initialize();
+- SWIGEXPORT void SWIG_init(void);
++#if PY_VERSION_HEX >= 0x03000000
++SWIGEXPORT PyObject*
++#else
++ SWIGEXPORT void
++#endif
++ SWIG_init(void);
+ SWIG_init();
+ cmpiMainPyThreadState = PyGILState_GetThisThreadState();
+ PyEval_ReleaseThread(cmpiMainPyThreadState);
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-no-ruby-perl.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-no-ruby-perl.patch
new file mode 100644
index 000000000..2072da72b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-no-ruby-perl.patch
@@ -0,0 +1,47 @@
+From 7dd01e33f9dac75f177113de9a8ff458d4263a11 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Mon, 24 Aug 2015 11:00:13 +0900
+Subject: [PATCH] cmpi-bindings-0.4.17 no ruby perl
+
+Port from Fedora20
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+---
+ swig/CMakeLists.txt | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
+index 8b5555c..c2655b9 100644
+--- a/swig/CMakeLists.txt
++++ b/swig/CMakeLists.txt
+@@ -15,15 +15,15 @@ IF (PYTHON_LIBRARY)
+ ENDIF (PYTHON_LINK_LIBS)
+ ENDIF (PYTHON_LIBRARY)
+
+-FIND_PACKAGE(Perl)
+-IF (PERL_EXECUTABLE)
+- MESSAGE(STATUS "Building Perl...")
+- ADD_SUBDIRECTORY(perl)
+-ENDIF (PERL_EXECUTABLE)
++#FIND_PACKAGE(Perl)
++#IF (PERL_EXECUTABLE)
++# MESSAGE(STATUS "Building Perl...")
++# ADD_SUBDIRECTORY(perl)
++#ENDIF (PERL_EXECUTABLE)
+
+-FIND_PACKAGE(Ruby)
+-IF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
+- MESSAGE(STATUS "Building Ruby...")
+- ADD_SUBDIRECTORY(ruby)
+- OPTION( BUILD_RUBY_GEM "Build Ruby GEM" YES )
+-ENDIF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
++#FIND_PACKAGE(Ruby)
++#IF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
++# MESSAGE(STATUS "Building Ruby...")
++# ADD_SUBDIRECTORY(ruby)
++# OPTION( BUILD_RUBY_GEM "Build Ruby GEM" YES )
++#ENDIF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-sblim-sigsegv.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-sblim-sigsegv.patch
new file mode 100644
index 000000000..b99337204
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.4.17-sblim-sigsegv.patch
@@ -0,0 +1,22 @@
+Port from Fedora20
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+
+diff -up cmpi-bindings-0.4.17/swig/python/cmpi_pywbem_bindings.py.orig cmpi-bindings-0.4.17/swig/python/cmpi_pywbem_bindings.py
+--- cmpi-bindings-0.4.17/swig/python/cmpi_pywbem_bindings.py.orig 2012-03-01 17:05:31.878367281 +0100
++++ cmpi-bindings-0.4.17/swig/python/cmpi_pywbem_bindings.py 2012-03-01 17:06:34.718110137 +0100
+@@ -350,10 +350,10 @@ class BrokerCIMOMHandle(object):
+ allow_null_ns = False
+ else:
+ allow_null_ns = True
+- if self.broker.name() == 'RequestHandler':
++# if self.broker.name() == 'RequestHandler':
+ # Check sblim bug #2185410.
+- if instance.path is not None:
+- instance.path.namespace = None
++# if instance.path is not None:
++# instance.path.namespace = None
+ inst = self.proxy.pywbem2cmpi_inst(instance, allow_null_ns)
+ rv = self.broker.deliverIndication(self.ctx, ns, inst)
+ return rv
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.9.5-python-lib-dir.patch b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.9.5-python-lib-dir.patch
new file mode 100644
index 000000000..b6a51ec0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings/cmpi-bindings-0.9.5-python-lib-dir.patch
@@ -0,0 +1,17 @@
+Port from Fedora20
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+
+diff -up cmpi-bindings-0.9.5/swig/python/CMakeLists.txt.old cmpi-bindings-0.9.5/swig/python/CMakeLists.txt
+--- cmpi-bindings-0.9.5/swig/python/CMakeLists.txt.old 2013-08-06 15:57:03.576285764 +0200
++++ cmpi-bindings-0.9.5/swig/python/CMakeLists.txt 2013-08-06 15:57:14.891345941 +0200
+@@ -9,7 +9,7 @@ SET (BUILD_SHARED_LIBS ON)
+
+ FIND_PACKAGE(PythonInterp REQUIRED)
+
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib())" OUTPUT_VARIABLE PYTHON_LIB_DIR)
++EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(1))" OUTPUT_VARIABLE PYTHON_LIB_DIR)
+
+ IF (NOT PYTHON_SITE_DIR)
+ SET (PYTHON_SITE_DIR ${PYTHON_LIB_DIR})
diff --git a/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings_git.bb b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings_git.bb
new file mode 100644
index 000000000..987c09fe5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cmpi-bindings/cmpi-bindings_git.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Adapter to write and run CMPI-type CIM providers"
+DESCRIPTION = "CMPI-compliant provider interface for various languages via SWIG"
+HOMEPAGE = "http://github.com/kkaempf/cmpi-bindings"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b19ee058d2d5f69af45da98051d91064"
+SECTION = "Development/Libraries"
+DEPENDS = "swig-native python3 sblim-cmpi-devel"
+
+SRC_URI = "git://github.com/kkaempf/cmpi-bindings.git;protocol=http \
+ file://cmpi-bindings-0.4.17-no-ruby-perl.patch \
+ file://cmpi-bindings-0.4.17-sblim-sigsegv.patch \
+ file://cmpi-bindings-0.9.5-python-lib-dir.patch \
+ file://0001-Modify-cmakelist.patch \
+ file://0001-Fix-error.patch \
+ file://0001-fix-the-build-error-when-python-3.0.patch \
+ file://0001-Add-PYTHON_ABI-suffix-to-the-python-library-name.patch \
+ "
+
+SRCREV = "62f60e065aa1b901f826e4f530c0573ae32d065e"
+S = "${WORKDIR}/git"
+
+inherit cmake python3native
+
+EXTRA_OECMAKE = "-DLIB='${baselib}' \
+ -DPYTHON_INCLUDE_PATH=${STAGING_INCDIR}/python${PYTHON_BASEVERSION}"
+
+# With Ninja it fails with:
+# ninja: error: build.ninja:282: bad $-escape (literal $ must be written as $$)
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+do_configure_prepend() {
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export ENV_INSTALL_PATH=${PYTHON_SITEPACKAGES_DIR}
+}
+
+FILES_${PN} =+"${libdir}/cmpi/libpyCmpiProvider.so ${PYTHON_SITEPACKAGES_DIR}/*"
+FILES_${PN}-dbg =+ "${libdir}/cmpi/.debug/libpyCmpiProvider.so"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch
new file mode 100644
index 000000000..1ceacd8c4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch
@@ -0,0 +1,36 @@
+[PATCH] conditionally check libvirt
+
+Upstream-Statue: Pending
+
+check if libvirt is available only when a user wants to use libvirt
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ configure.ac | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+Index: collectd-5.7.1/configure.ac
+===================================================================
+--- collectd-5.7.1.orig/configure.ac
++++ collectd-5.7.1/configure.ac
+@@ -5556,12 +5556,14 @@ else
+ with_libxml2="no (pkg-config doesn't know libxml-2.0)"
+ fi
+
+-$PKG_CONFIG --exists libvirt 2>/dev/null
+-if test "$?" = "0"
+-then
+- with_libvirt="yes"
+-else
+- with_libvirt="no (pkg-config doesn't know libvirt)"
++if test "x$enable_libvirt" = "xyes"; then
++ $PKG_CONFIG --exists libvirt 2>/dev/null
++ if test "$?" = "0"
++ then
++ with_libvirt="yes"
++ else
++ with_libvirt="no (pkg-config doesn't know libvirt)"
++ fi
+ fi
+ if test "x$with_libxml2" = "xyes"
+ then
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
new file mode 100644
index 000000000..5069a639c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
@@ -0,0 +1,125 @@
+From b459c55e4968321e5a82272cb39aa69d4054990f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 22 Apr 2017 11:54:57 -0700
+Subject: [PATCH] configure: Check for -Wno-error=format-truncation compiler
+ option
+
+If this option is supported by compiler then disable it ( gcc7+)
+Use -Werror to elevate the warning to an error in case compiler like clang
+which warn about unknown options but not error out unless asked for
+
+Fixes
+client.c:834:23: error: '%s' directive output may be truncated writing up to 1023 bytes into a region of size 1010 [-Werror=format-truncation=]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure.ac | 3 +-
+ m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 76 insertions(+), 1 deletion(-)
+ create mode 100644 m4/ax_check_compile_flag.m4
+
+diff --git a/configure.ac b/configure.ac
+index 8854542..edb8cfb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4,7 +4,6 @@ AC_INIT([collectd],[m4_esyscmd(./version-gen.sh)])
+ AC_CONFIG_SRCDIR(src/target_set.c)
+ AC_CONFIG_HEADERS(src/config.h)
+ AC_CONFIG_AUX_DIR([libltdl/config])
+-
+ dnl older automake's default of ARFLAGS=cru is noisy on newer binutils;
+ dnl we don't really need the 'u' even in older toolchains. Then there is
+ dnl older libtool, which spelled it AR_FLAGS
+@@ -6688,6 +6687,8 @@ then
+ AM_CFLAGS="$AM_CFLAGS -Werror"
+ AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
+ fi
++AX_CHECK_COMPILE_FLAG([-Werror -Werror=format-truncation],[AM_CFLAGS="$AM_CFLAGS -Wno-error=format-truncation" AM_CXXFLAGS="$AM_CXXFLAGS -Wno-error=format-truncation"])
++
+ AC_SUBST([AM_CFLAGS])
+ AC_SUBST([AM_CXXFLAGS])
+
+diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
+new file mode 100644
+index 0000000..dcabb92
+--- /dev/null
++++ b/m4/ax_check_compile_flag.m4
+@@ -0,0 +1,74 @@
++# ===========================================================================
++# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
++#
++# DESCRIPTION
++#
++# Check whether the given FLAG works with the current language's compiler
++# or gives an error. (Warnings, however, are ignored)
++#
++# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
++# success/failure.
++#
++# If EXTRA-FLAGS is defined, it is added to the current language's default
++# flags (e.g. CFLAGS) when the check is done. The check is thus made with
++# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
++# force the compiler to issue an error when a bad flag is given.
++#
++# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
++#
++# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
++# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
++# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 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 General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <https://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++#serial 5
++
++AC_DEFUN([AX_CHECK_COMPILE_FLAG],
++[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
++AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
++AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
++ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
++ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
++ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
++ [AS_VAR_SET(CACHEVAR,[yes])],
++ [AS_VAR_SET(CACHEVAR,[no])])
++ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
++AS_VAR_IF(CACHEVAR,yes,
++ [m4_default([$2], :)],
++ [m4_default([$3], :)])
++AS_VAR_POPDEF([CACHEVAR])dnl
++])dnl AX_CHECK_COMPILE_FLAGS
+--
+2.13.4
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch
new file mode 100644
index 000000000..be942e5ef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch
@@ -0,0 +1,24 @@
+Subject: fix to build with glibc 2.25
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/md.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/md.c b/src/md.c
+index 3725f9a..202225b 100644
+--- a/src/md.c
++++ b/src/md.c
+@@ -25,6 +25,7 @@
+ #include "utils_ignorelist.h"
+
+ #include <sys/ioctl.h>
++#include <sys/sysmacros.h>
+
+ #include <linux/major.h>
+ #include <linux/raid/md_u.h>
+--
+2.8.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.init b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.init
new file mode 100644
index 000000000..95f5f73c6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.init
@@ -0,0 +1,212 @@
+#!/bin/sh
+#
+# collectd - start and stop the statistics collection daemon
+# http://collectd.org/
+#
+# Copyright (C) 2005-2006 Florian Forster <octo@verplant.org>
+# Copyright (C) 2006-2009 Sebastian Harl <tokkee@debian.org>
+#
+
+### BEGIN INIT INFO
+# Provides: collectd
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Should-Start: $network $named $syslog $time cpufrequtils
+# Should-Stop: $network $named $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: manage the statistics collection daemon
+# Description: collectd is the statistics collection daemon.
+# It is a small daemon which collects system information
+# periodically and provides mechanisms to monitor and store
+# the values in a variety of ways.
+### END INIT INFO
+
+. /etc/init.d/functions
+
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+DISABLE=0
+
+NAME=collectd
+DAEMON=/usr/sbin/collectd
+
+CONFIGFILE=/etc/collectd.conf
+PIDFILE=/var/run/collectd.pid
+
+USE_COLLECTDMON=1
+COLLECTDMON_DAEMON=/usr/sbin/collectdmon
+COLLECTDMON_PIDFILE=/var/run/collectdmon.pid
+
+MAXWAIT=30
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+if [ -r /etc/default/$NAME ]; then
+ . /etc/default/$NAME
+fi
+
+if test "$ENABLE_COREFILES" == 1; then
+ ulimit -c unlimited
+fi
+
+if test "$USE_COLLECTDMON" == 1; then
+ _PIDFILE="$COLLECTDMON_PIDFILE"
+else
+ _PIDFILE="$PIDFILE"
+fi
+
+# return:
+# 0 if config is fine
+# 1 if there is a syntax error
+# 2 if there is no configuration
+check_config() {
+ if test ! -e "$CONFIGFILE"; then
+ return 2
+ fi
+ if ! $DAEMON -t -C "$CONFIGFILE"; then
+ return 1
+ fi
+ return 0
+}
+
+# return:
+# 0 if the daemon has been started
+# 1 if the daemon was already running
+# 2 if the daemon could not be started
+# 3 if the daemon was not supposed to be started
+d_start() {
+ if test "$DISABLE" != 0; then
+ # we get here during restart
+ echo "disabled by /etc/default/$NAME"
+ return 3
+ fi
+
+ if test ! -e "$CONFIGFILE"; then
+ # we get here during restart
+ echo "disabled, no configuration ($CONFIGFILE) found"
+ return 3
+ fi
+
+ check_config
+ rc="$?"
+ if test "$rc" -ne 0; then
+ echo "not starting, configuration error"
+ return 2
+ fi
+
+ if test "$USE_COLLECTDMON" == 1; then
+ start-stop-daemon --start --quiet --oknodo --pidfile "$_PIDFILE" \
+ --exec $COLLECTDMON_DAEMON -- -P "$_PIDFILE" -- -C "$CONFIGFILE" \
+ || return 2
+ else
+ start-stop-daemon --start --quiet --oknodo --pidfile "$_PIDFILE" \
+ --exec $DAEMON -- -C "$CONFIGFILE" -P "$_PIDFILE" \
+ || return 2
+ fi
+ return 0
+}
+
+still_running_warning="
+WARNING: $NAME might still be running.
+In large setups it might take some time to write all pending data to
+the disk. You can adjust the waiting time in /etc/default/collectd."
+
+# return:
+# 0 if the daemon has been stopped
+# 1 if the daemon was already stopped
+# 2 if daemon could not be stopped
+d_stop() {
+ PID=$( cat "$_PIDFILE" 2> /dev/null ) || true
+
+ start-stop-daemon --stop --quiet --oknodo --pidfile "$_PIDFILE"
+ rc="$?"
+
+ if test "$rc" -eq 2; then
+ return 2
+ fi
+
+ sleep 1
+ if test -n "$PID" && kill -0 $PID 2> /dev/null; then
+ i=0
+ while kill -0 $PID 2> /dev/null; do
+ i=$(( $i + 2 ))
+ echo -n " ."
+
+ if test $i -gt $MAXWAIT; then
+ echo "$still_running_warning"
+ return 2
+ fi
+
+ sleep 2
+ done
+ return "$rc"
+ fi
+ return "$rc"
+}
+
+# return:
+# 0 if the daemon is running
+# 3 if the daemon is stopped
+d_status(){
+ if test "$USE_COLLECTDMON" == 1; then
+ status $COLLECTDMON_DAEMON
+ else
+ status $DAEMON
+ fi
+}
+
+case "$1" in
+ start)
+ echo -n "Starting $NAME"
+ d_start
+ case "$?" in
+ 0|1) echo "." ;;
+ *) exit 1 ;;
+ esac
+ ;;
+ stop)
+ echo -n "Stopping $NAME"
+ d_stop
+ case "$?" in
+ 0|1) echo "." ;;
+ *) exit 1 ;;
+ esac
+ ;;
+ status)
+ d_status
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $NAME"
+ check_config
+ rc="$?"
+ if test "$rc" -eq 1; then
+ echo "not restarting, configuration error"
+ exit 1
+ fi
+ d_stop
+ rc="$?"
+ case "$rc" in
+ 0|1)
+ sleep 1
+ d_start
+ rc2="$?"
+ case "$rc2" in
+ 0|1) echo "." ;;
+ *) exit 1 ;;
+ esac
+ ;;
+ *)
+ exit 1
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
+ exit 3
+ ;;
+esac
+
+# vim: syntax=sh noexpandtab sw=4 ts=4 :
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.service b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.service
new file mode 100644
index 000000000..d835b735f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/collectd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Collectd
+After=local-fs.target network.target
+Requires=local-fs.target network.target
+
+[Service]
+ExecStart=@SBINDIR@/collectd -C /etc/collectd.conf -f
+Restart=always
+RestartSec=10
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/no-gcrypt-badpath.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/no-gcrypt-badpath.patch
new file mode 100644
index 000000000..1fde6a071
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/no-gcrypt-badpath.patch
@@ -0,0 +1,43 @@
+Index: collectd-5.7.1/configure.ac
+===================================================================
+--- collectd-5.7.1.orig/configure.ac
++++ collectd-5.7.1/configure.ac
+@@ -2305,7 +2305,7 @@ AC_ARG_WITH(libgcrypt, [AS_HELP_STRING([
+ with_libgcrypt="yes"
+ else if test -f "$withval/bin/gcrypt-config" && test -x "$withval/bin/gcrypt-config"
+ then
+- with_libgcrypt_config="$withval/bin/gcrypt-config"
++ with_libgcrypt_config="$withval/bin/pkg-config"
+ with_libgcrypt="yes"
+ else if test -d "$withval"
+ then
+@@ -2313,12 +2313,12 @@ AC_ARG_WITH(libgcrypt, [AS_HELP_STRING([
+ GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS -L$withval/lib"
+ with_libgcrypt="yes"
+ else
+- with_libgcrypt_config="gcrypt-config"
++ with_libgcrypt_config="pkg-config"
+ with_libgcrypt="$withval"
+ fi; fi; fi
+ ],
+ [
+- with_libgcrypt_config="libgcrypt-config"
++ with_libgcrypt_config="pkg-config"
+ with_libgcrypt="yes"
+ ])
+
+@@ -2326,12 +2326,12 @@ if test "x$with_libgcrypt" = "xyes" && t
+ then
+ if test "x$GCRYPT_CPPFLAGS" = "x"
+ then
+- GCRYPT_CPPFLAGS=`"$with_libgcrypt_config" --cflags 2>/dev/null`
++ GCRYPT_CPPFLAGS=`"$with_libgcrypt_config" --cflags libgcrypt 2>/dev/null`
+ fi
+
+ if test "x$GCRYPT_LIBS" = "x"
+ then
+- GCRYPT_LIBS=`"$with_libgcrypt_config" --libs 2>/dev/null`
++ GCRYPT_LIBS=`"$with_libgcrypt_config" --lib libgcrypt 2>/dev/null`
+ fi
+ fi
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.7.2.bb b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.7.2.bb
new file mode 100644
index 000000000..c156ea19c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.7.2.bb
@@ -0,0 +1,86 @@
+SUMMARY = "Collects and summarises system performance statistics"
+DESCRIPTION = "collectd is a daemon which collects system performance statistics periodically and provides mechanisms to store the values in a variety of ways, for example in RRD files."
+LICENSE = "GPLv2 & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1bd21f19f7f0c61a7be8ecacb0e28854"
+
+DEPENDS = "rrdtool curl libpcap libxml2 yajl libgcrypt libtool lvm2"
+
+SRC_URI = "http://collectd.org/files/collectd-${PV}.tar.bz2 \
+ file://collectd.init \
+ file://collectd.service \
+ file://no-gcrypt-badpath.patch \
+ file://0001-conditionally-check-libvirt.patch \
+ file://0001-fix-to-build-with-glibc-2.25.patch \
+ file://0001-configure-Check-for-Wno-error-format-truncation-comp.patch \
+"
+SRC_URI[md5sum] = "5da2b69c286a064db35c6cc1e758b039"
+SRC_URI[sha256sum] = "9d20a0221569a8d6b80bbc52b86e5e84965f5bafdbf5dfc3790e0fed0763e592"
+
+inherit autotools pythonnative update-rc.d pkgconfig systemd
+
+SYSTEMD_SERVICE_${PN} = "collectd.service"
+
+# Floatingpoint layout, architecture dependent
+# 'nothing', 'endianflip' or 'intswap'
+FPLAYOUT ?= "--with-fp-layout=nothing"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[openjdk] = "--with-java=${STAGING_DIR_TARGET}${libdir}/jvm,--without-java,openjdk-7"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp --with-libnetsnmp=no,net-snmp"
+PACKAGECONFIG[libmemcached] = "--with-libmemcached,--without-libmemcached,libmemcached"
+PACKAGECONFIG[iptables] = "--enable-iptables,--disable-iptables,iptables"
+PACKAGECONFIG[postgresql] = "--enable-postgresql --with-libpq=yes, \
+ --disable-postgresql --with-libpq=no,postgresql"
+PACKAGECONFIG[mysql] = "--enable-mysql --with-libmysql=yes, \
+ --disable-mysql --with-libmysql=no,mysql5"
+PACKAGECONFIG[dbi] = "--enable-dbi,--disable-dbi,libdbi"
+PACKAGECONFIG[modbus] = "--enable-modbus,--disable-modbus,libmodbus"
+PACKAGECONFIG[libowcapi] = "--with-libowcapi,--without-libowcapi,owfs"
+PACKAGECONFIG[sensors] = "--enable-sensors --with-libsensors=yes, \
+ --disable-sensors --with-libsensors=no,lmsensors"
+PACKAGECONFIG[amqp] = "--enable-amqp --with-librabbitmq=yes, \
+ --disable-amqp --with-librabbitmq=no,rabbitmq-c"
+# protobuf-c, libvirt that are currently only available in meta-virtualization layer
+PACKAGECONFIG[pinba] = "--enable-pinba,--disable-pinba,protobuf-c-native protobuf-c"
+PACKAGECONFIG[libvirt] = "--enable-libvirt,--disable-libvirt,libvirt"
+PACKAGECONFIG[libesmtp] = "--with-libesmtp,--without-libesmtp,libesmtp"
+PACKAGECONFIG[libmnl] = "--with-libmnl,--without-libmnl,libmnl"
+PACKAGECONFIG[libatasmart] = "--with-libatasmart,--without-libatasmart,libatasmart"
+PACKAGECONFIG[ldap] = "--enable-openldap --with-libldap,--disable-openldap --without-libldap, openldap"
+
+EXTRA_OECONF = " \
+ ${FPLAYOUT} \
+ --disable-perl --with-libperl=no --with-perl-bindings=no \
+ --with-libgcrypt=${STAGING_BINDIR_CROSS}/libgcrypt-config \
+ --disable-notify_desktop \
+"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/collectd.init ${D}${sysconfdir}/init.d/collectd
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/collectd
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/collectd
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/collectd
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/collectd
+
+ # Fix configuration file to allow collectd to start up
+ sed -i 's!^#FQDNLookup[ \t]*true!FQDNLookup false!g' ${D}${sysconfdir}/collectd.conf
+
+ rmdir "${D}${localstatedir}/run"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
+
+ # Install systemd unit files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/collectd.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_unitdir}/system/collectd.service
+}
+
+CONFFILES_${PN} = "${sysconfdir}/collectd.conf"
+
+INITSCRIPT_NAME = "collectd"
+INITSCRIPT_PARAMS = "defaults"
+
+# threshold.so load.so are also provided by gegl
+# disk.so is also provided by libgphoto2-camlibs
+PRIVATE_LIBS = "threshold.so load.so disk.so"
diff --git a/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.22.bb b/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.22.bb
new file mode 100644
index 000000000..2df7db9e8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.22.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Data recovery tool"
+DESCRIPTION = "GNU ddrescue is a data recovery tool. It copies data \
+ from one file or block device (hard disc, cdrom, etc) to another, \
+ trying hard to rescue data in case of read errors."
+HOMEPAGE = "http://www.gnu.org/software/ddrescue/ddrescue.html"
+SECTION = "console"
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=76d6e300ffd8fb9d18bd9b136a9bba13 \
+ file://main_common.cc;beginline=5;endline=16;md5=3ec288b2676528cd2b069364e313016f"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.lz"
+SRC_URI[md5sum] = "49c845ed89d25b534842e40366154cb4"
+SRC_URI[sha256sum] = "09857b2e8074813ac19da5d262890f722e5f7900e521a4c60354cef95eea10a7"
+
+# This isn't already added by base.bbclass
+do_unpack[depends] += "lzip-native:do_populate_sysroot"
+
+CONFIGUREOPTS = "\
+ '--srcdir=${S}' \
+ '--prefix=${prefix}' \
+ '--exec-prefix=${exec_prefix}' \
+ '--bindir=${bindir}' \
+ '--datadir=${datadir}' \
+ '--infodir=${infodir}' \
+ '--sysconfdir=${sysconfdir}' \
+ 'CXX=${CXX}' \
+ 'CPPFLAGS=${CPPFLAGS}' \
+ 'CXXFLAGS=${CXXFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+"
+EXTRA_OEMAKE = ""
+
+do_configure () {
+ ${S}/configure ${CONFIGUREOPTS}
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ # Info dir listing isn't interesting at this point so remove it if it exists.
+ if [ -e "${D}${infodir}/dir" ]; then
+ rm -f ${D}${infodir}/dir
+ fi
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20171209.bb b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20171209.bb
new file mode 100644
index 000000000..63c65c4fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20171209.bb
@@ -0,0 +1,29 @@
+SUMMARY = "display dialog boxes from shell scripts"
+DESCRIPTION = "Dialog lets you to present a variety of questions \
+or display messages using dialog boxes from a shell \
+script (or any scripting language)."
+HOMEPAGE = "http://invisible-island.net/dialog/"
+SECTION = "console/utils"
+DEPENDS = "ncurses"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI = "ftp://ftp.invisible-island.net/${BPN}/${BP}.tgz \
+ "
+SRC_URI[md5sum] = "f66f28beca900b54f5fc90fdcce93508"
+SRC_URI[sha256sum] = "20139442119e2eff5c35236e8e5e313c901539008d9cccf8c8ab3851b41267e6"
+
+# hardcoded here for use in dialog-static recipe
+S = "${WORKDIR}/dialog-${PV}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OECONF = "--with-ncurses \
+ --disable-rpath-hack"
+
+do_configure() {
+ gnu-configize --force
+ sed -i 's,${cf_ncuconfig_root}6-config,${cf_ncuconfig_root}-config,g' -i configure
+ sed -i 's,cf_have_ncuconfig=unknown,cf_have_ncuconfig=yes,g' -i configure
+ oe_runconf
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/dumb-init/dumb-init_1.2.0.bb b/meta-openembedded/meta-oe/recipes-extended/dumb-init/dumb-init_1.2.0.bb
new file mode 100644
index 000000000..e1a6d9508
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dumb-init/dumb-init_1.2.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Simple wrapper script which proxies signals to a child"
+HOMEPAGE = "https://github.com/Yelp/dumb-init/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5940d39995ea6857d01b8227109c2e9c"
+
+SRC_URI = "https://github.com/Yelp/dumb-init/archive/v${PV}.tar.gz"
+SRC_URI[md5sum] = "4eb7f43d7823686723ff7ac1bad097cb"
+SRC_URI[sha256sum] = "74486997321bd939cad2ee6af030f481d39751bc9aa0ece84ed55f864e309a3f"
+
+EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS} ${LDFLAGS}'"
+
+do_install() {
+ install -d ${D}${base_sbindir}
+ install ${S}/dumb-init ${D}${base_sbindir}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/enscript/enscript/enscript-autoconf.patch b/meta-openembedded/meta-oe/recipes-extended/enscript/enscript/enscript-autoconf.patch
new file mode 100644
index 000000000..d3bb5c03a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/enscript/enscript/enscript-autoconf.patch
@@ -0,0 +1,118 @@
+autoconf no longer supports AM_C_PROTOTYPES
+
+| configure.ac:14: error: automatic de-ANSI-fication support has been removed
+| /bitbake_build/tmp/sysroots/x86_64-linux/usr/share/aclocal-1.12/protos.m4:10: AM_C_PROTOTYPES is expanded from...
+
+Upstream-Status: Pending
+
+Author: Mark Hatle <mark.hatle@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+Index: enscript-1.6.6/configure.ac
+===================================================================
+--- enscript-1.6.6.orig/configure.ac
++++ enscript-1.6.6/configure.ac
+@@ -11,7 +11,6 @@ AC_PROG_INSTALL
+ AC_PROG_CC
+
+ AC_USE_SYSTEM_EXTENSIONS
+-AM_C_PROTOTYPES
+
+ AC_C_CONST
+ AC_FUNC_ALLOCA
+Index: enscript-1.6.6/afmlib/afm.h
+===================================================================
+--- enscript-1.6.6.orig/afmlib/afm.h
++++ enscript-1.6.6/afmlib/afm.h
+@@ -24,11 +24,7 @@
+ #define AFM_H
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ /**********************************************************************
+Index: enscript-1.6.6/afmlib/afmint.h
+===================================================================
+--- enscript-1.6.6.orig/afmlib/afmint.h
++++ enscript-1.6.6/afmlib/afmint.h
+@@ -34,11 +34,7 @@
+ #include <stdio.h>
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ #if STDC_HEADERS
+Index: enscript-1.6.6/afmlib/strhash.h
+===================================================================
+--- enscript-1.6.6.orig/afmlib/strhash.h
++++ enscript-1.6.6/afmlib/strhash.h
+@@ -24,11 +24,7 @@
+ #define STRHASH_H
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ typedef struct stringhash_st *StringHashPtr;
+Index: enscript-1.6.6/compat/xalloc.h
+===================================================================
+--- enscript-1.6.6.orig/compat/xalloc.h
++++ enscript-1.6.6/compat/xalloc.h
+@@ -28,11 +28,7 @@
+ #define XALLOC_H
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ void *xmalloc ___P ((size_t size));
+Index: enscript-1.6.6/src/gsint.h
+===================================================================
+--- enscript-1.6.6.orig/src/gsint.h
++++ enscript-1.6.6/src/gsint.h
+@@ -39,11 +39,7 @@
+ #include <sys/stat.h>
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ #if STDC_HEADERS
+Index: enscript-1.6.6/states/defs.h
+===================================================================
+--- enscript-1.6.6.orig/states/defs.h
++++ enscript-1.6.6/states/defs.h
+@@ -37,11 +37,7 @@
+ #include <ctype.h>
+
+ #ifndef ___P
+-#if PROTOTYPES
+ #define ___P(protos) protos
+-#else /* no PROTOTYPES */
+-#define ___P(protos) ()
+-#endif /* no PROTOTYPES */
+ #endif
+
+ #if STDC_HEADERS
diff --git a/meta-openembedded/meta-oe/recipes-extended/enscript/enscript_1.6.6.bb b/meta-openembedded/meta-oe/recipes-extended/enscript/enscript_1.6.6.bb
new file mode 100644
index 000000000..2b6d14e6c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/enscript/enscript_1.6.6.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A plain ASCII to PostScript converter"
+DESCRIPTION = "GNU enscript is a free replacement for Adobe''s Enscript \
+program. Enscript converts ASCII files to PostScript(TM) and spools generated \
+PostScript output to the specified printer or saves it to a file. Enscript can \
+be extended to handle different output media and includes many options for \
+customizing printouts."
+HOMEPAGE = "http://www.gnu.org/software/enscript/"
+SECTION = "console/utils"
+
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://enscript-autoconf.patch \
+"
+
+inherit autotools gettext
+
+EXTRA_OECONF += "PERL='${USRBINPATH}/env perl'"
+
+SRC_URI[md5sum] = "3acc242b829adacabcaf28533f049afd"
+SRC_URI[sha256sum] = "6d56bada6934d055b34b6c90399aa85975e66457ac5bf513427ae7fc77f5c0bb"
+
+RDEPENDS_${PN} = "perl"
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/0001-fluent-bit-shared-Link-with-lpthread.patch b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/0001-fluent-bit-shared-Link-with-lpthread.patch
new file mode 100644
index 000000000..e9eed24b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/0001-fluent-bit-shared-Link-with-lpthread.patch
@@ -0,0 +1,35 @@
+From 62fa9bceb15a9d160dd5d624a6d46907c1019c5c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 8 Sep 2017 17:02:55 -0700
+Subject: [PATCH] fluent-bit-shared: Link with -lpthread
+
+This fixes a reference to pthread_atfork in libfluent-bit.so
+otherwise we get undefined reference to the symbols in binaries
+which are linked with libfluent-bit.so
+
+Fixes errors like
+arm-bec-linux-gnueabi-ld: ../../bin/hello_world: hidden symbol `pthread_atfork' in /mnt/a/oe/build/tmp/work/cortexa7t2hf-neon-vfpv4-bec-linux-gnueabi/fluentbit/0.12.1-r0/recipe-sysroot/usr/lib/libpthread_nonshared.a(pthread_atfork.oS) is referenced by DSO
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ src/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 425a246..1264e59 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -168,7 +168,7 @@ set(FLB_DEPS
+ # Shared Library
+ if(NOT FLB_WITHOUT_SHARED_LIB)
+ add_library(fluent-bit-shared SHARED ${src})
+- target_link_libraries(fluent-bit-shared ${FLB_DEPS})
++ target_link_libraries(fluent-bit-shared ${FLB_DEPS} -lpthread)
+ set_target_properties(fluent-bit-shared
+ PROPERTIES OUTPUT_NAME fluent-bit)
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/jemalloc.patch b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/jemalloc.patch
new file mode 100644
index 000000000..abaf92c05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit/jemalloc.patch
@@ -0,0 +1,18 @@
+Add --with-jemalloc-prefix=je_ so it compiles on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: fluent-bit-0.12.1/CMakeLists.txt
+===================================================================
+--- fluent-bit-0.12.1.orig/CMakeLists.txt
++++ fluent-bit-0.12.1/CMakeLists.txt
+@@ -325,7 +325,7 @@ if(FLB_JEMALLOC AND ${CMAKE_SYSTEM_NAME}
+ # Link to Jemalloc as an external dependency
+ ExternalProject_Add(jemalloc
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jemalloc
+- CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/jemalloc/configure ${AUTOCONF_HOST_OPT} --with-lg-quantum=3 --enable-cc-silence --prefix=<INSTALL_DIR>
++ CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/jemalloc/configure --with-jemalloc-prefix=je_ ${AUTOCONF_HOST_OPT} --with-lg-quantum=3 --enable-cc-silence --prefix=<INSTALL_DIR>
+ CFLAGS=-std=gnu99\ -Wall\ -pipe\ -g3\ -O3\ -funroll-loops
+ BUILD_COMMAND ${MAKE}
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_0.12.1.bb b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_0.12.1.bb
new file mode 100644
index 000000000..99f680f9a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_0.12.1.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Fast data collector for Embedded Linux"
+HOMEPAGE = "http://fluentbit.io"
+BUGTRACKER = "https://github.com/fluent/fluent-bit/issues"
+
+SRC_URI = "http://fluentbit.io/releases/0.12/fluent-bit-${PV}.tar.gz \
+ file://jemalloc.patch \
+ file://0001-fluent-bit-shared-Link-with-lpthread.patch \
+ "
+SRC_URI[md5sum] = "6b4472cb7e7213a01425af9121576827"
+SRC_URI[sha256sum] = "8ec05365baea723033165687611b3bba3e67a77dce72e282e9f000f7acf9e37b"
+
+S = "${WORKDIR}/fluent-bit-${PV}"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+
+DEPENDS = "zlib"
+INSANE_SKIP_${PN}-dev += "dev-elf"
+
+inherit cmake systemd
+
+EXTRA_OECMAKE = "-DGNU_HOST=${HOST_SYS} -DFLB_ALL=ON -DFLB_TD=1"
+
+# With Ninja it fails with:
+# ninja: error: build.ninja:134: bad $-escape (literal $ must be written as $$)
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+SYSTEMD_SERVICE_${PN} = "td-agent-bit.service"
+
+TARGET_CC_ARCH_append = " ${SELECTED_OPTIMIZATION}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0001-reduce-build-to-conversion-tools-for-native-build.patch b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0001-reduce-build-to-conversion-tools-for-native-build.patch
new file mode 100644
index 000000000..f8f1fd00f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0001-reduce-build-to-conversion-tools-for-native-build.patch
@@ -0,0 +1,31 @@
+From a2ac966813fdc04b788be9c8474a4c5e36c109a0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 6 Mar 2018 21:53:26 +0100
+Subject: [PATCH] reduce build to conversion tools for native build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 9241ce5..b24e291 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in -*-Makefile-*-
+ AUTOMAKE_OPTIONS = foreign
+
+-SUBDIRS = config m4 term src docs man demo tutorial share
++SUBDIRS = docs
+
+ EXTRA_DIST = BUGS Copyright FAQ.pdf GNUmakefile INSTALL INSTALL.gnu \
+ Makefile.maint PATCHLEVEL PGPKEYS README RELEASE_NOTES \
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0002-do-not-build-demos.patch b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0002-do-not-build-demos.patch
new file mode 100644
index 000000000..8e0b4a271
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0002-do-not-build-demos.patch
@@ -0,0 +1,31 @@
+From a2ac966813fdc04b788be9c8474a4c5e36c109a0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 6 Mar 2018 21:53:26 +0100
+Subject: [PATCH] Do not build demos
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 9241ce5..b24e291 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in -*-Makefile-*-
+ AUTOMAKE_OPTIONS = foreign
+
+-SUBDIRS = config m4 term src docs man demo tutorial share
++SUBDIRS = config m4 term src docs man tutorial share
+
+ EXTRA_DIST = BUGS Copyright FAQ.pdf GNUmakefile INSTALL INSTALL.gnu \
+ Makefile.maint PATCHLEVEL PGPKEYS README RELEASE_NOTES \
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0003-Use-native-tools-to-build-docs.patch b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0003-Use-native-tools-to-build-docs.patch
new file mode 100644
index 000000000..a4039c317
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0003-Use-native-tools-to-build-docs.patch
@@ -0,0 +1,111 @@
+From 1128a98fd1676981e536d8773f363cb832cfa6bb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 6 Mar 2018 22:28:56 +0100
+Subject: [PATCH] Use native tools to build docs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ docs/Makefile.am | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/docs/Makefile.am b/docs/Makefile.am
+index 3baf0c4..e82f87d 100644
+--- a/docs/Makefile.am
++++ b/docs/Makefile.am
+@@ -152,7 +152,7 @@ gnuplot-groff.ps: gnuplot.ms $(srcdir)/titlepag.ms
+
+ ### doc2xxx dependencies
+ gnuplot.ms: doc2ms$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN) ./doc2ms$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.ms "$(srcdir)/titlepag.ms"
++ $(AM_V_GEN) doc2ms$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.ms "$(srcdir)/titlepag.ms"
+
+ doc2ms_SOURCES = doc2ms.c termdoc.c
+ doc2ms_CPPFLAGS = -DALL_TERM_DOC $(AM_CPPFLAGS)
+@@ -173,10 +173,10 @@ pdf_figures: $(GNUPLOT_EXE) $(srcdir)/plotstyles.gnu
+ $(AM_V_GEN)touch $@
+
+ figures.tex: allterm.h doc2tex$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN)./doc2tex$(EXEEXT) -figures $(srcdir)/gnuplot.doc $@
++ $(AM_V_GEN) doc2tex$(EXEEXT) -figures $(srcdir)/gnuplot.doc $@
+
+ nofigures.tex: allterm.h doc2tex$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN)./doc2tex$(EXEEXT) $(srcdir)/gnuplot.doc $@
++ $(AM_V_GEN) doc2tex$(EXEEXT) $(srcdir)/gnuplot.doc $@
+
+ pdf: gnuplot.pdf
+ pdf_nofig: nofigures.pdf
+@@ -256,7 +256,7 @@ gnuplot.ps: gnuplot.dvi
+ hlp: gnuplot.hlp
+
+ gnuplot.hlp: doc2hlp$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN)./doc2hlp$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.hlp
++ $(AM_V_GEN)doc2hlp$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.hlp
+
+ doc2hlp_SOURCES = doc2hlp.c termdoc.c
+
+@@ -264,14 +264,14 @@ doc2hlp_SOURCES = doc2hlp.c termdoc.c
+ gih: gnuplot.gih
+
+ gnuplot.gih: doc2gih$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN)./doc2gih$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.gih
++ $(AM_V_GEN)doc2gih$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.gih
+
+ doc2gih_SOURCES = doc2gih.c termdoc.c
+
+ # To include all terminals in the .gih file
+ allgih: alldoc2gih$(EXEEXT) $(srcdir)/gnuplot.doc
+ @echo "generate gnuplot.gih with all terminals"
+- $(AM_V_at)./alldoc2gih$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.gih
++ $(AM_V_at)alldoc2gih$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.gih
+
+ alldoc2gih_SOURCES = doc2gih.c termdoc.c
+ alldoc2gih_CPPFLAGS = -DALL_TERM_DOC $(AM_CPPFLAGS)
+@@ -286,7 +286,7 @@ $(srcdir)/windows/wgnuplot.hhk
+ wxhelp/wgnuplot.hhc wxhelp/wgnuplot.hhk wxhelp/*.html windows/*.png
+
+ wxhelp/wgnuplot.html: doc2wxhtml$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN) ./doc2wxhtml$(EXEEXT) $(srcdir)/gnuplot.doc wxhelp/
++ $(AM_V_GEN) doc2wxhtml$(EXEEXT) $(srcdir)/gnuplot.doc wxhelp/
+
+ #doc2wxhtml_SOURCES = windows/doc2html.c termdoc.c xref.c allterm.h
+ #doc2wxhtml_CPPFLAGS = -DALL_TERM_DOC -DWXHELP -I../src $(AM_CPPFLAGS)
+@@ -336,7 +336,7 @@ install-info: gnuplot.info
+ ipf: gnuplot.ipf
+
+ gnuplot.ipf: doc2ipf$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN) ./doc2ipf$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.ipf
++ $(AM_V_GEN) doc2ipf$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.ipf
+
+ doc2ipf_SOURCES = doc2ipf.c termdoc.c xref.c
+
+@@ -344,7 +344,7 @@ doc2ipf_SOURCES = doc2ipf.c termdoc.c xref.c
+ rtf: gnuplot.rtf
+
+ gnuplot.rtf: doc2rtf$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN) ./doc2rtf$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.rtf
++ $(AM_V_GEN) doc2rtf$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.rtf
+
+ doc2rtf_SOURCES = doc2rtf.c termdoc.c xref.c
+
+@@ -352,13 +352,13 @@ doc2rtf_SOURCES = doc2rtf.c termdoc.c xref.c
+ rnh: gnuplot.rnh
+
+ gnuplot.rnh: doc2rnh$(EXEEXT) $(srcdir)/gnuplot.doc
+- $(AM_V_GEN) ./doc2rnh$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.rnh
++ $(AM_V_GEN) doc2rnh$(EXEEXT) $(srcdir)/gnuplot.doc gnuplot.rnh
+
+ doc2rnh_SOURCES = doc2rnh.c termdoc.c
+
+ # this is how to check the gnuplot.doc file
+ check-local: checkdoc$(EXEEXT)
+- $(AM_V_at)./checkdoc$(EXEEXT) < $(srcdir)/gnuplot.doc; \
++ $(AM_V_at)checkdoc$(EXEEXT) < $(srcdir)/gnuplot.doc; \
+ if test $$? -eq 0; then \
+ echo "PASS: gnuplot.doc"; \
+ else \
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0004-Add-configure-option-to-find-qt5-native-tools.patch b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0004-Add-configure-option-to-find-qt5-native-tools.patch
new file mode 100644
index 000000000..7ed9e761f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/0004-Add-configure-option-to-find-qt5-native-tools.patch
@@ -0,0 +1,42 @@
+From 577e21622475fa29fd471149cf2380c53fdbfcbd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 6 Mar 2018 22:26:48 +0100
+Subject: [PATCH] Add configure option to find qt5 native tools
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Pkg-config checks for target locations. With these qt5 tools as uic/moc..
+cannot be used.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ configure.ac | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index cdd831a..fdd192b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1133,11 +1133,15 @@ if test "${enable_qt}" = yes ; then
+ else
+ try_qt4=yes
+ fi
++ AC_ARG_WITH(qt5nativesysroot,
++ AC_HELP_STRING([--with-qt5nativesysroot=PATH], [prepend path - for native qt5 tools]),
++ [QT5NATIVESYSROOT="$withval"], [QT5NATIVESYSROOT=""])
++
+ if test "x${with_qt}" != "xqt4"; then
+ PKG_CHECK_MODULES_NOFAIL(QT, [Qt5Core Qt5Gui Qt5Network Qt5Svg Qt5PrintSupport])
+ if test $pkg_failed = no; then
+ try_qt4=no
+- QT5LOC=`$PKG_CONFIG --variable=host_bins Qt5Core`
++ QT5LOC=${QT5NATIVESYSROOT}`$PKG_CONFIG --variable=host_bins Qt5Core`
+ if test "x${QT5LOC}" != "x"; then
+ UIC=${QT5LOC}/uic
+ MOC=${QT5LOC}/moc
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.desktop b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.desktop
new file mode 100644
index 000000000..1012e477f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=Gnuplot
+Comment=Plot data and function graphs
+Exec=gnuplot
+Terminal=true
+Type=Application
+Icon=gnuplot
+Categories=Science;
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.png b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.png
new file mode 100644
index 000000000..054cd9e7c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot/gnuplot.png
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot_5.2.2.bb b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot_5.2.2.bb
new file mode 100644
index 000000000..4cc289d3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/gnuplot/gnuplot_5.2.2.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Gnuplot is a portable command-line driven graphing utility"
+DESCRIPTION = "Gnuplot is a portable command-line driven interactive datafile \
+(text or binary) and function plotting utility."
+HOMEPAGE = "http://www.gnuplot.info/"
+SECTION = "console/scientific"
+LICENSE = "gnuplot"
+LIC_FILES_CHKSUM = "file://Copyright;md5=243a186fc2fd3b992125d60d5b1bab8f"
+DEPENDS = "${BPN}-native virtual/libx11 gd readline"
+
+inherit autotools distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${BP}.tar.gz;name=archive \
+ http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz;name=qtplot \
+ file://gnuplot.desktop \
+ file://gnuplot.png \
+"
+SRC_URI_append_class-target = " \
+ file://0002-do-not-build-demos.patch \
+ file://0003-Use-native-tools-to-build-docs.patch \
+ file://0004-Add-configure-option-to-find-qt5-native-tools.patch \
+"
+
+SRC_URI[archive.md5sum] = "60aedd08998160593199459dea8467fe"
+SRC_URI[archive.sha256sum] = "a416d22f02bdf3873ef82c5eb7f8e94146795811ef808e12b035ada88ef7b1a1"
+SRC_URI[qtplot.md5sum] = "0a481885a496092c77eb4017540b5cf6"
+SRC_URI[qtplot.sha256sum] = "6df317183ff62cc82f3dcf88207a267cd6478cb5147f55d7530c94f1ad5f4132"
+
+# for building docs (they deserve it) we need *doc2* tools native
+BBCLASSEXTEND = "native"
+DEPENDS_class-native = "readline-native"
+PACKAGECONFIG_class-native = ""
+
+SRC_URI_append_class-native = "file://0001-reduce-build-to-conversion-tools-for-native-build.patch"
+
+do_install_class-native() {
+ install -d ${D}${bindir}
+ install ${B}/docs/*doc* ${D}${bindir}
+ rm ${D}${bindir}/*.o
+}
+
+PACKAGECONFIG ??= "cairo"
+PACKAGECONFIG[cairo] = "--with-cairo,--without-cairo,cairo pango"
+PACKAGECONFIG[lua] = "--with-lua,--without-lua,lua"
+PACKAGECONFIG[qt5] = "--with-qt --with-qt5nativesysroot=${STAGING_DIR_NATIVE},--without-qt,qtbase-native qtbase qtsvg qttools-native"
+
+EXTRA_OECONF = "--with-readline=${STAGING_LIBDIR}/.. \
+ --without-tutorial \
+ --disable-wxwidgets"
+
+do_compile_prepend() {
+ install -m 0644 ${WORKDIR}/qtplot-0.2/qtopia.trm ${S}/term/
+}
+
+do_install_append_class-target() {
+ install -d ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/gnuplot.desktop ${D}${datadir}/applications/
+ install -d ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/gnuplot.png ${D}${datadir}/pixmaps/
+}
+
+PACKAGES =+ "${PN}-x11-dbg ${PN}-x11"
+DESCRIPTION_${PN}-x11 = "X11 display terminal for Gnuplot."
+SECTION_${PN}-x11 = "x11/scientific"
+FILES_${PN}-x11 = "${libexecdir} ${datadir}/applications ${datadir}/pixmaps ${libdir}/X11 "
+
+FILES_${PN} += "${datadir}/texmf"
+FILES_${PN}-x11-dbg += "${libexecdir}/gnuplot/*/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/haveged/haveged/haveged-init.d-Makefile.am-add-missing-dependency.patch b/meta-openembedded/meta-oe/recipes-extended/haveged/haveged/haveged-init.d-Makefile.am-add-missing-dependency.patch
new file mode 100644
index 000000000..36fd57c9b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/haveged/haveged/haveged-init.d-Makefile.am-add-missing-dependency.patch
@@ -0,0 +1,32 @@
+From b04eeea777df32364df74bd63fc5b7fb05d21c8d Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 27 Mar 2018 10:21:09 +0800
+Subject: [PATCH] init.d/Makefile.am: add missing dependency
+
+install-data-hook should epend on install-exec-hook, or the
+haveged.service might be installed incorrectly when build
+with -j option.
+
+Upstream-Status: Inappropriate [no upstream mailing list]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ init.d/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/init.d/Makefile.am b/init.d/Makefile.am
+index 5940f78..07bcdf7 100644
+--- a/init.d/Makefile.am
++++ b/init.d/Makefile.am
+@@ -33,7 +33,7 @@ if ENABLE_SYSTEMD
+ install-exec-hook:
+ $(do_subst) < $(srcdir)/$(src_tmpl) > haveged.service;
+
+-install-data-hook:
++install-data-hook: install-exec-hook
+ if ENABLE_SYSTEMD_LOOKUP
+ install -p -D -m644 haveged.service $(DESTDIR)`pkg-config --variable=systemdsystemunitdir systemd`/haveged.service;
+ else
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/haveged/haveged_1.9.2.bb b/meta-openembedded/meta-oe/recipes-extended/haveged/haveged_1.9.2.bb
new file mode 100644
index 000000000..05ee842f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/haveged/haveged_1.9.2.bb
@@ -0,0 +1,40 @@
+SUMMARY = "haveged - A simple entropy daemon"
+DESCRIPTION = "The haveged project is an attempt to provide an easy-to-use, unpredictable random number generator based upon an adaptation of the HAVEGE algorithm. Haveged was created to remedy low-entropy conditions in the Linux random device that can occur under some workloads, especially on headless servers."
+AUTHOR = "Gary Wuertz"
+HOMEPAGE = "http://www.issihosts.com/haveged/index.html"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM="file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://www.issihosts.com/haveged/haveged-${PV}.tar.gz \
+ file://haveged-init.d-Makefile.am-add-missing-dependency.patch \
+"
+
+SRC_URI[md5sum] = "fb1d8b3dcbb9d06b30eccd8aa500fd31"
+SRC_URI[sha256sum] = "f77d9adbdf421b61601fa29faa9ce3b479d910f73c66b9e364ba8642ccbfbe70"
+
+inherit autotools update-rc.d systemd
+
+EXTRA_OECONF = "\
+ --enable-nistest=yes \
+ --enable-olt=yes \
+ --enable-threads=no \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--enable-init=service.redhat --enable-initdir=${systemd_system_unitdir}, --enable-init=sysv.redhat, systemd"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME = "haveged"
+INITSCRIPT_PARAMS_${PN} = "defaults 9"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "haveged.service"
+
+do_install_append() {
+ # The exit status is 143 when the service is stopped
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ sed -i '/ExecStart/a SuccessExitStatus=143' ${D}${systemd_system_unitdir}/haveged.service
+ fi
+}
+
+MIPS_INSTRUCTION_SET = "mips"
diff --git a/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb b/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb
new file mode 100644
index 000000000..050b7da3d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "view and edit files in hexadecimal or in ASCII"
+HOMEPAGE = "http://rigaux.org/hexedit.html"
+SECTION = "console/utils"
+LICENSE = "GPLv2+"
+DEPENDS = "ncurses"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "git://github.com/pixel/hexedit.git \
+ "
+
+SRCREV = "800e4b2e6280531a84fd23ee0b48e16baeb90878"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
diff --git a/meta-openembedded/meta-oe/recipes-extended/hiredis/files/0001-Makefile-remove-hardcoding-of-CC.patch b/meta-openembedded/meta-oe/recipes-extended/hiredis/files/0001-Makefile-remove-hardcoding-of-CC.patch
new file mode 100644
index 000000000..fef2bc754
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hiredis/files/0001-Makefile-remove-hardcoding-of-CC.patch
@@ -0,0 +1,32 @@
+From d13b918a3ff8b0ebfd1e7b18b198b4b45841d720 Mon Sep 17 00:00:00 2001
+From: Andrea Galbusera <gizero@gmail.com>
+Date: Fri, 31 Jul 2015 16:42:08 +0200
+Subject: [PATCH] Makefile: remove hardcoding of CC
+
+* upgrade previous patch to avoid wiping CFLAGS. This fixes build on arm
+platforms which previously caused and issue due to -fPIC being lost
+
+Signed-off-by: Andrea Galbusera <gizero@gmail.com>
+---
+ Makefile | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8b0f0c2..66a4317 100644
+--- a/Makefile
++++ b/Makefile
+@@ -34,11 +34,6 @@ define REDIS_TEST_CONFIG
+ endef
+ export REDIS_TEST_CONFIG
+
+-# Fallback to gcc when $CC is not in $PATH.
+-CC:=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
+-OPTIMIZATION?=-O3
+-WARNINGS=-Wall -W -Wstrict-prototypes -Wwrite-strings
+-DEBUG?= -g -ggdb
+ REAL_CFLAGS=$(OPTIMIZATION) -fPIC $(CFLAGS) $(WARNINGS) $(DEBUG) $(ARCH)
+ REAL_LDFLAGS=$(LDFLAGS) $(ARCH)
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/hiredis/hiredis_0.13.1.bb b/meta-openembedded/meta-oe/recipes-extended/hiredis/hiredis_0.13.1.bb
new file mode 100644
index 000000000..fae30d771
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hiredis/hiredis_0.13.1.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Minimalistic C client library for Redis"
+HOMEPAGE = "http://github.com/redis/hiredis"
+LICENSE = "BSD-3-Clause"
+SECTION = "libs"
+DEPENDS = "redis"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d84d659a35c666d23233e54503aaea51"
+SRC_URI = "git://github.com/redis/hiredis;protocol=git;rev=f58dd249d6ed47a7e835463c3b04722972281dbb \
+ file://0001-Makefile-remove-hardcoding-of-CC.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OEMAKE = "PREFIX=${prefix}"
+
+# By default INSTALL variable in Makefile is equal to 'cp -a', which preserves
+# ownership and causes host-user-contamination QA issue.
+# And PREFIX defaults to /usr/local.
+do_install_prepend() {
+ export INSTALL='cp -r'
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch
new file mode 100644
index 000000000..f259b5f05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch
@@ -0,0 +1,42 @@
+From 7ef9c040dd959105c16d4dc67e14f3bbea25e77f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Dec 2016 19:51:19 +0000
+Subject: [PATCH] include cups/ppd.h for missing ppd definitions
+
+Fixes errors spotted by clang
+
+| prnt/hpcups/HPCupsFilter.cpp:365:18: error: use of undeclared identifier 'ppdFindAttr'
+| if (((attr = ppdFindAttr(m_ppd, "hpPrinterLanguage", NULL)) == NULL) ||
+| ^
+| prnt/hpcups/HPCupsFilter.cpp:368:13: error: use of undeclared identifier 'ppdClose'
+| ppdClose(m_ppd);
+| ^
+| prnt/hpcups/HPCupsFilter.cpp:444:9: error: use of undeclared identifier 'ppdClose'
+| ppdClose(m_ppd);
+| ^
+| prnt/hpcups/HPCupsFilter.cpp:497:13: error: use of undeclared identifier 'ppdOpenFile'
+| m_ppd = ppdOpenFile(getenv("PPD"));
+| ^
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ prnt/hpcups/HPCupsFilter.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/prnt/hpcups/HPCupsFilter.h b/prnt/hpcups/HPCupsFilter.h
+index 0431a7a..eb0cad6 100644
+--- a/prnt/hpcups/HPCupsFilter.h
++++ b/prnt/hpcups/HPCupsFilter.h
+@@ -37,6 +37,7 @@
+ #include "Job.h"
+
+ #include "dbuscomm.h"
++#include <cups/ppd.h>
+
+ #define DBITMAPFILEHEADER 14
+ #define DBITMAPINFOHEADER 40
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch
new file mode 100644
index 000000000..31c005c60
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch
@@ -0,0 +1,14 @@
+Index: hplip-3.12.6/configure.in
+===================================================================
+--- hplip-3.12.6.orig/configure.in 2014-07-16 20:03:51.310044196 +0000
++++ hplip-3.12.6/configure.in 2014-07-18 07:53:31.589559192 +0000
+@@ -27,8 +27,7 @@
+
+ #AC_PREREQ(2.59)
+ AC_INIT([HP Linux Imaging and Printing], [3.12.6], [3.12.6], [hplip])
+-#AM_INIT_AUTOMAKE([1.9 foreign])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([1.9 foreign])
+ AC_DISABLE_STATIC
+
+ # Checks for programs.
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch
new file mode 100644
index 000000000..7df01aab3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch
@@ -0,0 +1,395 @@
+Imported from gentoo:
+https://bugs.gentoo.org/show_bug.cgi?id=428672
+
+diff -Naur hplip-3.12.6_old/prnt/cupsext/cupsext.c hplip-3.12.6/prnt/cupsext/cupsext.c
+--- hplip-3.12.6_old/prnt/cupsext/cupsext.c 2012-08-04 09:18:18.388330038 +0200
++++ hplip-3.12.6/prnt/cupsext/cupsext.c 2012-08-04 09:18:27.855181327 +0200
+@@ -87,6 +87,46 @@
+ #define PY_SSIZE_T_MIN INT_MIN
+ #endif
+
++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
++#define HAVE_CUPS_1_6 1
++#endif
++
++#ifndef HAVE_CUPS_1_6
++#define ippGetCount(attr) attr->num_values
++#define ippGetGroupTag(attr) attr->group_tag
++#define ippGetValueTag(attr) attr->value_tag
++#define ippGetName(attr) attr->name
++#define ippGetBoolean(attr, element) attr->values[element].boolean
++#define ippGetInteger(attr, element) attr->values[element].integer
++#define ippGetStatusCode(ipp) ipp->request.status.status_code
++#define ippGetString(attr, element, language) attr->values[element].string.text
++
++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp )
++{
++ if (!ipp)
++ return (NULL);
++ return (ipp->current = ipp->attrs);
++}
++
++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp )
++{
++ if (!ipp || !ipp->current)
++ return (NULL);
++ return (ipp->current = ipp->current->next);
++}
++
++static int ippSetOperation( ipp_t *ipp, ipp_op_t op )
++{
++ ipp->request.op.operation_id = op;
++ return (1);
++}
++
++static int ippSetRequestId( ipp_t *ipp, int request_id )
++{
++ ipp->request.any.request_id = request_id;
++ return (1);
++}
++#endif
+
+ int g_num_options = 0;
+ cups_option_t * g_options;
+@@ -333,8 +373,8 @@
+ request = ippNew();
+ language = cupsLangDefault();
+
+- request->request.op.operation_id = CUPS_GET_PRINTERS;
+- request->request.any.request_id = 1;
++ ippSetOperation( request, CUPS_GET_PRINTERS );
++ ippSetRequestId ( request, 1);
+
+ ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
+ "attributes-charset", NULL, cupsLangEncoding( language ) );
+@@ -378,10 +418,10 @@
+ ipp_pstate_t state;
+ int i = 0;
+
+- for ( attr = response->attrs; attr != NULL; attr = attr->next )
++ for ( attr = ippFirstAttribute( response ); attr != NULL; attr = ippNextAttribute( response ) )
+ {
+- while ( attr != NULL && attr->group_tag != IPP_TAG_PRINTER )
+- attr = attr->next;
++ while ( attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER )
++ attr = ippNextAttribute( response );
+
+ if ( attr == NULL )
+ break;
+@@ -390,41 +430,41 @@
+ state = IPP_PRINTER_IDLE;
+ accepting = 0;
+
+- while ( attr != NULL && attr->group_tag == IPP_TAG_PRINTER )
++ while ( attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER )
+ {
+- if ( strcmp( attr->name, "printer-name" ) == 0 &&
+- attr->value_tag == IPP_TAG_NAME )
+- name = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "device-uri" ) == 0 &&
+- attr->value_tag == IPP_TAG_URI )
+- device_uri = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "printer-uri-supported" ) == 0 &&
+- attr->value_tag == IPP_TAG_URI )
+- printer_uri = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "printer-info" ) == 0 &&
+- attr->value_tag == IPP_TAG_TEXT )
+- info = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "printer-location" ) == 0 &&
+- attr->value_tag == IPP_TAG_TEXT )
+- location = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "printer-make-and-model" ) == 0 &&
+- attr->value_tag == IPP_TAG_TEXT )
+- make_model = attr->values[ 0 ].string.text;
+-
+- else if ( strcmp( attr->name, "printer-state" ) == 0 &&
+- attr->value_tag == IPP_TAG_ENUM )
+- state = ( ipp_pstate_t ) attr->values[ 0 ].integer;
+-
+- else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
+- attr->value_tag == IPP_TAG_BOOLEAN)
+- accepting = attr->values[ 0 ].boolean;
++ if ( strcmp( ippGetName( attr ), "printer-name" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_NAME )
++ name = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "device-uri" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_URI )
++ device_uri = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "printer-uri-supported" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_URI )
++ printer_uri = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "printer-info" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_TEXT )
++ info = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "printer-location" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_TEXT )
++ location = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "printer-make-and-model" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_TEXT )
++ make_model = ippGetString( attr, 0, NULL );
++
++ else if ( strcmp( ippGetName( attr ), "printer-state" ) == 0 &&
++ ippGetValueTag( attr ) == IPP_TAG_ENUM )
++ state = ( ipp_pstate_t ) ippGetInteger( attr, 0 );
++
++ else if (!strcmp(ippGetName( attr ), "printer-is-accepting-jobs") &&
++ ippGetValueTag( attr ) == IPP_TAG_BOOLEAN)
++ accepting = ippGetBoolean( attr, 0 );
+
+- attr = attr->next;
++ attr = ippNextAttribute( response );
+ }
+
+ if ( device_uri == NULL )
+@@ -522,8 +562,8 @@
+ request = ippNew();
+ language = cupsLangDefault();
+
+- request->request.op.operation_id = CUPS_ADD_PRINTER;
+- request->request.any.request_id = 1;
++ ippSetOperation( request, CUPS_ADD_PRINTER );
++ ippSetRequestId ( request, 1 );
+
+ ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
+ "attributes-charset", NULL, cupsLangEncoding( language ) );
+@@ -568,7 +608,7 @@
+ }
+ else
+ {
+- status = response->request.status.status_code;
++ status = ippGetStatusCode( response );
+ //ippDelete( response );
+ r = 1;
+ }
+@@ -631,8 +671,8 @@
+ */
+ request = ippNew();
+
+- request->request.op.operation_id = CUPS_DELETE_PRINTER;
+- request->request.op.request_id = 1;
++ ippSetOperation( request, CUPS_DELETE_PRINTER );
++ ippSetRequestId ( request, 1 );
+
+ language = cupsLangDefault();
+
+@@ -650,7 +690,7 @@
+ */
+ response = cupsDoRequest( http, request, "/admin/" );
+
+- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )
++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )
+ {
+ r = 1;
+ }
+@@ -721,8 +761,8 @@
+
+ request = ippNew();
+
+- request->request.op.operation_id = CUPS_SET_DEFAULT;
+- request->request.op.request_id = 1;
++ ippSetOperation( request, CUPS_SET_DEFAULT );
++ ippSetRequestId ( request, 1 );
+
+ language = cupsLangDefault();
+
+@@ -743,7 +783,7 @@
+
+ response = cupsDoRequest( http, request, "/admin/" );
+
+- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )
++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )
+ {
+ r = 1;
+ }
+@@ -797,8 +837,8 @@
+
+ request = ippNew();
+
+- request->request.op.operation_id = op;
+- request->request.op.request_id = 1;
++ ippSetOperation( request, op );
++ ippSetRequestId ( request, 1 );
+
+ language = cupsLangDefault();
+
+@@ -822,7 +862,7 @@
+
+ response = cupsDoRequest(http, request, "/admin/");
+
+- if (( response != NULL ) && (response->request.status.status_code <= IPP_OK_CONFLICT))
++ if (( response != NULL ) && (ippGetStatusCode( response ) <= IPP_OK_CONFLICT))
+ {
+ r = 1;
+ }
+@@ -837,7 +877,7 @@
+ if ( response != NULL )
+ ippDelete( response );
+
+- return Py_BuildValue( "i", r );;
++ return Py_BuildValue( "i", r );
+ }
+
+
+@@ -1116,8 +1156,8 @@
+
+ request = ippNew();
+
+- request->request.op.operation_id = CUPS_GET_PPDS;
+- request->request.op.request_id = 1;
++ ippSetOperation( request, CUPS_GET_PPDS );
++ ippSetRequestId ( request, 1 );
+
+ language = cupsLangDefault();
+
+@@ -1143,43 +1183,43 @@
+ if ((response = cupsDoRequest(http, request, "/")) != NULL)
+ {
+
+- for (attr = response->attrs; attr; attr = attr->next)
++ for (attr = ippFirstAttribute( response ); attr; attr = ippNextAttribute( response ))
+ {
+ PyObject *dict;
+ char *ppdname = NULL;
+
+- while (attr && attr->group_tag != IPP_TAG_PRINTER)
+- attr = attr->next;
++ while (attr && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)
++ attr = ippNextAttribute( response );
+
+ if (!attr)
+ break;
+
+ dict = PyDict_New ();
+
+- for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next)
++ for (; attr && ippGetGroupTag( attr ) == IPP_TAG_PRINTER; attr = ippNextAttribute( response ))
+ {
+ PyObject *val = NULL;
+
+- if (!strcmp (attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME)
++ if (!strcmp (ippGetName( attr ), "ppd-name") && ippGetValueTag( attr ) == IPP_TAG_NAME)
+ {
+- ppdname = attr->values[0].string.text;
++ ppdname = ippGetString( attr, 0, NULL );
+
+ //sprintf( buf, "print '%s'", ppdname);
+ //PyRun_SimpleString( buf );
+ }
+
+- else if (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD)
+- //else if ((!strcmp (attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) ||
+- // (!strcmp (attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) ||
+- // (!strcmp (attr->name, "ppd-make") && attr->value_tag == IPP_TAG_TEXT) ||
+- // (!strcmp (attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT))
++ else if (ippGetValueTag( attr ) == IPP_TAG_TEXT || ippGetValueTag( attr ) == IPP_TAG_NAME || ippGetValueTag( attr ) == IPP_TAG_KEYWORD)
++ //else if ((!strcmp (ippGetName( attr ), "ppd-natural-language") && ippGetValueTag( attr ) == IPP_TAG_LANGUAGE) ||
++ // (!strcmp (ippGetName( attr ), "ppd-make-and-model") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||
++ // (!strcmp (ippGetName( attr ), "ppd-make") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||
++ // (!strcmp (ippGetName( attr ), "ppd-device-id") && ippGetValueTag( attr ) == IPP_TAG_TEXT))
+ {
+- val = PyObj_from_UTF8(attr->values[0].string.text);
++ val = PyObj_from_UTF8(ippGetString( attr, 0, NULL ));
+ }
+
+ if (val)
+ {
+- PyDict_SetItemString (dict, attr->name, val);
++ PyDict_SetItemString (dict, ippGetName( attr ), val);
+ Py_DECREF (val);
+ }
+ }
+diff -Naur hplip-3.12.6_old/scan/sane/hpaio.c hplip-3.12.6/scan/sane/hpaio.c
+--- hplip-3.12.6_old/scan/sane/hpaio.c 2012-08-04 09:18:21.458389913 +0200
++++ hplip-3.12.6/scan/sane/hpaio.c 2012-08-04 09:18:27.875181720 +0200
+@@ -47,6 +47,43 @@
+ #define DEBUG_DECLARE_ONLY
+ #include "sanei_debug.h"
+
++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
++#define HAVE_CUPS_1_6 1
++#endif
++
++#ifndef HAVE_CUPS_1_6
++#define ippGetGroupTag(attr) attr->group_tag
++#define ippGetValueTag(attr) attr->value_tag
++#define ippGetName(attr) attr->name
++#define ippGetString(attr, element, language) attr->values[element].string.text
++
++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp )
++{
++ if (!ipp)
++ return (NULL);
++ return (ipp->current = ipp->attrs);
++}
++
++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp )
++{
++ if (!ipp || !ipp->current)
++ return (NULL);
++ return (ipp->current = ipp->current->next);
++}
++
++static int ippSetOperation( ipp_t *ipp, ipp_op_t op )
++{
++ ipp->request.op.operation_id = op;
++ return (1);
++}
++
++static int ippSetRequestId( ipp_t *ipp, int request_id )
++{
++ ipp->request.any.request_id = request_id;
++ return (1);
++}
++#endif
++
+ static SANE_Device **DeviceList = NULL;
+
+ static int AddDeviceList(char *uri, char *model, SANE_Device ***pd)
+@@ -186,8 +223,8 @@
+ /* Assemble the IPP request */
+ request = ippNew();
+
+- request->request.op.operation_id = CUPS_GET_PRINTERS;
+- request->request.any.request_id = 1;
++ ippSetOperation( request, CUPS_GET_PRINTERS );
++ ippSetRequestId( request, 1 );
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8");
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en");
+@@ -197,20 +234,20 @@
+ if ((response = cupsDoRequest(http, request, "/")) == NULL)
+ goto bugout;
+
+- for (attr = response->attrs; attr != NULL; attr = attr->next)
++ for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response ))
+ {
+ /* Skip leading attributes until we hit a printer. */
+- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
+- attr = attr->next;
++ while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)
++ attr = ippNextAttribute( response );
+
+ if (attr == NULL)
+ break;
+
+- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
++ while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER)
+ {
+- if (strcmp(attr->name, "device-uri") == 0 && attr->value_tag == IPP_TAG_URI && AddCupsList(attr->values[0].string.text, printer) == 0)
++ if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0)
+ cnt++;
+- attr = attr->next;
++ attr = ippNextAttribute( response );
+ }
+
+ if (attr == NULL)
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch
new file mode 100644
index 000000000..b347f831c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch
@@ -0,0 +1,35 @@
+Upstream-Status: Inappropriate [configuration]
+
+diff -rupN hplip-3.12.6_orig/configure.in hplip-3.12.6/configure.in
+--- hplip-3.12.6_orig/configure.in 2012-06-18 20:44:24.000000000 +1000
++++ hplip-3.12.6/configure.in 2012-08-16 13:40:07.259927650 +1000
+@@ -524,6 +524,8 @@ if test "$hpijs_only_build" = "no"; then
+ AC_CHECK_HEADERS(usb.h, ,[AC_MSG_ERROR([cannot find libusb-devel support], 11)])
+ else
+ AC_CHECK_LIB([usb-1.0], [libusb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb 1.0 support], 2)])
++ LIBUSBINCLUDEROOT?="/usr/include/"
++ AC_ARG_VAR(LIBUSBINCLUDEROOT, [path to libusb-1.0 folder])
+ AC_CHECK_HEADERS(libusb-1.0/libusb.h, ,[AC_MSG_ERROR([cannot find libusb-1.0-devel support], 11)])
+ fi
+ fi
+diff -rupN hplip-3.12.6_orig/Makefile.am hplip-3.12.6/Makefile.am
+--- hplip-3.12.6_orig/Makefile.am 2012-06-18 20:44:13.000000000 +1000
++++ hplip-3.12.6/Makefile.am 2012-08-16 13:41:12.307932822 +1000
+@@ -72,7 +72,7 @@ libhpmud_la_SOURCES = io/hpmud/hpmud.c i
+ io/hpmud/hpmud.h io/hpmud/hpmudi.h io/hpmud/list.h io/hpmud/mlc.h io/hpmud/pml.h io/hpmud/dot4.c \
+ io/hpmud/dot4.h io/hpmud/jd.c io/hpmud/jd.h io/hpmud/pp.c io/hpmud/pp.h io/hpmud/musb.h io/hpmud/musb_libusb01.c
+ else
+-libhpmud_la_CFLAGS = -I/usr/include/libusb-1.0 -DMUDNAME=\"$(MUDNAME)\" -DCONFDIR=\"$(hplip_confdir)\"
++libhpmud_la_CFLAGS = -I/$(LIBUSBINCLUDEROOT)/libusb-1.0 -DMUDNAME=\"$(MUDNAME)\" -DCONFDIR=\"$(hplip_confdir)\"
+ libhpmud_la_SOURCES = io/hpmud/hpmud.c io/hpmud/mlc.c io/hpmud/model.c io/hpmud/pml.c \
+ io/hpmud/hpmud.h io/hpmud/hpmudi.h io/hpmud/list.h io/hpmud/mlc.h io/hpmud/pml.h io/hpmud/dot4.c \
+ io/hpmud/dot4.h io/hpmud/jd.c io/hpmud/jd.h io/hpmud/pp.c io/hpmud/pp.h io/hpmud/musb.h io/hpmud/musb.c
+@@ -286,7 +286,7 @@ hpmudext_la_LIBADD = libhpmud.la
+ if LIBUSB01_BUILD
+ hpmudext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
+ else
+-hpmudext_la_CFLAGS =-I/usr/include/libusb-1.0 -I$(PYTHONINCLUDEDIR)
++hpmudext_la_CFLAGS =-I$(LIBUSBINCLUDEROOT)/libusb-1.0 -I$(PYTHONINCLUDEDIR)
+ endif
+
+ # ui (qt3)
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch
new file mode 100644
index 000000000..0e1b6c4ed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch
@@ -0,0 +1,12 @@
+Upstream-Status: Inappropriate [embedded specific]
+
+--- hplip-3.11.10/setup.py.orig 2011-10-02 14:06:19.000000000 +1100
++++ hplip-3.11.10/setup.py 2012-02-29 08:21:39.167999938 +1100
+@@ -573,6 +573,7 @@
+
+ log.debug("Restarting CUPS...")
+ status, output = utils.run(restart_cups())
++ time.sleep(3)
+ log.debug("Restart CUPS returned: exit=%d output=%s" % (status, output))
+
+ cups.setPasswordPrompt("You do not have permission to add a printer.")
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb
new file mode 100644
index 000000000..1f1e80ce8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb
@@ -0,0 +1,74 @@
+SUMMARY = "HP Linux Imaging and Printing"
+LICENSE="GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=442bb3cbbeeb60643a87325718b8a8ee"
+
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://setup-add-sleep-after-cups-reset.patch \
+ file://fix-libusb-paths.patch \
+ file://cups-1.6.patch \
+ file://configure.patch \
+ file://0001-include-cups-ppd.h-for-missing-ppd-definitions.patch \
+"
+
+DEPENDS += "cups python libusb"
+
+inherit autotools-brokensep python-dir pythonnative pkgconfig
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+EXTRA_OECONF += "\
+ LIBUSBINCLUDEROOT=${STAGING_INCDIR} \
+ --disable-network-build \
+ --disable-doc-build \
+ --disable-pp-build \
+ --disable-scan-build \
+ --disable-gui-build \
+ --disable-fax-build \
+ --disable-policykit \
+ --disable-qt4 \
+ --disable-qt3 \
+ --disable-dbus-build \
+ --disable-foomatic-drv-install \
+ --enable-foomatic-ppd-install \
+ --enable-foomatic-rip-hplip-install \
+ --with-cupsbackenddir=${libdir}/cups/backend \
+ --with-cupsfilterdir=${libdir}/cups/filter \
+"
+
+PACKAGES += "${PN}-ppd ${PN}-cups ${PN}-backend ${PN}-filter ${PN}-hal"
+
+RDEPENDS_${PN} += " \
+ python-syslog \
+ python-pprint \
+ python-compression \
+ python-shell \
+ python-xml \
+ python-unixadmin \
+ python-html \
+ python-resource \
+ python-terminal \
+ python-subprocess\
+"
+RDEPENDS_${PN}-filter += "perl"
+
+# need to snag the debug file or OE will fail on backend package
+FILES_${PN}-dbg += "\
+ ${libdir}/cups/backend/.debug \
+ ${PYTHON_SITEPACKAGES_DIR}/.debug \
+ ${libdir}/cups/filter/.debug "
+
+FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
+FILES_${PN}-ppd = "${datadir}/ppd"
+FILES_${PN}-cups = "${datadir}/cups"
+FILES_${PN}-backend = "${libdir}/cups/backend"
+FILES_${PN}-filter = "${libdir}/cups/filter"
+FILES_${PN}-hal = "${datadir}/hal"
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/*.so"
+
+SRC_URI[md5sum] = "5303938e8630775ea6fb383af85775e5"
+SRC_URI[sha256sum] = "54578000792969adb583e75efeacb9c46ab69659ec7e9424de390613f3595775"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_1.11.5.bb b/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_1.11.5.bb
new file mode 100644
index 000000000..5a335b924
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_1.11.5.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Portable Hardware Locality (hwloc) software package"
+DESCRIPTION = "The Portable Hardware Locality (hwloc) software package \
+ provides a portable abstraction of the hierarchical topology of modern \
+ architectures."
+HOMEPAGE = "https://www.open-mpi.org/software/hwloc/"
+SECTION = "base"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3282e20dc3cec311deda3c6d4b1f990b"
+
+SRC_URI = "https://www.open-mpi.org/software/${PN}/v1.11/downloads/${BP}.tar.bz2"
+SRC_URI[md5sum] = "96c34136ff416d2b13a7821c27477bed"
+SRC_URI[sha256sum] = "95d80286dfe658a3f79e2ac90698782bb36e5504f4bac1bba2394ba14dbbad24"
+
+inherit autotools pkgconfig
+
+DEPENDS += "ncurses udev zlib"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'libselinux', '', d)}"
+
+PACKAGECONFIG ?= "pci libxml2 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
+
+PACKAGECONFIG[numactl] = "--enable-libnuma,--disable-libnuma,numactl,numactl"
+PACKAGECONFIG[libxml2] = "--enable-libxml2,--disable-libxml2,libxml2,libxml2"
+PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 cairo,cairo"
+PACKAGECONFIG[pci] = "--enable-pci,--disable-pci,libpciaccess,libpciaccess"
+
+# Split hwloc library into separate subpackage
+PACKAGES_prepend = " libhwloc "
+FILES_libhwloc += "${libdir}/libhwloc.so.*"
+RDEPENDS_${PN} += "libhwloc (= ${EXTENDPKGV})"
diff --git a/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.10.bb b/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.10.bb
new file mode 100644
index 000000000..d25e8e317
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.10.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A GNU program for formatting C code"
+HOMEPAGE = "http://www.gnu.org/software/indent/"
+SECTION = "Applications/Text"
+DESCRIPTION = "Indent is a GNU program for beautifying C code, so that \
+it is easier to read. Indent can also convert from one C writing style \
+to a different one. Indent understands correct C syntax and tries to handle \
+incorrect C syntax. \
+Install the indent package if you are developing applications in C and \
+you want a program to format your code."
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+DEPENDS = "virtual/gettext"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "be35ea62705733859fbf8caf816d8959"
+SRC_URI[sha256sum] = "8a9b41be5bfcab5d8c1be74204b10ae78789fc3deabea0775fdced8677292639"
+
+inherit autotools gettext
+
+FILES_${PN}-doc += "/usr/doc/indent/indent.html"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb b/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb
new file mode 100644
index 000000000..5dcae98b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Simple top-like I/O monitor"
+DESCRIPTION = "iotop does for I/O usage what top(1) does for CPU usage. \
+ It watches I/O usage information output by the Linux kernel and displays \
+ a table of current I/O usage by processes on the system."
+HOMEPAGE = "http://guichaz.free.fr/iotop/"
+
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
+
+SRC_URI = "http://guichaz.free.fr/iotop/files/${BP}.tar.bz2"
+SRC_URI[md5sum] = "5ef9456b26d7694abf3101a72e1e0d1d"
+SRC_URI[sha256sum] = "3adea2a24eda49bbbaeb4e6ed2042355b441dbd7161e883067a02bfc8dcef75b"
+
+inherit distutils
+
+do_install_append() {
+ rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/site.pyo || true
+ rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/site.py || true
+}
+
+RDEPENDS_${PN} = "python-curses python-textutils \
+ python-codecs python-ctypes python-pprint \
+ python-shell"
diff --git a/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0001-tweak-install-prefix.patch b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0001-tweak-install-prefix.patch
new file mode 100644
index 000000000..bcfc11724
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0001-tweak-install-prefix.patch
@@ -0,0 +1,60 @@
+From cffe4767f89ea0b54b57e8bf9065a08a9c38d46e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 18 Jul 2017 21:53:00 -0400
+Subject: [PATCH] tweak install prefix
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index df16a3b..fbdfcb4 100644
+--- a/Makefile
++++ b/Makefile
+@@ -39,26 +39,26 @@ pyisomd5sum.so: $(PYOBJS)
+ install: all install-bin install-python install-devel
+
+ install-bin:
+- install -d -m 0755 $(DESTDIR)/usr/bin
+- install -d -m 0755 $(DESTDIR)/usr/share/man/man1
+- install -m 0755 implantisomd5 $(DESTDIR)/usr/bin
+- install -m 0755 checkisomd5 $(DESTDIR)/usr/bin
+- install -m 0644 implantisomd5.1 $(DESTDIR)/usr/share/man/man1
+- install -m 0644 checkisomd5.1 $(DESTDIR)/usr/share/man/man1
++ install -d -m 0755 $(DESTDIR)$(bindir)
++ install -d -m 0755 $(DESTDIR)$(mandir)/man1
++ install -m 0755 implantisomd5 $(DESTDIR)$(bindir)
++ install -m 0755 checkisomd5 $(DESTDIR)$(bindir)
++ install -m 0644 implantisomd5.1 $(DESTDIR)$(mandir)/man1
++ install -m 0644 checkisomd5.1 $(DESTDIR)$(mandir)/man1
+
+ install-python:
+ install -d -m 0755 $(DESTDIR)$(PYTHONSITEPACKAGES)
+ install -m 0755 pyisomd5sum.so $(DESTDIR)$(PYTHONSITEPACKAGES)
+
+ install-devel:
+- install -d -m 0755 $(DESTDIR)/usr/include
+- install -d -m 0755 $(DESTDIR)/usr/$(LIBDIR)
+- install -d -m 0755 $(DESTDIR)/usr/share/pkgconfig
+- install -m 0644 libimplantisomd5.h $(DESTDIR)/usr/include/
+- install -m 0644 libcheckisomd5.h $(DESTDIR)/usr/include/
+- install -m 0644 libimplantisomd5.a $(DESTDIR)/usr/$(LIBDIR)
+- install -m 0644 libcheckisomd5.a $(DESTDIR)/usr/$(LIBDIR)
+- sed "s#@VERSION@#${VERSION}#g; s#@includedir@#${DESTDIR}/usr/include#g; s#@libdir@#${DESTDIR}/usr/${LIBDIR}#g" isomd5sum.pc.in > ${DESTDIR}/usr/share/pkgconfig/isomd5sum.pc
++ install -d -m 0755 $(DESTDIR)$(includedir)
++ install -d -m 0755 $(DESTDIR)$(libdir)
++ install -d -m 0755 $(DESTDIR)${datadir}/pkgconfig
++ install -m 0644 libimplantisomd5.h $(DESTDIR)$(includedir)
++ install -m 0644 libcheckisomd5.h $(DESTDIR)$(includedir)
++ install -m 0644 libimplantisomd5.a $(DESTDIR)$(libdir)
++ install -m 0644 libcheckisomd5.a $(DESTDIR)$(libdir)
++ sed "s#@VERSION@#${VERSION}#g; s#@includedir@#${DESTDIR}/usr/include#g; s#@libdir@#${DESTDIR}/usr/${LIBDIR}#g" isomd5sum.pc.in > ${DESTDIR}${datadir}/pkgconfig/isomd5sum.pc
+
+ clean:
+ rm -f *.o *.so *.pyc *.a .depend *~
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0002-fix-parallel-error.patch b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0002-fix-parallel-error.patch
new file mode 100644
index 000000000..7a33e423a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/files/0002-fix-parallel-error.patch
@@ -0,0 +1,33 @@
+From 2acce7bc8ab7711e76c7765c84a198fe38f247f3 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 18 Jul 2017 23:06:41 -0400
+Subject: [PATCH] fix parallel error
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index fbdfcb4..2ad3238 100644
+--- a/Makefile
++++ b/Makefile
+@@ -29,9 +29,11 @@ implantisomd5: implantisomd5.o libimplantisomd5.a
+ checkisomd5: checkisomd5.o libcheckisomd5.a
+ $(CC) $(CPPFLAGS) $(CFLAGS) checkisomd5.o libcheckisomd5.a -lpopt $(LDFLAGS) -o checkisomd5
+
+-libimplantisomd5.a: libimplantisomd5.a(libimplantisomd5.o md5.o utilities.o)
++libimplantisomd5.a: libimplantisomd5.o md5.o utilities.o
++ $(AR) rv $@ $^
+
+-libcheckisomd5.a: libcheckisomd5.a(libcheckisomd5.o md5.o utilities.o)
++libcheckisomd5.a: libcheckisomd5.o md5.o utilities.o
++ $(AR) rv $@ $^
+
+ pyisomd5sum.so: $(PYOBJS)
+ $(CC) $(CPPFLAGS) $(CFLAGS) -shared -g -fpic $(PYOBJS) $(LDFLAGS) -o pyisomd5sum.so
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/isomd5sum/isomd5sum_1.2.1.bb b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/isomd5sum_1.2.1.bb
new file mode 100644
index 000000000..815113e67
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/isomd5sum/isomd5sum_1.2.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Tools for taking the MD5 sum of ISO images"
+DESCRIPTION = "Tools for taking the MD5 sum of ISO images"
+
+DEPENDS = "popt python3 openssl curl popt-native"
+RDEPENDS_${PN} = "openssl curl"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+SRC_URI = "git://github.com/rhinstaller/isomd5sum.git;branch=master \
+ file://0001-tweak-install-prefix.patch \
+ file://0002-fix-parallel-error.patch \
+"
+
+S = "${WORKDIR}/git"
+inherit python3native
+
+EXTRA_OEMAKE += " \
+ DESTDIR='${D}' \
+ PYTHONINCLUDE='-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}' \
+ PYTHONSITEPACKAGES='${PYTHON_SITEPACKAGES_DIR}' \
+"
+
+do_install () {
+ oe_runmake install
+}
+
+PACKAGES += "${PYTHON_PN}-${PN} ${PYTHON_PN}-${PN}-dbg"
+
+FILES_${PYTHON_PN}-${PN} = "${PYTHON_SITEPACKAGES_DIR}/pyisomd5sum.so"
+FILES_${PYTHON_PN}-${PN}-dbg = "${PYTHON_SITEPACKAGES_DIR}/.debug/pyisomd5sum.so"
+
+SRCREV = "69dc036d20761715b734ca9cc59ecc6dc8145026"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/jansson/jansson_2.9.bb b/meta-openembedded/meta-oe/recipes-extended/jansson/jansson_2.9.bb
new file mode 100644
index 000000000..455b3744a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/jansson/jansson_2.9.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Jansson is a C library for encoding, decoding and manipulating JSON data"
+HOMEPAGE = "http://www.digip.org/jansson/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8b70213ec164c7bd876ec2120ba52f61"
+
+SRC_URI = "http://www.digip.org/jansson/releases/${BPN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "84abaefee9502b2f2ff394d758f160c7"
+SRC_URI[sha256sum] = "0ad0d074ca049a36637e7abef755d40849ad73e926b93914ce294927b97bd2a5"
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-CMakeLists.txt-fix-lib64-can-not-be-shiped-in-64bit-.patch b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-CMakeLists.txt-fix-lib64-can-not-be-shiped-in-64bit-.patch
new file mode 100644
index 000000000..40a064307
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-CMakeLists.txt-fix-lib64-can-not-be-shiped-in-64bit-.patch
@@ -0,0 +1,31 @@
+From d97ac2bf2ed9c84ffd65ff10989068b202e09fdf Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Mon, 3 Aug 2015 00:29:54 +0900
+Subject: [PATCH] CMakeLists.txt: fix lib64 can not be shiped in 64bit target
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ CMakeLists.txt | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index be544d1..14696e4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -11,13 +11,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_P
+
+ find_package(CMPI)
+
+-# Set LIB_SUFFIX to 64 on 64bit architectures
+-if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+- set(LIB_SUFFIX "")
+-else(CMAKE_SIZEOF_VOID_P EQUAL 4)
+- set(LIB_SUFFIX 64)
+-endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+-
+ option(WITH_PYTHON "Build experimental Python bindings" OFF)
+
+ add_subdirectory(cmake)
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-drop-including-rpath-cmake-module.patch b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-drop-including-rpath-cmake-module.patch
new file mode 100644
index 000000000..342017bed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi/0001-drop-including-rpath-cmake-module.patch
@@ -0,0 +1,38 @@
+From 45e1c4c04a126d2386446775f99084bd603016af Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 1 Jun 2017 23:10:59 -0700
+Subject: [PATCH] drop including rpath cmake module
+
+Fixes cross compilation QA errors e.g.
+/usr/lib/libkonkret.so.0.0.1 contains probably-redundant RPATH /usr/lib [useless-rpaths]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/konkret/CMakeLists.txt | 1 -
+ src/program/CMakeLists.txt | 1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/src/konkret/CMakeLists.txt b/src/konkret/CMakeLists.txt
+index c2faa40..df49e11 100644
+--- a/src/konkret/CMakeLists.txt
++++ b/src/konkret/CMakeLists.txt
+@@ -8,7 +8,6 @@ set(konkret_SRCS
+ kstr.c
+ print.c
+ )
+-include(rpath)
+ include_directories(${CMPI_INCLUDE_DIR})
+
+ add_library(libkonkret SHARED ${konkret_SRCS})
+diff --git a/src/program/CMakeLists.txt b/src/program/CMakeLists.txt
+index afcefe5..8a4646c 100644
+--- a/src/program/CMakeLists.txt
++++ b/src/program/CMakeLists.txt
+@@ -1,4 +1,3 @@
+-include (rpath)
+ include_directories(${CMPI_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src)
+
+ add_executable(konkret main.cpp)
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb
new file mode 100644
index 000000000..0f798d233
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Tool for rapid CMPI providers development"
+DESCRIPTION = "\
+KonkretCMPI makes CMPI provider development easier by generating type-safe \
+concrete CIM interfaces from MOF definitions and by providing default \
+implementations for many of the provider operations."
+HOMEPAGE = "https://github.com/rnovacek/konkretcmpi"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f673270bfc350d9ce1efc8724c6c1873"
+DEPENDS_append_class-target = " swig-native sblim-cmpi-devel python"
+DEPENDS_append_class-native = " cmpi-bindings-native"
+
+SRC_URI = "git://github.com/rnovacek/konkretcmpi.git \
+ file://0001-CMakeLists.txt-fix-lib64-can-not-be-shiped-in-64bit-.patch \
+ file://0001-drop-including-rpath-cmake-module.patch \
+ "
+
+SRCREV = "ad28225e6eceff88417a60c1ba8896c8e40f21a7"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DWITH_PYTHON=ON \
+ ${@oe.utils.conditional("libdir", "/usr/lib64", "-DLIB_SUFFIX=64", "", d)} \
+ ${@oe.utils.conditional("libdir", "/usr/lib32", "-DLIB_SUFFIX=32", "", d)} \
+ "
+
+LDFLAGS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+
+do_install_append() {
+ rm -rf ${D}${datadir}
+}
+
+PACKAGES =+ "${PN}-python ${PN}-python-dbg"
+
+FILES_${PN}-python = "${libdir}/python2.7/site-packages/konkretmof.py* ${libdir}/python2.7/site-packages/_konkretmof.so"
+FILES_${PN}-python-dbg = "${libdir}/python2.7/site-packages/.debug/*"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-include-asm-ioctl.h-explicitly.patch b/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-include-asm-ioctl.h-explicitly.patch
new file mode 100644
index 000000000..abdedad5d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-include-asm-ioctl.h-explicitly.patch
@@ -0,0 +1,43 @@
+From b5ca64c7398d516e9845d849e8306df7ac024bc4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 11 Apr 2017 13:59:34 -0700
+Subject: [PATCH] include asm/ioctl.h explicitly
+
+Needed for _IOC* defines
+
+helps compiling with musl where this file is
+not included indirectly
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ server/drivers/hd44780-pifacecad.c | 1 +
+ server/drivers/hd44780-spi.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/server/drivers/hd44780-pifacecad.c b/server/drivers/hd44780-pifacecad.c
+index 43db19c..e2798ad 100644
+--- a/server/drivers/hd44780-pifacecad.c
++++ b/server/drivers/hd44780-pifacecad.c
+@@ -54,6 +54,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
++#include <asm/ioctl.h>
+ #include <stdint.h>
+ #include <linux/spi/spidev.h>
+
+diff --git a/server/drivers/hd44780-spi.c b/server/drivers/hd44780-spi.c
+index 5f94333..8a4015b 100644
+--- a/server/drivers/hd44780-spi.c
++++ b/server/drivers/hd44780-spi.c
+@@ -29,6 +29,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
++#include <asm/ioctl.h>
+ #include <stdint.h>
+ #include <linux/spi/spidev.h>
+
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb b/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb
new file mode 100644
index 000000000..96bc826fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb
@@ -0,0 +1,99 @@
+DESCRIPTION = "LCDproc is a client/server suite to drive all kinds of LCD (-like) devices. The client \
+shipped with this package can be used to acquire various kinds of system stats."
+SUMMARY = "Drivers for character-based LCD displays"
+HOMEPAGE = "http://lcdproc.org"
+SECTION = "utils"
+LICENSE = "GPLv2+"
+DEPENDS = "ncurses lirc"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760 \
+ file://README.md;beginline=107;md5=5c927ce1742d6d5cddc45b7ad6230f75"
+
+BASEPV = "0.5.8"
+PV = "${BASEPV}+git${SRCPV}"
+SRCREV = "f5156e2e41bb418f14761afea22eee8efb49fb85"
+SRC_URI = "git://github.com/lcdproc/lcdproc;branch=lcdproc-${BASEPV} \
+ file://0001-include-asm-ioctl.h-explicitly.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig update-rc.d
+
+LCD_DRIVERS ?= "all,!irman,!svga"
+LCD_DEFAULT_DRIVER ?= "curses"
+
+PACKAGECONFIG ??= "usb"
+PACKAGECONFIG[usb] = "--enable-libusb,--disable-libusb,virtual/libusb0"
+PACKAGECONFIG[ftdi] = "--enable-libftdi,--disable-libftdi,libftdi"
+PACKAGECONFIG[g15] = ",,libg15 g15daemon libg15render,"
+PACKAGECONFIG[hid] = "--enable-libhid,--disable-libhid,libhid"
+PACKAGECONFIG[png] = "--enable-libpng,--disable-libpng,libpng"
+
+LCD_DRIVERS_append = "${@bb.utils.contains('PACKAGECONFIG', 'g15', '', ',!g15', d)}"
+
+EXTRA_OECONF = "--enable-drivers='${LCD_DRIVERS}'"
+
+do_install () {
+ # binaries
+ install -D -m 0755 server/LCDd ${D}${sbindir}/LCDd
+ install -D -m 0755 clients/lcdproc/lcdproc ${D}${bindir}/lcdproc
+
+ # init scripts
+ install -d ${D}${sysconfdir}/init.d
+ # so far, not fixed :-( and now even uglier :-((
+ cat scripts/init-LCDd.debian | sed -e s'/--oknodo//' -e 's/ -s -f / -s 1 -f 1 /' -e 's/force-reload/force-restart/' -e 's/sleep 1/sleep 4/' > ${D}${sysconfdir}/init.d/lcdd
+ chmod 0755 ${D}${sysconfdir}/init.d/lcdd
+ install -m 0755 scripts/init-lcdproc.debian ${D}${sysconfdir}/init.d/lcdproc
+ sed -i s'/--oknodo//' ${D}${sysconfdir}/init.d/lcdproc
+
+ # configuration files
+ install -m 0644 ${S}/LCDd.conf ${D}${sysconfdir}/LCDd.conf
+ sed -i 's!^DriverPath=.*!DriverPath=${libdir}/lcdproc/!' ${D}${sysconfdir}/LCDd.conf
+ sed -i 's!^Driver=.*!Driver=${LCD_DEFAULT_DRIVER}!' ${D}${sysconfdir}/LCDd.conf
+ install -m 0644 ${S}/clients/lcdproc/lcdproc.conf ${D}${sysconfdir}/lcdproc.conf
+
+ # driver library files
+ install -d ${D}${libdir}/lcdproc
+ for i in server/drivers/*.so; do
+ install -m 0644 $i ${D}${libdir}/lcdproc/
+ done
+ # binaries
+ install -D -m 0755 clients/lcdvc/lcdvc ${D}${sbindir}/lcdvc
+
+ # configuration files
+ install -D -m 0644 ${S}/clients/lcdvc/lcdvc.conf ${D}${sysconfdir}/lcdvc.conf
+}
+
+PACKAGES =+ "lcdd lcdvc"
+
+RRECOMMENDS_${PN} = "lcdd"
+
+FILES_lcdd = "${sysconfdir}/LCDd.conf \
+ ${sbindir}/LCDd \
+ ${sysconfdir}/init.d/lcdd"
+
+CONFFILES_lcdd = "${sysconfdir}/LCDd.conf"
+CONFFILES_${PN} = "${sysconfdir}/lcdproc.conf"
+CONFFILES_lcdvc = "${sysconfdir}/lcdvc.conf"
+FILES_lcdvc = "${sysconfdir}/lcdvc.conf ${sbindir}/lcdvc"
+
+# Driver packages
+
+# USB / no USB trickery
+
+RCONFLICTS_lcdd-driver-hd47780nousb = "lcdd-driver-hd44780"
+RCONFLICTS_lcdd-driver-hd47780 = "lcdd-driver-hd44780nousb"
+
+INITSCRIPT_PACKAGES = "lcdd lcdproc"
+INITSCRIPT_NAME_lcdd = "lcdd"
+INITSCRIPT_NAME_lcdproc = "lcdproc"
+INITSCRIPT_PARAMS_lcdd = "defaults 70 21"
+INITSCRIPT_PARAMS_lcdproc = "defaults 71 20"
+
+python populate_packages_prepend() {
+ plugindir = d.expand('${libdir}/lcdproc')
+ do_split_packages(d, plugindir, '(.*)\.so$', 'lcdd-driver-%s', 'LCDd driver for %s', prepend=True)
+}
+
+PACKAGES_DYNAMIC += "^lcdd-driver-.*"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0001-fix-configure-and-compile-failures.patch b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0001-fix-configure-and-compile-failures.patch
new file mode 100644
index 000000000..745883ebe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0001-fix-configure-and-compile-failures.patch
@@ -0,0 +1,79 @@
+From 86686ccbf43c5d9e8c8dc97c66ba09e522050e5e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Jul 2017 10:06:24 +0800
+Subject: [PATCH 1/3] fix configure and compile failures
+
+1. Fix do_configure failure
+---------------------------
+|Checking header volume_key/libvolume_key.h existence and usability.
+../tmp/6tvtK.c:1:38: fatal error: volume_key/libvolume_key.h:
+No such file or directory
+| #include <volume_key/libvolume_key.h>
+|Checking header dmraid/dmraid.h existence and usability.../tmp/
+ktVJ6.c:1:27: fatal error: dmraid/dmraid.h: No such file or directory
+| #include <dmraid/dmraid.h>
+---------------------------
+We explictly add volume_key and dmraid to DEPENDS, do not need
+configure to test.
+
+2. Fix config.h not found
+Add it to configure.ac
+
+3. Correct AC_DEFINE
+...
+autoheader: warning: missing template: LIBMOUNT_NEW_ERR_API
+autoheader: Use AC_DEFINE([LIBMOUNT_NEW_ERR_API], [], [Description])
+...
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d41a307..b036e04 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -9,6 +9,8 @@ AC_DISABLE_STATIC
+ AM_INIT_AUTOMAKE([foreign -Wall -Werror -Wno-syntax -Wno-portability])
+ AC_CONFIG_MACRO_DIR([m4])
+
++AC_CONFIG_HEADERS([config.h])
++
+ AM_PATH_PYTHON
+
+ AM_PROG_AR
+@@ -154,7 +156,6 @@ LIBBLOCKDEV_PKG_CHECK_MODULES([KMOD], [libkmod >= 19])
+ AS_IF([test "x$with_crypto" != "xno"],
+ [LIBBLOCKDEV_PKG_CHECK_MODULES([CRYPTSETUP], [libcryptsetup >= 1.6.7])
+ LIBBLOCKDEV_PKG_CHECK_MODULES([NSS], [nss >= 3.18.0])
+- LIBBLOCKDEV_CHECK_HEADER([volume_key/libvolume_key.h], [$GLIB_CFLAGS $NSS_CFLAGS], [libvolume_key.h not available])
+ ],
+ [])
+
+@@ -162,10 +163,6 @@ AS_IF([test "x$with_dm" != "xno" -o "x$with_lvm" != "xno" -o "x$with_lvm_dbus" !
+ [LIBBLOCKDEV_PKG_CHECK_MODULES([DEVMAPPER], [devmapper >= 1.02.93])],
+ [])
+
+-AS_IF([test "x$with_dm" != "xno"],
+- [LIBBLOCKDEV_CHECK_HEADER([dmraid/dmraid.h], [], [dmraid.h not available])],
+- [])
+-
+ AS_IF([test "x$with_part" != "xno" -o "x$with_fs" != "xno"],
+ [LIBBLOCKDEV_PKG_CHECK_MODULES([PARTED], [libparted >= 3.1])]
+ [])
+@@ -174,7 +171,8 @@ AS_IF([test "x$with_fs" != "xno"],
+ [LIBBLOCKDEV_PKG_CHECK_MODULES([MOUNT], [mount >= 2.23.0])
+ # new versions of libmount has some new functions we can use
+ AS_IF([$PKG_CONFIG --atleast-version=2.30.0 mount],
+- [AC_DEFINE([LIBMOUNT_NEW_ERR_API])], [])
++ [AC_DEFINE([LIBMOUNT_NEW_ERR_API], [1], [new versions of libmount has some new functions we can use])],
++ [])
+
+ LIBBLOCKDEV_PKG_CHECK_MODULES([BLKID], [blkid >= 2.23.0])
+ # older versions of libblkid don't support BLKID_SUBLKS_BADCSUM so let's just
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0002-remove-python2-support.patch b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0002-remove-python2-support.patch
new file mode 100644
index 000000000..0719759cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0002-remove-python2-support.patch
@@ -0,0 +1,30 @@
+From 40dae7ea6450cb30f066da8443eabf063b5b0ad7 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 02:05:40 -0400
+Subject: [PATCH 2/3] remove python2 support
+
+Only python3 is required.
+
+Upstream-Status: Inappropriate [wr-installer specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/python/gi/overrides/Makefile.am | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/python/gi/overrides/Makefile.am b/src/python/gi/overrides/Makefile.am
+index a2927ac..6385502 100644
+--- a/src/python/gi/overrides/Makefile.am
++++ b/src/python/gi/overrides/Makefile.am
+@@ -1,8 +1,3 @@
+-pylibdir = $(shell python -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='${exec_prefix}'))")
+-
+-overridesdir = $(pylibdir)/gi/overrides
+-dist_overrides_DATA = BlockDev.py
+-
+ if WITH_PYTHON3
+ py3libdir = $(shell python3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='${exec_prefix}'))")
+ py3overridesdir = $(py3libdir)/gi/overrides
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0003-remove-dmraid-while-compiling-with-with-dm.patch b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0003-remove-dmraid-while-compiling-with-with-dm.patch
new file mode 100644
index 000000000..ac5b5e2be
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0003-remove-dmraid-while-compiling-with-with-dm.patch
@@ -0,0 +1,492 @@
+From bda7c937ba544182a5cae2a9cf0c173e0ba268c9 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Jul 2017 09:47:23 +0800
+Subject: [PATCH 3/3] remove dmraid while compiling with --with-dm
+
+Fix the following failure:
+
+...
+Perhaps you should add the directory containing `dmraid.pc'
+to the PKG_CONFIG_PATH environment variable
+No package 'dmraid' found
+...
+
+...
+../../../git/src/plugins/dm.c:24:10: fatal error: dmraid/dmraid.h: No
+such file or directory
+ #include <dmraid/dmraid.h>
+ ^~~~~~~~~~~~~~~~~
+...
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/lib/plugin_apis/dm.api | 50 ------
+ src/plugins/Makefile.am | 2 +-
+ src/plugins/dm.c | 330 ------------------------------------
+ src/plugins/dm.h | 5 -
+ src/python/gi/overrides/BlockDev.py | 6 -
+ 5 files changed, 1 insertion(+), 392 deletions(-)
+
+diff --git a/src/lib/plugin_apis/dm.api b/src/lib/plugin_apis/dm.api
+index 04fd8d8..5d30b6a 100644
+--- a/src/lib/plugin_apis/dm.api
++++ b/src/lib/plugin_apis/dm.api
+@@ -111,53 +111,3 @@ gchar* bd_dm_get_subsystem_from_name (const gchar *device_name, GError **error);
+ * Tech category: %BD_DM_TECH_MAP-%BD_DM_TECH_MODE_QUERY
+ */
+ gboolean bd_dm_map_exists (const gchar *map_name, gboolean live_only, gboolean active_only, GError **error);
+-
+-/**
+- * bd_dm_get_member_raid_sets:
+- * @name: (allow-none): name of the member
+- * @uuid: (allow-none): uuid of the member
+- * @major: major number of the device or -1 if not specified
+- * @minor: minor number of the device or -1 if not specified
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: (transfer full) (array zero-terminated=1): list of names of the RAID sets related to
+- * the member or %NULL in case of error
+- *
+- * One of @name, @uuid or @major:@minor has to be given.
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_MODE_QUERY
+- */
+-gchar** bd_dm_get_member_raid_sets (const gchar *name, const gchar *uuid, gint major, gint minor, GError **error);
+-
+-/**
+- * bd_dm_activate_raid_set:
+- * @name: name of the DM RAID set to activate
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: whether the RAID set @name was successfully activate or not
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_CREATE_ACTIVATE
+- */
+-gboolean bd_dm_activate_raid_set (const gchar *name, GError **error);
+-
+-/**
+- * bd_dm_deactivate_raid_set:
+- * @name: name of the DM RAID set to deactivate
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: whether the RAID set @name was successfully deactivate or not
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_REMOVE_DEACTIVATE
+- */
+-gboolean bd_dm_deactivate_raid_set (const gchar *name, GError **error);
+-
+-/**
+- * bd_dm_get_raid_set_type:
+- * @name: name of the DM RAID set to get the type of
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: string representation of the @name RAID set's type
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_QUERY
+- */
+-gchar* bd_dm_get_raid_set_type (const gchar *name, GError **error);
+diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
+index b69c8f7..7575f4a 100644
+--- a/src/plugins/Makefile.am
++++ b/src/plugins/Makefile.am
+@@ -75,7 +75,7 @@ endif
+
+ if WITH_DM
+ libbd_dm_la_CFLAGS = $(GLIB_CFLAGS) $(DEVMAPPER_CFLAGS) $(UDEV_CFLAGS) -Wall -Wextra -Werror
+-libbd_dm_la_LIBADD = $(GLIB_LIBS) $(DEVMAPPER_LIBS) $(UDEV_LIBS) -ldmraid ${builddir}/../utils/libbd_utils.la
++libbd_dm_la_LIBADD = $(GLIB_LIBS) $(DEVMAPPER_LIBS) $(UDEV_LIBS) ${builddir}/../utils/libbd_utils.la
+ libbd_dm_la_LDFLAGS = -L${srcdir}/../utils/ -version-info 2:0:0 -Wl,--no-undefined
+ # Dear author of libdmdraid, VERSION really is not a good name for an enum member!
+ libbd_dm_la_CPPFLAGS = -I${builddir}/../../include/ -UVERSION
+diff --git a/src/plugins/dm.c b/src/plugins/dm.c
+index 0e5466c..31ebe96 100644
+--- a/src/plugins/dm.c
++++ b/src/plugins/dm.c
+@@ -21,17 +21,11 @@
+ #include <unistd.h>
+ #include <blockdev/utils.h>
+ #include <libdevmapper.h>
+-#include <dmraid/dmraid.h>
+ #include <libudev.h>
+
+ #include "dm.h"
+ #include "check_deps.h"
+
+-/* macros taken from the pyblock/dmraid.h file plus one more*/
+-#define for_each_raidset(_c, _n) list_for_each_entry(_n, LC_RS(_c), list)
+-#define for_each_subset(_rs, _n) list_for_each_entry(_n, &(_rs)->sets, list)
+-#define for_each_device(_rs, _d) list_for_each_entry(_d, &(_rs)->devs, devs)
+-
+ /**
+ * SECTION: dm
+ * @short_description: plugin for basic operations with device mapper
+@@ -380,327 +374,3 @@ gboolean bd_dm_map_exists (const gchar *map_name, gboolean live_only, gboolean a
+
+ return ret;
+ }
+-
+-/**
+- * init_dmraid_stack: (skip)
+- *
+- * Initializes the dmraid stack by creating the library context, discovering
+- * devices, raid sets, etc.
+- */
+-static struct lib_context* init_dmraid_stack (GError **error) {
+- gint rc = 0;
+- gchar *argv[] = {"blockdev.dmraid", NULL};
+- struct lib_context *lc;
+-
+- /* the code for this function was cherry-picked from the pyblock code */
+- /* XXX: do this all just once, store global lc and provide a reinit
+- * function? */
+-
+- /* initialize dmraid library context */
+- lc = libdmraid_init (1, (gchar **)argv);
+-
+- rc = discover_devices (lc, NULL);
+- if (!rc) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_FAIL,
+- "Failed to discover devices");
+- libdmraid_exit (lc);
+- return NULL;
+- }
+- discover_raid_devices (lc, NULL);
+-
+- if (!count_devices (lc, RAID)) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_NO_DEVS,
+- "No RAIDs discovered");
+- libdmraid_exit (lc);
+- return NULL;
+- }
+-
+- argv[0] = NULL;
+- if (!group_set (lc, argv)) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_FAIL,
+- "Failed to group_set");
+- libdmraid_exit (lc);
+- return NULL;
+- }
+-
+- return lc;
+-}
+-
+-/**
+- * raid_dev_matches_spec: (skip)
+- *
+- * Returns: whether the device specified by @sysname matches the spec given by @name,
+- * @uuid, @major and @minor
+- */
+-static gboolean raid_dev_matches_spec (struct raid_dev *raid_dev, const gchar *name, const gchar *uuid, gint major, gint minor) {
+- gchar const *dev_name = NULL;
+- gchar const *dev_uuid;
+- gchar const *major_str;
+- gchar const *minor_str;
+- struct udev *context;
+- struct udev_device *device;
+- gboolean ret = TRUE;
+-
+- /* find the second '/' to get name (the rest of the string) */
+- dev_name = strchr (raid_dev->di->path, '/');
+- if (dev_name && strlen (dev_name) > 1) {
+- dev_name++;
+- dev_name = strchr (dev_name, '/');
+- }
+- if (dev_name && strlen (dev_name) > 1) {
+- dev_name++;
+- }
+- else
+- dev_name = NULL;
+-
+- /* if we don't have the name, we cannot check any match */
+- g_return_val_if_fail (dev_name, FALSE);
+-
+- /* g_return_val_if_fail above checks value of dev_name and returns FALSE if
+- * it is NULL so we don't need to check it here */
+- /* coverity[var_deref_model] */
+- if (name && strcmp (dev_name, name) != 0) {
+- return FALSE;
+- }
+-
+- context = udev_new ();
+- device = udev_device_new_from_subsystem_sysname (context, "block", dev_name);
+- dev_uuid = udev_device_get_property_value (device, "UUID");
+- major_str = udev_device_get_property_value (device, "MAJOR");
+- minor_str = udev_device_get_property_value (device, "MINOR");
+-
+- if (uuid && (g_strcmp0 (uuid, "") != 0) && (g_strcmp0 (uuid, dev_uuid) != 0))
+- ret = FALSE;
+-
+- if (major >= 0 && (atoi (major_str) != major))
+- ret = FALSE;
+-
+- if (minor >= 0 && (atoi (minor_str) != minor))
+- ret = FALSE;
+-
+- udev_device_unref (device);
+- udev_unref (context);
+-
+- return ret;
+-}
+-
+-/**
+- * find_raid_sets_for_dev: (skip)
+- */
+-static void find_raid_sets_for_dev (const gchar *name, const gchar *uuid, gint major, gint minor, struct lib_context *lc, struct raid_set *rs, GPtrArray *ret_sets) {
+- struct raid_set *subset = NULL;
+- struct raid_dev *dev = NULL;
+-
+- if (T_GROUP(rs) || !list_empty(&(rs->sets))) {
+- for_each_subset (rs, subset)
+- find_raid_sets_for_dev (name, uuid, major, minor, lc, subset, ret_sets);
+- } else {
+- for_each_device (rs, dev) {
+- if (raid_dev_matches_spec (dev, name, uuid, major, minor))
+- g_ptr_array_add (ret_sets, g_strdup (rs->name));
+- }
+- }
+-}
+-
+-/**
+- * bd_dm_get_member_raid_sets:
+- * @name: (allow-none): name of the member
+- * @uuid: (allow-none): uuid of the member
+- * @major: major number of the device or -1 if not specified
+- * @minor: minor number of the device or -1 if not specified
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: (transfer full) (array zero-terminated=1): list of names of the RAID sets related to
+- * the member or %NULL in case of error
+- *
+- * One of @name, @uuid or @major:@minor has to be given.
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_MODE_QUERY
+- */
+-gchar** bd_dm_get_member_raid_sets (const gchar *name, const gchar *uuid, gint major, gint minor, GError **error) {
+- guint64 i = 0;
+- struct lib_context *lc = NULL;
+- struct raid_set *rs = NULL;
+- GPtrArray *ret_sets = g_ptr_array_new ();
+- gchar **ret = NULL;
+-
+- lc = init_dmraid_stack (error);
+- if (!lc)
+- /* error is already populated */
+- return NULL;
+-
+- for_each_raidset (lc, rs) {
+- find_raid_sets_for_dev (name, uuid, major, minor, lc, rs, ret_sets);
+- }
+-
+- /* now create the return value -- NULL-terminated array of strings */
+- ret = g_new0 (gchar*, ret_sets->len + 1);
+- for (i=0; i < ret_sets->len; i++)
+- ret[i] = (gchar*) g_ptr_array_index (ret_sets, i);
+- ret[i] = NULL;
+-
+- g_ptr_array_free (ret_sets, FALSE);
+-
+- libdmraid_exit (lc);
+- return ret;
+-}
+-
+-/**
+- * find_in_raid_sets: (skip)
+- *
+- * Runs @eval_fn with @data on each set (traversing recursively) and returns the
+- * first RAID set that @eval_fn returns. Thus the @eval_fn should return %NULL
+- * on all RAID sets that don't fulfill the search criteria.
+- */
+-static struct raid_set* find_in_raid_sets (struct raid_set *rs, RSEvalFunc eval_fn, gpointer data) {
+- struct raid_set *subset = NULL;
+- struct raid_set *ret = NULL;
+-
+- ret = eval_fn (rs, data);
+- if (ret)
+- return ret;
+-
+- if (T_GROUP(rs) || !list_empty(&(rs->sets))) {
+- for_each_subset (rs, subset) {
+- ret = find_in_raid_sets (subset, eval_fn, data);
+- if (ret)
+- return ret;
+- }
+- }
+-
+- return ret;
+-}
+-
+-static struct raid_set* rs_matches_name (struct raid_set *rs, gpointer *name_data) {
+- gchar *name = (gchar*) name_data;
+-
+- if (g_strcmp0 (rs->name, name) == 0)
+- return rs;
+- else
+- return NULL;
+-}
+-
+-static gboolean change_set_by_name (const gchar *name, enum activate_type action, GError **error) {
+- gint rc = 0;
+- struct lib_context *lc = NULL;
+- struct raid_set *iter_rs = NULL;
+- struct raid_set *match_rs = NULL;
+-
+- lc = init_dmraid_stack (error);
+- if (!lc)
+- /* error is already populated */
+- return FALSE;
+-
+- for_each_raidset (lc, iter_rs) {
+- match_rs = find_in_raid_sets (iter_rs, (RSEvalFunc)rs_matches_name, (gchar *)name);
+- if (match_rs)
+- break;
+- }
+-
+- if (!match_rs) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_NO_EXIST,
+- "RAID set %s doesn't exist", name);
+- libdmraid_exit (lc);
+- return FALSE;
+- }
+-
+- rc = change_set (lc, action, match_rs);
+- if (!rc) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_FAIL,
+- "Failed to activate the RAID set '%s'", name);
+- libdmraid_exit (lc);
+- return FALSE;
+- }
+-
+- libdmraid_exit (lc);
+- return TRUE;
+-}
+-
+-/**
+- * bd_dm_activate_raid_set:
+- * @name: name of the DM RAID set to activate
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: whether the RAID set @name was successfully activate or not
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_CREATE_ACTIVATE
+- */
+-gboolean bd_dm_activate_raid_set (const gchar *name, GError **error) {
+- guint64 progress_id = 0;
+- gchar *msg = NULL;
+- gboolean ret = FALSE;
+-
+- msg = g_strdup_printf ("Activating DM RAID set '%s'", name);
+- progress_id = bd_utils_report_started (msg);
+- g_free (msg);
+- ret = change_set_by_name (name, A_ACTIVATE, error);
+- bd_utils_report_finished (progress_id, "Completed");
+- return ret;
+-}
+-
+-/**
+- * bd_dm_deactivate_raid_set:
+- * @name: name of the DM RAID set to deactivate
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: whether the RAID set @name was successfully deactivate or not
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_REMOVE_DEACTIVATE
+- */
+-gboolean bd_dm_deactivate_raid_set (const gchar *name, GError **error) {
+- guint64 progress_id = 0;
+- gchar *msg = NULL;
+- gboolean ret = FALSE;
+-
+- msg = g_strdup_printf ("Deactivating DM RAID set '%s'", name);
+- progress_id = bd_utils_report_started (msg);
+- g_free (msg);
+- ret = change_set_by_name (name, A_DEACTIVATE, error);
+- bd_utils_report_finished (progress_id, "Completed");
+- return ret;
+-}
+-
+-/**
+- * bd_dm_get_raid_set_type:
+- * @name: name of the DM RAID set to get the type of
+- * @error: (out): variable to store error (if any)
+- *
+- * Returns: string representation of the @name RAID set's type
+- *
+- * Tech category: %BD_DM_TECH_RAID-%BD_DM_TECH_QUERY
+- */
+-gchar* bd_dm_get_raid_set_type (const gchar *name, GError **error) {
+- struct lib_context *lc = NULL;
+- struct raid_set *iter_rs = NULL;
+- struct raid_set *match_rs = NULL;
+- const gchar *type = NULL;
+-
+- lc = init_dmraid_stack (error);
+- if (!lc)
+- /* error is already populated */
+- return NULL;
+-
+- for_each_raidset (lc, iter_rs) {
+- match_rs = find_in_raid_sets (iter_rs, (RSEvalFunc)rs_matches_name, (gchar *)name);
+- if (match_rs)
+- break;
+- }
+-
+- if (!match_rs) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_NO_EXIST,
+- "RAID set %s doesn't exist", name);
+- libdmraid_exit (lc);
+- return NULL;
+- }
+-
+- type = get_set_type (lc, match_rs);
+- if (!type) {
+- g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_RAID_FAIL,
+- "Failed to get RAID set's type");
+- libdmraid_exit (lc);
+- return NULL;
+- }
+-
+- libdmraid_exit (lc);
+- return g_strdup (type);
+-}
+diff --git a/src/plugins/dm.h b/src/plugins/dm.h
+index 0dce6ac..1ee3788 100644
+--- a/src/plugins/dm.h
++++ b/src/plugins/dm.h
+@@ -1,5 +1,4 @@
+ #include <glib.h>
+-#include <dmraid/dmraid.h>
+
+ #ifndef BD_DM
+ #define BD_DM
+@@ -48,9 +47,5 @@ gboolean bd_dm_map_exists (const gchar *map_name, gboolean live_only, gboolean a
+ gchar* bd_dm_name_from_node (const gchar *dm_node, GError **error);
+ gchar* bd_dm_node_from_name (const gchar *map_name, GError **error);
+ gchar* bd_dm_get_subsystem_from_name (const gchar *device_name, GError **error);
+-gchar** bd_dm_get_member_raid_sets (const gchar *name, const gchar *uuid, gint major, gint minor, GError **error);
+-gboolean bd_dm_activate_raid_set (const gchar *name, GError **error);
+-gboolean bd_dm_deactivate_raid_set (const gchar *name, GError **error);
+-gchar* bd_dm_get_raid_set_type (const gchar *name, GError **error);
+
+ #endif /* BD_DM */
+diff --git a/src/python/gi/overrides/BlockDev.py b/src/python/gi/overrides/BlockDev.py
+index fb3ffb4..eed0a38 100644
+--- a/src/python/gi/overrides/BlockDev.py
++++ b/src/python/gi/overrides/BlockDev.py
+@@ -233,12 +233,6 @@ def dm_create_linear(map_name, device, length, uuid=None):
+ return _dm_create_linear(map_name, device, length, uuid)
+ __all__.append("dm_create_linear")
+
+-_dm_get_member_raid_sets = BlockDev.dm_get_member_raid_sets
+-@override(BlockDev.dm_get_member_raid_sets)
+-def dm_get_member_raid_sets(name=None, uuid=None, major=-1, minor=-1):
+- return _dm_get_member_raid_sets(name, uuid, major, minor)
+-__all__.append("dm_get_member_raid_sets")
+-
+
+ _loop_setup = BlockDev.loop_setup
+ @override(BlockDev.loop_setup)
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0004-fix-compile-failure-against-musl-C-library.patch b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0004-fix-compile-failure-against-musl-C-library.patch
new file mode 100644
index 000000000..0b5b80912
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0004-fix-compile-failure-against-musl-C-library.patch
@@ -0,0 +1,50 @@
+From 59fbd57acd1df25b1972a131dc6a77a4fe147729 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Jul 2017 10:45:02 +0800
+Subject: [PATCH] fix compile failure against musl C library
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/plugins/crypto.c | 2 +-
+ src/plugins/part.c | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
+index b961471..2d3d251 100644
+--- a/src/plugins/crypto.c
++++ b/src/plugins/crypto.c
+@@ -22,7 +22,7 @@
+ #include <libcryptsetup.h>
+ #include <nss.h>
+ #include <volume_key/libvolume_key.h>
+-#include <sys/fcntl.h>
++#include <fcntl.h>
+ #include <sys/ioctl.h>
+ #include <linux/random.h>
+ #include <locale.h>
+diff --git a/src/plugins/part.c b/src/plugins/part.c
+index 6b2a690..ab490d9 100644
+--- a/src/plugins/part.c
++++ b/src/plugins/part.c
+@@ -25,6 +25,7 @@
+ #include <inttypes.h>
+ #include <unistd.h>
+ #include <sys/file.h>
++#include <fcntl.h>
+ #include <sys/ioctl.h>
+ #include <linux/fs.h>
+ #include <blockdev/utils.h>
+@@ -1354,7 +1355,7 @@ static gboolean set_gpt_flags (const gchar *device, int part_num, guint64 flags,
+ real_flags |= 0x4000000000000000; /* 1 << 62 */
+ if (flags & BD_PART_FLAG_GPT_NO_AUTOMOUNT)
+ real_flags |= 0x8000000000000000; /* 1 << 63 */
+- mask_str = g_strdup_printf ("%.16"__PRI64_PREFIX"x", real_flags);
++ mask_str = g_strdup_printf ("%.16"__PRI64"x", real_flags);
+
+ args[2] = g_strdup_printf ("%d:=:%s", part_num, mask_str);
+ g_free (mask_str);
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0005-fix-a-clang-compiling-issue.patch b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0005-fix-a-clang-compiling-issue.patch
new file mode 100644
index 000000000..b214f0b05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/files/0005-fix-a-clang-compiling-issue.patch
@@ -0,0 +1,111 @@
+From 9b4a7a4d0653b627d747e00d6b3ada2990caa1d3 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 9 Aug 2017 13:57:57 +0800
+Subject: [PATCH] fix a clang compiling issue
+
+[snip]
+../../../git/src/plugins/fs.c:2617:26: error: missing field 'start'
+initializer [-Werror,-Wmissing-field-initializers]
+ PedGeometry geom = {0};
+ ^
+../../../git/src/plugins/fs.c:2618:30: error: missing field 'start'
+initializer [-Werror,-Wmissing-field-initializers]
+ PedGeometry new_geom = {0};
+[snip]
+
+Fix typo s/enum libvk_packet_format format/enum libvk_secret secret_type/
+
+Upstream-Status: Submitted [https://github.com/storaged-project/libblockdev/pull/266]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/plugins/crypto.c | 6 +++---
+ src/plugins/fs/vfat.c | 4 ++--
+ src/plugins/part.c | 4 ++--
+ src/utils/exec.c | 2 +-
+ 4 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
+index 563093e..b961471 100644
+--- a/src/plugins/crypto.c
++++ b/src/plugins/crypto.c
+@@ -970,7 +970,7 @@ gboolean bd_crypto_tc_open (const gchar *device, const gchar *name, const guint8
+ gint ret = 0;
+ guint64 progress_id = 0;
+ gchar *msg = NULL;
+- struct crypt_params_tcrypt params = {0};
++ struct crypt_params_tcrypt params = {NULL,0,NULL,0,NULL,NULL,NULL,0,0};
+
+ msg = g_strdup_printf ("Started opening '%s' TrueCrypt/VeraCrypt device", device);
+ progress_id = bd_utils_report_started (msg);
+@@ -1090,7 +1090,7 @@ static gchar *replace_char (gchar *str, gchar orig, gchar new) {
+ return str;
+ }
+
+-static gboolean write_escrow_data_file (struct libvk_volume *volume, struct libvk_ui *ui, enum libvk_packet_format format, const gchar *out_path,
++static gboolean write_escrow_data_file (struct libvk_volume *volume, struct libvk_ui *ui, enum libvk_secret secret_type, const gchar *out_path,
+ CERTCertificate *cert, GError **error) {
+ gpointer packet_data = NULL;
+ gsize packet_data_size = 0;
+@@ -1099,7 +1099,7 @@ static gboolean write_escrow_data_file (struct libvk_volume *volume, struct libv
+ gsize bytes_written = 0;
+ GError *tmp_error = NULL;
+
+- packet_data = libvk_volume_create_packet_asymmetric_with_format (volume, &packet_data_size, format, cert,
++ packet_data = libvk_volume_create_packet_asymmetric_with_format (volume, &packet_data_size, secret_type, cert,
+ ui, LIBVK_PACKET_FORMAT_ASYMMETRIC_WRAP_SECRET_ONLY, error);
+
+ if (!packet_data) {
+diff --git a/src/plugins/fs/vfat.c b/src/plugins/fs/vfat.c
+index 3ed7d4a..5ff7795 100644
+--- a/src/plugins/fs/vfat.c
++++ b/src/plugins/fs/vfat.c
+@@ -376,8 +376,8 @@ BDFSVfatInfo* bd_fs_vfat_get_info (const gchar *device, GError **error) {
+ */
+ gboolean bd_fs_vfat_resize (const gchar *device, guint64 new_size, GError **error) {
+ PedDevice *ped_dev = NULL;
+- PedGeometry geom = {0};
+- PedGeometry new_geom = {0};
++ PedGeometry geom = {NULL, 0, 0, 0};
++ PedGeometry new_geom = {NULL, 0, 0, 0};
+ PedFileSystem *fs = NULL;
+ PedSector start = 0;
+ PedSector length = 0;
+diff --git a/src/plugins/part.c b/src/plugins/part.c
+index fed8300..6b2a690 100644
+--- a/src/plugins/part.c
++++ b/src/plugins/part.c
+@@ -926,7 +926,7 @@ static PedPartition* add_part_to_disk (PedDevice *dev, PedDisk *disk, BDPartType
+ return NULL;
+ }
+
+- part = ped_partition_new (disk, type, NULL, geom->start, geom->end);
++ part = ped_partition_new (disk, (PedPartitionType)type, NULL, geom->start, geom->end);
+ if (!part) {
+ set_parted_error (error, BD_PART_ERROR_FAIL);
+ g_prefix_error (error, "Failed to create new partition on device '%s'", dev->path);
+@@ -1564,7 +1564,7 @@ gboolean bd_part_set_part_flags (const gchar *disk, const gchar *part, guint64 f
+ PedPartition *ped_part = NULL;
+ const gchar *part_num_str = NULL;
+ gint part_num = 0;
+- guint64 i = 0;
++ int i = 0;
+ gint status = 0;
+ gboolean ret = FALSE;
+ guint64 progress_id = 0;
+diff --git a/src/utils/exec.c b/src/utils/exec.c
+index 11c1489..dcf87e5 100644
+--- a/src/utils/exec.c
++++ b/src/utils/exec.c
+@@ -354,7 +354,7 @@ gboolean bd_utils_exec_and_report_progress (const gchar **argv, const BDExtraArg
+ GIOStatus io_status = G_IO_STATUS_NORMAL;
+ guint i = 0;
+ guint8 completion = 0;
+- GPollFD fds[2] = {{0}, {0}};
++ GPollFD fds[2] = {{0,0,0}, {0,0,0}};
+ gboolean out_done = FALSE;
+ gboolean err_done = FALSE;
+ GString *stdout_data = g_string_new (NULL);
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.16.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.16.bb
new file mode 100644
index 000000000..0c954aa39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.16.bb
@@ -0,0 +1,51 @@
+DESCRIPTION = "libblockdev is a C library supporting GObject introspection for manipulation of \
+block devices. It has a plugin-based architecture where each technology (like \
+LVM, Btrfs, MD RAID, Swap,...) is implemented in a separate plugin, possibly \
+with multiple implementations (e.g. using LVM CLI or the new LVM DBus API)."
+HOMEPAGE = "http://rhinstaller.github.io/libblockdev/"
+LICENSE = "LGPLv2+"
+SECTION = "devel/lib"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
+
+inherit autotools python3native gobject-introspection
+
+DEPENDS += " \
+ cryptsetup \
+ nss \
+ volume-key \
+ libbytesize \
+ btrfs-tools \
+"
+
+SRCREV = "e2e0899efe8dd3f111ff955fb6c1dc10b0bd2075"
+SRC_URI = " \
+ git://github.com/rhinstaller/libblockdev;branch=master \
+ file://0001-fix-configure-and-compile-failures.patch \
+ file://0002-remove-python2-support.patch \
+ file://0003-remove-dmraid-while-compiling-with-with-dm.patch \
+ file://0005-fix-a-clang-compiling-issue.patch \
+"
+SRC_URI_append_libc-musl = " \
+ file://0004-fix-compile-failure-against-musl-C-library.patch \
+"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN} += " \
+ lvm2 \
+"
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}"
+
+PACKAGECONFIG ??= "python3 lvm dm kmod parted fs"
+PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
+PACKAGECONFIG[lvm] = "--with-lvm, --without-lvm, multipath-tools"
+PACKAGECONFIG[dm] = "--with-dm, --without-dm"
+PACKAGECONFIG[kmod] = "--with-kbd, --without-kbd, kmod"
+PACKAGECONFIG[parted] = "--with-part, --without-part, parted"
+PACKAGECONFIG[fs] = "--with-fs, --without-fs, util-linux"
+PACKAGECONFIG[doc] = "--with-gtk-doc, --without-gtk-doc, gtk-doc-native"
+
+export GIR_EXTRA_LIBS_PATH="${B}/src/utils/.libs"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/files/python-install-location.patch b/meta-openembedded/meta-oe/recipes-extended/libcec/files/python-install-location.patch
new file mode 100644
index 000000000..b6be78dd4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/files/python-install-location.patch
@@ -0,0 +1,28 @@
+From 330fa6777d51d41eefacff8e98e4250d210fde35 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Javi=20Mart=C3=ADnez?= <javi@flamingalah.net>
+Date: Tue, 13 Dec 2016 22:31:13 +0100
+Subject: [PATCH] Improve/fix installation of Python bindings
+
+Upstream-Status: Backport
+
+dist-packages is a Debian-specific directory for distribution packages (and used in derivatives such as Ubuntu). Therefore changed to site-packages.
+---
+ src/libcec/cmake/CheckPlatformSupport.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake
+index fcd0ef7..7661107 100644
+--- a/src/libcec/cmake/CheckPlatformSupport.cmake
++++ b/src/libcec/cmake/CheckPlatformSupport.cmake
+@@ -195,9 +195,9 @@ else()
+ RENAME __init__.py)
+ else()
+ install(TARGETS ${SWIG_MODULE_cec_REAL_NAME}
+- DESTINATION lib/python${PYTHON_VERSION}/dist-packages/cec)
++ DESTINATION lib/python${PYTHON_VERSION}/site-packages/cec)
+ install(FILES ${CMAKE_BINARY_DIR}/src/libcec/cec.py
+- DESTINATION lib/python${PYTHON_VERSION}/dist-packages/cec
++ DESTINATION lib/python${PYTHON_VERSION}/site-packages/cec
+ RENAME __init__.py)
+ endif()
+ endif()
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
new file mode 100644
index 000000000..cb65caad8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
@@ -0,0 +1,31 @@
+SUMMARY = "USB CEC Adaptor communication Library"
+HOMEPAGE = "http://libcec.pulse-eight.com/"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e61fd86f9c947b430126181da2c6c715"
+
+DEPENDS = "p8platform udev lockdev ncurses swig-native python3"
+
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11 libxrandr', '', d)}"
+DEPENDS_append_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}"
+
+PV = "4.0.1+gitr${SRCPV}"
+
+SRCREV = "2fc92b5f02dca702da92ccc5ed7b805b240ef5df"
+SRC_URI = "git://github.com/Pulse-Eight/libcec.git \
+ file://python-install-location.patch"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+# Create the wrapper for python3
+PACKAGES += "python3-${BPN}"
+FILES_python3-${BPN} = "${libdir}/python3*"
+
+# cec-client and xbmc need the .so present to work :(
+FILES_${PN} += "${libdir}/*.so"
+INSANE_SKIP_${PN} = "dev-so"
+
+# Adapter shows up as a CDC-ACM device
+RRECOMMENDS_${PN} = "kernel-module-cdc-acm"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libconfig/libconfig_1.5.bb b/meta-openembedded/meta-oe/recipes-extended/libconfig/libconfig_1.5.bb
new file mode 100644
index 000000000..fb6e50e51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libconfig/libconfig_1.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "C/C++ Configuration File Library"
+DESCRIPTION = "Library for manipulating structured configuration files"
+HOMEPAGE = "http://www.hyperrealm.com/libconfig/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=fad9b3332be894bab9bc501572864b29"
+
+SRC_URI = "http://www.hyperrealm.com/${BPN}/${BP}.tar.gz"
+
+inherit autotools-brokensep pkgconfig
+
+SRC_URI[md5sum] = "a939c4990d74e6fc1ee62be05716f633"
+SRC_URI[sha256sum] = "e31daa390d8e4461c8830512fe2e13ba1a3d6a02a2305a02429eec61e68703f6"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/files/fix-ar.patch b/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/files/fix-ar.patch
new file mode 100644
index 000000000..f65d26aae
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/files/fix-ar.patch
@@ -0,0 +1,16 @@
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: git/configure.ac
+===================================================================
+--- git.orig/configure.ac
++++ git/configure.ac
+@@ -56,6 +56,7 @@ AM_CONDITIONAL([ENABLE_EXAMPLES], [test
+ # Checks for programs.
+ AC_PROG_CC
+ AC_PROG_CC_C99
++AM_PROG_AR
+
+ # Enable automake silent build rules.
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
diff --git a/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/libdivecomputer_git.bb b/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/libdivecomputer_git.bb
new file mode 100644
index 000000000..6c4f4a072
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libdivecomputer/libdivecomputer_git.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Libdivecomputer is a cross-platform and open source library for communication with dive computers from various manufacturers."
+HOMEPAGE = "http://www.divesoftware.org/libdc/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
+
+DEPENDS = "libusb1"
+
+inherit autotools pkgconfig
+
+PV = "0.4.2+gitr${SRCPV}"
+
+SRCREV = "5f765f91430f16932d96b3777404420aa2dd4c7c"
+SRC_URI = "git://git.libdivecomputer.org/libdivecomputer.git \
+ file://fix-ar.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0001-makefile-Fix-build-on-linux.patch b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0001-makefile-Fix-build-on-linux.patch
new file mode 100644
index 000000000..f1863f14b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0001-makefile-Fix-build-on-linux.patch
@@ -0,0 +1,59 @@
+From 910bbc2cb6cc1cfa6deed9d170da02a639902c7c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 19 Mar 2017 16:14:54 -0700
+Subject: [PATCH 1/2] makefile: Fix build on linux
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 33 +++++++++++++++++----------------
+ 1 file changed, 17 insertions(+), 16 deletions(-)
+
+Index: libexecinfo-1.1/Makefile
+===================================================================
+--- libexecinfo-1.1.orig/Makefile
++++ libexecinfo-1.1/Makefile
+@@ -23,24 +23,25 @@
+ # SUCH DAMAGE.
+ #
+ # $Id: Makefile,v 1.3 2004/07/19 05:19:55 sobomax Exp $
++#
++# Linux Makefile by Matt Smith <mcs@darkregion.net>, 2011/01/04
+
+-LIB= execinfo
+-
+-SRCS= stacktraverse.c stacktraverse.h execinfo.c execinfo.h
+-
+-INCS= execinfo.h
+-
+-SHLIB_MAJOR= 1
+-SHLIB_MINOR= 0
+-
+-NOPROFILE= yes
+-
+-DPADD= ${LIBM}
+-LDADD= -lm
+-
+-#WARNS?= 4
+-
+-#stacktraverse.c: gen.py
+-# ./gen.py > stacktraverse.c
++CC?=cc
++AR?=ar
++EXECINFO_CFLAGS=$(CFLAGS) -O2 -pipe -fno-strict-aliasing -std=gnu99 -fstack-protector -c
++EXECINFO_LDFLAGS=$(LDFLAGS)
++
++all: static dynamic
++
++static:
++ $(CC) $(EXECINFO_CFLAGS) $(EXECINFO_LDFLAGS) stacktraverse.c
++ $(CC) $(EXECINFO_CFLAGS) $(EXECINFO_LDFLAGS) execinfo.c
++ $(AR) rcs libexecinfo.a stacktraverse.o execinfo.o
++
++dynamic:
++ $(CC) -fpic -DPIC $(EXECINFO_CFLAGS) $(EXECINFO_LDFLAGS) stacktraverse.c -o stacktraverse.So
++ $(CC) -fpic -DPIC $(EXECINFO_CFLAGS) $(EXECINFO_LDFLAGS) execinfo.c -o execinfo.So
++ $(CC) -shared -Wl,-soname,libexecinfo.so.1 -o libexecinfo.so.1 $(EXECINFO_LDFLAGS) stacktraverse.So execinfo.So
+
+-.include <bsd.lib.mk>
++clean:
++ rm -rf *.o *.So *.a *.so
diff --git a/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0002-execinfo-Fix-compiler-errors-found-with-newer-gcc-cl.patch b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0002-execinfo-Fix-compiler-errors-found-with-newer-gcc-cl.patch
new file mode 100644
index 000000000..423b67082
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo/0002-execinfo-Fix-compiler-errors-found-with-newer-gcc-cl.patch
@@ -0,0 +1,79 @@
+From 0810817773fb81d7383d2fa8464244c8f79845fb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 19 Mar 2017 16:16:18 -0700
+Subject: [PATCH 2/2] execinfo: Fix compiler errors found with newer gcc/clang
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ execinfo.c | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/execinfo.c b/execinfo.c
+index 906fb14..9448b60 100644
+--- a/execinfo.c
++++ b/execinfo.c
+@@ -69,7 +69,8 @@ backtrace(void **buffer, int size)
+ char **
+ backtrace_symbols(void *const *buffer, int size)
+ {
+- int i, clen, alen, offset;
++ size_t clen, alen;
++ int i, offset;
+ char **rval;
+ char *cp;
+ Dl_info info;
+@@ -78,7 +79,6 @@ backtrace_symbols(void *const *buffer, int size)
+ rval = malloc(clen);
+ if (rval == NULL)
+ return NULL;
+- (char **)cp = &(rval[size]);
+ for (i = 0; i < size; i++) {
+ if (dladdr(buffer[i], &info) != 0) {
+ if (info.dli_sname == NULL)
+@@ -92,14 +92,14 @@ backtrace_symbols(void *const *buffer, int size)
+ 2 + /* " <" */
+ strlen(info.dli_sname) + /* "function" */
+ 1 + /* "+" */
+- D10(offset) + /* "offset */
++ 10 + /* "offset */
+ 5 + /* "> at " */
+ strlen(info.dli_fname) + /* "filename" */
+ 1; /* "\0" */
+ rval = realloc_safe(rval, clen + alen);
+ if (rval == NULL)
+ return NULL;
+- snprintf(cp, alen, "%p <%s+%d> at %s",
++ snprintf((char *) rval + clen, alen, "%p <%s+%d> at %s",
+ buffer[i], info.dli_sname, offset, info.dli_fname);
+ } else {
+ alen = 2 + /* "0x" */
+@@ -108,12 +108,15 @@ backtrace_symbols(void *const *buffer, int size)
+ rval = realloc_safe(rval, clen + alen);
+ if (rval == NULL)
+ return NULL;
+- snprintf(cp, alen, "%p", buffer[i]);
++ snprintf((char *) rval + clen, alen, "%p", buffer[i]);
+ }
+- rval[i] = cp;
+- cp += alen;
++ rval[i] = (char *) clen;
++ clen += alen;
+ }
+
++ for (i = 0; i < size; i++)
++ rval[i] += (long) rval;
++
+ return rval;
+ }
+
+@@ -155,6 +158,6 @@ backtrace_symbols_fd(void *const *buffer, int size, int fd)
+ return;
+ snprintf(buf, len, "%p\n", buffer[i]);
+ }
+- write(fd, buf, len - 1);
++ write(fd, buf, strlen(buf));
+ }
+ }
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo_1.1.bb b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo_1.1.bb
new file mode 100644
index 000000000..d4bad38b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libexecinfo/libexecinfo_1.1.bb
@@ -0,0 +1,31 @@
+# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "A quick-n-dirty BSD licensed clone of the GNU libc backtrace facility."
+HOMEPAGE = "http://www.freshports.org/devel/libexecinfo"
+LIC_FILES_CHKSUM = "file://execinfo.c;endline=25;md5=85bd3fa4ea9acae5182e29db063fe2e5"
+LICENSE = "BSD-2-Clause"
+SECTION = "libs"
+DEPENDS = ""
+
+SRC_URI = "http://distcache.freebsd.org/local-distfiles/itetcu/${BP}.tar.bz2 \
+ file://0001-makefile-Fix-build-on-linux.patch \
+ file://0002-execinfo-Fix-compiler-errors-found-with-newer-gcc-cl.patch \
+ "
+SRC_URI[md5sum] = "8e9e81c554c1c5d735bc877448e92b91"
+SRC_URI[sha256sum] = "c9a21913e7fdac8ef6b33250b167aa1fc0a7b8a175145e26913a4c19d8a59b1f"
+
+CFLAGS += "-fno-omit-frame-pointer -D_GNU_SOURCE"
+
+do_install() {
+ install -D -m 0744 ${S}/execinfo.h ${D}${includedir}/execinfo.h
+ install -D -m 0744 ${S}/stacktraverse.h ${D}${includedir}/stacktraverse.h
+ install -D -m 0744 ${B}/libexecinfo.a ${D}${libdir}/libexecinfo.a
+ install -D -m 0755 ${B}/libexecinfo.so.1 ${D}${libdir}/libexecinfo.so.1
+ ln -s libexecinfo.so.1 ${D}${libdir}/libexecinfo.so
+}
+#
+# We will skip parsing for non-musl systems
+#
+COMPATIBLE_HOST = ".*-musl.*"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0001-Use-AM_CPPFLAGS-instead-of-INCLUDES.patch b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0001-Use-AM_CPPFLAGS-instead-of-INCLUDES.patch
new file mode 100644
index 000000000..41e07f39f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0001-Use-AM_CPPFLAGS-instead-of-INCLUDES.patch
@@ -0,0 +1,53 @@
+From d2ccba90186e2affbb3d146ada341ea2ae6fab2c Mon Sep 17 00:00:00 2001
+From: Akira TAGOH <akira@tagoh.org>
+Date: Mon, 13 May 2013 16:05:32 +0900
+Subject: [PATCH 1/3] Use AM_CPPFLAGS instead of INCLUDES
+
+---
+ docs/reference/Makefile.am | 2 +-
+ libgxim/Makefile.am | 2 +-
+ tests/Makefile.am | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
+index 24986e1..f785735 100644
+--- a/docs/reference/Makefile.am
++++ b/docs/reference/Makefile.am
+@@ -84,7 +84,7 @@ expand_content_files=
+ # signals and properties.
+ # e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+ # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+-INCLUDES= \
++AM_CPPFLAGS= \
+ $(GXIM_CFLAGS) \
+ -I$(top_srcdir) \
+ $(NULL)
+diff --git a/libgxim/Makefile.am b/libgxim/Makefile.am
+index 572bdb5..ae1ba32 100644
+--- a/libgxim/Makefile.am
++++ b/libgxim/Makefile.am
+@@ -1,7 +1,7 @@
+ ##
+ # Global definitions
+ NULL =
+-INCLUDES = \
++AM_CPPFLAGS = \
+ $(GXIM_CFLAGS) \
+ -I$(top_srcdir) \
+ $(NULL)
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 2926829..919ccc8 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -1,7 +1,7 @@
+ ##
+ # Global definitions
+ NULL =
+-INCLUDES = \
++AM_CPPFLAGS = \
+ -I$(top_srcdir)/libgxim \
+ -I$(top_srcdir) \
+ $(GXIM_CFLAGS) \
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0002-Update-autotools-macro.patch b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0002-Update-autotools-macro.patch
new file mode 100644
index 000000000..808203b6e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0002-Update-autotools-macro.patch
@@ -0,0 +1,31 @@
+From 3215783732b147723e3613cc3c3f83cdcf2ae832 Mon Sep 17 00:00:00 2001
+From: Akira TAGOH <akira@tagoh.org>
+Date: Wed, 22 Jan 2014 18:59:32 +0900
+Subject: [PATCH 2/3] Update autotools macro
+
+---
+ configure.ac | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d559491..8b846a6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -11,10 +11,12 @@ dnl V=0 to make.
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+ AM_MAINTAINER_MODE
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ AC_CONFIG_MACRO_DIR([m4macros])
+
+-AC_PROG_LIBTOOL
++LT_PREREQ([2.2])
++LT_INIT([disable-static])
++
+ AC_PROG_INTLTOOL
+
+ AC_PROG_CC
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0003-Add-format-string-qualifier-to-fix-potential-securit.patch b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0003-Add-format-string-qualifier-to-fix-potential-securit.patch
new file mode 100644
index 000000000..cb21e1ef4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/0003-Add-format-string-qualifier-to-fix-potential-securit.patch
@@ -0,0 +1,30 @@
+From d05d7fa24ee128f1f33a2e905fc3601955dd27d4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 18:06:02 -0700
+Subject: [PATCH 3/3] Add format string qualifier to fix potential security
+ risk
+
+Fixes
+libgxim/gximprotocol10.c:2076:66: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libgxim/gximprotocol10.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgxim/gximprotocol10.c b/libgxim/gximprotocol10.c
+index 04887a5..65bd4df 100644
+--- a/libgxim/gximprotocol10.c
++++ b/libgxim/gximprotocol10.c
+@@ -2073,7 +2073,7 @@ g_xim_protocol10_closure_real_parser_error(GXimProtocol *proto,
+ msg = g_strdup_printf("Unable to parse the protocol %s properly",
+ g_xim_protocol_name(major_opcode));
+
+- g_xim_messages_error(G_XIM_PROTOCOL_GET_IFACE (proto)->message, msg);
++ g_xim_messages_error(G_XIM_PROTOCOL_GET_IFACE (proto)->message, "%s", msg);
+ switch (major_opcode) {
+ case G_XIM_CONNECT:
+ case G_XIM_AUTH_REQUIRED:
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/multi-line-ACLOCAL_AMFLAGS-isnot-supported-by-autoreconf.patch b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/multi-line-ACLOCAL_AMFLAGS-isnot-supported-by-autoreconf.patch
new file mode 100644
index 000000000..3d293b473
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim/multi-line-ACLOCAL_AMFLAGS-isnot-supported-by-autoreconf.patch
@@ -0,0 +1,21 @@
+multi-line ACLOCAL_AMFLAGS isn't supported by autoreconf.
+It will cause configure error as follow.
+
+ aclocal: error: non-option arguments are not accepted: '\'.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+diff -Nurp libgxim-0.5.0.orig/Makefile.am libgxim-0.5.0/Makefile.am
+--- libgxim-0.5.0.orig/Makefile.am 2012-12-13 15:48:09.000000000 +0800
++++ libgxim-0.5.0/Makefile.am 2014-12-19 11:05:50.727209821 +0800
+@@ -2,9 +2,7 @@ NULL =
+ AUTOMAKE_OPTIONS = dist-bzip2
+ SUBDIRS = libgxim m4macros po tests docs
+
+-ACLOCAL_AMFLAGS = \
+- -I m4macros \
+- $(NULL)
++ACLOCAL_AMFLAGS = -I m4macros $(NULL)
+
+ CONFIGURE_DEPENDENCIES = \
+ requires \
diff --git a/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim_0.5.0.bb b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim_0.5.0.bb
new file mode 100644
index 000000000..7e4c330a1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libgxim/libgxim_0.5.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "GObject-based XIM protocol library"
+DESCRIPTION = "libgxim is a X Input Method protocol library that is implemented by GObject.\
+this library helps you to implement XIM servers or client applications to\
+communicate through XIM protocol without using Xlib API directly, particularly\
+if your application uses GObject-based main loop.\
+\
+This package contains the shared library."
+
+HOMEPAGE = "http://code.google.com/p/libgxim/"
+SECTION = "System Environment/Libraries"
+
+SRC_URI = "https://bitbucket.org/tagoh/libgxim/downloads/${BPN}-${PV}.tar.bz2 \
+ file://multi-line-ACLOCAL_AMFLAGS-isnot-supported-by-autoreconf.patch \
+ file://0001-Use-AM_CPPFLAGS-instead-of-INCLUDES.patch \
+ file://0002-Update-autotools-macro.patch \
+ file://0003-Add-format-string-qualifier-to-fix-potential-securit.patch \
+ "
+
+SRC_URI[md5sum] = "4bb1fa63d00eb224439d413591c29a6a"
+SRC_URI[sha256sum] = "75e20d1744139644f9951b78ea3910b162d3380302315cb4b3d0640f23694c79"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "\
+file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+EXTRA_OECONF = " --disable-static --disable-rebuilds --enable-compile-warnings=minimum"
+DEPENDS += "gtk+ glib-2.0 glib-2.0-native ruby-native intltool-native gnome-common-native"
+
+inherit distro_features_check autotools pkgconfig gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/0001-Fix-warnings-found-with-clang.patch b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/0001-Fix-warnings-found-with-clang.patch
new file mode 100644
index 000000000..f8114a063
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/0001-Fix-warnings-found-with-clang.patch
@@ -0,0 +1,51 @@
+From ad1be542b87b3186f8ef7bee2c594daefe5bb4c8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 18 Oct 2016 21:31:40 +0000
+Subject: [PATCH] Fix warnings found with clang
+
+| /mnt/oe/openembedded-core/build/workspace/sources/libplist/src/base64.c:107:12: error: non-void function 'base64decode' should return a value [-Wreturn-type]
+| if (!buf) return;
+| ^
+| /mnt/oe/openembedded-core/build/workspace/sources/libplist/src/base64.c:109:16: error: non-void function 'base64decode' should return a value [-Wreturn-type]
+| if (len <= 0) return;
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libcnary/node.c | 2 +-
+ src/base64.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libcnary/node.c b/libcnary/node.c
+index 1f9f669..d6f3f63 100644
+--- a/libcnary/node.c
++++ b/libcnary/node.c
+@@ -104,7 +104,7 @@ int node_detach(node_t* parent, node_t* child) {
+
+ int node_insert(node_t* parent, unsigned int index, node_t* child)
+ {
+- if (!parent || !child) return;
++ if (!parent || !child) return -1;
+ child->isLeaf = TRUE;
+ child->isRoot = FALSE;
+ child->parent = parent;
+diff --git a/src/base64.c b/src/base64.c
+index 65c6061..531a06a 100644
+--- a/src/base64.c
++++ b/src/base64.c
+@@ -104,9 +104,9 @@ static int base64decode_block(unsigned char *target, const char *data, size_t da
+
+ unsigned char *base64decode(const char *buf, size_t *size)
+ {
+- if (!buf) return;
++ if (!buf) return 0;
+ size_t len = strlen(buf);
+- if (len <= 0) return;
++ if (len <= 0) return 0;
+ unsigned char *outbuf = (unsigned char*)malloc((len/4)*3+3);
+
+ unsigned char *line;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/fix-parallel-make.patch b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/fix-parallel-make.patch
new file mode 100644
index 000000000..f6ef6f4f8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/files/fix-parallel-make.patch
@@ -0,0 +1,21 @@
+From 335b25febd4c864ad0ac08479f5cd43fc21b7d73 Mon Sep 17 00:00:00 2001
+From: Nikias Bassen
+Date: Mon, 09 Jul 2012 21:17:15 +0000
+Subject: Fix building with parallel build makeopts
+
+---
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0bad840..155994e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -57,6 +57,8 @@ ADD_SUBDIRECTORY( plutil )
+ ADD_SUBDIRECTORY( include )
+ ADD_SUBDIRECTORY( test )
+
++ADD_DEPENDENCIES( plist libcnary )
++
+ IF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )
+ ADD_SUBDIRECTORY( swig )
+ ENDIF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )
+--
+cgit v0.9.0.2
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_1.8.bb b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_1.8.bb
new file mode 100644
index 000000000..f78979619
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_1.8.bb
@@ -0,0 +1,31 @@
+SUMMARY = "A library to handle Apple Property List format whereas it's binary or XML"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
+ file://COPYING.LESSER;md5=6ab17b41640564434dda85c06b7124f7"
+
+DEPENDS = "libxml2 glib-2.0 swig python"
+
+inherit cmake pkgconfig
+
+SRC_URI = "http://www.libimobiledevice.org/downloads/libplist-${PV}.tar.bz2 \
+ file://fix-parallel-make.patch \
+ file://0001-Fix-warnings-found-with-clang.patch \
+ "
+
+SRC_URI[md5sum] = "2a9e0258847d50f9760dc3ece25f4dc6"
+SRC_URI[sha256sum] = "a418da3880308199b74766deef2a760a9b169b81a868a6a9032f7614e20500ec"
+
+do_install_append () {
+ if [ -e ${D}${libdir}/python*/site-packages/plist/_plist.so ]; then
+ chrpath -d ${D}${libdir}/python*/site-packages/plist/_plist.so
+ fi
+}
+
+PACKAGES =+ "${PN}-utils ${PN}++ ${PN}-python"
+FILES_${PN} = "${libdir}/libplist${SOLIBS}"
+FILES_${PN}++ = "${libdir}/libplist++${SOLIBS}"
+FILES_${PN}-utils = "${bindir}/*"
+FILES_${PN}-python = "${libdir}/python*/site-packages/*"
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/configure.patch b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/configure.patch
new file mode 100644
index 000000000..ea13e11d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/configure.patch
@@ -0,0 +1,25 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- liblockfile-1.05/./configure.in~configure
++++ liblockfile-1.05/./configure.in
+@@ -1,4 +1,5 @@
+-AC_INIT(lockfile.c)
++AC_INIT
++AC_CONFIG_SRCDIR([lockfile.c])
+ AC_CONFIG_HEADER(autoconf.h)
+ AC_REVISION($Revision: 1.0 $)dnl
+
+@@ -111,7 +112,8 @@
+ AC_SUBST(INSTALL_TARGETS)
+ AC_SUBST(nfslockdir)
+
+-AC_OUTPUT(\
++AC_CONFIG_FILES([\
+ ./Makefile \
+ ./maillock.h \
+-)
++])
++AC_OUTPUT
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/install.patch b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/install.patch
new file mode 100644
index 000000000..a9319ff1e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/install.patch
@@ -0,0 +1,48 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- liblockfile-1.05/Makefile.in~install
++++ liblockfile-1.05/Makefile.in
+@@ -20,6 +20,7 @@
+ includedir = @includedir@
+
+ MAILGROUP = @MAILGROUP@
++INSTGRP = $(if $(MAILGROUP),-g $(MAILGROUP))
+
+ all: @TARGETS@
+ install: @INSTALL_TARGETS@
+@@ -50,25 +51,27 @@
+ $(CC) $(CFLAGS) -c lockfile.c -o xlockfile.o
+
+ install_static: static install_common
++ install -d $(ROOT)$(libdir)
+ install -m 644 liblockfile.a $(ROOT)$(libdir)
+
+ install_shared: shared install_common
++ install -d $(ROOT)$(libdir)
+ install -m 755 liblockfile.so \
+ $(ROOT)$(libdir)/liblockfile.so.$(VER)
+ ln -s liblockfile.so.$(VER) $(ROOT)$(libdir)/liblockfile.so
+ if test "$(ROOT)" = ""; then @LDCONFIG@; fi
+
+ install_common:
++ install -d $(ROOT)$(includedir)
+ install -m 644 lockfile.h maillock.h $(ROOT)$(includedir)
+- if [ "$(MAILGROUP)" != "" ]; then\
+- install -g $(MAILGROUP) -m 2755 dotlockfile $(ROOT)$(bindir);\
+- else \
+- install -g root -m 755 dotlockfile $(ROOT)$(bindir); \
+- fi
++ install -d $(ROOT)$(bindir)
++ install -m 755 $(INSTGRP) dotlockfile $(ROOT)$(bindir)
++ install -d $(ROOT)$(mandir)/man1 $(ROOT)$(mandir)/man3
+ install -m 644 *.1 $(ROOT)$(mandir)/man1
+ install -m 644 *.3 $(ROOT)$(mandir)/man3
+
+ install_nfslib: nfslib
++ install -d $(ROOT)$(nfslockdir)
+ install -m 755 nfslock.so.$(VER) $(ROOT)$(nfslockdir)
+ if test "$(ROOT)" = ""; then @LDCONFIG@; fi
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/ldflags.patch b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/ldflags.patch
new file mode 100644
index 000000000..eb1d1478b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/ldflags.patch
@@ -0,0 +1,21 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- liblockfile-1.05/Makefile.in~ldflags
++++ liblockfile-1.05/Makefile.in
+@@ -34,11 +34,11 @@
+
+ liblockfile.so: liblockfile.a
+ $(CC) -fPIC -shared -Wl,-soname,liblockfile.so.1 \
+- -o liblockfile.so lockfile.o -lc
++ -o liblockfile.so lockfile.o $(LDFLAGS) -lc
+
+ nfslock.so.$(VER): nfslock.o
+ $(CC) -fPIC -shared -Wl,-soname,nfslock.so.0 \
+- -o nfslock.so.$(NVER) nfslock.o
++ -o nfslock.so.$(NVER) nfslock.o $(LDFLAGS)
+
+ dotlockfile: dotlockfile.o xlockfile.o
+ $(CC) $(LDFLAGS) -o dotlockfile dotlockfile.o xlockfile.o
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-install-so-to-man-dir.patch b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-install-so-to-man-dir.patch
new file mode 100644
index 000000000..27f760c83
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-install-so-to-man-dir.patch
@@ -0,0 +1,20 @@
+Upstream-Status: Inappropriate [no upstream]
+
+The extend so file is rename from nfslock.so.$(VER) to nfslock.so.$(NVER). That
+causes file nfslock.so.0.1 is installed into manual directory. Fix it.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+diff --git a/Makefile.in b/Makefile.in
+index a589fb8..46a57e8 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -68,7 +68,7 @@ install_common:
+ install -d $(ROOT)$(bindir)
+ install -m 755 $(INSTGRP) dotlockfile $(ROOT)$(bindir)
+ install -d $(ROOT)$(mandir)/man1 $(ROOT)$(mandir)/man3
+- install -m 644 *.1 $(ROOT)$(mandir)/man1
++ install -m 644 dotlockfile.1 $(ROOT)$(mandir)/man1
+ install -m 644 *.3 $(ROOT)$(mandir)/man3
+
+ install_nfslib: nfslib
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-nfslib-and-soname.patch b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-nfslib-and-soname.patch
new file mode 100644
index 000000000..ffd7a40fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile-1.09/liblockfile-fix-nfslib-and-soname.patch
@@ -0,0 +1,54 @@
+Upstream-Status: Inappropriate [no upstream]
+
+* nfslib should use NVER instead of VER
+* install the missing soname library
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ Makefile.in | 9 ++++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 836ca9b..a589fb8 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -27,7 +27,7 @@ install: @INSTALL_TARGETS@
+
+ static: liblockfile.a dotlockfile
+ shared: liblockfile.so dotlockfile
+-nfslib: nfslock.so.$(VER)
++nfslib: nfslock.so.$(NVER)
+
+ liblockfile.a: lockfile.o
+ $(AR) rv liblockfile.a lockfile.o
+@@ -36,7 +36,7 @@ liblockfile.so: liblockfile.a
+ $(CC) -fPIC -shared -Wl,-soname,liblockfile.so.1 \
+ -o liblockfile.so lockfile.o $(LDFLAGS) -lc
+
+-nfslock.so.$(VER): nfslock.o
++nfslock.so.$(NVER): nfslock.o
+ $(CC) -fPIC -shared -Wl,-soname,nfslock.so.0 \
+ -o nfslock.so.$(NVER) nfslock.o $(LDFLAGS)
+
+@@ -59,6 +59,7 @@ install_shared: shared install_common
+ install -m 755 liblockfile.so \
+ $(ROOT)$(libdir)/liblockfile.so.$(VER)
+ ln -s liblockfile.so.$(VER) $(ROOT)$(libdir)/liblockfile.so
++ ln -s liblockfile.so.$(VER) $(ROOT)$(libdir)/liblockfile.so.1
+ if test "$(ROOT)" = ""; then @LDCONFIG@; fi
+
+ install_common:
+@@ -72,7 +73,9 @@ install_common:
+
+ install_nfslib: nfslib
+ install -d $(ROOT)$(nfslockdir)
+- install -m 755 nfslock.so.$(VER) $(ROOT)$(nfslockdir)
++ install -m 755 nfslock.so.$(NVER) $(ROOT)$(nfslockdir)
++ ln -sf nfslock.so.$(NVER) $(ROOT)$(libdir)/nfslock.so
++ ln -sf nfslock.so.$(NVER) $(ROOT)$(libdir)/nfslock.so.0
+ if test "$(ROOT)" = ""; then @LDCONFIG@; fi
+
+ clean:
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile_1.09.bb b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile_1.09.bb
new file mode 100644
index 000000000..0c41afa3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblockfile/liblockfile_1.09.bb
@@ -0,0 +1,35 @@
+SUMMARY = "File locking library"
+HOMEPAGE = "http://packages.qa.debian.org/libl/liblockfile.html"
+SECTION = "libs"
+LICENSE = "LGPLv2+ & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=ac284a60d48eaa4bc811cddc377fa341"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/libl/liblockfile/liblockfile_1.09.orig.tar.gz \
+ ${DEBIAN_MIRROR}/main/libl/liblockfile/liblockfile_1.09-6.debian.tar.bz2;name=1.09-6 \
+ file://install.patch \
+ file://configure.patch \
+ file://ldflags.patch \
+ file://liblockfile-fix-nfslib-and-soname.patch \
+ file://liblockfile-fix-install-so-to-man-dir.patch \
+"
+
+SRC_URI[md5sum] = "2aa269e4405ee8235ff17d1b357c6ae8"
+SRC_URI[sha256sum] = "16979eba05396365e1d6af7100431ae9d32f9bc063930d1de66298a0695f1b7f"
+
+SRC_URI[1.09-6.md5sum] = "a2811807e63a526c07b0f60626e329a2"
+SRC_URI[1.09-6.sha256sum] = "d45eacb7c637c16d03c777c55989d98da494ae9584a0783fe6dbf0db60fa290f"
+
+inherit autotools-brokensep
+
+# set default mailgroup to mail
+# --with-libnfslock specify where to install nfslock.so.NVER
+EXTRA_OECONF = "--enable-shared \
+ --with-mailgroup=mail \
+ --with-libnfslock=${libdir} \
+"
+
+# Makefile using ROOT not DESTDIR
+EXTRA_OEMAKE += "ROOT=${D}"
+
+FILES_${PN} += "${libdir}/nfslock.so.*"
+FILES_${PN}-dev += "${libdir}/nfslock.so"
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblogging/liblogging_1.0.5.bb b/meta-openembedded/meta-oe/recipes-extended/liblogging/liblogging_1.0.5.bb
new file mode 100644
index 000000000..64a258b01
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblogging/liblogging_1.0.5.bb
@@ -0,0 +1,23 @@
+SUMMARY = "An easy to use logging library"
+DESCRIPTION = " \
+liblogging (the upstream project) is a collection of several components. \
+Namely: stdlog, journalemu, rfc3195. \
+The stdlog component of liblogging can be viewed as an enhanced version of \
+the syslog(3) API. It retains the easy semantics, but makes the API more \
+sophisticated "behind the scenes" with better support for multiple threads \
+and flexibility for different log destinations (e.g. syslog and systemd \
+journal)."
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=63fe03535d83726f5655072502bef1bc"
+SRC_URI = "http://download.rsyslog.com/${BPN}/${BPN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "44b8ce2daa1bfb84c9feaf42f9925fd7"
+SRC_URI[sha256sum] = "310dc1691279b7a669d383581fe4b0babdc7bf75c9b54a24e51e60428624890b"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-man-pages"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--enable-journal, --disable-journal, systemd"
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm.inc b/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm.inc
new file mode 100644
index 000000000..dc8abb91f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Fast samples-based log normalization library"
+DESCRIPTION = "Briefly described, liblognorm is a tool to normalize log data."
+
+HOMEPAGE = "http://www.liblognorm.com"
+SECTION = "base"
+
+LICENSE = "LGPL-2.1+"
+
+SRC_URI = "http://www.liblognorm.com/files/download/${BPN}-${PV}.tar.gz\
+"
+
+inherit autotools pkgconfig
+
+DEPENDS += "libee libestr json-c"
+
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug,,"
+PACKAGECONFIG[docs] = "--enable-docs,--disable-docs,sphinx,"
diff --git a/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm_1.0.1.bb b/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm_1.0.1.bb
new file mode 100644
index 000000000..5d89e3540
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/liblognorm/liblognorm_1.0.1.bb
@@ -0,0 +1,5 @@
+require ${BPN}.inc
+
+SRC_URI[md5sum] = "7b9a826542af9686127110deab09d7a1"
+SRC_URI[sha256sum] = "1f6cdfd901a8f6a97a3cb74bc6107c6746b3e9381f7889e4cd866a488e0c59a5"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ca016db57e008528dace002188c73dad"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus.inc b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus.inc
new file mode 100644
index 000000000..a01659a72
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A Modbus library"
+DESCRIPTION = "libmodbus is a C library designed to provide a fast and robust \
+implementation of the Modbus protocol. It runs on Linux, Mac OS X, FreeBSD, \
+QNX and Windows."
+HOMEPAGE = "http://www.libmodbus.org/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "http://libmodbus.org/releases/${BP}.tar.gz"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb
new file mode 100644
index 000000000..b4d32fb2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb
@@ -0,0 +1,4 @@
+require libmodbus.inc
+
+SRC_URI[md5sum] = "c80f88b6ca19cabc4ceffc195ca07771"
+SRC_URI[sha256sum] = "046d63f10f755e2160dc56ef681e5f5ad3862a57c1955fd82e0ce036b69471b6"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb
new file mode 100644
index 000000000..d438a0abc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb
@@ -0,0 +1,7 @@
+require libmodbus.inc
+
+# Use the stable branch by default
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI[md5sum] = "b1a8fd3a40d2db4de51fb0cbcb201806"
+SRC_URI[sha256sum] = "c8c862b0e9a7ba699a49bc98f62bdffdfafd53a5716c0e162696b4bf108d3637"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch b/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch
new file mode 100644
index 000000000..d12492f02
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch
@@ -0,0 +1,48 @@
+From 1ea09e09ab2387c326bb7170835361ece6e25477 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 3 Aug 2015 13:43:14 +0800
+Subject: [PATCH] setup.py.in: add missing python include dir for cross
+ compiling
+
+Upstream-Status: inappropriate [oe-core specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ python/Makefile.am | 2 +-
+ python/setup.py.in | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/python/Makefile.am b/python/Makefile.am
+index abc5cd3..e35ba71 100644
+--- a/python/Makefile.am
++++ b/python/Makefile.am
+@@ -14,4 +14,4 @@ all-local:
+ CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py build --build-lib=.
+
+ install-exec-local:
+- CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py install --prefix=${DESTDIR}${prefix}
++ CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py install --prefix=${DESTDIR}${prefix} --install-lib=${DESTDIR}/${PYTHONSITEDIR}
+diff --git a/python/setup.py.in b/python/setup.py.in
+index 6457595..d3db0e5 100755
+--- a/python/setup.py.in
++++ b/python/setup.py.in
+@@ -6,6 +6,7 @@
+
+ from distutils.core import setup, Extension
+ from distutils.command.build_ext import build_ext as _build_ext
++import os
+
+ class build_ext(_build_ext):
+ def genconstants(self, headerfile, outputfile):
+@@ -23,7 +24,7 @@ class build_ext(_build_ext):
+
+ pwqmodule = Extension('pwquality',
+ sources = ['pwquality.c'],
+- include_dirs = ['../src'],
++ include_dirs = ['../src', os.path.join(os.environ['STAGING_INCDIR'], os.environ['PYTHON_DIR'])],
+ library_dirs = ['../src/.libs'],
+ libraries = ['pwquality'])
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb b/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb
new file mode 100644
index 000000000..2c96063f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb
@@ -0,0 +1,45 @@
+DESCRIPTION = "Library for password quality checking and generating random passwords"
+HOMEPAGE = "https://github.com/libpwquality/libpwquality"
+SECTION = "devel/lib"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bd2f1386df813a459a0c34fde676fc2"
+
+SRCNAME = "libpwquality"
+SRC_URI = "https://github.com/${SRCNAME}/${SRCNAME}/releases/download/${SRCNAME}-${PV}/${SRCNAME}-${PV}.tar.bz2 \
+ file://add-missing-python-include-dir-for-cross.patch \
+"
+
+SRC_URI[md5sum] = "b8defcc7280a90e9400d6689c93a279c"
+SRC_URI[sha256sum] = "1de6ff046cf2172d265a2cb6f8da439d894f3e4e8157b056c515515232fade6b"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+DEPENDS = "cracklib virtual/gettext python3"
+RDEPENDS_python3-libpwquality = "${PN}"
+
+inherit autotools python3native gettext
+
+B = "${S}"
+
+export PYTHON_DIR
+export BUILD_SYS
+export HOST_SYS
+export STAGING_LIBDIR
+export STAGING_INCDIR
+
+EXTRA_OECONF += "--with-python-rev=${PYTHON_BASEVERSION} \
+ --with-python-binary=${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
+ --with-pythonsitedir=${PYTHON_SITEPACKAGES_DIR} \
+ --libdir=${libdir} \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}"
+PACKAGECONFIG[pam] = "--enable-pam, --disable-pam, libpam"
+
+PACKAGES += "python3-libpwquality python3-libpwquality-dbg"
+FILES_${PN} += "${libdir}/security/pam_pwquality.so"
+FILES_${PN}-dbg += "${libdir}/security/.debug"
+FILES_${PN}-staticdev += "${libdir}/security/pam_pwquality.a"
+FILES_${PN}-dev += "${libdir}/security/pam_pwquality.la"
+FILES_python3-${PN} = "${PYTHON_SITEPACKAGES_DIR}/*"
+FILES_python3-${PN}-dbg = "${PYTHON_SITEPACKAGES_DIR}/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libqb/libqb/0001-build-fix-configure-script-neglecting-re-enable-out-.patch b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb/0001-build-fix-configure-script-neglecting-re-enable-out-.patch
new file mode 100644
index 000000000..c82f3bf01
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb/0001-build-fix-configure-script-neglecting-re-enable-out-.patch
@@ -0,0 +1,56 @@
+From 73d2aea33e32272bac693550e8a3b0e3ad89707f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <jpokorny@redhat.com>
+Date: Tue, 26 Dec 2017 00:02:26 +0100
+Subject: [PATCH] build: fix configure script neglecting, re-enable out-of-tree
+ builds
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For the former, a prototype and the final code got (hm, mysteriously)
+intertwisted. For the latter, I am clearly guilty of (rare, anyway)
+testing of the out-of-tree builds only with libqb-already-system-wide
+scenario, which is rather shortsighted.
+
+Thanks Fabio and his ci.kronosnet.org project for spotting that.
+
+X-mas-present-for: Fabio M. Di Nitto <fdinitto@redhat.com>
+Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
+---
+Upstream-Status: Backport
+
+ configure.ac | 2 +-
+ lib/Makefile.am | 4 +++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9900310..f9761cc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -710,7 +710,7 @@ if test "x${GCC}" = xyes; then
+ | grep __stop___verbose | cut -d" " -f 3)
+ test "${verbose_start_addr}" = "${verbose_stop_addr}" \
+ && gcc_has_attribute_section_visible=no \
+- || { verbose_start_type=$(${READELF} -s backup \
++ || { verbose_start_type=$(${READELF} -s "conftest${shrext_cmds}" \
+ | sed -n '/__start___verbose/{s/^\s*//p;q}' \
+ | tr -s ' ' \
+ | cut -d" " -f6)
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 6ca6b15..b035f0b 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -101,7 +101,9 @@ endif
+ endif
+
+ qblog_script.ld: %.ld: %.ld.in
+- $(AM_V_GEN)$(CPP) -xc -I$(top_srcdir)/include -D_GNU_SOURCE -C -P $< \
++ $(AM_V_GEN)$(CPP) -C -D_GNU_SOURCE -P \
++ -I$(top_srcdir)/include -I$(top_builddir)/include \
++ -xc $< \
+ | sed -n "/$$(sed -n '/^[^#]/{s/[*\/]/\\&/g;p;q;}' $<)/,$$ p" \
+ > $@
+
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.3.bb b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.3.bb
new file mode 100644
index 000000000..73cea5e39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.3.bb
@@ -0,0 +1,25 @@
+SUMMARY = "An IPC library for high performance servers"
+DESCRIPTION = "libqb is a library with the primary purpose of providing high performance client server reusable features. \
+It provides high performance logging, tracing, ipc, and poll."
+
+HOMEPAGE = "https://github.com/clusterlabs/libqb/wiki"
+SECTION = "libs"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=321bf41f280cf805086dd5a720b37785"
+
+inherit autotools pkgconfig
+
+PV .= "+git${SRCPV}"
+
+# v1.0.3
+SRCREV = "28dff090c74b6ba8609c4797294a5afe3fe73987"
+SRC_URI = "git://github.com/ClusterLabs/${BPN}.git \
+ file://0001-build-fix-configure-script-neglecting-re-enable-out-.patch \
+ "
+S = "${WORKDIR}/git"
+
+CFLAGS += "-pthread -D_REENTRANT"
+do_configure_prepend() {
+ ( cd ${S}
+ ${S}/autogen.sh )
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/files/0001-Makefile.am-remove-doc-and-apidoc.patch b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0001-Makefile.am-remove-doc-and-apidoc.patch
new file mode 100644
index 000000000..9b328a10a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0001-Makefile.am-remove-doc-and-apidoc.patch
@@ -0,0 +1,28 @@
+From db32ba60ca75d288d3ac08b54256cb74d9e1581a Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 26 Apr 2017 03:47:58 -0400
+Subject: [PATCH 1/3] Makefile.am: remove doc and apidoc
+
+There was a failure at do_install time, so remove doc to workaround.
+
+Upstream-Status: Inappropriate workaround
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index c6ab640..fb09fc1 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,5 +1,5 @@
+ ACLOCAL_AMFLAGS = -I m4
+-SUBDIRS = po src tests doc apidoc
++SUBDIRS = po src tests
+
+ EXTRA_DIST = \
+ libreport.pc.in \
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/files/0002-configure.ac-remove-prog-test-of-xmlto-and-asciidoc.patch b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0002-configure.ac-remove-prog-test-of-xmlto-and-asciidoc.patch
new file mode 100644
index 000000000..146510e3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0002-configure.ac-remove-prog-test-of-xmlto-and-asciidoc.patch
@@ -0,0 +1,48 @@
+From d8c49e6a15ab28f4ca94e03b2a53ed8df63346cd Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 26 Apr 2017 03:49:45 -0400
+Subject: [PATCH 2/3] configure.ac: remove prog test of xmlto and asciidoc
+
+The prog of xmlto and asciidoc were used to generate documents,
+and since the doc module has already been disabled, so we should
+remove the prog test.
+
+Upstream-Status: Inappropriate workaround
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 18 ------------------
+ 1 file changed, 18 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ccefe50..ed48c88 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -68,24 +68,6 @@ if test -z "$PYTHON3"; then
+ exit 1
+ fi
+
+-AC_PATH_PROG([ASCIIDOC], [asciidoc], [no])
+-[if test "$ASCIIDOC" = "no"]
+-[then]
+- [echo "The asciidoc program was not found in the search path. Please ensure"]
+- [echo "that it is installed and its directory is included in the search path."]
+- [echo "Then run configure again before attempting to build libreport."]
+- [exit 1]
+-[fi]
+-
+-AC_PATH_PROG([XMLTO], [xmlto], [no])
+-[if test "$XMLTO" = "no"]
+-[then]
+- [echo "The xmlto program was not found in the search path. Please ensure"]
+- [echo "that it is installed and its directory is included in the search path."]
+- [echo "Then run configure again before attempting to build libreport."]
+- [exit 1]
+-[fi]
+-
+ AC_ARG_WITH(bugzilla,
+ AS_HELP_STRING([--with-bugzilla],[use Bugzilla plugin (default is YES)]),
+ LIBREPORT_PARSE_WITH([bugzilla]))
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/files/0003-without-build-plugins.patch b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0003-without-build-plugins.patch
new file mode 100644
index 000000000..3ad777464
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0003-without-build-plugins.patch
@@ -0,0 +1,26 @@
+From 0e96d9f23b2b166e7444e7c8e0a6d4b83c2eccd7 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 26 Apr 2017 03:51:03 -0400
+Subject: [PATCH 3/3] without build plugins
+
+Upstream-Status: Inappropriate workaround
+
+Rebase to 2.9.1
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index c15928c..bac02b1 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -8,4 +8,4 @@ if BUILD_NEWT
+ sub_dirs += report-newt
+ endif
+
+-SUBDIRS = include lib plugins report-python cli client-python workflows $(sub_dirs)
++SUBDIRS = include lib report-python cli client-python workflows $(sub_dirs)
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/files/0004-configure.ac-remove-prog-test-of-augparse.patch b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0004-configure.ac-remove-prog-test-of-augparse.patch
new file mode 100644
index 000000000..9839e5a9f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0004-configure.ac-remove-prog-test-of-augparse.patch
@@ -0,0 +1,36 @@
+From cf3b646facc19078ed29f828e36dd2e552283518 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Apr 2017 02:15:02 -0400
+Subject: [PATCH] configure.ac: remove prog test of augparse
+
+The build time does not require it.
+
+Upstream-Status: Inappropriate workaround
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c06af2d..b90f49e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -288,14 +288,6 @@ AC_ARG_WITH(augeaslenslibdir,
+ [Directory for librepor lens (default: /usr/share/augeas/lenses)])],
+ [], [with_augeaslenslibdir="/usr/share/augeas/lenses"])
+ AC_SUBST([AUGEAS_LENS_LIB_DIR], [$with_augeaslenslibdir])
+-AC_PATH_PROG(AUGPARSE, augparse, no)
+-[if test "$AUGPARSE" = "no"]
+-[then]
+- [echo "The augparse program was not found in the search path. Please ensure"]
+- [echo "that it is installed and its directory is included in the search path."]
+- [echo "Then run configure again before attempting to build libreport."]
+- [exit 1]
+-[fi]
+
+ AC_ARG_WITH([defaultdumpdirmode],
+ AS_HELP_STRING([--with-defaultdumpdirmode=OCTAL-MODE],
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/files/0005-remove-python2-support.patch b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0005-remove-python2-support.patch
new file mode 100644
index 000000000..9770f077c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/files/0005-remove-python2-support.patch
@@ -0,0 +1,142 @@
+From 06710ab89fc7d7a82a378289aa3fcd92d33074f2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Apr 2017 03:31:00 -0400
+Subject: [PATCH] remove python2 support
+
+We do not require python2, so remove it.
+
+Upstream-Status: Inappropriate workaround
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 15 ---------------
+ src/client-python/reportclient/Makefile.am | 9 ---------
+ src/report-python/Makefile.am | 19 -------------------
+ 3 files changed, 43 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index eb50382..826d0fe 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -166,15 +166,6 @@ do
+ done
+ fi dnl end NO_MANTISBT
+
+-AC_PATH_PROG([PYTHON_CONFIG], [python-config], [no])
+-[if test "$PYTHON_CONFIG" = "no"]
+-[then]
+- [echo "The python-config program was not found in the search path. Please ensure"]
+- [echo "that it is installed and its directory is included in the search path."]
+- [echo "Then run configure again before attempting to build libreport."]
+- [exit 1]
+-[fi]
+-
+ AC_PATH_PROG([PYTHON3_CONFIG], [python3-config], [no])
+ [if test "$PYTHON3_CONFIG" = "no"]
+ [then]
+@@ -184,9 +175,6 @@ AC_PATH_PROG([PYTHON3_CONFIG], [python3-config], [no])
+ [exit 1]
+ [fi]
+
+-PYTHON_CFLAGS=`python-config --cflags 2> /dev/null`
+-PYTHON_LIBS=`python-config --libs 2> /dev/null`
+-
+ PYTHON3_CFLAGS=`python3-config --cflags 2> /dev/null`
+ PYTHON3_LIBS=`python3-config --libs 2> /dev/null`
+
+@@ -198,9 +186,6 @@ PYTHON3_DIR=`$PYTHON3 -c "import distutils.sysconfig; \
+ PYTHON3_EXECDIR=`$PYTHON3 -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"`
+
+-AC_SUBST(PYTHON_CFLAGS)
+-AC_SUBST(PYTHON_LIBS)
+-
+ AC_SUBST(PYTHON3_CFLAGS)
+ AC_SUBST(PYTHON3_LIBS)
+ AC_SUBST(python3dir, $PYTHON3_DIR)
+diff --git a/src/client-python/reportclient/Makefile.am b/src/client-python/reportclient/Makefile.am
+index 46ac42f..fb5216a 100644
+--- a/src/client-python/reportclient/Makefile.am
++++ b/src/client-python/reportclient/Makefile.am
+@@ -4,13 +4,10 @@ PYFILES = \
+ dnfdebuginfo.py \
+ yumdebuginfo.py
+
+-py2clientdir = $(pyexecdir)/reportclient
+ py3clientdir = $(py3execdir)/reportclient
+
+-py2client_PYTHON = $(PYFILES)
+ py3client_PYTHON = $(PYFILES)
+
+-py2client_LTLIBRARIES = _reportclient.la
+ py3client_LTLIBRARIES = _reportclient3.la
+
+ PYEXTFILES = \
+@@ -33,12 +30,6 @@ PYEXTLDFLAGS = \
+ -avoid-version \
+ -Wl,-z,relro -Wl,-z,now
+
+-_reportclient_la_SOURCES = $(PYEXTFILES)
+-_reportclient_la_CPPFLAGS = $(PYEXTCPPFLAGS) $(PYTHON_CFLAGS)
+-_reportclient_la_LDFLAGS = $(PYEXTLDFLAGS) \
+- -export-symbols-regex init_reportclient
+-_reportclient_la_LIBADD = ../../lib/libreport.la
+-
+ _reportclient3_la_SOURCES = $(PYEXTFILES)
+ _reportclient3_la_CPPFLAGS = $(PYEXTCPPFLAGS) $(PYTHON3_CFLAGS)
+ _reportclient3_la_LDFLAGS = $(PYEXTLDFLAGS) \
+diff --git a/src/report-python/Makefile.am b/src/report-python/Makefile.am
+index 793cebd..241dcb7 100644
+--- a/src/report-python/Makefile.am
++++ b/src/report-python/Makefile.am
+@@ -1,12 +1,9 @@
+ PYFILES = __init__.py accountmanager.py
+
+-pyreportexecdir = $(pyexecdir)/report
+ py3reportexecdir = $(py3execdir)/report
+
+-pyreportexec_PYTHON = $(PYFILES)
+ py3reportexec_PYTHON = $(PYFILES)
+
+-pyreportexec_LTLIBRARIES = _pyreport.la
+ py3reportexec_LTLIBRARIES = _py3report.la
+
+ PYEXTFILES = \
+@@ -34,20 +31,6 @@ PYEXTLDFLAGS = \
+ -avoid-version \
+ -Wl,-z,relro -Wl,-z,now
+
+-_pyreport_la_SOURCES = $(PYEXTFILES)
+-
+-_pyreport_la_CPPFLAGS = \
+- $(PYEXTCPPFLAGS) \
+- $(PYTHON_CFLAGS)
+-
+-_pyreport_la_LDFLAGS = \
+- $(PYEXTLDFLAGS) \
+- -export-symbols-regex init_pyreport
+-
+-_pyreport_la_LIBADD = \
+- ../lib/libreport.la \
+- $(PYTHON2_LIBS)
+-
+ _py3report_la_SOURCES = $(PYEXTFILES)
+
+ _py3report_la_CPPFLAGS = \
+@@ -64,7 +47,6 @@ _py3report_la_LIBADD = \
+
+ # report compat:
+
+-pyreportioexecdir = $(pyexecdir)/report/io
+ py3reportioexecdir = $(py3execdir)/report/io
+
+ PYIOFILES = \
+@@ -73,5 +55,4 @@ PYIOFILES = \
+ io/NewtIO.py \
+ io/TextIO.py
+
+-pyreportioexec_PYTHON = $(PYIOFILES)
+ py3reportioexec_PYTHON = $(PYIOFILES)
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libreport/libreport_2.9.2.bb b/meta-openembedded/meta-oe/recipes-extended/libreport/libreport_2.9.2.bb
new file mode 100644
index 000000000..f2c661c8f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libreport/libreport_2.9.2.bb
@@ -0,0 +1,45 @@
+DESCRIPTION = "Libraries providing API for reporting different problems in applications \
+to different bug targets like Bugzilla, ftp, trac, etc..."
+SUMMARY = "Generic library for reporting various problems"
+HOMEPAGE = "https://abrt.readthedocs.org/"
+LICENSE = "GPLv2+"
+DEPENDS = "xmlrpc-c xmlrpc-c-native intltool-native \
+ json-c libtar libnewt libproxy rpm \
+ augeas satyr systemd \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+
+SRC_URI = "git://github.com/abrt/libreport.git;protocol=https"
+SRC_URI += "file://0001-Makefile.am-remove-doc-and-apidoc.patch \
+ file://0002-configure.ac-remove-prog-test-of-xmlto-and-asciidoc.patch \
+ file://0003-without-build-plugins.patch \
+ file://0004-configure.ac-remove-prog-test-of-augparse.patch \
+ file://0005-remove-python2-support.patch \
+"
+SRCREV = "cfff49f06d9d17e269d463ee71b3d94c8bfb0c58"
+S = "${WORKDIR}/git"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+inherit gettext autotools python3native pkgconfig
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES','x11','gtk','',d)}"
+PACKAGECONFIG[gtk] = "--with-gtk, --without-gtk, gtk+3,"
+
+RDEPENDS_python3-libreport += "${PN}"
+
+do_patch[prefuncs] += "do_gen_version"
+do_gen_version() {
+ cd ${S}
+ ./gen-version
+}
+
+PACKAGES += "python3-libreport"
+
+FILES_${PN} += "${datadir}/*"
+FILES_${PN}-dbg += "${PYTHON_SITEPACKAGES_DIR}/*/.debug"
+FILES_python3-libreport = "${PYTHON_SITEPACKAGES_DIR}/*"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/0001-include-fcntl.h-for-O_RDWR-define.patch b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/0001-include-fcntl.h-for-O_RDWR-define.patch
new file mode 100644
index 000000000..3cae5c992
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/0001-include-fcntl.h-for-O_RDWR-define.patch
@@ -0,0 +1,38 @@
+From d39c78d322585a32f9a55c67c25a99602ce08b12 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Apr 2017 09:01:33 -0700
+Subject: [PATCH] include fcntl.h for O_RDWR define
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/lsuio.c | 1 +
+ tools/rwuio.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/tools/lsuio.c b/tools/lsuio.c
+index 58eb922..4769446 100644
+--- a/tools/lsuio.c
++++ b/tools/lsuio.c
+@@ -19,6 +19,7 @@
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <getopt.h>
++#include <fcntl.h>
+
+ #include "system.h"
+ #include "uio_helper.h"
+diff --git a/tools/rwuio.c b/tools/rwuio.c
+index aef9e90..ebc71e1 100644
+--- a/tools/rwuio.c
++++ b/tools/rwuio.c
+@@ -20,6 +20,7 @@
+ */
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <fcntl.h>
+ #include <sys/types.h>
+ #include <getopt.h>
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/replace_inline_with_static-inline.patch b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/replace_inline_with_static-inline.patch
new file mode 100644
index 000000000..fd314bfee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio/replace_inline_with_static-inline.patch
@@ -0,0 +1,121 @@
+By default, gcc-5 uses C99 inline semantics, this semantics doesn't
+generate externally visible function for inline functions. This results in
+below error, when an another translation unit (TU) tries to link with the
+inline function,
+
+-- snip --
+| lsuio.o: In function `main':
+| <...>/libuio/0.2.1-r0/git/tools/lsuio.c:85: undefined reference to `uio_mmap'
+| collect2: error: ld returned 1 exit status
+| make[2]: *** [lsuio] Error 1
+-- CUT --
+
+To solve this error and make libuio to compile with both 4.x and 5.x,
+
+1. We can remove 'uio_mmap' inline function definition in uio_mmap.c, and move
+ that definition into uio_helper.h file (which is included by lsuio.c) and
+ replace inline with "static inline". Similarly it can be done to other
+ uio_single_munmap and uio_munmap inline functions
+
+2. Add 'extern' keyword in front of inline functions declaration, to make
+ inlined function as externally visible function, and to link with other TUs.
+
+Going with option 1.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+--- git_org/src/uio_helper.h 2015-10-20 02:37:04.183075855 -0400
++++ git/src/uio_helper.h 2015-10-20 03:34:24.659970136 -0400
+@@ -61,11 +61,11 @@ struct uio_info_t {
+
+ /* function prototypes */
+
+-inline char* uio_lib_name(void);
+-inline char* uio_lib_version(void);
+-inline int uio_lib_ifcurrent(void);
+-inline int uio_lib_ifrevision(void);
+-inline int uio_lib_ifage(void);
++static inline char* uio_lib_name(void);
++static inline char* uio_lib_version(void);
++static inline int uio_lib_ifcurrent(void);
++static inline int uio_lib_ifrevision(void);
++static inline int uio_lib_ifage(void);
+
+ int uio_get_mem_size(struct uio_info_t* info, int map_num);
+ int uio_get_mem_addr(struct uio_info_t* info, int map_num);
+@@ -76,10 +76,30 @@ int uio_get_all_info(struct uio_info_t*
+ int uio_get_device_attributes(struct uio_info_t* info);
+
+ void* uio_single_mmap(struct uio_info_t* info, int map_num, int fd);
+-inline void uio_mmap(struct uio_info_t* info, int fd);
+
+-inline void uio_single_munmap(struct uio_info_t* info, int map_num);
+-inline void uio_munmap(struct uio_info_t* info);
++static inline void uio_mmap(struct uio_info_t* info, int fd);
++static inline void uio_mmap(struct uio_info_t* info, int fd)
++{
++ int map_num;
++ if (!fd) return;
++ for (map_num= 0; map_num < MAX_UIO_MAPS; map_num++)
++ uio_single_mmap(info, map_num, fd);
++}
++
++static inline void uio_single_munmap(struct uio_info_t* info, int map_num);
++static inline void uio_single_munmap(struct uio_info_t* info, int map_num)
++{
++ munmap(info->maps[map_num].internal_addr, info->maps[map_num].size);
++ info->maps[map_num].mmap_result = UIO_MMAP_NOT_DONE;
++}
++
++static inline void uio_munmap(struct uio_info_t* info);
++static inline void uio_munmap(struct uio_info_t* info)
++{
++ int i;
++ for (i = 0; i < MAX_UIO_MAPS; i++)
++ uio_single_munmap(info, i);
++}
+
+ void uio_free_dev_attrs(struct uio_info_t* info);
+ void uio_free_info(struct uio_info_t* info);
+--- git_org/src/uio_mmap.c 2015-10-20 02:37:04.183075855 -0400
++++ git/src/uio_mmap.c 2015-10-20 03:34:45.060003208 -0400
+@@ -22,11 +22,3 @@
+ #include <stdlib.h>
+
+ #include "uio_helper.h"
+-
+-inline void uio_mmap(struct uio_info_t* info, int fd)
+-{
+- int map_num;
+- if (!fd) return;
+- for (map_num= 0; map_num < MAX_UIO_MAPS; map_num++)
+- uio_single_mmap(info, map_num, fd);
+-}
+--- git_org/src/uio_munmap.c 2015-10-20 02:37:04.183075855 -0400
++++ git/src/uio_munmap.c 2015-10-20 03:34:59.636026835 -0400
+@@ -22,10 +22,3 @@
+ #include <stdlib.h>
+
+ #include "uio_helper.h"
+-
+-inline void uio_munmap(struct uio_info_t* info)
+-{
+- int i;
+- for (i = 0; i < MAX_UIO_MAPS; i++)
+- uio_single_munmap(info, i);
+-}
+\ No newline at end of file
+--- git_org/src/uio_single_munmap.c 2015-10-20 02:37:04.183075855 -0400
++++ git/src/uio_single_munmap.c 2015-10-20 03:52:55.005763023 -0400
+@@ -24,9 +24,3 @@
+ #include <sys/mman.h>
+
+ #include "uio_helper.h"
+-
+-inline void uio_single_munmap(struct uio_info_t* info, int map_num)
+-{
+- munmap(info->maps[map_num].internal_addr, info->maps[map_num].size);
+- info->maps[map_num].mmap_result = UIO_MMAP_NOT_DONE;
+-}
diff --git a/meta-openembedded/meta-oe/recipes-extended/libuio/libuio_0.2.1.bb b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio_0.2.1.bb
new file mode 100644
index 000000000..dd34c180a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libuio/libuio_0.2.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Libuio - helper library for UIO subsystem"
+SECTION = "base"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+
+SRC_URI = "git://git.code.sf.net/p/libuio/code \
+ file://replace_inline_with_static-inline.patch \
+ file://0001-include-fcntl.h-for-O_RDWR-define.patch \
+ "
+
+inherit autotools
+
+SRCREV = "ed4f07ea147ac403c28105ab44d01bbf524d36f9"
+
+PV .= "+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+PACKAGES += "${PN}-tools"
+
+FILES_${PN} = "${libdir}"
+FILES_${PN}-tools = "${bindir}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/0001-configure-use-pkg-config-for-freetype.patch b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/0001-configure-use-pkg-config-for-freetype.patch
new file mode 100644
index 000000000..0f133e2e7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/0001-configure-use-pkg-config-for-freetype.patch
@@ -0,0 +1,67 @@
+From 61655f82224cadb261e81f8bae111eaaa7bdf531 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 6 Aug 2014 14:53:03 +0200
+Subject: [PATCH] configure: use pkg-config for freetype
+
+Upstream-status: Pending
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ configure.ac | 37 ++++++++-----------------------------
+ 1 file changed, 8 insertions(+), 29 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3cfe974..0055a8c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -399,40 +399,19 @@ AC_ARG_WITH(freetype,[ --with-freetype=DIR use freetype2 in DIR],[
+ fi
+ ])
+
+-if [ test -n "$FREETYPE_DIR" ]; then
+- AC_PATH_PROG(FREETYPE_CONFIG,freetype-config, ,[$FREETYPE_DIR/bin:$PATH])
+-else
+- AC_PATH_PROG(FREETYPE_CONFIG,freetype-config)
+-fi
+-
+-if [ test -n "$FREETYPE_CONFIG" ]; then
+- if [ test -n "$FREETYPE_DIR" ]; then
+- freetype_cflags="`$FREETYPE_CONFIG --cflags` -I$FREETYPE_DIR/include"
+- freetype_libs=`$FREETYPE_CONFIG --libs`
+- else
+- freetype_cflags=`$FREETYPE_CONFIG --cflags`
+- freetype_libs=`$FREETYPE_CONFIG --libs`
+- fi
+-else
+- if [ test -n "$FREETYPE_DIR" ]; then
+- freetype_cflags="-I$FREETYPE_DIR/include/freetype2 -I$FREETYPE_DIR/include"
+- freetype_libs="-L$FREETYPE_DIR/lib -lfreetype"
+- else
+- freetype_cflags=""
+- freetype_libs="-lfreetype"
+- fi
+-fi
+-
+-CPPFLAGS="$freetype_cflags $CPPFLAGS"
+-LDFLAGS="$LDFLAGS $freetype_libs"
++PKG_CHECK_MODULES(FREETYPE2, freetype2,
++ CFLAGS="$CFLAGS $FREETYPE2_CFLAGS"
++ LDFLAGS="$LDFLAGS $FREETYPE2_LIBS",
++ AC_MSG_ERROR([*** Unable to find FreeType2 library (http://www.freetype.org/)])
++)
+
+ AC_CHECK_LIB(freetype,FT_Init_FreeType,[
+- WMF_FT_LDFLAGS="$freetype_libs"
++ WMF_FT_LDFLAGS="$FREETYPE2_LIBS"
+ ],[ AC_MSG_ERROR([* * * freetype(2) is required * * *])
+ ])
+ AC_CHECK_HEADER(ft2build.h,[
+- WMF_FT_CFLAGS="$freetype_cflags"
+- WMF_FT_CONFIG_CFLAGS="$freetype_cflags"
++ WMF_FT_CFLAGS="$FREETYPE2_CFLAGS"
++ WMF_FT_CONFIG_CFLAGS="$FREETYPE2_CFLAGS"
+ ],[ AC_MSG_ERROR([* * * freetype(2) is required * * *])
+ ])
+
+--
+1.9.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-intoverflow.patch b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-intoverflow.patch
new file mode 100644
index 000000000..50d915c01
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-intoverflow.patch
@@ -0,0 +1,31 @@
+http://cvs.fedoraproject.org/viewvc/devel/libwmf/libwmf-0.2.8.4-intoverflow.patch?view=log
+
+CVE-2006-3376 libwmf integer overflow
+
+--- libwmf-0.2.8.4.orig/src/player.c 2002-12-10 19:30:26.000000000 +0000
++++ libwmf-0.2.8.4/src/player.c 2006-07-12 15:12:52.000000000 +0100
+@@ -42,6 +42,7 @@
+ #include "player/defaults.h" /* Provides: default settings */
+ #include "player/record.h" /* Provides: parameter mechanism */
+ #include "player/meta.h" /* Provides: record interpreters */
++#include <stdint.h>
+
+ /**
+ * @internal
+@@ -132,8 +134,14 @@
+ }
+ }
+
+-/* P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API)-3) * 2 * sizeof (unsigned char));
+- */ P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API) ) * 2 * sizeof (unsigned char));
++ if (MAX_REC_SIZE(API) > UINT32_MAX / 2)
++ {
++ API->err = wmf_E_InsMem;
++ WMF_DEBUG (API,"bailing...");
++ return (API->err);
++ }
++
++ P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API) ) * 2 * sizeof (unsigned char));
+
+ if (ERR (API))
+ { WMF_DEBUG (API,"bailing...");
diff --git a/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-useafterfree.patch b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-useafterfree.patch
new file mode 100644
index 000000000..4d2d28564
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf/libwmf-0.2.8.4-useafterfree.patch
@@ -0,0 +1,14 @@
+
+http://cvs.fedoraproject.org/viewvc/devel/libwmf/libwmf-0.2.8.4-useafterfree.patch?view=log
+Resolves: CVE-2009-1364
+
+--- libwmf-0.2.8.4/src/extra/gd/gd_clip.c.CVE-2009-1364-im-clip-list 2009-04-24 04:06:44.000000000 -0400
++++ libwmf-0.2.8.4/src/extra/gd/gd_clip.c 2009-04-24 04:08:30.000000000 -0400
+@@ -70,6 +70,7 @@ void gdClipSetAdd(gdImagePtr im,gdClipRe
+ { more = gdRealloc (im->clip->list,(im->clip->max + 8) * sizeof (gdClipRectangle));
+ if (more == 0) return;
+ im->clip->max += 8;
++ im->clip->list = more;
+ }
+ im->clip->list[im->clip->count] = (*rect);
+ im->clip->count++;
diff --git a/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf_0.2.8.4.bb b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf_0.2.8.4.bb
new file mode 100644
index 000000000..2c31a21c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libwmf/libwmf_0.2.8.4.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Library for converting WMF files"
+HOMEPAGE = "http://wvware.sourceforge.net/libwmf.html"
+SECTION = "libs"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+PR = "r3"
+
+DEPENDS_class-native = "freetype-native libpng-native jpeg-native"
+DEPENDS = "freetype libpng jpeg expat gtk+"
+
+BBCLASSEXTEND = "native"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/${BPN}/${PV}/${BPN}-${PV}.tar.gz;name=tarball \
+ file://libwmf-0.2.8.4-intoverflow.patch \
+ file://libwmf-0.2.8.4-useafterfree.patch \
+ file://0001-configure-use-pkg-config-for-freetype.patch \
+ "
+
+SRC_URI[tarball.md5sum] = "d1177739bf1ceb07f57421f0cee191e0"
+SRC_URI[tarball.sha256sum] = "5b345c69220545d003ad52bfd035d5d6f4f075e65204114a9e875e84895a7cf8"
+
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/2.10.0/loaders/.debug"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/2.10.0/loaders/*.la"
+FILES_${PN}-staticdev += "${libdir}/gtk-2.0/2.10.0/loaders/*.a"
+FILES_${PN} += "${libdir}/gtk-2.0/2.10.0/loaders/*.so"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/0001-assume-zero-is-valid-address.patch b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/0001-assume-zero-is-valid-address.patch
new file mode 100644
index 000000000..7a46301de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/0001-assume-zero-is-valid-address.patch
@@ -0,0 +1,26 @@
+assume zero is valid address
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ thunk.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/thunk.c b/thunk.c
+index 796e88b..6121ea1 100644
+--- a/thunk.c
++++ b/thunk.c
+@@ -141,9 +141,6 @@ int LRMI_init() {
+
+ mmap_addr = LRMI_common_init(1);
+
+- if (!mmap_addr)
+- return 0;
+-
+ X86EMU_pioFuncs pioFuncs = {
+ (&x_inb),
+ (&x_inw),
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/libx86-mmap-offset.patch b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/libx86-mmap-offset.patch
new file mode 100644
index 000000000..843acc886
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/libx86-mmap-offset.patch
@@ -0,0 +1,190 @@
+Upstream-Statue: Pending
+[from ftp://195.220.108.108/linux/fedora/linux/development/rawhide/source/SRPMS/l/libx86-1.1-21.fc23.src.rpm]
+
+diff -ur libx86-1.1/lrmi.c libx86-1.1.hack/lrmi.c
+--- libx86-1.1/lrmi.c 2006-10-30 15:10:16.000000000 -0500
++++ libx86-1.1.hack/lrmi.c 2009-10-26 15:55:42.000000000 -0400
+@@ -136,7 +136,7 @@
+ if (context.ready)
+ return 1;
+
+- if (!LRMI_common_init())
++ if (!LRMI_common_init(0))
+ return 0;
+
+ /*
+diff -ur libx86-1.1/thunk.c libx86-1.1.hack/thunk.c
+--- libx86-1.1/thunk.c 2008-04-02 20:48:00.000000000 -0400
++++ libx86-1.1.hack/thunk.c 2009-10-26 16:05:39.000000000 -0400
+@@ -139,11 +139,11 @@
+ int i;
+ X86EMU_intrFuncs intFuncs[256];
+
+- if (!LRMI_common_init())
++ mmap_addr = LRMI_common_init(1);
++
++ if (!mmap_addr)
+ return 0;
+
+- mmap_addr = 0;
+-
+ X86EMU_pioFuncs pioFuncs = {
+ (&x_inb),
+ (&x_inw),
+@@ -169,10 +169,10 @@
+ X86_ESP = 0xFFF9;
+ memset (stack, 0, 64*1024);
+
+- *((char *)0) = 0x4f; /* Make sure that we end up jumping back to a
+- halt instruction */
++ *mmap_addr = 0x4f; /* Make sure that we end up jumping back to a
++ halt instruction */
+
+- M.mem_base = 0;
++ M.mem_base = (unsigned long)mmap_addr;
+ M.mem_size = 1024*1024;
+
+ return 1;
+diff -ur libx86-1.1/x86-common.c libx86-1.1.hack/x86-common.c
+--- libx86-1.1/x86-common.c 2008-05-16 12:56:23.000000000 -0400
++++ libx86-1.1.hack/x86-common.c 2009-10-26 16:03:21.000000000 -0400
+@@ -45,14 +45,15 @@
+ static struct {
+ int ready;
+ int count;
++ void *offset;
+ struct mem_block blocks[REAL_MEM_BLOCKS];
+ } mem_info = { 0 };
+
+ static int
+-real_mem_init(void)
++real_mem_init(int high_page)
+ {
+ void *m;
+- int fd_zero;
++ int fd_zero, flags = MAP_SHARED;
+
+ if (mem_info.ready)
+ return 1;
+@@ -63,9 +64,12 @@
+ return 0;
+ }
+
++ if (!high_page)
++ flags |= MAP_FIXED;
++
+ m = mmap((void *)REAL_MEM_BASE, REAL_MEM_SIZE,
+- PROT_READ | PROT_WRITE | PROT_EXEC,
+- MAP_FIXED | MAP_SHARED, fd_zero, 0);
++ PROT_READ | PROT_WRITE | PROT_EXEC,
++ flags, fd_zero, 0);
+
+ if (m == (void *)-1) {
+ perror("mmap /dev/zero");
+@@ -76,6 +80,7 @@
+ close(fd_zero);
+
+ mem_info.ready = 1;
++ mem_info.offset = m;
+ mem_info.count = 1;
+ mem_info.blocks[0].size = REAL_MEM_SIZE;
+ mem_info.blocks[0].free = 1;
+@@ -87,7 +92,7 @@
+ real_mem_deinit(void)
+ {
+ if (mem_info.ready) {
+- munmap((void *)REAL_MEM_BASE, REAL_MEM_SIZE);
++ munmap(mem_info.offset, REAL_MEM_SIZE);
+ mem_info.ready = 0;
+ }
+ }
+@@ -119,7 +124,7 @@
+ LRMI_alloc_real(int size)
+ {
+ int i;
+- char *r = (char *)REAL_MEM_BASE;
++ char *r = (char *)mem_info.offset;
+
+ if (!mem_info.ready)
+ return NULL;
+@@ -151,7 +156,7 @@
+ LRMI_free_real(void *m)
+ {
+ int i;
+- char *r = (char *)REAL_MEM_BASE;
++ char *r = (char *)mem_info.offset;
+
+ if (!mem_info.ready)
+ return;
+@@ -200,13 +205,15 @@
+ return *(unsigned short *)(i * 4);
+ }
+
+-int LRMI_common_init(void)
++void *LRMI_common_init(int high_page)
+ {
+- void *m;
++ void *m, *offset;
+ int fd_mem;
+
+- if (!real_mem_init())
+- return 0;
++ if (!real_mem_init(high_page))
++ return NULL;
++
++ offset = mem_info.offset - REAL_MEM_BASE;
+
+ /*
+ Map the Interrupt Vectors (0x0 - 0x400) + BIOS data (0x400 - 0x502)
+@@ -217,33 +224,33 @@
+ if (fd_mem == -1) {
+ real_mem_deinit();
+ perror("open /dev/mem");
+- return 0;
++ return NULL;
+ }
+
+- m = mmap((void *)0, 0x502,
+- PROT_READ | PROT_WRITE | PROT_EXEC,
+- MAP_FIXED | MAP_SHARED, fd_mem, 0);
++ m = mmap(offset, 0x502,
++ PROT_READ | PROT_WRITE | PROT_EXEC,
++ MAP_FIXED | MAP_SHARED, fd_mem, 0);
+
+ if (m == (void *)-1) {
+ close(fd_mem);
+ real_mem_deinit();
+ perror("mmap /dev/mem");
+- return 0;
++ return NULL;
+ }
+
+- m = mmap((void *)0xa0000, 0x100000 - 0xa0000,
++ m = mmap(offset+0xa0000, 0x100000 - 0xa0000,
+ PROT_READ | PROT_WRITE | PROT_EXEC,
+ MAP_FIXED | MAP_SHARED, fd_mem, 0xa0000);
+
+ if (m == (void *)-1) {
+- munmap((void *)0, 0x502);
++ munmap(offset, 0x502);
+ close(fd_mem);
+ real_mem_deinit();
+ perror("mmap /dev/mem");
+- return 0;
++ return NULL;
+ }
+
+ close(fd_mem);
+
+- return 1;
++ return offset;
+ }
+diff -ur libx86-1.1/x86-common.h libx86-1.1.hack/x86-common.h
+--- libx86-1.1/x86-common.h 2006-09-07 18:44:27.000000000 -0400
++++ libx86-1.1.hack/x86-common.h 2009-10-26 16:01:19.000000000 -0400
+@@ -40,4 +40,4 @@
+
+ void *LRMI_alloc_real(int size);
+ void LRMI_free_real(void *m);
+-int LRMI_common_init(void);
++void *LRMI_common_init(int high_page);
diff --git a/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/makefile-add-ldflags.patch b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/makefile-add-ldflags.patch
new file mode 100644
index 000000000..821ab379d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1.1/makefile-add-ldflags.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 951b617..6d9b73d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -22,7 +22,7 @@ static: $(OBJECTS)
+ $(AR) cru libx86.a $(OBJECTS)
+
+ shared: $(OBJECTS)
+- $(CC) $(CFLAGS) -o libx86.so.1 -shared -Wl,-soname,libx86.so.1 $(OBJECTS)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o libx86.so.1 -shared -Wl,-soname,libx86.so.1 $(OBJECTS)
+
+ objclean:
+ $(MAKE) -C x86emu clean
diff --git a/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1_1.1.bb b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1_1.1.bb
new file mode 100644
index 000000000..d30314725
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libx86-1/libx86-1_1.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "x86 real-mode library"
+DESCRIPTION = "A library to provide support for making real-mode calls x86 calls. On \
+x86 hardware, vm86 mode is used. On other platforms, x86 emulation is \
+provided."
+HOMEPAGE = "http://www.codon.org.uk/~mjg59/libx86/"
+LICENSE = "MIT & BSD-3-Clause"
+SECTION = "libs"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=633af6c02e6f624d4c472d970a2aca53"
+
+SRC_URI = "http://www.codon.org.uk/~mjg59/libx86/downloads/${BPN}-${PV}.tar.gz \
+ file://libx86-mmap-offset.patch \
+ file://0001-assume-zero-is-valid-address.patch \
+ file://makefile-add-ldflags.patch \
+"
+
+SRC_URI[md5sum] = "41bee1f8e22b82d82b5f7d7ba51abc2a"
+SRC_URI[sha256sum] = "5bf13104cb327472b5cb65643352a9138646becacc06763088d83001d832d048"
+
+BPN = "libx86"
+COMPATIBLE_HOST = '(x86_64|i.86).*-linux'
+
+export LIBDIR = "${libdir}"
+export BACKEND = "x86emu"
+
+inherit autotools-brokensep
diff --git a/meta-openembedded/meta-oe/recipes-extended/lockfile-progs/lockfile-progs_0.1.17.bb b/meta-openembedded/meta-oe/recipes-extended/lockfile-progs/lockfile-progs_0.1.17.bb
new file mode 100644
index 000000000..4354fff9a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/lockfile-progs/lockfile-progs_0.1.17.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Command-line programs to safely lock and unlock files and mailboxes"
+DESCRIPTION = "\
+lockfile-progs provide a method to lock and unlock mailboxes and files \
+safely (via liblockfile)."
+HOMEPAGE = "http://packages.qa.debian.org/l/lockfile-progs.html"
+SECTION = "Applications/System"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+DEPENDS = "liblockfile"
+
+SRC_URI = "http://ftp.de.debian.org/debian/pool/main/l/${BPN}/${BPN}_${PV}.tar.gz"
+SRC_URI[md5sum] = "64424a766fbc8cf6d613fcc14a096e14"
+SRC_URI[sha256sum] = "03fb05d25499532f497775b1747b61fa6beebf12d3bcc951e125349ae166c511"
+
+do_compile() {
+ oe_runmake CFLAGS=' -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -fasynchronous-unwind-tables'
+}
+
+do_install() {
+ install -m 755 -d ${D}${bindir}
+ install bin/* ${D}${bindir}
+ install -m 755 -d ${D}${mandir}/man1
+ install man/* ${D}${mandir}/man1
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/logwatch/logwatch_7.4.3.bb b/meta-openembedded/meta-oe/recipes-extended/logwatch/logwatch_7.4.3.bb
new file mode 100644
index 000000000..aea539ef0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/logwatch/logwatch_7.4.3.bb
@@ -0,0 +1,58 @@
+SUMMARY = "A log file analysis program"
+DESCRIPTION = "\
+Logwatch is a customizable, pluggable log-monitoring system. It will go \
+through your logs for a given period of time and make a report in the areas \
+that you wish with the detail that you wish. Easy to use - works right out of \
+the package on many systems.\
+"
+SECTION = "devel"
+HOMEPAGE = "http://www.logwatch.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f2566bb12b16d2d80d90ebc533261aa7"
+RDEPENDS_${PN} = "perl"
+
+SRC_URI = "http://jaist.dl.sourceforge.net/project/${BPN}/${BP}/${BP}.tar.gz"
+SRC_URI[md5sum] = "22bd22841caa45f12c605abc3e0c2b09"
+SRC_URI[sha256sum] = "1dbdc48d65e150f2dbb43f1e4f4700d94166e053b1c7bbbdedf4ad670283720e"
+
+do_install() {
+ install -m 0755 -d ${D}${sysconfdir}/logwatch/scripts
+ install -m 0755 -d ${D}${datadir}/logwatch/dist.conf/logfiles
+ install -m 0755 -d ${D}${datadir}/logwatch/dist.conf/services
+ install -m 0755 -d ${D}${localstatedir}/cache/logwatch
+ mv conf/ ${D}${datadir}/logwatch/default.conf
+ mv scripts/ ${D}${datadir}/logwatch/scripts
+ mv lib ${D}${datadir}/logwatch/lib
+ chown -R root:root ${D}${datadir}/logwatch
+
+ install -m 0755 -d ${D}${mandir}/man1
+ install -m 0755 -d ${D}${mandir}/man5
+ install -m 0755 -d ${D}${mandir}/man8
+ install -m 0644 amavis-logwatch.1 ${D}${mandir}/man1
+ install -m 0644 postfix-logwatch.1 ${D}${mandir}/man1
+ install -m 0644 ignore.conf.5 ${D}${mandir}/man5
+ install -m 0644 override.conf.5 ${D}${mandir}/man5
+ install -m 0644 logwatch.conf.5 ${D}${mandir}/man5
+ install -m 0644 logwatch.8 ${D}${mandir}/man8
+
+ install -m 0755 -d ${D}${sysconfdir}/cron.daily
+ install -m 0755 -d ${D}${sbindir}
+ ln -sf ../..${datadir}/logwatch/scripts/logwatch.pl ${D}${sbindir}/logwatch
+ cat > ${D}${sysconfdir}/cron.daily/0logwatch <<EOF
+ DailyReport=\`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /usr/share/logwatch/default.conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"\`
+ if [ "\$DailyReport" != "No" ] && [ "\$DailyReport" != "no" ]
+ then
+ logwatch
+ fi
+EOF
+ chmod 755 ${D}${sysconfdir}/cron.daily/0logwatch
+
+ install -m 0755 -d ${D}${sysconfdir}/logwatch/conf/logfiles
+ install -m 0755 -d ${D}${sysconfdir}/logwatch/conf/services
+ touch ${D}${sysconfdir}/logwatch/conf/logwatch.conf
+ touch ${D}${sysconfdir}/logwatch/conf/ignore.conf
+ touch ${D}${sysconfdir}/logwatch/conf/override.conf
+ echo "# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)" > ${D}${sysconfdir}/logwatch/conf/logwatch.conf
+ echo "###### REGULAR EXPRESSIONS IN THIS FILE WILL BE TRIMMED FROM REPORT OUTPUT #####" > ${D}${sysconfdir}/logwatch/conf/ignore.conf
+ echo "# Configuration overrides for specific logfiles/services may be placed here." > ${D}${sysconfdir}/logwatch/conf/override.conf
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/lprng/lprng_3.8.C.bb b/meta-openembedded/meta-oe/recipes-extended/lprng/lprng_3.8.C.bb
new file mode 100644
index 000000000..963c6320f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/lprng/lprng_3.8.C.bb
@@ -0,0 +1,22 @@
+SUMMARY = "An Enhanced Printer Spooler"
+SECTION = "console/utils"
+LICENSE = "GPLv2 | Artistic-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c6570d8d699af1883db9d0e733ac9bfb"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "5901bed95e61d2bea3ba3056056af432"
+SRC_URI[sha256sum] = "694a1747a96385b89e93f43343bf35cee5c8c73353a83814106911c99f09de10"
+
+inherit autotools gettext
+
+EXTRA_OECONF = "--disable-ssl --disable-kerberos --enable-force_localhost"
+FILES_${PN}-dbg += "${libdir}/lprng/filters/.debug"
+
+# configure: WARNING: Program 'clear' is not found. Set environment CLEAR=no if you do not want to use it
+export CLEAR = "no"
+
+do_install_append() {
+ mv ${D}/etc/printcap.sample ${D}/etc/printcap
+ mv ${D}/etc/lpd/lpd.conf.sample ${D}/etc/lpd/lpd.conf
+ mv ${D}/etc/lpd/lpd.perms.sample ${D}/etc/lpd/lpd.perms
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0001-Don-t-reuse-weak-symbol-optopt-to-fix-FTBFS-on-mips.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0001-Don-t-reuse-weak-symbol-optopt-to-fix-FTBFS-on-mips.patch
new file mode 100644
index 000000000..77da33321
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0001-Don-t-reuse-weak-symbol-optopt-to-fix-FTBFS-on-mips.patch
@@ -0,0 +1,59 @@
+From: Luk Claes <luk@debian.org>
+Date: Sat, 4 Jul 2009 10:54:53 +0200
+Subject: Don't reuse weak symbol optopt to fix FTBFS on mips*
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+---
+ getopt.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/getopt.c b/getopt.c
+index 83ce628..82e983c 100644
+--- a/getopt.c
++++ b/getopt.c
+@@ -43,7 +43,7 @@ typedef int ssize_t;
+ char *optarg;
+ int optind = 1;
+ int opterr = 1;
+-int optopt;
++int optoptc;
+
+ static void
+ error(const char *s, int c)
+@@ -69,7 +69,7 @@ error(const char *s, int c)
+ *bp++ = *s++;
+ while (*msg)
+ *bp++ = *msg++;
+- *bp++ = optopt;
++ *bp++ = optoptc;
+ *bp++ = '\n';
+ write(2, buf, bp - buf);
+ ac_free(buf);
+@@ -101,13 +101,13 @@ getopt(int argc, char *const argv[], const char *optstring)
+ }
+ curp = &argv[optind][1];
+ }
+- optopt = curp[0] & 0377;
++ optoptc = curp[0] & 0377;
+ while (optstring[0]) {
+ if (optstring[0] == ':') {
+ optstring++;
+ continue;
+ }
+- if ((optstring[0] & 0377) == optopt) {
++ if ((optstring[0] & 0377) == optoptc) {
+ if (optstring[1] == ':') {
+ if (curp[1] != '\0') {
+ optarg = (char *)&curp[1];
+@@ -127,7 +127,7 @@ getopt(int argc, char *const argv[], const char *optstring)
+ optind++;
+ optarg = 0;
+ }
+- return optopt;
++ return optoptc;
+ }
+ optstring++;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0002-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0002-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch
new file mode 100644
index 000000000..6bad433ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0002-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch
@@ -0,0 +1,41 @@
+From: Hilko Bengen <bengen@debian.org>
+Date: Wed, 27 Apr 2011 00:18:42 +0200
+Subject: Patched out SSL2 support since it is no longer supported by OpenSSL.
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+---
+ mailx.1 | 2 +-
+ openssl.c | 4 +---
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/mailx.1 b/mailx.1
+index 417ea04..a02e430 100644
+--- a/mailx.1
++++ b/mailx.1
+@@ -3575,7 +3575,7 @@ Only applicable if SSL/TLS support is built using OpenSSL.
+ .TP
+ .B ssl-method
+ Selects a SSL/TLS protocol version;
+-valid values are `ssl2', `ssl3', and `tls1'.
++valid values are `ssl3', and `tls1'.
+ If unset, the method is selected automatically,
+ if possible.
+ .TP
+diff --git a/openssl.c b/openssl.c
+index b4e33fc..44fe4e5 100644
+--- a/openssl.c
++++ b/openssl.c
+@@ -216,9 +216,7 @@ ssl_select_method(const char *uhp)
+
+ cp = ssl_method_string(uhp);
+ if (cp != NULL) {
+- if (equal(cp, "ssl2"))
+- method = SSLv2_client_method();
+- else if (equal(cp, "ssl3"))
++ if (equal(cp, "ssl3"))
+ method = SSLv3_client_method();
+ else if (equal(cp, "tls1"))
+ method = TLSv1_client_method();
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0003-Fixed-Lintian-warning-warning-macro-N-not-defined.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0003-Fixed-Lintian-warning-warning-macro-N-not-defined.patch
new file mode 100644
index 000000000..13b73ae59
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0003-Fixed-Lintian-warning-warning-macro-N-not-defined.patch
@@ -0,0 +1,25 @@
+From: Hilko Bengen <bengen@debian.org>
+Date: Sat, 14 Apr 2012 20:22:43 +0200
+Subject: Fixed Lintian warning (warning: macro `N' not defined)
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+---
+ mailx.1 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mailx.1 b/mailx.1
+index a02e430..b0723bd 100644
+--- a/mailx.1
++++ b/mailx.1
+@@ -3781,7 +3781,7 @@ you could examine the first message by giving the command:
+ .sp
+ .fi
+ which might cause
+-.N mailx
++.I mailx
+ to respond with, for example:
+ .nf
+ .sp
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0011-outof-Introduce-expandaddr-flag.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0011-outof-Introduce-expandaddr-flag.patch
new file mode 100644
index 000000000..13b955c4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0011-outof-Introduce-expandaddr-flag.patch
@@ -0,0 +1,71 @@
+From 9984ae5cb0ea0d61df1612b06952a61323c083d9 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Mon, 17 Nov 2014 11:13:38 +0100
+Subject: [PATCH 1/4] outof: Introduce expandaddr flag
+
+Document that address expansion is disabled unless the expandaddr
+binary option is set.
+
+This has been assigned CVE-2014-7844 for BSD mailx, but it is not
+a vulnerability in Heirloom mailx because this feature was documented.
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+CVE: CVE-2014-7844
+---
+ mailx.1 | 14 ++++++++++++++
+ names.c | 3 +++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/mailx.1 b/mailx.1
+index 70a7859..22a171b 100644
+--- a/mailx.1
++++ b/mailx.1
+@@ -656,6 +656,14 @@ but any reply returned to the machine
+ will have the system wide alias expanded
+ as all mail goes through sendmail.
+ .SS "Recipient address specifications"
++If the
++.I expandaddr
++option is not set (the default), recipient addresses must be names of
++local mailboxes or Internet mail addresses.
++.PP
++If the
++.I expandaddr
++option is set, the following rules apply:
+ When an address is used to name a recipient
+ (in any of To, Cc, or Bcc),
+ names of local mail folders
+@@ -2391,6 +2399,12 @@ and exits immediately.
+ If this option is set,
+ \fImailx\fR starts even with an empty mailbox.
+ .TP
++.B expandaddr
++Causes
++.I mailx
++to expand message recipient addresses, as explained in the section,
++Recipient address specifications.
++.TP
+ .B flipr
+ Exchanges the
+ .I Respond
+diff --git a/names.c b/names.c
+index 66e976b..c69560f 100644
+--- a/names.c
++++ b/names.c
+@@ -268,6 +268,9 @@ outof(struct name *names, FILE *fo, struct header *hp)
+ FILE *fout, *fin;
+ int ispipe;
+
++ if (value("expandaddr") == NULL)
++ return names;
++
+ top = names;
+ np = names;
+ time(&now);
+--
+1.9.3
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0012-unpack-Disable-option-processing-for-email-addresses.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0012-unpack-Disable-option-processing-for-email-addresses.patch
new file mode 100644
index 000000000..8cdbfd8b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0012-unpack-Disable-option-processing-for-email-addresses.patch
@@ -0,0 +1,79 @@
+From e34e2ac67b80497080ebecccec40c3b61456167d Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Mon, 17 Nov 2014 11:14:06 +0100
+Subject: [PATCH 2/4] unpack: Disable option processing for email addresses
+ when calling sendmail
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+---
+ extern.h | 2 +-
+ names.c | 8 ++++++--
+ sendout.c | 2 +-
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/extern.h b/extern.h
+index 6b85ba0..8873fe8 100644
+--- a/extern.h
++++ b/extern.h
+@@ -396,7 +396,7 @@ struct name *outof(struct name *names, FILE *fo, struct header *hp);
+ int is_fileaddr(char *name);
+ struct name *usermap(struct name *names);
+ struct name *cat(struct name *n1, struct name *n2);
+-char **unpack(struct name *np);
++char **unpack(struct name *smopts, struct name *np);
+ struct name *elide(struct name *names);
+ int count(struct name *np);
+ struct name *delete_alternates(struct name *np);
+diff --git a/names.c b/names.c
+index c69560f..45bbaed 100644
+--- a/names.c
++++ b/names.c
+@@ -549,7 +549,7 @@ cat(struct name *n1, struct name *n2)
+ * Return an error if the name list won't fit.
+ */
+ char **
+-unpack(struct name *np)
++unpack(struct name *smopts, struct name *np)
+ {
+ char **ap, **top;
+ struct name *n;
+@@ -564,7 +564,7 @@ unpack(struct name *np)
+ * the terminating 0 pointer. Additional spots may be needed
+ * to pass along -f to the host mailer.
+ */
+- extra = 2;
++ extra = 3 + count(smopts);
+ extra++;
+ metoo = value("metoo") != NULL;
+ if (metoo)
+@@ -581,6 +581,10 @@ unpack(struct name *np)
+ *ap++ = "-m";
+ if (verbose)
+ *ap++ = "-v";
++ for (; smopts != NULL; smopts = smopts->n_flink)
++ if ((smopts->n_type & GDEL) == 0)
++ *ap++ = smopts->n_name;
++ *ap++ = "--";
+ for (; n != NULL; n = n->n_flink)
+ if ((n->n_type & GDEL) == 0)
+ *ap++ = n->n_name;
+diff --git a/sendout.c b/sendout.c
+index 7b7f2eb..c52f15d 100644
+--- a/sendout.c
++++ b/sendout.c
+@@ -835,7 +835,7 @@ start_mta(struct name *to, struct name *mailargs, FILE *input,
+ #endif /* HAVE_SOCKETS */
+
+ if ((smtp = value("smtp")) == NULL) {
+- args = unpack(cat(mailargs, to));
++ args = unpack(mailargs, to);
+ if (debug || value("debug")) {
+ printf(catgets(catd, CATSET, 181,
+ "Sendmail arguments:"));
+--
+1.9.3
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0013-fio.c-Unconditionally-require-wordexp-support.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0013-fio.c-Unconditionally-require-wordexp-support.patch
new file mode 100644
index 000000000..5558d8639
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0013-fio.c-Unconditionally-require-wordexp-support.patch
@@ -0,0 +1,113 @@
+From 2bae8ecf04ec2ba6bb9f0af5b80485dd0edb427d Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Mon, 17 Nov 2014 12:48:25 +0100
+Subject: [PATCH 3/4] fio.c: Unconditionally require wordexp support
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+---
+ fio.c | 67 +++++--------------------------------------------------------------
+ 1 file changed, 5 insertions(+), 62 deletions(-)
+
+diff --git a/fio.c b/fio.c
+index 65e8f10..1529236 100644
+--- a/fio.c
++++ b/fio.c
+@@ -43,12 +43,15 @@ static char sccsid[] = "@(#)fio.c 2.76 (gritter) 9/16/09";
+ #endif /* not lint */
+
+ #include "rcv.h"
++
++#ifndef HAVE_WORDEXP
++#error wordexp support is required
++#endif
++
+ #include <sys/stat.h>
+ #include <sys/file.h>
+ #include <sys/wait.h>
+-#ifdef HAVE_WORDEXP
+ #include <wordexp.h>
+-#endif /* HAVE_WORDEXP */
+ #include <unistd.h>
+
+ #if defined (USE_NSS)
+@@ -481,7 +484,6 @@ next:
+ static char *
+ globname(char *name)
+ {
+-#ifdef HAVE_WORDEXP
+ wordexp_t we;
+ char *cp;
+ sigset_t nset;
+@@ -527,65 +529,6 @@ globname(char *name)
+ }
+ wordfree(&we);
+ return cp;
+-#else /* !HAVE_WORDEXP */
+- char xname[PATHSIZE];
+- char cmdbuf[PATHSIZE]; /* also used for file names */
+- int pid, l;
+- char *cp, *shell;
+- int pivec[2];
+- extern int wait_status;
+- struct stat sbuf;
+-
+- if (pipe(pivec) < 0) {
+- perror("pipe");
+- return name;
+- }
+- snprintf(cmdbuf, sizeof cmdbuf, "echo %s", name);
+- if ((shell = value("SHELL")) == NULL)
+- shell = SHELL;
+- pid = start_command(shell, 0, -1, pivec[1], "-c", cmdbuf, NULL);
+- if (pid < 0) {
+- close(pivec[0]);
+- close(pivec[1]);
+- return NULL;
+- }
+- close(pivec[1]);
+-again:
+- l = read(pivec[0], xname, sizeof xname);
+- if (l < 0) {
+- if (errno == EINTR)
+- goto again;
+- perror("read");
+- close(pivec[0]);
+- return NULL;
+- }
+- close(pivec[0]);
+- if (wait_child(pid) < 0 && WTERMSIG(wait_status) != SIGPIPE) {
+- fprintf(stderr, catgets(catd, CATSET, 81,
+- "\"%s\": Expansion failed.\n"), name);
+- return NULL;
+- }
+- if (l == 0) {
+- fprintf(stderr, catgets(catd, CATSET, 82,
+- "\"%s\": No match.\n"), name);
+- return NULL;
+- }
+- if (l == sizeof xname) {
+- fprintf(stderr, catgets(catd, CATSET, 83,
+- "\"%s\": Expansion buffer overflow.\n"), name);
+- return NULL;
+- }
+- xname[l] = 0;
+- for (cp = &xname[l-1]; *cp == '\n' && cp > xname; cp--)
+- ;
+- cp[1] = '\0';
+- if (strchr(xname, ' ') && stat(xname, &sbuf) < 0) {
+- fprintf(stderr, catgets(catd, CATSET, 84,
+- "\"%s\": Ambiguous.\n"), name);
+- return NULL;
+- }
+- return savestr(xname);
+-#endif /* !HAVE_WORDEXP */
+ }
+
+ /*
+--
+1.9.3
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0014-globname-Invoke-wordexp-with-WRDE_NOCMD.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0014-globname-Invoke-wordexp-with-WRDE_NOCMD.patch
new file mode 100644
index 000000000..ae14b8acf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0014-globname-Invoke-wordexp-with-WRDE_NOCMD.patch
@@ -0,0 +1,31 @@
+From 73fefa0c1ac70043ec84f2d8b8f9f683213f168d Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Mon, 17 Nov 2014 13:11:32 +0100
+Subject: [PATCH 4/4] globname: Invoke wordexp with WRDE_NOCMD (CVE-2004-2771)
+
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+CVE: CVE-2004-2771
+---
+ fio.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fio.c b/fio.c
+index 1529236..774a204 100644
+--- a/fio.c
++++ b/fio.c
+@@ -497,7 +497,7 @@ globname(char *name)
+ sigemptyset(&nset);
+ sigaddset(&nset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &nset, NULL);
+- i = wordexp(name, &we, 0);
++ i = wordexp(name, &we, WRDE_NOCMD);
+ sigprocmask(SIG_UNBLOCK, &nset, NULL);
+ switch (i) {
+ case 0:
+--
+1.9.3
+
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/0015-usr-sbin-sendmail.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0015-usr-sbin-sendmail.patch
new file mode 100644
index 000000000..2b5991425
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/0015-usr-sbin-sendmail.patch
@@ -0,0 +1,38 @@
+Description: Sendmail is at /usr/sbin/sendmail
+ As per Debian Policy §11.6
+Author: Ryan Kavanagh <rak@debian.org>
+Origin: Debian
+Forwarded: no
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: heirloom-mailx-12.5/Makefile
+===================================================================
+This patch is taken from
+ftp://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-5.debian.tar.xz
+
+Upstream-Status: Inappropriate [upstream is dead]
+
+--- heirloom-mailx-12.5.orig/Makefile 2011-04-26 17:23:22.000000000 -0400
++++ heirloom-mailx-12.5/Makefile 2015-01-27 13:20:04.733542801 -0500
+@@ -13,7 +13,7 @@
+
+ MAILRC = $(SYSCONFDIR)/nail.rc
+ MAILSPOOL = /var/mail
+-SENDMAIL = /usr/lib/sendmail
++SENDMAIL = /usr/sbin/sendmail
+
+ DESTDIR =
+
+Index: heirloom-mailx-12.5/mailx.1
+===================================================================
+--- heirloom-mailx-12.5.orig/mailx.1 2015-01-27 13:18:49.000000000 -0500
++++ heirloom-mailx-12.5/mailx.1 2015-01-27 13:20:32.382336867 -0500
+@@ -4922,7 +4922,7 @@
+ which just acts as a proxy.
+ .PP
+ \fIMailx\fR immediately contacts the SMTP server (or
+-.IR \%/usr/lib/sendmail )
++.IR \%/usr/sbin/sendmail )
+ even when operating in
+ .I disconnected
+ mode.
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/files/explicitly.disable.krb5.support.patch b/meta-openembedded/meta-oe/recipes-extended/mailx/files/explicitly.disable.krb5.support.patch
new file mode 100644
index 000000000..b74fd0472
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/files/explicitly.disable.krb5.support.patch
@@ -0,0 +1,46 @@
+krb5 support is autodetected from sysroot making builds undeterministic
+feel free to improve this to support explicitly enabling/disabling it
+
+Upstream-Status: Pending
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+--- a/makeconfig 2013-07-21 15:06:11.177792334 +0200
++++ b/makeconfig 2013-07-21 15:07:20.028793994 +0200
+@@ -424,36 +424,6 @@
+ }
+ !
+
+-<$tmp2.c link_check gssapi 'for GSSAPI in libgss' \
+- '#define USE_GSSAPI' '-lgss' ||
+- <$tmp2.c link_check gssapi 'for GSSAPI in libgssapi_krb5' \
+- '#define USE_GSSAPI' '-lgssapi_krb5' ||
+- link_check gssapi 'for GSSAPI in libgssapi_krb5, old-style' \
+- '#define USE_GSSAPI
+-#define GSSAPI_OLD_STYLE' '-lgssapi_krb5' <<\! || \
+- link_check gssapi 'for GSSAPI in libgssapi' \
+- '#define USE_GSSAPI
+-#define GSSAPI_REG_INCLUDE' '-lgssapi' <<\%
+-#include <gssapi/gssapi.h>
+-#include <gssapi/gssapi_generic.h>
+-
+-int main(void)
+-{
+- gss_import_name(0, 0, gss_nt_service_name, 0);
+- gss_init_sec_context(0,0,0,0,0,0,0,0,0,0,0,0,0);
+- return 0;
+-}
+-!
+-#include <gssapi.h>
+-
+-int main(void)
+-{
+- gss_import_name(0, 0, GSS_C_NT_HOSTBASED_SERVICE, 0);
+- gss_init_sec_context(0,0,0,0,0,0,0,0,0,0,0,0,0);
+- return 0;
+-}
+-%
+-
+ cat >$tmp2.c <<\!
+ #include "config.h"
+ #ifdef HAVE_NL_LANGINFO
diff --git a/meta-openembedded/meta-oe/recipes-extended/mailx/mailx_12.5-5.bb b/meta-openembedded/meta-oe/recipes-extended/mailx/mailx_12.5-5.bb
new file mode 100644
index 000000000..0a191a00c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mailx/mailx_12.5-5.bb
@@ -0,0 +1,53 @@
+SUMMARY = "mailx is the traditional command-line-mode mail user agent"
+
+DESCRIPTION = "Mailx is derived from Berkeley Mail and is intended provide the \
+functionality of the POSIX mailx command with additional support \
+for MIME, IMAP, POP3, SMTP, and S/MIME."
+
+HOMEPAGE = "http://heirloom.sourceforge.net/mailx.html"
+SECTION = "console/network"
+LICENSE = "BSD & MPL-1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4202a0a62910cf94f7af8a3436a2a2dd"
+
+DEPENDS = "openssl10"
+
+SRC_URI = "http://snapshot.debian.org/archive/debian/20160728T043443Z/pool/main/h/heirloom-mailx/heirloom-mailx_12.5.orig.tar.gz;name=archive \
+ file://0001-Don-t-reuse-weak-symbol-optopt-to-fix-FTBFS-on-mips.patch \
+ file://0002-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch \
+ file://0003-Fixed-Lintian-warning-warning-macro-N-not-defined.patch \
+ file://0011-outof-Introduce-expandaddr-flag.patch \
+ file://0012-unpack-Disable-option-processing-for-email-addresses.patch \
+ file://0013-fio.c-Unconditionally-require-wordexp-support.patch \
+ file://0014-globname-Invoke-wordexp-with-WRDE_NOCMD.patch \
+ file://0015-usr-sbin-sendmail.patch \
+ file://explicitly.disable.krb5.support.patch \
+ "
+
+SRC_URI[archive.md5sum] = "29a6033ef1412824d02eb9d9213cb1f2"
+SRC_URI[archive.sha256sum] = "015ba4209135867f37a0245d22235a392b8bbed956913286b887c2e2a9a421ad"
+
+# for this package we're mostly interested in tracking debian patches,
+# and not in the upstream version where all development has effectively stopped
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/h/heirloom-mailx/"
+UPSTREAM_CHECK_REGEX = "(?P<pver>((\d+\.*)+)-((\d+\.*)+))\.(diff|debian\.tar)\.(gz|xz)"
+
+S = "${WORKDIR}/heirloom-mailx-12.5"
+
+inherit autotools-brokensep
+
+CFLAGS_append = " -D_BSD_SOURCE -DDEBIAN -I${S}/EXT"
+
+# "STRIP=true" means that 'true' command will be used to 'strip' files which will achieve the effect of not stripping them
+# mailx's Makefile doesn't allow a more straightforward way to avoid stripping
+EXTRA_OEMAKE = "SENDMAIL=${sbindir}/sendmail IPv6=-DHAVE_IPv6_FUNCS PREFIX=/usr UCBINSTALL=/usr/bin/install STRIP=true"
+
+# The makeconfig can't run parallelly, otherwise the checking results
+# might be incorrect and lead to errors:
+# fio.c:56:17: fatal error: ssl.h: No such file or directory
+# #include <ssl.h>
+PARALLEL_MAKE = ""
+
+# Causes gcc to get stuck and eat all available memory in qemuarm builds
+# http://errors.yoctoproject.org/Errors/Details/20488/
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-extended/md5deep/files/0001-Fix-errors-found-by-clang.patch b/meta-openembedded/meta-oe/recipes-extended/md5deep/files/0001-Fix-errors-found-by-clang.patch
new file mode 100644
index 000000000..cc7cdc336
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/md5deep/files/0001-Fix-errors-found-by-clang.patch
@@ -0,0 +1,32 @@
+From 6ef69a26126ee4e69a25392fd456b8a66c51dffd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 15 Nov 2016 02:46:55 +0000
+Subject: [PATCH] Fix errors found by clang
+
+Fixes errors like
+
+../../git/src/hash.cpp:282:19: error: ordered comparison between pointer and zero ('const unsigned char *' and 'int')
+ if(fdht->base>0){
+ ~~~~~~~~~~^~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/hash.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/hash.cpp b/src/hash.cpp
+index 4216157..52f419b 100644
+--- a/src/hash.cpp
++++ b/src/hash.cpp
+@@ -279,7 +279,7 @@ void file_data_hasher_t::hash()
+ MAP_FILE|
+ #endif
+ MAP_SHARED,fd,0);
+- if(fdht->base>0){
++ if(fdht->base != (void *) -1){
+ /* mmap is successful, so set the bounds.
+ * if it is not successful, we default to reading the fd
+ */
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/md5deep/files/wrong-variable-expansion.patch b/meta-openembedded/meta-oe/recipes-extended/md5deep/files/wrong-variable-expansion.patch
new file mode 100644
index 000000000..3a4c4f4c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/md5deep/files/wrong-variable-expansion.patch
@@ -0,0 +1,39 @@
+--- a/configure.ac 2014-08-22 12:22:54.290884351 +0200
++++ b/configure.ac 2014-08-22 12:23:15.822306295 +0200
+@@ -42,18 +42,6 @@
+ ;;
+ esac
+
+-
+-# Bring additional directories where things might be found into our
+-# search path. I don't know why autoconf doesn't do this by default
+-if test x"${mingw}" == "xno" ; then
+- for spfx in /usr/local /opt/local /sw ; do
+- echo checking ${spfx}/include
+- if test -d ${spfx}/include; then
+- CPPFLAGS="-I${spfx}/include $CPPFLAGS"
+- LDFLAGS="-L${spfx}/lib $LDFLAGS"
+- fi
+- done
+-fi
+ #
+ #
+ ################################################################
+@@ -71,7 +59,7 @@
+
+ if test $mingw = "no" ; then
+ # add the warnings we don't want to do on mingw
+- $WARNINGS_TO_TEST="$WARNINGS_TO_TEST -Wall -Wstrict-prototypes -Weffc++"
++ WARNINGS_TO_TEST="$WARNINGS_TO_TEST -Wall -Wstrict-prototypes -Weffc++"
+ fi
+
+ for option in $WARNINGS_TO_TEST
+@@ -105,7 +93,7 @@
+
+ if test $mingw = "no" ; then
+ # add the warnings we don't want to do on mingw
+- $WARNINGS_TO_TEST="$WARNINGS_TO_TEST -Weffc++"
++ WARNINGS_TO_TEST="$WARNINGS_TO_TEST -Weffc++"
+ fi
+
+ for option in $WARNINGS_TO_TEST
diff --git a/meta-openembedded/meta-oe/recipes-extended/md5deep/md5deep_4.4.bb b/meta-openembedded/meta-oe/recipes-extended/md5deep/md5deep_4.4.bb
new file mode 100644
index 000000000..bb30abedd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/md5deep/md5deep_4.4.bb
@@ -0,0 +1,17 @@
+SUMMARY = "md5deep and hashdeep to compute and audit hashsets of amounts of files."
+DESCRIPTION = "md5deep is a set of programs to compute MD5, SHA-1, SHA-256, Tiger, or Whirlpool message digests on an arbitrary number of files. This package also includes hashdeep which is also able to audit hashsets."
+AUTHOR = "Jesse Kornblum, Simson L. Garfinkel"
+HOMEPAGE = "http://md5deep.sourceforge.net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9190f660105b9a56cdb272309bfd5491"
+# Release 4.4
+SRCREV = "cd2ed7416685a5e83eb10bb659d6e9bec01244ae"
+
+SRC_URI = "git://github.com/jessek/hashdeep.git \
+ file://wrong-variable-expansion.patch \
+ file://0001-Fix-errors-found-by-clang.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0001-include-cstdio-to-get-printf-definitions.patch b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0001-include-cstdio-to-get-printf-definitions.patch
new file mode 100644
index 000000000..c5814bfe2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0001-include-cstdio-to-get-printf-definitions.patch
@@ -0,0 +1,28 @@
+From c92890c5e18bb6ee23bdb14074bacf306dd9428f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 5 May 2015 20:35:01 -0700
+Subject: [PATCH] include cstdio to get printf definitions
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/engine/boxml/BoxMLHOVElement.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/engine/boxml/BoxMLHOVElement.cc b/src/engine/boxml/BoxMLHOVElement.cc
+index 1a2812c..96c9eea 100644
+--- a/src/engine/boxml/BoxMLHOVElement.cc
++++ b/src/engine/boxml/BoxMLHOVElement.cc
+@@ -21,7 +21,7 @@
+ // <http://www.gnu.org/licenses/>.
+
+ #include <config.h>
+-
++#include <cstdio>
+ #include "BoxMLAttributeSignatures.hh"
+ #include "BoxMLHOVElement.hh"
+ #include "BoxMLHElement.hh"
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0002-configure.ac-header-detection-of-hash_map-is-broken-.patch b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0002-configure.ac-header-detection-of-hash_map-is-broken-.patch
new file mode 100644
index 000000000..b879d6a51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0002-configure.ac-header-detection-of-hash_map-is-broken-.patch
@@ -0,0 +1,63 @@
+From 9c226fbc6a42540cb492fcfcb81ff16fffb086d6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 30 Aug 2016 23:24:53 +0200
+Subject: [PATCH] configure.ac: header detection of hash_map is broken - pin to
+ correct implementation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 31 ++++---------------------------
+ 1 file changed, 4 insertions(+), 27 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 4f2118e..16c09d5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -252,35 +252,12 @@ AC_SUBST(GTKMATHVIEW_SIZEOF_WCHAR_T, "$ac_cv_sizeof_wchar_t")
+
+ AC_LANG_PUSH(C++)
+
+-AC_CHECK_HEADERS(unordered_map,
+- [
+- AC_DEFINE(GMV_HAVE_UNORDERED_MAP,1,[Define if <unordered_map> is provided])
+- GMV_HAVE_UNORDERED_MAP_CFLAGS=-DGMV_HAVE_UNORDERED_MAP=1
+- ],
+- [
+- GMV_HAVE_UNORDERED_MAP_CFLAGS=
+- ]
+-)
++GMV_HAVE_UNORDERED_MAP_CFLAGS=
+ AC_SUBST(GMV_HAVE_UNORDERED_MAP_CFLAGS)
+-AC_CHECK_HEADERS(hash_map,
+- [
+- AC_DEFINE(GMV_HAVE_HASH_MAP,1,[Define if <hash_map> is provided])
+- GMV_HAVE_HASH_MAP_CFLAGS=-DGMV_HAVE_HASH_MAP=1
+- ],
+- [
+- GMV_HAVE_HASH_MAP_CFLAGS=
+- ]
+-)
++GMV_HAVE_HASH_MAP_CFLAGS=
+ AC_SUBST(GMV_HAVE_HASH_MAP_CFLAGS)
+-AC_CHECK_HEADERS(ext/hash_map,
+- [
+- AC_DEFINE(GMV_HAVE_EXT_HASH_MAP,1,[Define if <ext/hash_map> is provided])
+- GMV_HAVE_EXT_HASH_MAP_CFLAGS=-DGMV_HAVE_EXT_HASH_MAP=1
+- ],
+- [
+- GMV_HAVE_EXT_HASH_MAP_CFLAGS=
+- ]
+-)
++AC_DEFINE(GMV_HAVE_EXT_HASH_MAP,1,[Define if <ext/hash_map> is provided])
++GMV_HAVE_EXT_HASH_MAP_CFLAGS=-DGMV_HAVE_EXT_HASH_MAP=1
+ AC_SUBST(GMV_HAVE_EXT_HASH_MAP_CFLAGS)
+
+ AC_MSG_CHECKING([whether the C++ compiler supports the standard character traits])
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0003-gcc-6.0-build-fixes.patch b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0003-gcc-6.0-build-fixes.patch
new file mode 100644
index 000000000..356274d17
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/0003-gcc-6.0-build-fixes.patch
@@ -0,0 +1,93 @@
+From: Gert Wollny <gw.fossdev@gmail.com>
+Date: Sun, 26 Jun 2016 13:25:00 +0200
+Description: gcc 6.0 build fixes
+Bug: https://bugs.debian.org/811682
+
+Slightly adapted to our environment
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+--- a/src/engine/common/View.cc
++++ b/src/engine/common/View.cc
+@@ -291,7 +291,7 @@
+ }
+ }
+
+- return false;
++ return SmartPtr<Element>();
+ }
+
+ bool
+--- a/src/backend/common/tfm/TFM.hh
++++ b/src/backend/common/tfm/TFM.hh
+@@ -37,7 +37,7 @@
+ unsigned char face;
+ const char* codingScheme;
+ int designSize;
+- int checksum;
++ unsigned int checksum;
+ unsigned int nDimensions;
+ unsigned int nCharacters;
+ };
+@@ -52,7 +52,7 @@
+ struct Kerning
+ {
+ UChar8 index;
+- int value;
++ unsigned int value;
+ };
+
+ struct Ligature
+@@ -67,7 +67,7 @@
+ UChar8 index;
+ int width;
+ int height;
+- int depth;
++ unsigned int depth;
+ int italicCorrection;
+ unsigned char nKernings;
+ const Kerning* kerning;
+--- a/src/backend/common/StandardSymbolsShaper.hh
++++ b/src/backend/common/StandardSymbolsShaper.hh
+@@ -32,20 +32,20 @@
+ struct HStretchyChar
+ {
+ Char16 ch;
+- Char8 normal;
+- Char8 left;
+- Char8 glue;
+- Char8 right;
++ UChar8 normal;
++ UChar8 left;
++ UChar8 glue;
++ UChar8 right;
+ };
+
+ struct VStretchyChar
+ {
+ Char16 ch;
+- Char8 normal;
+- Char8 top;
+- Char8 glue;
+- Char8 middle;
+- Char8 bottom;
++ UChar8 normal;
++ UChar8 top;
++ UChar8 glue;
++ UChar8 middle;
++ UChar8 bottom;
+ };
+
+ protected:
+--- a/src/backend/common/StandardSymbolsShaper.cc
++++ b/src/backend/common/StandardSymbolsShaper.cc
+@@ -29,7 +29,7 @@
+ #include "ShapingContext.hh"
+
+ struct GlyphMap {
+- Char8 index;
++ UChar8 index;
+ Char16 ch;
+ };
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/use_hostcxx.patch b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/use_hostcxx.patch
new file mode 100644
index 000000000..3fe632860
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview/use_hostcxx.patch
@@ -0,0 +1,18 @@
+Use build_cc to compile the programs to run on build host
+helps with cross compiling
+
+Upstream-Status: Inappropriate [Cross-compiled OE specific]
+
+diff --git a/src/common/mathvariants/Makefile.am b/src/common/mathvariants/Makefile.am
+index 636ccf0..ed9921d 100644
+--- a/src/common/mathvariants/Makefile.am
++++ b/src/common/mathvariants/Makefile.am
+@@ -52,7 +52,7 @@ XSLTPROC = xsltproc
+ %.cc : %_gen.cc $(srcdir)/variant.top $(srcdir)/variant.bot
+ cat $(srcdir)/variant.top >$@
+ $(XSLTPROC) --novalid --param temp "false()" $(srcdir)/extract.xsl $(<:%_gen.cc=$(srcdir)/xml/%.xml) >>$@
+- $(CXX) -o $(@:%.cc=%) -I$(top_builddir)/auto $<
++ $(BUILD_CXX) -o $(@:%.cc=%) -I$(top_builddir)/auto $<
+ echo "Char32 " >>$@
+ basename map_variant_$@ .cc | tr "-" "_" >>$@
+ echo "(Char32 ch)" >>$@
diff --git a/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview_0.8.0.bb b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview_0.8.0.bb
new file mode 100644
index 000000000..df82bef63
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mml-widget/gtkmathview_0.8.0.bb
@@ -0,0 +1,27 @@
+HOMEPAGE = "http://helm.cs.unibo.it/mml-widget/"
+DEPENDS = "t1lib gtk+ popt libxslt-native libxml2"
+
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6"
+
+PR = "r3"
+SRCREV = "0bc2cfa0a47aed2c8a63abd989cb8da4dcceb2ec"
+PV = "0.8.0+git${SRCPV}"
+
+SRC_URI = "git://github.com/GNOME/gtkmathview.git \
+ file://use_hostcxx.patch \
+ file://0001-include-cstdio-to-get-printf-definitions.patch \
+ file://0002-configure.ac-header-detection-of-hash_map-is-broken-.patch \
+ file://0003-gcc-6.0-build-fixes.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_configure_append() {
+ # avoid host polution inf pkg-config files
+ sed -i "s:${STAGING_DIR_HOST}::g" `find -name '*.pc'`
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-compare-the-first-character-of-string-to-be-null-or-.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-compare-the-first-character-of-string-to-be-null-or-.patch
new file mode 100644
index 000000000..40d646c7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-compare-the-first-character-of-string-to-be-null-or-.patch
@@ -0,0 +1,32 @@
+From f36c9476d2816e0d3e61c9e13c22ed73883cb54a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 24 Apr 2017 12:13:43 -0700
+Subject: [PATCH] compare the first character of string to be null or not
+
+Fixes
+
+error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
+| if (value[0] == '\0')
+| ^~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ js/src/shell/jsoptparse.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/js/src/shell/jsoptparse.cpp b/js/src/shell/jsoptparse.cpp
+index b49d0a5..612aa00 100644
+--- a/js/src/shell/jsoptparse.cpp
++++ b/js/src/shell/jsoptparse.cpp
+@@ -243,7 +243,7 @@ OptionParser::extractValue(size_t argc, char **argv, size_t *i, char **value)
+ char *eq = strchr(argv[*i], '=');
+ if (eq) {
+ *value = eq + 1;
+- if (value[0] == '\0')
++ if (value[0][0] == '\0')
+ return error("A value is required for option %.*s", eq - argv[*i], argv[*i]);
+ return Okay;
+ }
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch
new file mode 100644
index 000000000..bc141d9d5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch
@@ -0,0 +1,35 @@
+From 0a61b0b98c152f10404ccbdeeac583a486638a7a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Thu, 6 Jun 2013 18:36:01 +0200
+Subject: [PATCH] js.pc.in: do not include RequiredDefines.h for depending
+ packages
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+in our cross environment the would fail with:
+
+| cc1: fatal error: /usr/include/js-17.0/js/RequiredDefines.h: No such file or directory
+
+and currently it only defines __STDC_LIMIT_MACROS
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ js.pc.in | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/js.pc.in b/js.pc.in
+index 13d761d..a95a7bd 100644
+--- a/js.pc.in
++++ b/js.pc.in
+@@ -8,4 +8,4 @@ Description: The Mozilla library for JavaScript
+ Version: @MOZILLA_VERSION@
+ Requires.private: @NSPR_PKGCONF_CHECK@
+ Libs: -L${libdir} -l@LIBRARY_NAME@
+-Cflags: -include ${includedir}/@MODULE@/js/RequiredDefines.h -I${includedir}/@MODULE@
++Cflags: -I${includedir}/@MODULE@
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs17.0.0-fix-the-compile-bug-of-powerpc.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs17.0.0-fix-the-compile-bug-of-powerpc.patch
new file mode 100644
index 000000000..de72d4f9a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs17.0.0-fix-the-compile-bug-of-powerpc.patch
@@ -0,0 +1,36 @@
+From da3929a96d9c74e11bf37d128890e18fcb745365 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Mon, 26 Jan 2015 08:53:19 +0900
+Subject: [PATCH] mozjs17.0.0: fix the compile bug of powerpc
+
+To fix the bug as following
+
+error: cannot convert '__va_list_tag**' to '__va_list_tag (*)[1]' for
+argument '5' to 'JSBool TryArgumentFormatter(JSContext*, const char**,
+JSBool, jsval**, __va_list_tag (*)[1])'
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ jscpucfg.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/jscpucfg.h b/jscpucfg.h
+index dfb1c14..8683491 100644
+--- a/jscpucfg.h
++++ b/jscpucfg.h
+@@ -47,6 +47,12 @@
+ #elif defined(JS_HAVE_ENDIAN_H)
+ # include <endian.h>
+
++#if defined(_POWER) || defined(__powerpc__) || \
++ defined(__ppc__)
++# define HAVE_VA_LIST_AS_ARRAY 1
++# endif
++
++
+ # if defined(__BYTE_ORDER)
+ # if __BYTE_ORDER == __LITTLE_ENDIAN
+ # define IS_LITTLE_ENDIAN 1
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-regenerate-configure.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-regenerate-configure.patch
new file mode 100644
index 000000000..fa413ea9f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-regenerate-configure.patch
@@ -0,0 +1,3238 @@
+From 6440b4901c6f4bcc69686ff10806e311cc5a927b Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Tue, 3 Mar 2015 19:12:17 +0800
+Subject: [PATCH] regenerate configure with autoconf-2.13
+
+Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
+Upstream-status: Inappropriate [generated file]
+
+---
+ js/src/configure | 838 ++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 389 insertions(+), 449 deletions(-)
+
+diff --git a/js/src/configure b/js/src/configure
+index cb6b41b..b05298f 100755
+--- a/js/src/configure
++++ b/js/src/configure
+@@ -5757,6 +5757,10 @@ arm*)
+ CPU_ARCH=arm
+ ;;
+
++aarch64*)
++ CPU_ARCH=aarch64
++ ;;
++
+ mips|mipsel)
+ CPU_ARCH="mips"
+ ;;
+@@ -5893,14 +5897,14 @@ no)
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$arch_flag"
+ cat > conftest.$ac_ext <<EOF
+-#line 5897 "configure"
++#line 5901 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return sizeof(__thumb2__);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5908: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ MOZ_THUMB2=1
+ else
+@@ -5972,16 +5976,16 @@ if test -n "$all_flags"; then
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$all_flags"
+ echo $ac_n "checking whether the chosen combination of compiler flags ($all_flags) works""... $ac_c" 1>&6
+-echo "configure:5976: checking whether the chosen combination of compiler flags ($all_flags) works" >&5
++echo "configure:5980: checking whether the chosen combination of compiler flags ($all_flags) works" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 5978 "configure"
++#line 5982 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ else
+@@ -6004,18 +6008,18 @@ fi
+
+ if test "$CPU_ARCH" = "arm"; then
+ echo $ac_n "checking for ARM SIMD support in compiler""... $ac_c" 1>&6
+-echo "configure:6008: checking for ARM SIMD support in compiler" >&5
++echo "configure:6012: checking for ARM SIMD support in compiler" >&5
+ # We try to link so that this also fails when
+ # building with LTO.
+ cat > conftest.$ac_ext <<EOF
+-#line 6012 "configure"
++#line 6016 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ asm("uqadd8 r1, r1, r2");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:6023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ result="yes"
+ else
+@@ -6038,18 +6042,18 @@ EOF
+ fi
+
+ echo $ac_n "checking for ARM NEON support in compiler""... $ac_c" 1>&6
+-echo "configure:6042: checking for ARM NEON support in compiler" >&5
++echo "configure:6046: checking for ARM NEON support in compiler" >&5
+ # We try to link so that this also fails when
+ # building with LTO.
+ cat > conftest.$ac_ext <<EOF
+-#line 6046 "configure"
++#line 6050 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ asm(".fpu neon\n vadd.i8 d0, d0, d0");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:6057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ result="yes"
+ else
+@@ -6094,7 +6098,7 @@ configure_static_assert_macros='
+ '
+
+ echo $ac_n "checking that static assertion macros used in autoconf tests work""... $ac_c" 1>&6
+-echo "configure:6098: checking that static assertion macros used in autoconf tests work" >&5
++echo "configure:6102: checking that static assertion macros used in autoconf tests work" >&5
+ if eval "test \"`echo '$''{'ac_cv_static_assertion_macros_work'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6108,14 +6112,14 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+ ac_cv_static_assertion_macros_work="yes"
+ cat > conftest.$ac_ext <<EOF
+-#line 6112 "configure"
++#line 6116 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(1)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6119: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -6125,14 +6129,14 @@ else
+ fi
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+-#line 6129 "configure"
++#line 6133 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(0)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_static_assertion_macros_work="no"
+ else
+@@ -6148,14 +6152,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ cat > conftest.$ac_ext <<EOF
+-#line 6152 "configure"
++#line 6156 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(1)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -6165,14 +6169,14 @@ else
+ fi
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+-#line 6169 "configure"
++#line 6173 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(0)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_static_assertion_macros_work="no"
+ else
+@@ -6317,7 +6321,7 @@ if test "$GNU_CC"; then
+ _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -Wpointer-arith -Wdeclaration-after-statement"
+
+ echo $ac_n "checking whether the C compiler supports -Werror=return-type""... $ac_c" 1>&6
+-echo "configure:6321: checking whether the C compiler supports -Werror=return-type" >&5
++echo "configure:6325: checking whether the C compiler supports -Werror=return-type" >&5
+ if eval "test \"`echo '$''{'ac_c_has_werror_return_type'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6333,14 +6337,14 @@ cross_compiling=$ac_cv_prog_cc_cross
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Werror=return-type"
+ cat > conftest.$ac_ext <<EOF
+-#line 6337 "configure"
++#line 6341 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6348: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_c_has_werror_return_type="yes"
+ else
+@@ -6368,7 +6372,7 @@ echo "$ac_t""$ac_c_has_werror_return_type" 1>&6
+
+
+ echo $ac_n "checking whether the C compiler supports -Wtype-limits""... $ac_c" 1>&6
+-echo "configure:6372: checking whether the C compiler supports -Wtype-limits" >&5
++echo "configure:6376: checking whether the C compiler supports -Wtype-limits" >&5
+ if eval "test \"`echo '$''{'ac_c_has_wtype_limits'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6384,14 +6388,14 @@ cross_compiling=$ac_cv_prog_cc_cross
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wtype-limits"
+ cat > conftest.$ac_ext <<EOF
+-#line 6388 "configure"
++#line 6392 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6395: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_c_has_wtype_limits="yes"
+ else
+@@ -6419,7 +6423,7 @@ echo "$ac_t""$ac_c_has_wtype_limits" 1>&6
+
+
+ echo $ac_n "checking whether the C compiler supports -Wempty-body""... $ac_c" 1>&6
+-echo "configure:6423: checking whether the C compiler supports -Wempty-body" >&5
++echo "configure:6427: checking whether the C compiler supports -Wempty-body" >&5
+ if eval "test \"`echo '$''{'ac_c_has_wempty_body'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6435,14 +6439,14 @@ cross_compiling=$ac_cv_prog_cc_cross
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wempty-body"
+ cat > conftest.$ac_ext <<EOF
+-#line 6439 "configure"
++#line 6443 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6446: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_c_has_wempty_body="yes"
+ else
+@@ -6476,7 +6480,7 @@ echo "$ac_t""$ac_c_has_wempty_body" 1>&6
+ _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-unused"
+
+ echo $ac_n "checking whether the C compiler supports -Wno-overlength-strings""... $ac_c" 1>&6
+-echo "configure:6480: checking whether the C compiler supports -Wno-overlength-strings" >&5
++echo "configure:6484: checking whether the C compiler supports -Wno-overlength-strings" >&5
+ if eval "test \"`echo '$''{'ac_c_has_wno_overlength_strings'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6492,14 +6496,14 @@ cross_compiling=$ac_cv_prog_cc_cross
+ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Woverlength-strings"
+ cat > conftest.$ac_ext <<EOF
+-#line 6496 "configure"
++#line 6500 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_c_has_wno_overlength_strings="yes"
+ else
+@@ -6580,7 +6584,7 @@ if test "$GNU_CXX"; then
+ _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual"
+
+ echo $ac_n "checking whether the C++ compiler supports -Werror=return-type""... $ac_c" 1>&6
+-echo "configure:6584: checking whether the C++ compiler supports -Werror=return-type" >&5
++echo "configure:6588: checking whether the C++ compiler supports -Werror=return-type" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_werror_return_type'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6596,14 +6600,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Werror=return-type"
+ cat > conftest.$ac_ext <<EOF
+-#line 6600 "configure"
++#line 6604 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6607: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_werror_return_type="yes"
+ else
+@@ -6631,7 +6635,7 @@ echo "$ac_t""$ac_cxx_has_werror_return_type" 1>&6
+
+
+ echo $ac_n "checking whether the C++ compiler supports -Wtype-limits""... $ac_c" 1>&6
+-echo "configure:6635: checking whether the C++ compiler supports -Wtype-limits" >&5
++echo "configure:6639: checking whether the C++ compiler supports -Wtype-limits" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wtype_limits'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6647,14 +6651,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Wtype-limits"
+ cat > conftest.$ac_ext <<EOF
+-#line 6651 "configure"
++#line 6655 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wtype_limits="yes"
+ else
+@@ -6682,7 +6686,7 @@ echo "$ac_t""$ac_cxx_has_wtype_limits" 1>&6
+
+
+ echo $ac_n "checking whether the C++ compiler supports -Wempty-body""... $ac_c" 1>&6
+-echo "configure:6686: checking whether the C++ compiler supports -Wempty-body" >&5
++echo "configure:6690: checking whether the C++ compiler supports -Wempty-body" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wempty_body'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6698,14 +6702,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Wempty-body"
+ cat > conftest.$ac_ext <<EOF
+-#line 6702 "configure"
++#line 6706 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6709: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6713: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wempty_body="yes"
+ else
+@@ -6741,7 +6745,7 @@ echo "$ac_t""$ac_cxx_has_wempty_body" 1>&6
+ _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-ctor-dtor-privacy"
+
+ echo $ac_n "checking whether the C++ compiler supports -Wno-overlength-strings""... $ac_c" 1>&6
+-echo "configure:6745: checking whether the C++ compiler supports -Wno-overlength-strings" >&5
++echo "configure:6749: checking whether the C++ compiler supports -Wno-overlength-strings" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wno_overlength_strings'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6757,14 +6761,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Woverlength-strings"
+ cat > conftest.$ac_ext <<EOF
+-#line 6761 "configure"
++#line 6765 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wno_overlength_strings="yes"
+ else
+@@ -6792,7 +6796,7 @@ echo "$ac_t""$ac_cxx_has_wno_overlength_strings" 1>&6
+
+
+ echo $ac_n "checking whether the C++ compiler supports -Wno-invalid-offsetof""... $ac_c" 1>&6
+-echo "configure:6796: checking whether the C++ compiler supports -Wno-invalid-offsetof" >&5
++echo "configure:6800: checking whether the C++ compiler supports -Wno-invalid-offsetof" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wno_invalid_offsetof'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6808,14 +6812,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Winvalid-offsetof"
+ cat > conftest.$ac_ext <<EOF
+-#line 6812 "configure"
++#line 6816 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6823: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wno_invalid_offsetof="yes"
+ else
+@@ -6843,7 +6847,7 @@ echo "$ac_t""$ac_cxx_has_wno_invalid_offsetof" 1>&6
+
+
+ echo $ac_n "checking whether the C++ compiler supports -Wno-variadic-macros""... $ac_c" 1>&6
+-echo "configure:6847: checking whether the C++ compiler supports -Wno-variadic-macros" >&5
++echo "configure:6851: checking whether the C++ compiler supports -Wno-variadic-macros" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wno_variadic_macros'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6859,14 +6863,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Wvariadic-macros"
+ cat > conftest.$ac_ext <<EOF
+-#line 6863 "configure"
++#line 6867 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6874: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wno_variadic_macros="yes"
+ else
+@@ -6918,7 +6922,7 @@ echo "$ac_t""$ac_cxx_has_wno_variadic_macros" 1>&6
+ _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-c++0x-extensions"
+
+ echo $ac_n "checking whether the C++ compiler supports -Wno-extended-offsetof""... $ac_c" 1>&6
+-echo "configure:6922: checking whether the C++ compiler supports -Wno-extended-offsetof" >&5
++echo "configure:6926: checking whether the C++ compiler supports -Wno-extended-offsetof" >&5
+ if eval "test \"`echo '$''{'ac_cxx_has_wno_extended_offsetof'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6934,14 +6938,14 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ _SAVE_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Werror -Wextended-offsetof"
+ cat > conftest.$ac_ext <<EOF
+-#line 6938 "configure"
++#line 6942 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return(0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:6949: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cxx_has_wno_extended_offsetof="yes"
+ else
+@@ -6979,7 +6983,7 @@ MKSHLIB_UNFORCE_ALL=
+ if test "$COMPILE_ENVIRONMENT"; then
+ if test "$GNU_CC"; then
+ echo $ac_n "checking whether ld has archive extraction flags""... $ac_c" 1>&6
+-echo "configure:6983: checking whether ld has archive extraction flags" >&5
++echo "configure:6987: checking whether ld has archive extraction flags" >&5
+ if eval "test \"`echo '$''{'ac_cv_mkshlib_force_and_unforce'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6996,14 +7000,14 @@ LOOP_INPUT
+ LDFLAGS=$force
+ LIBS=$unforce
+ cat > conftest.$ac_ext <<EOF
+-#line 7000 "configure"
++#line 7004 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:7011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_mkshlib_force_and_unforce=$line; break
+ else
+@@ -7038,16 +7042,16 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ echo $ac_n "checking for 64-bit OS""... $ac_c" 1>&6
+-echo "configure:7042: checking for 64-bit OS" >&5
++echo "configure:7046: checking for 64-bit OS" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 7044 "configure"
++#line 7048 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(sizeof(void*) == 8)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:7055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ result="yes"
+ else
+@@ -7170,7 +7174,7 @@ case "$host" in
+ esac
+
+ echo $ac_n "checking for Python version >= $PYTHON_VERSION but not 3.x""... $ac_c" 1>&6
+-echo "configure:7174: checking for Python version >= $PYTHON_VERSION but not 3.x" >&5
++echo "configure:7178: checking for Python version >= $PYTHON_VERSION but not 3.x" >&5
+
+ $PYTHON -c "import sys; sys.exit(sys.version[:3] < sys.argv[1] or sys.version[:2] != '2.')" $PYTHON_VERSION
+ _python_res=$?
+@@ -7181,7 +7185,7 @@ fi
+ echo "$ac_t""yes" 1>&6
+
+ echo $ac_n "checking for custom <stdint.h> implementation""... $ac_c" 1>&6
+-echo "configure:7185: checking for custom <stdint.h> implementation" >&5
++echo "configure:7189: checking for custom <stdint.h> implementation" >&5
+ if test "$MOZ_CUSTOM_STDINT_H"; then
+ cat >> confdefs.pytmp <<EOF
+ (''' MOZ_CUSTOM_STDINT_H ''', r''' "$MOZ_CUSTOM_STDINT_H" ''')
+@@ -7249,9 +7253,9 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ echo $ac_n "checking for IBM XLC/C++ compiler version >= 9.0.0.7""... $ac_c" 1>&6
+-echo "configure:7253: checking for IBM XLC/C++ compiler version >= 9.0.0.7" >&5
++echo "configure:7257: checking for IBM XLC/C++ compiler version >= 9.0.0.7" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 7255 "configure"
++#line 7259 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -7260,7 +7264,7 @@ int main() {
+ #endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:7268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ _BAD_COMPILER=
+ else
+@@ -7298,12 +7302,12 @@ cross_compiling=$ac_cv_prog_cc_cross
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:7302: checking for $ac_hdr" >&5
++echo "configure:7306: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 7307 "configure"
++#line 7311 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -7311,7 +7315,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:7319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -7394,17 +7398,17 @@ EOF
+ # builds.
+ _SAVE_LDFLAGS=$LDFLAGS
+ echo $ac_n "checking for -framework ExceptionHandling""... $ac_c" 1>&6
+-echo "configure:7398: checking for -framework ExceptionHandling" >&5
++echo "configure:7402: checking for -framework ExceptionHandling" >&5
+ LDFLAGS="$LDFLAGS -framework ExceptionHandling"
+ cat > conftest.$ac_ext <<EOF
+-#line 7401 "configure"
++#line 7405 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:7412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_have_framework_exceptionhandling="yes"
+ else
+@@ -7426,18 +7430,18 @@ rm -f conftest*
+ echo "Skipping -dead_strip because DTrace is enabled. See bug 403132."
+ else
+ echo $ac_n "checking for -dead_strip option to ld""... $ac_c" 1>&6
+-echo "configure:7430: checking for -dead_strip option to ld" >&5
++echo "configure:7434: checking for -dead_strip option to ld" >&5
+ _SAVE_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -Wl,-dead_strip"
+ cat > conftest.$ac_ext <<EOF
+-#line 7434 "configure"
++#line 7438 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:7445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ _HAVE_DEAD_STRIP=1
+ else
+@@ -7783,12 +7787,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:7787: checking for $ac_hdr" >&5
++echo "configure:7791: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 7792 "configure"
++#line 7796 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -7796,7 +7800,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:7800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:7804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -7989,19 +7993,19 @@ EOF
+ _DEFINES_CXXFLAGS="$_DEFINES_CXXFLAGS -Uunix -U__unix -U__unix__"
+
+ echo $ac_n "checking for __declspec(dllexport)""... $ac_c" 1>&6
+-echo "configure:7993: checking for __declspec(dllexport)" >&5
++echo "configure:7997: checking for __declspec(dllexport)" >&5
+ if eval "test \"`echo '$''{'ac_os2_declspec'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 7998 "configure"
++#line 8002 "configure"
+ #include "confdefs.h"
+ __declspec(dllexport) void ac_os2_declspec(void) {}
+ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:8009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_os2_declspec="yes"
+ else
+@@ -8054,14 +8058,14 @@ EOF
+ _SAVE_LDFLAGS=$LDFLAGS
+ LDFLAGS="-M /usr/lib/ld/map.noexstk $LDFLAGS"
+ cat > conftest.$ac_ext <<EOF
+-#line 8058 "configure"
++#line 8062 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ int main() {
+ printf("Hello World\n");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:8069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -8089,7 +8093,7 @@ rm -f conftest*
+ CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
+ CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
+ echo $ac_n "checking for Sun C++ compiler version >= 5.9""... $ac_c" 1>&6
+-echo "configure:8093: checking for Sun C++ compiler version >= 5.9" >&5
++echo "configure:8097: checking for Sun C++ compiler version >= 5.9" >&5
+
+ ac_ext=C
+ # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+@@ -8099,7 +8103,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ cat > conftest.$ac_ext <<EOF
+-#line 8103 "configure"
++#line 8107 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -8108,7 +8112,7 @@ int main() {
+ #endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:8116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ _BAD_COMPILER=
+ else
+@@ -8125,7 +8129,7 @@ rm -f conftest*
+ _res="yes"
+ fi
+ cat > conftest.$ac_ext <<EOF
+-#line 8129 "configure"
++#line 8133 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -8134,7 +8138,7 @@ int main() {
+ #endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:8142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ _ABOVE_SS12U1=
+ else
+@@ -8535,7 +8539,7 @@ fi
+
+ if test "$GNU_CC" -a "$GCC_USE_GNU_LD" -a -z "$MOZ_DISABLE_ICF"; then
+ echo $ac_n "checking whether the linker supports Identical Code Folding""... $ac_c" 1>&6
+-echo "configure:8539: checking whether the linker supports Identical Code Folding" >&5
++echo "configure:8543: checking whether the linker supports Identical Code Folding" >&5
+ if eval "test \"`echo '$''{'LD_SUPPORTS_ICF'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -8544,7 +8548,7 @@ else
+ 'int main() {return foo() - bar();}' > conftest.${ac_ext}
+ # If the linker supports ICF, foo and bar symbols will have
+ # the same address
+- if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS -Wl,--icf=safe -ffunction-sections conftest.${ac_ext} $LIBS 1>&2'; { (eval echo configure:8548: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
++ if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS -Wl,--icf=safe -ffunction-sections conftest.${ac_ext} $LIBS 1>&2'; { (eval echo configure:8552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
+ test -s conftest${ac_exeext} &&
+ objdump -t conftest${ac_exeext} | awk '{a[$6] = $1} END {if (a["foo"] && (a["foo"] != a["bar"])) { exit 1 }}'; then
+ LD_SUPPORTS_ICF=yes
+@@ -8559,14 +8563,14 @@ echo "$ac_t""$LD_SUPPORTS_ICF" 1>&6
+ _SAVE_LDFLAGS="$LDFLAGS -Wl,--icf=safe"
+ LDFLAGS="$LDFLAGS -Wl,--icf=safe -Wl,--print-icf-sections"
+ cat > conftest.$ac_ext <<EOF
+-#line 8563 "configure"
++#line 8567 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:8574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ LD_PRINT_ICF_SECTIONS=-Wl,--print-icf-sections
+ else
+@@ -8584,15 +8588,15 @@ fi
+
+ if test "$GNU_CC" -a "$GCC_USE_GNU_LD" -a -n "$MOZ_DEBUG_FLAGS"; then
+ echo $ac_n "checking whether removing dead symbols breaks debugging""... $ac_c" 1>&6
+-echo "configure:8588: checking whether removing dead symbols breaks debugging" >&5
++echo "configure:8592: checking whether removing dead symbols breaks debugging" >&5
+ if eval "test \"`echo '$''{'GC_SECTIONS_BREAKS_DEBUG_RANGES'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ echo 'int foo() {return 42;}' \
+ 'int bar() {return 1;}' \
+ 'int main() {return foo();}' > conftest.${ac_ext}
+- if { ac_try='${CC-cc} -o conftest.${ac_objext} $CFLAGS $MOZ_DEBUG_FLAGS -c conftest.${ac_ext} 1>&2'; { (eval echo configure:8595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
+- { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS $MOZ_DEBUG_FLAGS -Wl,--gc-sections conftest.${ac_objext} $LIBS 1>&2'; { (eval echo configure:8596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
++ if { ac_try='${CC-cc} -o conftest.${ac_objext} $CFLAGS $MOZ_DEBUG_FLAGS -c conftest.${ac_ext} 1>&2'; { (eval echo configure:8599: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
++ { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS $MOZ_DEBUG_FLAGS -Wl,--gc-sections conftest.${ac_objext} $LIBS 1>&2'; { (eval echo configure:8600: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } &&
+ test -s conftest${ac_exeext} -a -s conftest.${ac_objext}; then
+ if test "`$PYTHON "$_topsrcdir"/build/autoconf/check_debug_ranges.py conftest.${ac_objext} conftest.${ac_ext}`" = \
+ "`$PYTHON "$_topsrcdir"/build/autoconf/check_debug_ranges.py conftest${ac_exeext} conftest.${ac_ext}`"; then
+@@ -8615,12 +8619,12 @@ fi
+
+ if test -z "$SKIP_COMPILER_CHECKS"; then
+ echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+-echo "configure:8619: checking for ANSI C header files" >&5
++echo "configure:8623: checking for ANSI C header files" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8624 "configure"
++#line 8628 "configure"
+ #include "confdefs.h"
+ #include <stdlib.h>
+ #include <stdarg.h>
+@@ -8628,7 +8632,7 @@ else
+ #include <float.h>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:8632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:8636: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -8645,7 +8649,7 @@ rm -f conftest*
+ if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat > conftest.$ac_ext <<EOF
+-#line 8649 "configure"
++#line 8653 "configure"
+ #include "confdefs.h"
+ #include <string.h>
+ EOF
+@@ -8663,7 +8667,7 @@ fi
+ if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat > conftest.$ac_ext <<EOF
+-#line 8667 "configure"
++#line 8671 "configure"
+ #include "confdefs.h"
+ #include <stdlib.h>
+ EOF
+@@ -8684,7 +8688,7 @@ if test "$cross_compiling" = yes; then
+ :
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8688 "configure"
++#line 8692 "configure"
+ #include "confdefs.h"
+ #include <ctype.h>
+ #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+@@ -8695,7 +8699,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+ exit (0); }
+
+ EOF
+-if { (eval echo configure:8699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:8703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ :
+ else
+@@ -8722,12 +8726,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for working const""... $ac_c" 1>&6
+-echo "configure:8726: checking for working const" >&5
++echo "configure:8730: checking for working const" >&5
+ if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8731 "configure"
++#line 8735 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -8776,7 +8780,7 @@ ccp = (char const *const *) p;
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:8784: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_const=yes
+ else
+@@ -8800,12 +8804,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for mode_t""... $ac_c" 1>&6
+-echo "configure:8804: checking for mode_t" >&5
++echo "configure:8808: checking for mode_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8809 "configure"
++#line 8813 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #if STDC_HEADERS
+@@ -8836,12 +8840,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for off_t""... $ac_c" 1>&6
+-echo "configure:8840: checking for off_t" >&5
++echo "configure:8844: checking for off_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8845 "configure"
++#line 8849 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #if STDC_HEADERS
+@@ -8872,12 +8876,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for pid_t""... $ac_c" 1>&6
+-echo "configure:8876: checking for pid_t" >&5
++echo "configure:8880: checking for pid_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8881 "configure"
++#line 8885 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #if STDC_HEADERS
+@@ -8908,12 +8912,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for size_t""... $ac_c" 1>&6
+-echo "configure:8912: checking for size_t" >&5
++echo "configure:8916: checking for size_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8917 "configure"
++#line 8921 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #if STDC_HEADERS
+@@ -8951,12 +8955,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ echo $ac_n "checking for __stdcall""... $ac_c" 1>&6
+-echo "configure:8955: checking for __stdcall" >&5
++echo "configure:8959: checking for __stdcall" >&5
+ if eval "test \"`echo '$''{'ac_cv___stdcall'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 8960 "configure"
++#line 8964 "configure"
+ #include "confdefs.h"
+ template <typename Method> struct foo;
+ template <> struct foo<void (*)()> {};
+@@ -8965,7 +8969,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:8969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:8973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv___stdcall=true
+ else
+@@ -8997,12 +9001,12 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
+-echo "configure:9001: checking for ssize_t" >&5
++echo "configure:9005: checking for ssize_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9006 "configure"
++#line 9010 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ #include <sys/types.h>
+@@ -9010,7 +9014,7 @@ int main() {
+ ssize_t foo = 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_type_ssize_t=true
+ else
+@@ -9035,12 +9039,12 @@ else
+ echo "$ac_t""no" 1>&6
+ fi
+ echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
+-echo "configure:9039: checking for st_blksize in struct stat" >&5
++echo "configure:9043: checking for st_blksize in struct stat" >&5
+ if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9044 "configure"
++#line 9048 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -9048,7 +9052,7 @@ int main() {
+ struct stat s; s.st_blksize;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_struct_st_blksize=yes
+ else
+@@ -9072,12 +9076,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for siginfo_t""... $ac_c" 1>&6
+-echo "configure:9076: checking for siginfo_t" >&5
++echo "configure:9080: checking for siginfo_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_siginfo_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9081 "configure"
++#line 9085 "configure"
+ #include "confdefs.h"
+ #define _POSIX_C_SOURCE 199506L
+ #include <signal.h>
+@@ -9085,7 +9089,7 @@ int main() {
+ siginfo_t* info;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9089: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_siginfo_t=true
+ else
+@@ -9111,72 +9115,8 @@ else
+ fi
+
+
+-echo $ac_n "checking for the size of void*""... $ac_c" 1>&6
+-echo "configure:9116: checking for the size of void*" >&5
+-if eval "test \"`echo '$''{'moz_cv_size_of_JS_BYTES_PER_WORD'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+- moz_cv_size_of_JS_BYTES_PER_WORD=
+- for size in 4 8; do
+- cat > conftest.$ac_ext <<EOF
+-#line 9124 "configure"
+-#include "confdefs.h"
+-
+-int main() {
+-
+- int a[sizeof (void*) == $size ? 1 : -1];
+- return 0;
+-
+-; return 0; }
+-EOF
+-if { (eval echo configure:9134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- moz_cv_size_of_JS_BYTES_PER_WORD=$size; break
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+-fi
+-rm -f conftest*
+- done
+- if test ! "$moz_cv_size_of_JS_BYTES_PER_WORD"; then
+- { echo "configure: error: No size found for void*" 1>&2; exit 1; }
+- fi
+-
+-fi
+-
+-echo "$ac_t""$moz_cv_size_of_JS_BYTES_PER_WORD" 1>&6
+-cat >> confdefs.pytmp <<EOF
+- (''' JS_BYTES_PER_WORD ''', r''' $moz_cv_size_of_JS_BYTES_PER_WORD ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define JS_BYTES_PER_WORD $moz_cv_size_of_JS_BYTES_PER_WORD
+-EOF
+-
+-
+-if test "$moz_cv_size_of_JS_BYTES_PER_WORD" -eq "4"; then
+- cat >> confdefs.pytmp <<\EOF
+- (''' JS_BITS_PER_WORD_LOG2 ''', r''' 5 ''')
+-EOF
+-cat >> confdefs.h <<\EOF
+-#define JS_BITS_PER_WORD_LOG2 5
+-EOF
+-
+-elif test "$moz_cv_size_of_JS_BYTES_PER_WORD" -eq "8"; then
+- cat >> confdefs.pytmp <<\EOF
+- (''' JS_BITS_PER_WORD_LOG2 ''', r''' 6 ''')
+-EOF
+-cat >> confdefs.h <<\EOF
+-#define JS_BITS_PER_WORD_LOG2 6
+-EOF
+-
+-else
+- { echo "configure: error: Unexpected JS_BYTES_PER_WORD" 1>&2; exit 1; }
+-fi
+-
+-
+ echo $ac_n "checking for the alignment of void*""... $ac_c" 1>&6
+-echo "configure:9180: checking for the alignment of void*" >&5
++echo "configure:9120: checking for the alignment of void*" >&5
+ if eval "test \"`echo '$''{'moz_cv_align_of_JS_ALIGN_OF_POINTER'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9184,7 +9124,7 @@ else
+ moz_cv_align_of_JS_ALIGN_OF_POINTER=
+ for align in 2 4 8 16; do
+ cat > conftest.$ac_ext <<EOF
+-#line 9188 "configure"
++#line 9128 "configure"
+ #include "confdefs.h"
+
+ #include <stddef.h>
+@@ -9197,7 +9137,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ moz_cv_align_of_JS_ALIGN_OF_POINTER=$align; break
+ else
+@@ -9223,7 +9163,7 @@ EOF
+
+
+ echo $ac_n "checking for the size of double""... $ac_c" 1>&6
+-echo "configure:9227: checking for the size of double" >&5
++echo "configure:9167: checking for the size of double" >&5
+ if eval "test \"`echo '$''{'moz_cv_size_of_JS_BYTES_PER_DOUBLE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9231,7 +9171,7 @@ else
+ moz_cv_size_of_JS_BYTES_PER_DOUBLE=
+ for size in 6 8 10 12 14; do
+ cat > conftest.$ac_ext <<EOF
+-#line 9235 "configure"
++#line 9175 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -9241,7 +9181,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9245: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9185: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ moz_cv_size_of_JS_BYTES_PER_DOUBLE=$size; break
+ else
+@@ -9270,12 +9210,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:9274: checking for $ac_hdr" >&5
++echo "configure:9214: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9279 "configure"
++#line 9219 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -9283,7 +9223,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -9326,12 +9266,12 @@ fi
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:9330: checking for $ac_hdr" >&5
++echo "configure:9270: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9335 "configure"
++#line 9275 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #include <$ac_hdr>
+@@ -9339,7 +9279,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -9382,12 +9322,12 @@ fi
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:9386: checking for $ac_hdr" >&5
++echo "configure:9326: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9391 "configure"
++#line 9331 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -9395,7 +9335,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -9435,12 +9375,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for uint""... $ac_c" 1>&6
+-echo "configure:9439: checking for uint" >&5
++echo "configure:9379: checking for uint" >&5
+ if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9444 "configure"
++#line 9384 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ #include <sys/types.h>
+@@ -9448,7 +9388,7 @@ int main() {
+ uint foo = 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9392: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_uint=true
+ else
+@@ -9473,12 +9413,12 @@ else
+ echo "$ac_t""no" 1>&6
+ fi
+ echo $ac_n "checking for uint_t""... $ac_c" 1>&6
+-echo "configure:9477: checking for uint_t" >&5
++echo "configure:9417: checking for uint_t" >&5
+ if eval "test \"`echo '$''{'ac_cv_uint_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9482 "configure"
++#line 9422 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ #include <sys/types.h>
+@@ -9486,7 +9426,7 @@ int main() {
+ uint_t foo = 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9490: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9430: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_uint_t=true
+ else
+@@ -9520,12 +9460,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
+
+
+ echo $ac_n "checking for uname.domainname""... $ac_c" 1>&6
+-echo "configure:9524: checking for uname.domainname" >&5
++echo "configure:9464: checking for uname.domainname" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_uname_domainname_field'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9529 "configure"
++#line 9469 "configure"
+ #include "confdefs.h"
+ #include <sys/utsname.h>
+ int main() {
+@@ -9533,7 +9473,7 @@ int main() {
+ (void)uname(res); if (res != 0) { domain = res->domainname; }
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9537: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9477: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_have_uname_domainname_field=true
+ else
+@@ -9560,12 +9500,12 @@ else
+ fi
+
+ echo $ac_n "checking for uname.__domainname""... $ac_c" 1>&6
+-echo "configure:9564: checking for uname.__domainname" >&5
++echo "configure:9504: checking for uname.__domainname" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_uname_us_domainname_field'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9569 "configure"
++#line 9509 "configure"
+ #include "confdefs.h"
+ #include <sys/utsname.h>
+ int main() {
+@@ -9573,7 +9513,7 @@ int main() {
+ (void)uname(res); if (res != 0) { domain = res->__domainname; }
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_have_uname_us_domainname_field=true
+ else
+@@ -9609,7 +9549,7 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+ if test "$GNU_CC"; then
+ echo $ac_n "checking for visibility(hidden) attribute""... $ac_c" 1>&6
+-echo "configure:9613: checking for visibility(hidden) attribute" >&5
++echo "configure:9553: checking for visibility(hidden) attribute" >&5
+ if eval "test \"`echo '$''{'ac_cv_visibility_hidden'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9637,7 +9577,7 @@ EOF
+
+
+ echo $ac_n "checking for visibility(default) attribute""... $ac_c" 1>&6
+-echo "configure:9641: checking for visibility(default) attribute" >&5
++echo "configure:9581: checking for visibility(default) attribute" >&5
+ if eval "test \"`echo '$''{'ac_cv_visibility_default'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9665,7 +9605,7 @@ EOF
+
+
+ echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6
+-echo "configure:9669: checking for visibility pragma support" >&5
++echo "configure:9609: checking for visibility pragma support" >&5
+ if eval "test \"`echo '$''{'ac_cv_visibility_pragma'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9690,7 +9630,7 @@ fi
+ echo "$ac_t""$ac_cv_visibility_pragma" 1>&6
+ if test "$ac_cv_visibility_pragma" = "yes"; then
+ echo $ac_n "checking For gcc visibility bug with class-level attributes (GCC bug 26905)""... $ac_c" 1>&6
+-echo "configure:9694: checking For gcc visibility bug with class-level attributes (GCC bug 26905)" >&5
++echo "configure:9634: checking For gcc visibility bug with class-level attributes (GCC bug 26905)" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_visibility_class_bug'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9718,7 +9658,7 @@ fi
+ echo "$ac_t""$ac_cv_have_visibility_class_bug" 1>&6
+
+ echo $ac_n "checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)""... $ac_c" 1>&6
+-echo "configure:9722: checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)" >&5
++echo "configure:9662: checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_visibility_builtin_bug'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -9770,7 +9710,7 @@ fi # Sun Studio on Solaris
+ if test "$GNU_CC"; then
+
+ echo $ac_n "checking for gcc PR49911""... $ac_c" 1>&6
+-echo "configure:9774: checking for gcc PR49911" >&5
++echo "configure:9714: checking for gcc PR49911" >&5
+ ac_have_gcc_pr49911="no"
+
+ ac_ext=C
+@@ -9787,7 +9727,7 @@ if test "$cross_compiling" = yes; then
+ true
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9791 "configure"
++#line 9731 "configure"
+ #include "confdefs.h"
+
+ extern "C" void abort(void);
+@@ -9828,7 +9768,7 @@ int main(void) {
+ }
+
+ EOF
+-if { (eval echo configure:9832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:9772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ true
+ else
+@@ -9865,12 +9805,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
+-echo "configure:9869: checking for $ac_hdr that defines DIR" >&5
++echo "configure:9809: checking for $ac_hdr that defines DIR" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 9874 "configure"
++#line 9814 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #include <$ac_hdr>
+@@ -9878,7 +9818,7 @@ int main() {
+ DIR *dirp = 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9822: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_dirent_$ac_safe=yes"
+ else
+@@ -9906,7 +9846,7 @@ done
+ # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+ if test $ac_header_dirent = dirent.h; then
+ echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
+-echo "configure:9910: checking for opendir in -ldir" >&5
++echo "configure:9850: checking for opendir in -ldir" >&5
+ ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -9914,7 +9854,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-ldir $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 9918 "configure"
++#line 9858 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -9925,7 +9865,7 @@ int main() {
+ opendir()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:9869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -9947,7 +9887,7 @@ fi
+
+ else
+ echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
+-echo "configure:9951: checking for opendir in -lx" >&5
++echo "configure:9891: checking for opendir in -lx" >&5
+ ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -9955,7 +9895,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lx $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 9959 "configure"
++#line 9899 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -9966,7 +9906,7 @@ int main() {
+ opendir()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:9970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:9910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -10000,12 +9940,12 @@ esac
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10004: checking for $ac_hdr" >&5
++echo "configure:9944: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10009 "configure"
++#line 9949 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10013,7 +9953,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:9957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10048,12 +9988,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10052: checking for $ac_hdr" >&5
++echo "configure:9992: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10057 "configure"
++#line 9997 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10061,7 +10001,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10065: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10095,12 +10035,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10099: checking for $ac_hdr" >&5
++echo "configure:10039: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10104 "configure"
++#line 10044 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10108,7 +10048,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10141,12 +10081,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10145: checking for $ac_hdr" >&5
++echo "configure:10085: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10150 "configure"
++#line 10090 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10154,7 +10094,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10188,12 +10128,12 @@ EOF
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10192: checking for $ac_hdr" >&5
++echo "configure:10132: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10197 "configure"
++#line 10137 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10201,7 +10141,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10205: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10241,12 +10181,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ NEW_H=new.h
+ ac_safe=`echo "new" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for new""... $ac_c" 1>&6
+-echo "configure:10245: checking for new" >&5
++echo "configure:10185: checking for new" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10250 "configure"
++#line 10190 "configure"
+ #include "confdefs.h"
+
+ #include <new>
+@@ -10254,7 +10194,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10298,12 +10238,12 @@ fi
+ if test "x$enable_dtrace" = "xyes"; then
+ ac_safe=`echo "sys/sdt.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for sys/sdt.h""... $ac_c" 1>&6
+-echo "configure:10302: checking for sys/sdt.h" >&5
++echo "configure:10242: checking for sys/sdt.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10307 "configure"
++#line 10247 "configure"
+ #include "confdefs.h"
+
+ #include <sys/sdt.h>
+@@ -10311,7 +10251,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10255: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10353,12 +10293,12 @@ case $target in
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:10357: checking for $ac_hdr" >&5
++echo "configure:10297: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10362 "configure"
++#line 10302 "configure"
+ #include "confdefs.h"
+
+ #include <$ac_hdr>
+@@ -10366,7 +10306,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10310: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10418,12 +10358,12 @@ CFLAGS="$CFLAGS $LINUX_HEADERS_INCLUDES"
+
+ ac_safe=`echo "linux/perf_event.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for linux/perf_event.h""... $ac_c" 1>&6
+-echo "configure:10422: checking for linux/perf_event.h" >&5
++echo "configure:10362: checking for linux/perf_event.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10427 "configure"
++#line 10367 "configure"
+ #include "confdefs.h"
+
+ #include <linux/perf_event.h>
+@@ -10431,7 +10371,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10446,19 +10386,19 @@ fi
+ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ echo $ac_n "checking for perf_event_open system call""... $ac_c" 1>&6
+-echo "configure:10450: checking for perf_event_open system call" >&5
++echo "configure:10390: checking for perf_event_open system call" >&5
+ if eval "test \"`echo '$''{'ac_cv_perf_event_open'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10455 "configure"
++#line 10395 "configure"
+ #include "confdefs.h"
+ #include <asm/unistd.h>
+ int main() {
+ return sizeof(__NR_perf_event_open);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10402: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_perf_event_open=yes
+ else
+@@ -10494,7 +10434,7 @@ case $target in
+ ;;
+ *)
+ echo $ac_n "checking for gethostbyname_r in -lc_r""... $ac_c" 1>&6
+-echo "configure:10498: checking for gethostbyname_r in -lc_r" >&5
++echo "configure:10438: checking for gethostbyname_r in -lc_r" >&5
+ ac_lib_var=`echo c_r'_'gethostbyname_r | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -10502,7 +10442,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lc_r $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 10506 "configure"
++#line 10446 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10513,7 +10453,7 @@ int main() {
+ gethostbyname_r()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -10554,14 +10494,14 @@ case $target in
+ *)
+
+ echo $ac_n "checking for library containing dlopen""... $ac_c" 1>&6
+-echo "configure:10558: checking for library containing dlopen" >&5
++echo "configure:10498: checking for library containing dlopen" >&5
+ if eval "test \"`echo '$''{'ac_cv_search_dlopen'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ ac_func_search_save_LIBS="$LIBS"
+ ac_cv_search_dlopen="no"
+ cat > conftest.$ac_ext <<EOF
+-#line 10565 "configure"
++#line 10505 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10572,7 +10512,7 @@ int main() {
+ dlopen()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_dlopen="none required"
+ else
+@@ -10583,7 +10523,7 @@ rm -f conftest*
+ test "$ac_cv_search_dlopen" = "no" && for i in dl; do
+ LIBS="-l$i $ac_func_search_save_LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 10587 "configure"
++#line 10527 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10594,7 +10534,7 @@ int main() {
+ dlopen()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_dlopen="-l$i"
+ break
+@@ -10612,12 +10552,12 @@ if test "$ac_cv_search_dlopen" != "no"; then
+ test "$ac_cv_search_dlopen" = "none required" || LIBS="$ac_cv_search_dlopen $LIBS"
+ ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
+-echo "configure:10616: checking for dlfcn.h" >&5
++echo "configure:10556: checking for dlfcn.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10621 "configure"
++#line 10561 "configure"
+ #include "confdefs.h"
+
+ #include <dlfcn.h>
+@@ -10625,7 +10565,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:10569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -10662,12 +10602,12 @@ CFLAGS="$CFLAGS -D_GNU_SOURCE"
+ for ac_func in dladdr
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:10666: checking for $ac_func" >&5
++echo "configure:10606: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 10671 "configure"
++#line 10611 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -10690,7 +10630,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -10724,7 +10664,7 @@ if test ! "$GNU_CXX"; then
+ case $target in
+ *-aix*)
+ echo $ac_n "checking for demangle in -lC_r""... $ac_c" 1>&6
+-echo "configure:10728: checking for demangle in -lC_r" >&5
++echo "configure:10668: checking for demangle in -lC_r" >&5
+ ac_lib_var=`echo C_r'_'demangle | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -10732,7 +10672,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lC_r $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 10736 "configure"
++#line 10676 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10743,7 +10683,7 @@ int main() {
+ demangle()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -10776,7 +10716,7 @@ fi
+ ;;
+ *)
+ echo $ac_n "checking for demangle in -lC""... $ac_c" 1>&6
+-echo "configure:10780: checking for demangle in -lC" >&5
++echo "configure:10720: checking for demangle in -lC" >&5
+ ac_lib_var=`echo C'_'demangle | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -10784,7 +10724,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lC $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 10788 "configure"
++#line 10728 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10795,7 +10735,7 @@ int main() {
+ demangle()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -10834,7 +10774,7 @@ case $target in
+ ;;
+ *)
+ echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
+-echo "configure:10838: checking for socket in -lsocket" >&5
++echo "configure:10778: checking for socket in -lsocket" >&5
+ ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -10842,7 +10782,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lsocket $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 10846 "configure"
++#line 10786 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -10853,7 +10793,7 @@ int main() {
+ socket()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:10857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:10797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -10892,7 +10832,7 @@ darwin*)
+ *)
+
+ echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
+-echo "configure:10896: checking for pthread_create in -lpthreads" >&5
++echo "configure:10836: checking for pthread_create in -lpthreads" >&5
+ echo "
+ #include <pthread.h>
+ #include <stdlib.h>
+@@ -10915,7 +10855,7 @@ echo "
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
+-echo "configure:10919: checking for pthread_create in -lpthread" >&5
++echo "configure:10859: checking for pthread_create in -lpthread" >&5
+ echo "
+ #include <pthread.h>
+ #include <stdlib.h>
+@@ -10938,7 +10878,7 @@ echo "
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
+-echo "configure:10942: checking for pthread_create in -lc_r" >&5
++echo "configure:10882: checking for pthread_create in -lc_r" >&5
+ echo "
+ #include <pthread.h>
+ #include <stdlib.h>
+@@ -10961,7 +10901,7 @@ echo "
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
+-echo "configure:10965: checking for pthread_create in -lc" >&5
++echo "configure:10905: checking for pthread_create in -lc" >&5
+ echo "
+ #include <pthread.h>
+ #include <stdlib.h>
+@@ -11020,7 +10960,7 @@ then
+ rm -f conftest*
+ ac_cv_have_dash_pthread=no
+ echo $ac_n "checking whether ${CC-cc} accepts -pthread""... $ac_c" 1>&6
+-echo "configure:11024: checking whether ${CC-cc} accepts -pthread" >&5
++echo "configure:10964: checking whether ${CC-cc} accepts -pthread" >&5
+ echo 'int main() { return 0; }' | cat > conftest.c
+ ${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
+ if test $? -eq 0; then
+@@ -11043,7 +10983,7 @@ echo "configure:11024: checking whether ${CC-cc} accepts -pthread" >&5
+ ac_cv_have_dash_pthreads=no
+ if test "$ac_cv_have_dash_pthread" = "no"; then
+ echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6
+-echo "configure:11047: checking whether ${CC-cc} accepts -pthreads" >&5
++echo "configure:10987: checking whether ${CC-cc} accepts -pthreads" >&5
+ echo 'int main() { return 0; }' | cat > conftest.c
+ ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
+ if test $? -eq 0; then
+@@ -11148,13 +11088,13 @@ fi
+
+ if test $ac_cv_prog_gcc = yes; then
+ echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
+-echo "configure:11152: checking whether ${CC-cc} needs -traditional" >&5
++echo "configure:11092: checking whether ${CC-cc} needs -traditional" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ ac_pattern="Autoconf.*'x'"
+ cat > conftest.$ac_ext <<EOF
+-#line 11158 "configure"
++#line 11098 "configure"
+ #include "confdefs.h"
+ #include <sgtty.h>
+ Autoconf TIOCGETP
+@@ -11172,7 +11112,7 @@ rm -f conftest*
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat > conftest.$ac_ext <<EOF
+-#line 11176 "configure"
++#line 11116 "configure"
+ #include "confdefs.h"
+ #include <termio.h>
+ Autoconf TCGETA
+@@ -11194,7 +11134,7 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
+ fi
+
+ echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
+-echo "configure:11198: checking for 8-bit clean memcmp" >&5
++echo "configure:11138: checking for 8-bit clean memcmp" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -11202,7 +11142,7 @@ else
+ ac_cv_func_memcmp_clean=no
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11206 "configure"
++#line 11146 "configure"
+ #include "confdefs.h"
+
+ main()
+@@ -11212,7 +11152,7 @@ main()
+ }
+
+ EOF
+-if { (eval echo configure:11216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:11156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv_func_memcmp_clean=yes
+ else
+@@ -11234,12 +11174,12 @@ for ac_func in fchmod flockfile getc_unlocked _getc_nolock getpagesize \
+ stat64 statvfs statvfs64 strerror strtok_r truncate64
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:11238: checking for $ac_func" >&5
++echo "configure:11178: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11243 "configure"
++#line 11183 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -11262,7 +11202,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -11291,14 +11231,14 @@ done
+
+
+ cat > conftest.$ac_ext <<EOF
+-#line 11295 "configure"
++#line 11235 "configure"
+ #include "confdefs.h"
+ #include <windows.h>
+ int main() {
+ SYSTEMTIME st;FILETIME ft;SystemTimeToFileTime(&st,&ft);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_have_systemtimetofiletime="yes"
+ else
+@@ -11318,14 +11258,14 @@ EOF
+
+ fi
+ cat > conftest.$ac_ext <<EOF
+-#line 11322 "configure"
++#line 11262 "configure"
+ #include "confdefs.h"
+ #include <windows.h>
+ int main() {
+ FILETIME ft;GetSystemTimeAsFileTime(&ft);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_have_getsystemtimeasfiletime="yes"
+ else
+@@ -11355,19 +11295,19 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ echo $ac_n "checking for wcrtomb""... $ac_c" 1>&6
+-echo "configure:11359: checking for wcrtomb" >&5
++echo "configure:11299: checking for wcrtomb" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_wcrtomb'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11364 "configure"
++#line 11304 "configure"
+ #include "confdefs.h"
+ #include <wchar.h>
+ int main() {
+ mbstate_t ps={0};wcrtomb(0,'f',&ps);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_have_wcrtomb="yes"
+ else
+@@ -11390,19 +11330,19 @@ EOF
+
+ fi
+ echo $ac_n "checking for mbrtowc""... $ac_c" 1>&6
+-echo "configure:11394: checking for mbrtowc" >&5
++echo "configure:11334: checking for mbrtowc" >&5
+ if eval "test \"`echo '$''{'ac_cv_have_mbrtowc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11399 "configure"
++#line 11339 "configure"
+ #include "confdefs.h"
+ #include <wchar.h>
+ int main() {
+ mbstate_t ps={0};mbrtowc(0,0,0,&ps);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_have_mbrtowc="yes"
+ else
+@@ -11434,12 +11374,12 @@ cross_compiling=$ac_cv_prog_cc_cross
+ fi
+
+ echo $ac_n "checking for res_ninit()""... $ac_c" 1>&6
+-echo "configure:11438: checking for res_ninit()" >&5
++echo "configure:11378: checking for res_ninit()" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_res_ninit'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11443 "configure"
++#line 11383 "configure"
+ #include "confdefs.h"
+
+ #ifdef linux
+@@ -11451,7 +11391,7 @@ int main() {
+ int foo = res_ninit(&_res);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_func_res_ninit=yes
+ else
+@@ -11484,12 +11424,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
+ cross_compiling=$ac_cv_prog_cxx_cross
+
+ echo $ac_n "checking for gnu_get_libc_version()""... $ac_c" 1>&6
+-echo "configure:11488: checking for gnu_get_libc_version()" >&5
++echo "configure:11428: checking for gnu_get_libc_version()" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_gnu_get_libc_version'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11493 "configure"
++#line 11433 "configure"
+ #include "confdefs.h"
+
+ #ifdef HAVE_GNU_LIBC_VERSION_H
+@@ -11500,7 +11440,7 @@ int main() {
+ const char *glibc_version = gnu_get_libc_version();
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_func_gnu_get_libc_version=yes
+ else
+@@ -11534,7 +11474,7 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+
+ echo $ac_n "checking for an implementation of va_copy()""... $ac_c" 1>&6
+-echo "configure:11538: checking for an implementation of va_copy()" >&5
++echo "configure:11478: checking for an implementation of va_copy()" >&5
+ if eval "test \"`echo '$''{'ac_cv_va_copy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -11544,7 +11484,7 @@ else
+
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11548 "configure"
++#line 11488 "configure"
+ #include "confdefs.h"
+
+ #include <stdarg.h>
+@@ -11558,7 +11498,7 @@ else
+ }
+ int main() { f (0, 42); return 0; }
+ EOF
+-if { (eval echo configure:11562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:11502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv_va_copy=yes
+ else
+@@ -11575,7 +11515,7 @@ fi
+
+ echo "$ac_t""$ac_cv_va_copy" 1>&6
+ echo $ac_n "checking for an implementation of __va_copy()""... $ac_c" 1>&6
+-echo "configure:11579: checking for an implementation of __va_copy()" >&5
++echo "configure:11519: checking for an implementation of __va_copy()" >&5
+ if eval "test \"`echo '$''{'ac_cv___va_copy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -11585,7 +11525,7 @@ else
+
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11589 "configure"
++#line 11529 "configure"
+ #include "confdefs.h"
+
+ #include <stdarg.h>
+@@ -11599,7 +11539,7 @@ else
+ }
+ int main() { f (0, 42); return 0; }
+ EOF
+-if { (eval echo configure:11603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:11543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv___va_copy=yes
+ else
+@@ -11616,7 +11556,7 @@ fi
+
+ echo "$ac_t""$ac_cv___va_copy" 1>&6
+ echo $ac_n "checking whether va_lists can be copied by value""... $ac_c" 1>&6
+-echo "configure:11620: checking whether va_lists can be copied by value" >&5
++echo "configure:11560: checking whether va_lists can be copied by value" >&5
+ if eval "test \"`echo '$''{'ac_cv_va_val_copy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -11626,7 +11566,7 @@ else
+
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11630 "configure"
++#line 11570 "configure"
+ #include "confdefs.h"
+
+ #include <stdarg.h>
+@@ -11640,7 +11580,7 @@ else
+ }
+ int main() { f (0, 42); return 0; }
+ EOF
+-if { (eval echo configure:11644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:11584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv_va_val_copy=yes
+ else
+@@ -11710,12 +11650,12 @@ ARM_ABI_PREFIX=
+ if test "$GNU_CC"; then
+ if test "$CPU_ARCH" = "arm" ; then
+ echo $ac_n "checking for ARM EABI""... $ac_c" 1>&6
+-echo "configure:11714: checking for ARM EABI" >&5
++echo "configure:11654: checking for ARM EABI" >&5
+ if eval "test \"`echo '$''{'ac_cv_gcc_arm_eabi'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11719 "configure"
++#line 11659 "configure"
+ #include "confdefs.h"
+
+ int main() {
+@@ -11728,7 +11668,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11732: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:11672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_gcc_arm_eabi="yes"
+ else
+@@ -11753,12 +11693,12 @@ echo "$ac_t""$ac_cv_gcc_arm_eabi" 1>&6
+ fi
+
+ echo $ac_n "checking for modern C++ template specialization syntax support""... $ac_c" 1>&6
+-echo "configure:11757: checking for modern C++ template specialization syntax support" >&5
++echo "configure:11697: checking for modern C++ template specialization syntax support" >&5
+ if eval "test \"`echo '$''{'ac_cv_cpp_modern_specialize_template_syntax'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11762 "configure"
++#line 11702 "configure"
+ #include "confdefs.h"
+ template <class T> struct X { int a; };
+ class Y {};
+@@ -11768,7 +11708,7 @@ X<int> int_x;
+ X<Y> y_x;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:11712: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cpp_modern_specialize_template_syntax=yes
+ else
+@@ -11786,12 +11726,12 @@ if test "$ac_cv_cpp_modern_specialize_template_syntax" = no ; then
+ fi
+
+ echo $ac_n "checking whether partial template specialization works""... $ac_c" 1>&6
+-echo "configure:11790: checking whether partial template specialization works" >&5
++echo "configure:11730: checking whether partial template specialization works" >&5
+ if eval "test \"`echo '$''{'ac_cv_cpp_partial_specialization'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11795 "configure"
++#line 11735 "configure"
+ #include "confdefs.h"
+ template <class T> class Foo {};
+ template <class T> class Foo<T*> {};
+@@ -11799,7 +11739,7 @@ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:11743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cpp_partial_specialization=yes
+ else
+@@ -11823,12 +11763,12 @@ EOF
+ fi
+
+ echo $ac_n "checking whether the C++ \"using\" keyword resolves ambiguity""... $ac_c" 1>&6
+-echo "configure:11827: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
++echo "configure:11767: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
+ if eval "test \"`echo '$''{'ac_cv_cpp_ambiguity_resolving_using'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11832 "configure"
++#line 11772 "configure"
+ #include "confdefs.h"
+ class X {
+ public: int go(const X&) {return 3;}
+@@ -11844,7 +11784,7 @@ int main() {
+ X x; Y y; y.jo(x);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:11788: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cpp_ambiguity_resolving_using=yes
+ else
+@@ -11868,7 +11808,7 @@ EOF
+ fi
+
+ echo $ac_n "checking for C++ dynamic_cast to void*""... $ac_c" 1>&6
+-echo "configure:11872: checking for C++ dynamic_cast to void*" >&5
++echo "configure:11812: checking for C++ dynamic_cast to void*" >&5
+ if eval "test \"`echo '$''{'ac_cv_cpp_dynamic_cast_void_ptr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -11876,7 +11816,7 @@ else
+ ac_cv_cpp_dynamic_cast_void_ptr=no
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11880 "configure"
++#line 11820 "configure"
+ #include "confdefs.h"
+ class X { int i; public: virtual ~X() { } };
+ class Y { int j; public: virtual ~Y() { } };
+@@ -11892,7 +11832,7 @@ class X { int i; public: virtual ~X() { } };
+ ((void*)&mdo == dynamic_cast<void*>(suby))));
+ }
+ EOF
+-if { (eval echo configure:11896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:11836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv_cpp_dynamic_cast_void_ptr=yes
+ else
+@@ -11919,19 +11859,19 @@ fi
+
+
+ echo $ac_n "checking whether C++ requires implementation of unused virtual methods""... $ac_c" 1>&6
+-echo "configure:11923: checking whether C++ requires implementation of unused virtual methods" >&5
++echo "configure:11863: checking whether C++ requires implementation of unused virtual methods" >&5
+ if eval "test \"`echo '$''{'ac_cv_cpp_unused_required'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11928 "configure"
++#line 11868 "configure"
+ #include "confdefs.h"
+ class X {private: virtual void never_called();};
+ int main() {
+ X x;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_cpp_unused_required=no
+ else
+@@ -11957,12 +11897,12 @@ fi
+
+
+ echo $ac_n "checking for trouble comparing to zero near std::operator!=()""... $ac_c" 1>&6
+-echo "configure:11961: checking for trouble comparing to zero near std::operator!=()" >&5
++echo "configure:11901: checking for trouble comparing to zero near std::operator!=()" >&5
+ if eval "test \"`echo '$''{'ac_cv_trouble_comparing_to_zero'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 11966 "configure"
++#line 11906 "configure"
+ #include "confdefs.h"
+ #include <algorithm>
+ template <class T> class Foo {};
+@@ -11973,7 +11913,7 @@ int main() {
+ Foo<int> f; return (0 != f);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:11977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:11917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_trouble_comparing_to_zero=no
+ else
+@@ -12003,19 +11943,19 @@ fi
+ _SAVE_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $DSO_PIC_CFLAGS $DSO_LDOPTS $MOZ_OPTIMIZE_LDFLAGS"
+ echo $ac_n "checking for __thread keyword for TLS variables""... $ac_c" 1>&6
+-echo "configure:12007: checking for __thread keyword for TLS variables" >&5
++echo "configure:11947: checking for __thread keyword for TLS variables" >&5
+ if eval "test \"`echo '$''{'ac_cv_thread_keyword'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12012 "configure"
++#line 11952 "configure"
+ #include "confdefs.h"
+ __thread bool tlsIsMainThread = false;
+ int main() {
+ return tlsIsMainThread;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:11959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_thread_keyword=yes
+ else
+@@ -12055,12 +11995,12 @@ fi
+ MALLOC_H=
+ ac_safe=`echo "malloc.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for malloc.h""... $ac_c" 1>&6
+-echo "configure:12059: checking for malloc.h" >&5
++echo "configure:11999: checking for malloc.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12064 "configure"
++#line 12004 "configure"
+ #include "confdefs.h"
+
+ #include <malloc.h>
+@@ -12068,7 +12008,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12072: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -12091,12 +12031,12 @@ fi
+ if test "$MALLOC_H" = ""; then
+ ac_safe=`echo "malloc/malloc.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for malloc/malloc.h""... $ac_c" 1>&6
+-echo "configure:12095: checking for malloc/malloc.h" >&5
++echo "configure:12035: checking for malloc/malloc.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12100 "configure"
++#line 12040 "configure"
+ #include "confdefs.h"
+
+ #include <malloc/malloc.h>
+@@ -12104,7 +12044,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -12127,12 +12067,12 @@ fi
+ if test "$MALLOC_H" = ""; then
+ ac_safe=`echo "sys/malloc.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for sys/malloc.h""... $ac_c" 1>&6
+-echo "configure:12131: checking for sys/malloc.h" >&5
++echo "configure:12071: checking for sys/malloc.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12136 "configure"
++#line 12076 "configure"
+ #include "confdefs.h"
+
+ #include <sys/malloc.h>
+@@ -12140,7 +12080,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -12176,12 +12116,12 @@ MOZ_ALLOCATING_FUNCS="strndup posix_memalign memalign valloc"
+ for ac_func in strndup posix_memalign memalign valloc
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:12180: checking for $ac_func" >&5
++echo "configure:12120: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12185 "configure"
++#line 12125 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -12207,7 +12147,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:12151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -12237,19 +12177,19 @@ done
+
+
+ echo $ac_n "checking for __attribute__((always_inline))""... $ac_c" 1>&6
+-echo "configure:12241: checking for __attribute__((always_inline))" >&5
++echo "configure:12181: checking for __attribute__((always_inline))" >&5
+ if eval "test \"`echo '$''{'ac_cv_attribute_always_inline'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12246 "configure"
++#line 12186 "configure"
+ #include "confdefs.h"
+ inline void f(void) __attribute__((always_inline));
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_attribute_always_inline=yes
+ else
+@@ -12264,19 +12204,19 @@ fi
+ echo "$ac_t""$ac_cv_attribute_always_inline" 1>&6
+
+ echo $ac_n "checking for __attribute__((malloc))""... $ac_c" 1>&6
+-echo "configure:12268: checking for __attribute__((malloc))" >&5
++echo "configure:12208: checking for __attribute__((malloc))" >&5
+ if eval "test \"`echo '$''{'ac_cv_attribute_malloc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12273 "configure"
++#line 12213 "configure"
+ #include "confdefs.h"
+ void* f(int) __attribute__((malloc));
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12280: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12220: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_attribute_malloc=yes
+ else
+@@ -12291,19 +12231,19 @@ fi
+ echo "$ac_t""$ac_cv_attribute_malloc" 1>&6
+
+ echo $ac_n "checking for __attribute__((warn_unused_result))""... $ac_c" 1>&6
+-echo "configure:12295: checking for __attribute__((warn_unused_result))" >&5
++echo "configure:12235: checking for __attribute__((warn_unused_result))" >&5
+ if eval "test \"`echo '$''{'ac_cv_attribute_warn_unused'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12300 "configure"
++#line 12240 "configure"
+ #include "confdefs.h"
+ int f(void) __attribute__((warn_unused_result));
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12247: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_attribute_warn_unused=yes
+ else
+@@ -12327,19 +12267,19 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+
+ echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
+-echo "configure:12331: checking for LC_MESSAGES" >&5
++echo "configure:12271: checking for LC_MESSAGES" >&5
+ if eval "test \"`echo '$''{'ac_cv_i18n_lc_messages'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12336 "configure"
++#line 12276 "configure"
+ #include "confdefs.h"
+ #include <locale.h>
+ int main() {
+ int category = LC_MESSAGES;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_i18n_lc_messages=yes
+ else
+@@ -12365,12 +12305,12 @@ fi
+ for ac_func in localeconv
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:12369: checking for $ac_func" >&5
++echo "configure:12309: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 12374 "configure"
++#line 12314 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -12393,7 +12333,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:12337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -12580,7 +12520,7 @@ fi
+ # Extract the first word of "nspr-config", so it can be a program name with args.
+ set dummy nspr-config; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:12584: checking for $ac_word" >&5
++echo "configure:12524: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_NSPR_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -12615,7 +12555,7 @@ fi
+
+ min_nspr_version=$NSPR_MINVER
+ echo $ac_n "checking for NSPR - version >= $min_nspr_version""... $ac_c" 1>&6
+-echo "configure:12619: checking for NSPR - version >= $min_nspr_version" >&5
++echo "configure:12559: checking for NSPR - version >= $min_nspr_version" >&5
+
+ no_nspr=""
+ if test "$NSPR_CONFIG" != "no"; then
+@@ -12678,7 +12618,7 @@ if test -n "$MOZ_NATIVE_NSPR"; then
+ _SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $NSPR_CFLAGS"
+ cat > conftest.$ac_ext <<EOF
+-#line 12682 "configure"
++#line 12622 "configure"
+ #include "confdefs.h"
+ #include "prlog.h"
+ int main() {
+@@ -12687,7 +12627,7 @@ int main() {
+ #endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ MOZ_NATIVE_NSPR=1
+ else
+@@ -12729,7 +12669,7 @@ if test -z "$MOZ_ZLIB_LIBS$MOZ_ZLIB_CFLAGS$SKIP_LIBRARY_CHECKS"; then
+ MOZ_NATIVE_ZLIB=
+ else
+ echo $ac_n "checking for gzread in -lz""... $ac_c" 1>&6
+-echo "configure:12733: checking for gzread in -lz" >&5
++echo "configure:12673: checking for gzread in -lz" >&5
+ ac_lib_var=`echo z'_'gzread | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -12737,7 +12677,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lz $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 12741 "configure"
++#line 12681 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -12748,7 +12688,7 @@ int main() {
+ gzread()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:12692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -12772,7 +12712,7 @@ fi
+ if test "$MOZ_NATIVE_ZLIB" = 1; then
+ MOZZLIBNUM=`echo $MOZZLIB | awk -F. '{printf "0x%x\n", ((($1 * 16 + $2) * 16) + $3) * 16 + $4}'`
+ cat > conftest.$ac_ext <<EOF
+-#line 12776 "configure"
++#line 12716 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ #include <string.h>
+@@ -12783,7 +12723,7 @@ int main() {
+ #endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:12787: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:12727: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ MOZ_NATIVE_ZLIB=1
+ else
+@@ -12829,7 +12769,7 @@ if test -n "$MOZ_NATIVE_FFI"; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:12833: checking for $ac_word" >&5
++echo "configure:12773: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -12873,19 +12813,19 @@ fi
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ echo $ac_n "checking for libffi > 3.0.9""... $ac_c" 1>&6
+-echo "configure:12877: checking for libffi > 3.0.9" >&5
++echo "configure:12817: checking for libffi > 3.0.9" >&5
+
+ if $PKG_CONFIG --exists "libffi > 3.0.9" ; then
+ echo "$ac_t""yes" 1>&6
+ succeeded=yes
+
+ echo $ac_n "checking MOZ_FFI_CFLAGS""... $ac_c" 1>&6
+-echo "configure:12884: checking MOZ_FFI_CFLAGS" >&5
++echo "configure:12824: checking MOZ_FFI_CFLAGS" >&5
+ MOZ_FFI_CFLAGS=`$PKG_CONFIG --cflags "libffi > 3.0.9"`
+ echo "$ac_t""$MOZ_FFI_CFLAGS" 1>&6
+
+ echo $ac_n "checking MOZ_FFI_LIBS""... $ac_c" 1>&6
+-echo "configure:12889: checking MOZ_FFI_LIBS" >&5
++echo "configure:12829: checking MOZ_FFI_LIBS" >&5
+ ## Remove evil flags like -Wl,--export-dynamic
+ MOZ_FFI_LIBS="`$PKG_CONFIG --libs \"libffi > 3.0.9\" |sed s/-Wl,--export-dynamic//g`"
+ echo "$ac_t""$MOZ_FFI_LIBS" 1>&6
+@@ -12921,7 +12861,7 @@ echo "configure:12889: checking MOZ_FFI_LIBS" >&5
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+ set dummy pkg-config; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:12925: checking for $ac_word" >&5
++echo "configure:12865: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -12965,19 +12905,19 @@ fi
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ echo $ac_n "checking for libffi >= 3.0.9""... $ac_c" 1>&6
+-echo "configure:12969: checking for libffi >= 3.0.9" >&5
++echo "configure:12909: checking for libffi >= 3.0.9" >&5
+
+ if $PKG_CONFIG --exists "libffi >= 3.0.9" ; then
+ echo "$ac_t""yes" 1>&6
+ succeeded=yes
+
+ echo $ac_n "checking MOZ_FFI_CFLAGS""... $ac_c" 1>&6
+-echo "configure:12976: checking MOZ_FFI_CFLAGS" >&5
++echo "configure:12916: checking MOZ_FFI_CFLAGS" >&5
+ MOZ_FFI_CFLAGS=`$PKG_CONFIG --cflags "libffi >= 3.0.9"`
+ echo "$ac_t""$MOZ_FFI_CFLAGS" 1>&6
+
+ echo $ac_n "checking MOZ_FFI_LIBS""... $ac_c" 1>&6
+-echo "configure:12981: checking MOZ_FFI_LIBS" >&5
++echo "configure:12921: checking MOZ_FFI_LIBS" >&5
+ ## Remove evil flags like -Wl,--export-dynamic
+ MOZ_FFI_LIBS="`$PKG_CONFIG --libs \"libffi >= 3.0.9\" |sed s/-Wl,--export-dynamic//g`"
+ echo "$ac_t""$MOZ_FFI_LIBS" 1>&6
+@@ -13112,18 +13052,18 @@ MOZ_DEBUG_DISABLE_DEFS="-DNDEBUG -DTRIMMED"
+
+ if test -n "$MOZ_DEBUG"; then
+ echo $ac_n "checking for valid debug flags""... $ac_c" 1>&6
+-echo "configure:13116: checking for valid debug flags" >&5
++echo "configure:13056: checking for valid debug flags" >&5
+ _SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $MOZ_DEBUG_FLAGS"
+ cat > conftest.$ac_ext <<EOF
+-#line 13120 "configure"
++#line 13060 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ int main() {
+ printf("Hello World\n");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:13127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:13067: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ _results=yes
+ else
+@@ -13201,18 +13141,18 @@ fi
+ if test "$COMPILE_ENVIRONMENT"; then
+ if test -n "$MOZ_OPTIMIZE"; then
+ echo $ac_n "checking for valid optimization flags""... $ac_c" 1>&6
+-echo "configure:13205: checking for valid optimization flags" >&5
++echo "configure:13145: checking for valid optimization flags" >&5
+ _SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS"
+ cat > conftest.$ac_ext <<EOF
+-#line 13209 "configure"
++#line 13149 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ int main() {
+ printf("Hello World\n");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:13216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:13156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ _results=yes
+ else
+@@ -13364,7 +13304,7 @@ EOF
+ fi
+ else
+ echo $ac_n "checking size of int *""... $ac_c" 1>&6
+-echo "configure:13368: checking size of int *" >&5
++echo "configure:13308: checking size of int *" >&5
+ if eval "test \"`echo '$''{'ac_cv_sizeof_int_p'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -13372,7 +13312,7 @@ else
+ ac_cv_sizeof_int_p=4
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 13376 "configure"
++#line 13316 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ int main()
+@@ -13383,7 +13323,7 @@ int main()
+ return(0);
+ }
+ EOF
+-if { (eval echo configure:13387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:13327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ ac_cv_sizeof_int_p=`cat conftestval`
+ else
+@@ -13687,12 +13627,12 @@ fi
+ if test -n "$MOZ_VALGRIND"; then
+ ac_safe=`echo "valgrind/valgrind.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for valgrind/valgrind.h""... $ac_c" 1>&6
+-echo "configure:13691: checking for valgrind/valgrind.h" >&5
++echo "configure:13631: checking for valgrind/valgrind.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 13696 "configure"
++#line 13636 "configure"
+ #include "confdefs.h"
+
+ #include <valgrind/valgrind.h>
+@@ -13700,7 +13640,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:13704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:13644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -13973,7 +13913,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:13977: checking for $ac_word" >&5
++echo "configure:13917: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_CCACHE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -14099,12 +14039,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
+ for ac_func in __cxa_demangle
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:14103: checking for $ac_func" >&5
++echo "configure:14043: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 14108 "configure"
++#line 14048 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -14130,7 +14070,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:14074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -14184,12 +14124,12 @@ fi
+ if test -z "$SKIP_LIBRARY_CHECKS"; then
+ ac_safe=`echo "unwind.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for unwind.h""... $ac_c" 1>&6
+-echo "configure:14188: checking for unwind.h" >&5
++echo "configure:14128: checking for unwind.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 14193 "configure"
++#line 14133 "configure"
+ #include "confdefs.h"
+
+ #include <unwind.h>
+@@ -14197,7 +14137,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+ else
+@@ -14214,12 +14154,12 @@ fi
+ for ac_func in _Unwind_Backtrace
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:14218: checking for $ac_func" >&5
++echo "configure:14158: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 14223 "configure"
++#line 14163 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -14242,7 +14182,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:14186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -14334,7 +14274,7 @@ if test -z "$SKIP_COMPILER_CHECKS"; then
+ # Compiler Options
+
+ echo $ac_n "checking for -pipe support""... $ac_c" 1>&6
+-echo "configure:14338: checking for -pipe support" >&5
++echo "configure:14278: checking for -pipe support" >&5
+ if test -n "$GNU_CC" -a -n "$GNU_CXX"; then
+ CFLAGS="$CFLAGS -pipe"
+ CXXFLAGS="$CXXFLAGS -pipe"
+@@ -14348,16 +14288,16 @@ _SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fprofile-generate -fprofile-correction"
+
+ echo $ac_n "checking whether C compiler supports -fprofile-generate""... $ac_c" 1>&6
+-echo "configure:14352: checking whether C compiler supports -fprofile-generate" >&5
++echo "configure:14292: checking whether C compiler supports -fprofile-generate" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 14354 "configure"
++#line 14294 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ return 0;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ PROFILE_GEN_CFLAGS="-fprofile-generate"
+ result="yes"
+@@ -14421,16 +14361,16 @@ if test "$_PEDANTIC"; then
+ _SAVE_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS -pedantic ${_WARNINGS_CXXFLAGS} -Wno-long-long"
+ echo $ac_n "checking whether C++ compiler has -pedantic long long bug""... $ac_c" 1>&6
+-echo "configure:14425: checking whether C++ compiler has -pedantic long long bug" >&5
++echo "configure:14365: checking whether C++ compiler has -pedantic long long bug" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 14427 "configure"
++#line 14367 "configure"
+ #include "confdefs.h"
+ $configure_static_assert_macros
+ int main() {
+ CONFIGURE_STATIC_ASSERT(sizeof(long long) == 8)
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ result="no"
+ else
+@@ -14457,12 +14397,12 @@ fi
+ _SAVE_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}"
+ echo $ac_n "checking for correct overload resolution with const and templates""... $ac_c" 1>&6
+-echo "configure:14461: checking for correct overload resolution with const and templates" >&5
++echo "configure:14401: checking for correct overload resolution with const and templates" >&5
+ if eval "test \"`echo '$''{'ac_nscap_nonconst_opeq_bug'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 14466 "configure"
++#line 14406 "configure"
+ #include "confdefs.h"
+
+ template <class T>
+@@ -14492,7 +14432,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14496: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14436: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_nscap_nonconst_opeq_bug="no"
+ else
+@@ -14518,19 +14458,19 @@ EOF
+ fi
+
+ echo $ac_n "checking for tm_zone tm_gmtoff in struct tm""... $ac_c" 1>&6
+-echo "configure:14522: checking for tm_zone tm_gmtoff in struct tm" >&5
++echo "configure:14462: checking for tm_zone tm_gmtoff in struct tm" >&5
+ if eval "test \"`echo '$''{'ac_cv_struct_tm_zone_tm_gmtoff'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 14527 "configure"
++#line 14467 "configure"
+ #include "confdefs.h"
+ #include <time.h>
+ int main() {
+ struct tm tm; tm.tm_zone = 0; tm.tm_gmtoff = 1;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_struct_tm_zone_tm_gmtoff="yes"
+ else
+@@ -14572,18 +14512,18 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+
+ echo $ac_n "checking what kind of list files are supported by the linker""... $ac_c" 1>&6
+-echo "configure:14576: checking what kind of list files are supported by the linker" >&5
++echo "configure:14516: checking what kind of list files are supported by the linker" >&5
+ if eval "test \"`echo '$''{'EXPAND_LIBS_LIST_STYLE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ echo "int main() {return 0;}" > conftest.${ac_ext}
+- if { ac_try='${CC-cc} -o conftest.${OBJ_SUFFIX} -c $CFLAGS $CPPFLAGS conftest.${ac_ext} 1>&5'; { (eval echo configure:14581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.${OBJ_SUFFIX}; then
++ if { ac_try='${CC-cc} -o conftest.${OBJ_SUFFIX} -c $CFLAGS $CPPFLAGS conftest.${ac_ext} 1>&5'; { (eval echo configure:14521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.${OBJ_SUFFIX}; then
+ echo "INPUT(conftest.${OBJ_SUFFIX})" > conftest.list
+- if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.list $LIBS 1>&5'; { (eval echo configure:14583: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest${ac_exeext}; then
++ if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.list $LIBS 1>&5'; { (eval echo configure:14523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest${ac_exeext}; then
+ EXPAND_LIBS_LIST_STYLE=linkerscript
+ else
+ echo "conftest.${OBJ_SUFFIX}" > conftest.list
+- if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS @conftest.list $LIBS 1>&5'; { (eval echo configure:14587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest${ac_exeext}; then
++ if { ac_try='${CC-cc} -o conftest${ac_exeext} $LDFLAGS @conftest.list $LIBS 1>&5'; { (eval echo configure:14527: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest${ac_exeext}; then
+ EXPAND_LIBS_LIST_STYLE=list
+ else
+ EXPAND_LIBS_LIST_STYLE=none
+@@ -14603,7 +14543,7 @@ LIBS_DESC_SUFFIX=desc
+
+ if test "$GCC_USE_GNU_LD"; then
+ echo $ac_n "checking what kind of ordering can be done with the linker""... $ac_c" 1>&6
+-echo "configure:14607: checking what kind of ordering can be done with the linker" >&5
++echo "configure:14547: checking what kind of ordering can be done with the linker" >&5
+ if eval "test \"`echo '$''{'EXPAND_LIBS_ORDER_STYLE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -14611,14 +14551,14 @@ else
+ _SAVE_LDFLAGS="$LDFLAGS"
+ LDFLAGS="${LDFLAGS} -Wl,--section-ordering-file,conftest.order"
+ cat > conftest.$ac_ext <<EOF
+-#line 14615 "configure"
++#line 14555 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:14562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ EXPAND_LIBS_ORDER_STYLE=section-ordering-file
+ else
+@@ -14630,7 +14570,7 @@ fi
+ rm -f conftest*
+ LDFLAGS="$_SAVE_LDFLAGS"
+ if test -z "$EXPAND_LIBS_ORDER_STYLE"; then
+- if { ac_try='${CC-cc} ${DSO_LDOPTS} ${LDFLAGS} -o ${DLL_PREFIX}conftest${DLL_SUFFIX} -Wl'; { (eval echo configure:14634: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
++ if { ac_try='${CC-cc} ${DSO_LDOPTS} ${LDFLAGS} -o ${DLL_PREFIX}conftest${DLL_SUFFIX} -Wl'; { (eval echo configure:14574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ EXPAND_LIBS_ORDER_STYLE=linkerscript
+ else
+ EXPAND_LIBS_ORDER_STYLE=none
+@@ -14741,7 +14681,7 @@ esac
+ if test -z "$SKIP_LIBRARY_CHECKS" -a -z "$NO_EDITLINE"; then
+ if test -n "$JS_WANT_READLINE"; then
+ echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
+-echo "configure:14745: checking for readline in -lreadline" >&5
++echo "configure:14685: checking for readline in -lreadline" >&5
+ ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -14749,7 +14689,7 @@ else
+ ac_save_LIBS="$LIBS"
+ LIBS="-lreadline $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 14753 "configure"
++#line 14693 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -14760,7 +14700,7 @@ int main() {
+ readline()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:14764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:14704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -14990,9 +14930,9 @@ EOF
+
+
+ echo $ac_n "checking for posix_fallocate""... $ac_c" 1>&6
+-echo "configure:14994: checking for posix_fallocate" >&5
++echo "configure:14934: checking for posix_fallocate" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 14996 "configure"
++#line 14936 "configure"
+ #include "confdefs.h"
+ #define _XOPEN_SOURCE 600
+ #include <fcntl.h>
+@@ -15000,7 +14940,7 @@ int main() {
+ posix_fallocate(0, 0, 0);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:15004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:14944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv___posix_fallocate=true
+ else
+@@ -15029,7 +14969,7 @@ if test "$MOZ_X11"; then
+ _SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $XCFLAGS"
+ cat > conftest.$ac_ext <<EOF
+-#line 15033 "configure"
++#line 14973 "configure"
+ #include "confdefs.h"
+
+ #include <stdio.h>
+@@ -15047,7 +14987,7 @@ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:15051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:14991: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -15162,12 +15102,12 @@ fi
+ for ac_func in setlocale
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:15166: checking for $ac_func" >&5
++echo "configure:15106: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 15171 "configure"
++#line 15111 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -15190,7 +15130,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:15194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:15134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -15220,12 +15160,12 @@ done
+ for ac_func in localeconv
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:15224: checking for $ac_func" >&5
++echo "configure:15164: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 15229 "configure"
++#line 15169 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -15248,7 +15188,7 @@ $ac_func();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:15252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:15192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-Move-JS_BYTES_PER_WORD-out-of-config.h.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-Move-JS_BYTES_PER_WORD-out-of-config.h.patch
new file mode 100644
index 000000000..6aeb2f683
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-Move-JS_BYTES_PER_WORD-out-of-config.h.patch
@@ -0,0 +1,75 @@
+From d4a15ad82292ff6d772dcc631df98754d20be31b Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Tue, 18 Mar 2014 11:46:05 -0400
+Subject: [PATCH 2/5] Move JS_BYTES_PER_WORD out of config.h
+
+Instead define it in terms of the already extant GNU C extension
+__SIZEOF_POINTER__. This avoids multiarch conflicts when 32 and 64
+bit packages of js are co-installed.
+---
+
+Upstream-status: Pending
+
+ js/src/configure.in | 9 ---------
+ js/src/js-config.h.in | 1 -
+ js/src/jstypes.h | 12 ++++++++++++
+ 3 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/js/src/configure.in b/js/src/configure.in
+index 15605b2..64c7606 100644
+--- a/js/src/configure.in
++++ b/js/src/configure.in
+@@ -2345,15 +2345,6 @@ else
+ AC_MSG_RESULT(no)
+ fi
+
+-MOZ_SIZE_OF_TYPE(JS_BYTES_PER_WORD, void*, 4 8)
+-if test "$moz_cv_size_of_JS_BYTES_PER_WORD" -eq "4"; then
+- AC_DEFINE(JS_BITS_PER_WORD_LOG2, 5)
+-elif test "$moz_cv_size_of_JS_BYTES_PER_WORD" -eq "8"; then
+- AC_DEFINE(JS_BITS_PER_WORD_LOG2, 6)
+-else
+- AC_MSG_ERROR([Unexpected JS_BYTES_PER_WORD])
+-fi
+-
+ MOZ_ALIGN_OF_TYPE(JS_ALIGN_OF_POINTER, void*, 2 4 8 16)
+ MOZ_SIZE_OF_TYPE(JS_BYTES_PER_DOUBLE, double, 6 8 10 12 14)
+
+diff --git a/js/src/js-config.h.in b/js/src/js-config.h.in
+index 6889e00..4775420 100644
+--- a/js/src/js-config.h.in
++++ b/js/src/js-config.h.in
+@@ -56,7 +56,6 @@
+ #undef JS_INT32_TYPE
+ #undef JS_INT64_TYPE
+ #undef JS_INTPTR_TYPE
+-#undef JS_BYTES_PER_WORD
+
+ /* Some mozilla code uses JS-friend APIs that depend on JS_METHODJIT being
+ correct. */
+diff --git a/js/src/jstypes.h b/js/src/jstypes.h
+index d0cf183..3e7928f 100644
+--- a/js/src/jstypes.h
++++ b/js/src/jstypes.h
+@@ -24,6 +24,18 @@
+ #include "mozilla/Util.h"
+
+ #include "js-config.h"
++#ifndef JS_BYTES_PER_WORD
++#define JS_BYTES_PER_WORD __SIZEOF_POINTER__
++#endif
++#ifndef JS_BITS_PER_WORD_LOG2
++#if JS_BYTES_PER_WORD == 8
++#define JS_BITS_PER_WORD_LOG2 6
++#elif JS_BYTES_PER_WORD == 4
++#define JS_BITS_PER_WORD_LOG2 5
++#else
++#error Unhandled JS_BYTES_PER_WORD
++#endif
++#endif
+
+ /***********************************************************************
+ ** MACROS: JS_EXTERN_API
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-Add-AArch64-support.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-Add-AArch64-support.patch
new file mode 100644
index 000000000..6e724292a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-Add-AArch64-support.patch
@@ -0,0 +1,76 @@
+From 15e710e331d36eb279852b5cd1ba37a9a6005217 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Mon, 2 Mar 2015 19:08:22 +0800
+Subject: [PATCH 3/5] Add AArch64 support
+
+---
+Upstream-status: Pending
+
+ js/src/assembler/jit/ExecutableAllocator.h | 6 ++++++
+ js/src/assembler/wtf/Platform.h | 4 ++++
+ js/src/configure.in | 4 ++++
+ mfbt/double-conversion/utils.h | 1 +
+ 4 files changed, 15 insertions(+)
+
+diff --git a/js/src/assembler/jit/ExecutableAllocator.h b/js/src/assembler/jit/ExecutableAllocator.h
+index c071c33..90764c3 100644
+--- a/js/src/assembler/jit/ExecutableAllocator.h
++++ b/js/src/assembler/jit/ExecutableAllocator.h
+@@ -382,6 +382,12 @@ public:
+ {
+ reprotectRegion(start, size, Executable);
+ }
++#elif WTF_CPU_AARCH64 && WTF_PLATFORM_LINUX
++ static void cacheFlush(void* code, size_t size)
++ {
++ intptr_t end = reinterpret_cast<intptr_t>(code) + size;
++ __builtin___clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(end));
++ }
+ #else
+ static void makeWritable(void*, size_t) {}
+ static void makeExecutable(void*, size_t) {}
+diff --git a/js/src/assembler/wtf/Platform.h b/js/src/assembler/wtf/Platform.h
+index 0c84896..e8763a7 100644
+--- a/js/src/assembler/wtf/Platform.h
++++ b/js/src/assembler/wtf/Platform.h
+@@ -325,6 +325,10 @@
+ #define WTF_THUMB_ARCH_VERSION 0
+ #endif
+
++/* CPU(AArch64) - 64-bit ARM */
++#if defined(__aarch64__)
++#define WTF_CPU_AARCH64 1
++#endif
+
+ /* WTF_CPU_ARMV5_OR_LOWER - ARM instruction set v5 or earlier */
+ /* On ARMv5 and below the natural alignment is required.
+diff --git a/js/src/configure.in b/js/src/configure.in
+index 64c7606..0673aca 100644
+--- a/js/src/configure.in
++++ b/js/src/configure.in
+@@ -1121,6 +1121,10 @@ arm*)
+ CPU_ARCH=arm
+ ;;
+
++aarch64)
++ CPU_ARCH=aarch64
++ ;;
++
+ mips|mipsel)
+ CPU_ARCH="mips"
+ ;;
+diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h
+index 0eec2d9..fe26dab 100644
+--- a/mfbt/double-conversion/utils.h
++++ b/mfbt/double-conversion/utils.h
+@@ -58,6 +58,7 @@
+ defined(__mips__) || defined(__powerpc__) || \
+ defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
+ defined(__SH4__) || defined(__alpha__) || \
++ defined(__aarch64__) || \
+ defined(_MIPS_ARCH_MIPS32R2)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-mozbug746112-no-decommit-on-large-pages.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-mozbug746112-no-decommit-on-large-pages.patch
new file mode 100644
index 000000000..8bd35d405
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-mozbug746112-no-decommit-on-large-pages.patch
@@ -0,0 +1,103 @@
+From 0128c5a9eeee0d3fc0deb9129dd20eb79338c8f4 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Mon, 2 Mar 2015 19:08:59 +0800
+Subject: [PATCH 4/5] mozbug746112-no-decommit-on-large-pages
+
+---
+Upstream-status: Pending
+
+ js/src/gc/Heap.h | 15 ++++++++++-----
+ js/src/jsgc.cpp | 15 ++++++++++++---
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+diff --git a/js/src/gc/Heap.h b/js/src/gc/Heap.h
+index b8f8c78..1cfd269 100644
+--- a/js/src/gc/Heap.h
++++ b/js/src/gc/Heap.h
+@@ -103,26 +103,31 @@ struct Cell
+ };
+
+ /*
+- * Page size is 4096 by default, except for SPARC, where it is 8192.
++ * Page size must be static to support our arena pointer optimizations, so we
++ * are forced to support each platform with non-4096 pages as a special case.
++ * Note: The freelist supports a maximum arena shift of 15.
+ * Note: Do not use JS_CPU_SPARC here, this header is used outside JS.
+ * Bug 692267: Move page size definition to gc/Memory.h and include it
+ * directly once jsgc.h is no longer an installed header.
+ */
+ #if defined(SOLARIS) && (defined(__sparc) || defined(__sparcv9))
+ const size_t PageShift = 13;
++const size_t ArenaShift = PageShift;
++#elif defined(__powerpc__)
++const size_t PageShift = 16;
++const size_t ArenaShift = 12;
+ #else
+ const size_t PageShift = 12;
++const size_t ArenaShift = PageShift;
+ #endif
+ const size_t PageSize = size_t(1) << PageShift;
++const size_t ArenaSize = size_t(1) << ArenaShift;
++const size_t ArenaMask = ArenaSize - 1;
+
+ const size_t ChunkShift = 20;
+ const size_t ChunkSize = size_t(1) << ChunkShift;
+ const size_t ChunkMask = ChunkSize - 1;
+
+-const size_t ArenaShift = PageShift;
+-const size_t ArenaSize = PageSize;
+-const size_t ArenaMask = ArenaSize - 1;
+-
+ /*
+ * This is the maximum number of arenas we allow in the FreeCommitted state
+ * before we trigger a GC_SHRINK to release free arenas to the OS.
+diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp
+index b3caf05..a258d2d 100644
+--- a/js/src/jsgc.cpp
++++ b/js/src/jsgc.cpp
+@@ -251,6 +251,13 @@ static const int BackgroundPhaseLength[] = {
+ sizeof(BackgroundPhaseStrings) / sizeof(AllocKind)
+ };
+
++/* Unused memory decommiting requires the arena size match the page size. */
++static bool
++DecommitEnabled()
++{
++ return PageSize == ArenaSize;
++}
++
+ #ifdef DEBUG
+ void
+ ArenaHeader::checkSynchronizedWithFreeList() const
+@@ -742,7 +749,8 @@ Chunk::fetchNextDecommittedArena()
+ decommittedArenas.unset(offset);
+
+ Arena *arena = &arenas[offset];
+- MarkPagesInUse(arena, ArenaSize);
++ if (DecommitEnabled())
++ MarkPagesInUse(arena, ArenaSize);
+ arena->aheader.setAsNotAllocated();
+
+ return &arena->aheader;
+@@ -2731,7 +2739,7 @@ DecommitArenasFromAvailableList(JSRuntime *rt, Chunk **availableListHeadp)
+ chunk->removeFromAvailableList();
+
+ size_t arenaIndex = Chunk::arenaIndex(aheader->arenaAddress());
+- bool ok;
++ bool ok = true;
+ {
+ /*
+ * If the main thread waits for the decommit to finish, skip
+@@ -2741,7 +2749,8 @@ DecommitArenasFromAvailableList(JSRuntime *rt, Chunk **availableListHeadp)
+ Maybe<AutoUnlockGC> maybeUnlock;
+ if (!rt->isHeapBusy())
+ maybeUnlock.construct(rt);
+- ok = MarkPagesUnused(aheader->getArena(), ArenaSize);
++ if (DecommitEnabled())
++ ok = MarkPagesUnused(aheader->getArena(), ArenaSize);
+ }
+
+ if (ok) {
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-aarch64-64k-page.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-aarch64-64k-page.patch
new file mode 100644
index 000000000..bc99ecc50
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-aarch64-64k-page.patch
@@ -0,0 +1,44 @@
+From 9c42920c2b635a399bd1f93833efdeb1696f17ee Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Mon, 2 Mar 2015 19:09:57 +0800
+Subject: [PATCH 5/5] aarch64-64k-page
+
+---
+Upstream-status: Pending
+
+ js/src/gc/Heap.h | 2 +-
+ js/src/gc/Memory.cpp | 3 +++
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/js/src/gc/Heap.h b/js/src/gc/Heap.h
+index 1cfd269..f4dbcda 100644
+--- a/js/src/gc/Heap.h
++++ b/js/src/gc/Heap.h
+@@ -113,7 +113,7 @@ struct Cell
+ #if defined(SOLARIS) && (defined(__sparc) || defined(__sparcv9))
+ const size_t PageShift = 13;
+ const size_t ArenaShift = PageShift;
+-#elif defined(__powerpc__)
++#elif defined(__powerpc__) || defined(__aarch64__)
+ const size_t PageShift = 16;
+ const size_t ArenaShift = 12;
+ #else
+diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp
+index 5b386a2..e5ad018 100644
+--- a/js/src/gc/Memory.cpp
++++ b/js/src/gc/Memory.cpp
+@@ -302,8 +302,11 @@ GetPageFaultCount()
+ void
+ InitMemorySubsystem()
+ {
++ /* aarch64 may have 64KB or 4KB pages */
++#ifndef __aarch64__
+ if (size_t(sysconf(_SC_PAGESIZE)) != PageSize)
+ MOZ_CRASH();
++#endif
+ }
+
+ void *
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch
new file mode 100644
index 000000000..6432e1fb7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch
@@ -0,0 +1,46 @@
+From a452138a1dd274bfad381a701729783360dc86fb Mon Sep 17 00:00:00 2001
+From: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
+Date: Tue, 5 Jan 2016 22:04:17 +0100
+Subject: [PATCH] fix cross compilation on i586 targets
+
+Remove offending -Wl,-rpath-link that may cause host libraries to be picked
+during linking. The patch applies a fix to configure.in. So as not to
+regenerate configure, similar fix is applied there.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
+---
+ js/src/configure | 2 +-
+ js/src/configure.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/js/src/configure b/js/src/configure
+index d019b0fdba44233596541de94307010d85a8e32e..5aa40f757a3dbb7d6887175046f44212c15c2eac 100755
+--- a/js/src/configure
++++ b/js/src/configure
+@@ -5555,7 +5555,7 @@ TARGET_MD_ARCH=unix
+ DIRENT_INO=d_ino
+ MOZ_USER_DIR=".mozilla"
+
+-MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'
++MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin'
+
+ MOZ_COMPONENT_NSPR_LIBS='-L$(LIBXUL_DIST)/bin $(NSPR_LIBS)'
+
+diff --git a/js/src/configure.in b/js/src/configure.in
+index 0673aca12f6d83035549ade2a4a83906bf91f0f0..39b22724f9535ac1a6dba04658c91e4ef667fc47 100644
+--- a/js/src/configure.in
++++ b/js/src/configure.in
+@@ -919,7 +919,7 @@ TARGET_MD_ARCH=unix
+ DIRENT_INO=d_ino
+ MOZ_USER_DIR=".mozilla"
+
+-MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'
++MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin'
+
+ MOZ_COMPONENT_NSPR_LIBS='-L$(LIBXUL_DIST)/bin $(NSPR_LIBS)'
+
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/Manually_mmap_heap_memory_esr17.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/Manually_mmap_heap_memory_esr17.patch
new file mode 100644
index 000000000..83f454319
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/Manually_mmap_heap_memory_esr17.patch
@@ -0,0 +1,112 @@
+From 1d1fa95c8ff7697e46343385a79a8f7e5c514a87 Mon Sep 17 00:00:00 2001
+From: Zheng Xu <zheng.xu@linaro.org>
+Date: Fri, 2 Sep 2016 17:40:05 +0800
+Subject: [PATCH] Bug 1143022 - Manually mmap on arm64 to ensure high 17 bits
+ are clear. r=ehoogeveen
+
+There might be 48-bit VA on arm64 depending on kernel configuration.
+Manually mmap heap memory to align with the assumption made by JS engine.
+
+Change-Id: Ic5d2b2fe4b758b3c87cc0688348af7e71a991146
+
+Upstream-status: Backport
+
+---
+ js/src/gc/Memory.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 71 insertions(+), 2 deletions(-)
+
+diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp
+index e5ad018..4149adf 100644
+--- a/js/src/gc/Memory.cpp
++++ b/js/src/gc/Memory.cpp
+@@ -309,6 +309,75 @@ InitMemorySubsystem()
+ #endif
+ }
+
++static inline void *
++MapMemory(size_t length, int prot, int flags, int fd, off_t offset)
++{
++#if defined(__ia64__)
++ /*
++ * The JS engine assumes that all allocated pointers have their high 17 bits clear,
++ * which ia64's mmap doesn't support directly. However, we can emulate it by passing
++ * mmap an "addr" parameter with those bits clear. The mmap will return that address,
++ * or the nearest available memory above that address, providing a near-guarantee
++ * that those bits are clear. If they are not, we return NULL below to indicate
++ * out-of-memory.
++ *
++ * The addr is chosen as 0x0000070000000000, which still allows about 120TB of virtual
++ * address space.
++ *
++ * See Bug 589735 for more information.
++ */
++ void *region = mmap((void*)0x0000070000000000, length, prot, flags, fd, offset);
++ if (region == MAP_FAILED)
++ return MAP_FAILED;
++ /*
++ * If the allocated memory doesn't have its upper 17 bits clear, consider it
++ * as out of memory.
++ */
++ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) {
++ JS_ALWAYS_TRUE(0 == munmap(region, length));
++ return MAP_FAILED;
++ }
++ return region;
++#elif defined(__aarch64__)
++ /*
++ * There might be similar virtual address issue on arm64 which depends on
++ * hardware and kernel configurations. But the work around is slightly
++ * different due to the different mmap behavior.
++ *
++ * TODO: Merge with the above code block if this implementation works for
++ * ia64 and sparc64.
++ */
++ const uintptr_t start = UINT64_C(0x0000070000000000);
++ const uintptr_t end = UINT64_C(0x0000800000000000);
++ const uintptr_t step = ChunkSize;
++ /*
++ * Optimization options if there are too many retries in practice:
++ * 1. Examine /proc/self/maps to find an available address. This file is
++ * not always available, however. In addition, even if we examine
++ * /proc/self/maps, we may still need to retry several times due to
++ * racing with other threads.
++ * 2. Use a global/static variable with lock to track the addresses we have
++ * allocated or tried.
++ */
++ uintptr_t hint;
++ void* region = MAP_FAILED;
++ for (hint = start; region == MAP_FAILED && hint + length <= end; hint += step) {
++ region = mmap((void*)hint, length, prot, flags, fd, offset);
++ if (region != MAP_FAILED) {
++ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) {
++ if (munmap(region, length)) {
++ MOZ_ASSERT(errno == ENOMEM);
++ }
++ region = MAP_FAILED;
++ }
++ }
++ }
++ return region == MAP_FAILED ? NULL : region;
++#else
++ return mmap(NULL, length, prot, flags, fd, offset);
++#endif
++}
++
+ void *
+ MapAlignedPages(size_t size, size_t alignment)
+ {
+@@ -322,12 +391,12 @@ MapAlignedPages(size_t size, size_t alignment)
+
+ /* Special case: If we want page alignment, no further work is needed. */
+ if (alignment == PageSize) {
+- return mmap(NULL, size, prot, flags, -1, 0);
++ return MapMemory(size, prot, flags, -1, 0);
+ }
+
+ /* Overallocate and unmap the region's edges. */
+ size_t reqSize = Min(size + 2 * alignment, 2 * size);
+- void *region = mmap(NULL, reqSize, prot, flags, -1, 0);
++ void *region = MapMemory(reqSize, prot, flags, -1, 0);
+ if (region == MAP_FAILED)
+ return NULL;
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix-the-compile-error-of-powerpc64.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix-the-compile-error-of-powerpc64.patch
new file mode 100644
index 000000000..43c459042
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix-the-compile-error-of-powerpc64.patch
@@ -0,0 +1,18 @@
+fix the compile error of powerpc64
+
+Upstream-status: Accepted
+
+ fix the following error
+ |error: 'jsuword' does not name a type
+
+
+--- a/js/src/jsval.hold 2015-04-24 01:15:06.692970731 -0500
++++ b/js/src/jsval.h 2015-04-24 01:15:41.792969478 -0500
+@@ -304,7 +304,6 @@
+ int32_t i32;
+ uint32_t u32;
+ JSWhyMagic why;
+- jsuword word;
+ } payload;
+ } s;
+ double asDouble;
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix_milestone_compile_issue.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix_milestone_compile_issue.patch
new file mode 100644
index 000000000..abde01bcd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fix_milestone_compile_issue.patch
@@ -0,0 +1,20 @@
+fix the compile error do to perl update
+
+Upstream-status: Inappropriate
+
+
+Signed-of-by: Armin Kuster <akuster808@gmail.com>
+
+Index: src/config/milestone.pl
+===================================================================
+--- src.orig/config/milestone.pl
++++ src/config/milestone.pl
+@@ -55,7 +55,7 @@ $MILESTONE_FILE = "$TOPSRCDIR/config/mi
+ #
+ my $milestone = Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
+
+-if (defined(@TEMPLATE_FILE)) {
++if (@TEMPLATE_FILE) {
+ my $TFILE;
+
+ foreach $TFILE (@TEMPLATE_FILE) {
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_17.0.0.bb b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_17.0.0.bb
new file mode 100644
index 000000000..49b7f156e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_17.0.0.bb
@@ -0,0 +1,82 @@
+SUMMARY = "SpiderMonkey is Mozilla's JavaScript engine written in C/C++"
+HOMEPAGE = "http://www.mozilla.org/js/"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://../../LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
+
+SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/js/${BPN}${PV}.tar.gz \
+ file://0001-mozjs17.0.0-fix-the-compile-bug-of-powerpc.patch \
+ file://0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch \
+ file://0002-Move-JS_BYTES_PER_WORD-out-of-config.h.patch;patchdir=../../ \
+ file://0003-Add-AArch64-support.patch;patchdir=../../ \
+ file://0004-mozbug746112-no-decommit-on-large-pages.patch;patchdir=../../ \
+ file://0005-aarch64-64k-page.patch;patchdir=../../ \
+ file://0001-regenerate-configure.patch;patchdir=../../ \
+ file://fix-the-compile-error-of-powerpc64.patch;patchdir=../../ \
+ file://fix_milestone_compile_issue.patch \
+ file://0010-fix-cross-compilation-on-i586-targets.patch;patchdir=../../ \
+ file://Manually_mmap_heap_memory_esr17.patch;patchdir=../../ \
+ file://0001-compare-the-first-character-of-string-to-be-null-or-.patch;patchdir=../../ \
+ "
+
+SRC_URI[md5sum] = "20b6f8f1140ef6e47daa3b16965c9202"
+SRC_URI[sha256sum] = "321e964fe9386785d3bf80870640f2fa1c683e32fe988eeb201b04471c172fba"
+
+S = "${WORKDIR}/${BPN}${PV}/js/src"
+
+inherit autotools pkgconfig perlnative pythonnative
+
+DEPENDS += "nspr zlib"
+
+# Host specific flags need to be defined, otherwise target flags will be passed to the host
+export HOST_CFLAGS = "${BUILD_CFLAGS}"
+export HOST_CXXFLAGS = "${BUILD_CXXFLAGS}"
+export HOST_LDFLAGS = "${BUILD_LDFLAGS}"
+
+# nspr's package-config is ignored so set libs manually
+EXTRA_OECONF = " \
+ --target=${TARGET_SYS} \
+ --host=${BUILD_SYS} \
+ --build=${BUILD_SYS} \
+ --prefix=${prefix} \
+ --libdir=${libdir} \
+ --with-nspr-libs='-lplds4 -lplc4 -lnspr4' \
+ --enable-threadsafe \
+ --disable-static \
+"
+EXTRA_OECONF_append_armv4 = " \
+ --disable-methodjit \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR},--without-x,virtual/libx11"
+
+# mozjs requires autoreconf 2.13
+do_configure() {
+ export HOST_CFLAGS="${BUILD_CFLAGS}"
+ export HOST_CXXFLAGS="${BUILD_CPPFLAGS}"
+ export HOST_LDFLAGS="${BUILD_LDFLAGS}"
+ ( cd ${S}
+ gnu-configize --force
+ mv config.guess config.sub build/autoconf )
+ ${S}/configure ${EXTRA_OECONF}
+}
+
+# patch.bbclass will try to apply the patches already present and fail, so clean them out
+do_unpack() {
+ tar -xvf ${DL_DIR}/mozjs17.0.0.tar.gz -C ${WORKDIR}/
+ rm -rf ${WORKDIR}/${BPN}${PV}/patches
+}
+
+
+PACKAGES =+ "lib${BPN}"
+FILES_lib${BPN} += "${libdir}/lib*.so"
+FILES_${PN}-dev += "${bindir}/js17-config"
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:2172: Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r2,r1,LSR#20'
+#| {standard input}:2173: Error: unshifted register required -- `bic r2,r2,#(1<<11)'
+#| {standard input}:2174: Error: unshifted register required -- `orr r1,r1,#(1<<20)'
+#| {standard input}:2176: Error: instruction not supported in Thumb16 mode -- `subs r2,r2,#0x300'
+#| {standard input}:2178: Error: instruction not supported in Thumb16 mode -- `subs r5,r2,#52'
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb
new file mode 100644
index 000000000..930c04123
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb
@@ -0,0 +1,58 @@
+SUMMARY = "Linux Library for low speed I/O Communication"
+HOMEPAGE = "https://github.com/intel-iot-devkit/mraa"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4b92a3b497d7943042a6db40c088c3f2"
+
+SRCREV = "fbb7d9232067eac3f4508a37a8f7ea0c4fcebacb"
+PV = "1.9.0-git${SRCPV}"
+
+SRC_URI = "git://github.com/intel-iot-devkit/${BPN}.git;protocol=http \
+ "
+
+S = "${WORKDIR}/git"
+
+# CMakeLists.txt checks the architecture, only x86 and ARM supported for now
+COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64.*|arm.*)-linux"
+
+inherit cmake distutils3-base
+
+DEPENDS += "json-c"
+
+EXTRA_OECMAKE_append = " -DINSTALLTOOLS:BOOL=ON -DFIRMATA=ON -DCMAKE_SKIP_RPATH=ON"
+
+# Prepend mraa-utils to make sure bindir ends up in there
+PACKAGES =+ "${PN}-utils"
+
+FILES_${PN}-doc += "${datadir}/mraa/examples/"
+
+FILES_${PN}-utils = "${bindir}/"
+
+# override this in local.conf to get needed bindings.
+# BINDINGS_pn-mraa="python"
+# will result in only the python bindings being built/packaged.
+# Note: 'nodejs' is disabled by default because the bindings
+# generation currently fails with nodejs (>v7.x).
+BINDINGS ??= "python"
+
+# nodejs isn't available for armv4/armv5 architectures
+BINDINGS_armv4 ??= "python"
+BINDINGS_armv5 ??= "python"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGES', 'node-${PN}', 'nodejs', '', d)} \
+ ${@bb.utils.contains('PACKAGES', '${PYTHON_PN}-${PN}', 'python', '', d)}"
+
+PACKAGECONFIG[python] = "-DBUILDSWIGPYTHON=ON, -DBUILDSWIGPYTHON=OFF, swig-native ${PYTHON_PN},"
+PACKAGECONFIG[nodejs] = "-DBUILDSWIGNODE=ON, -DBUILDSWIGNODE=OFF, swig-native nodejs-native,"
+PACKAGECONFIG[ft4222] = "-DUSBPLAT=ON -DFTDI4222=ON, -DUSBPLAT=OFF -DFTDI4222=OFF,, libft4222"
+
+FILES_${PYTHON_PN}-${PN} = "${PYTHON_SITEPACKAGES_DIR}/"
+RDEPENDS_${PYTHON_PN}-${PN} += "${PYTHON_PN}"
+
+FILES_node-${PN} = "${prefix}/lib/node_modules/"
+RDEPENDS_node-${PN} += "nodejs"
+
+### Include desired language bindings ###
+PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'nodejs', 'node-${PN}', '', d)}"
+PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'python', '${PYTHON_PN}-${PN}', '', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/nana/nana/change-mandir-to-DESTDIR.patch b/meta-openembedded/meta-oe/recipes-extended/nana/nana/change-mandir-to-DESTDIR.patch
new file mode 100644
index 000000000..653a7e44c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/nana/nana/change-mandir-to-DESTDIR.patch
@@ -0,0 +1,40 @@
+From 7b04c4873c0a4510bdaf9145bf01ca34b3549fdb Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Thu, 4 Dec 2014 03:50:19 +0900
+Subject: [PATCH 1/2] change mandir to DESTDIR
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ man/Makefile.am | 2 +-
+ man/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/man/Makefile.am b/man/Makefile.am
+index 80d24d8..944bc57 100644
+--- a/man/Makefile.am
++++ b/man/Makefile.am
+@@ -16,5 +16,5 @@ install-data-local:
+ @sect=1; \
+ inst=`echo "nana" | sed '$(transform)'`.1; \
+ echo installing nana.1 as $(mandir)/man$$sect/$$inst; \
+- $(INSTALL_DATA) $(srcdir)/nana.1 $(mandir)/man$$sect/$$inst
++ $(INSTALL_DATA) $(srcdir)/nana.1 $(DESTDIR)$(mandir)/man$$sect/$$inst
+
+diff --git a/man/Makefile.in b/man/Makefile.in
+index 6008b20..64bb84c 100644
+--- a/man/Makefile.in
++++ b/man/Makefile.in
+@@ -274,7 +274,7 @@ install-data-local:
+ @sect=1; \
+ inst=`echo "nana" | sed '$(transform)'`.1; \
+ echo installing nana.1 as $(mandir)/man$$sect/$$inst; \
+- $(INSTALL_DATA) $(srcdir)/nana.1 $(mandir)/man$$sect/$$inst
++ $(INSTALL_DATA) $(srcdir)/nana.1 $(DESTDIR)$(mandir)/man$$sect/$$inst
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/nana/nana/modify-acinclude.m4-and-configure.in.patch b/meta-openembedded/meta-oe/recipes-extended/nana/nana/modify-acinclude.m4-and-configure.in.patch
new file mode 100644
index 000000000..aeb25466c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/nana/nana/modify-acinclude.m4-and-configure.in.patch
@@ -0,0 +1,137 @@
+From 679e33bfe74d713240fdd930602b993b937dce39 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 23 Jan 2015 03:30:47 +0900
+Subject: [PATCH] modify acinclude.m4 and configure.in
+
+this patch is from Debian to fix build errors.
+"acinclude.m4:34: error: automatic de-ANSI-fication
+support has been removed"
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ acinclude.m4 | 79 ------------------------------------------------------------
+ configure.in | 12 +++++++++
+ 2 files changed, 12 insertions(+), 79 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index e9e5500..d467fb5 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -30,82 +30,3 @@ AC_SUBST($1)
+ ## ------------------------------- ##
+ ## Check for function prototypes. ##
+ ## ------------------------------- ##
+-
+-AC_DEFUN(fp_C_PROTOTYPES,
+-[AC_REQUIRE([AM_PROG_CC_STDC])
+-AC_MSG_CHECKING([for function prototypes])
+-if test "$ac_cv_prog_cc_stdc" != no; then
+- AC_MSG_RESULT(yes)
+- AC_DEFINE(PROTOTYPES)
+- U= ANSI2KNR=
+-else
+- AC_MSG_RESULT(no)
+- U=_ ANSI2KNR=./ansi2knr
+-fi
+-AC_SUBST(U)dnl
+-AC_SUBST(ANSI2KNR)dnl
+-])
+-
+-## ----------------------------------------- ##
+-## ANSIfy the C compiler whenever possible. ##
+-## ----------------------------------------- ##
+-
+-# @defmac AC_PROG_CC_STDC
+-# @maindex PROG_CC_STDC
+-# @ovindex CC
+-# If the C compiler in not in ANSI C mode by default, try to add an option
+-# to output variable @code{CC} to make it so. This macro tries various
+-# options that select ANSI C on some system or another. It considers the
+-# compiler to be in ANSI C mode if it defines @code{__STDC__} to 1 and
+-# handles function prototypes correctly.
+-#
+-# If you use this macro, you should check after calling it whether the C
+-# compiler has been set to accept ANSI C; if not, the shell variable
+-# @code{ac_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source
+-# code in ANSI C, you can make an un-ANSIfied copy of it by using the
+-# program @code{ansi2knr}, which comes with Ghostscript.
+-# @end defmac
+-
+-AC_DEFUN(fp_PROG_CC_STDC,
+-[AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
+-AC_CACHE_VAL(ac_cv_prog_cc_stdc,
+-[ac_cv_prog_cc_stdc=no
+-ac_save_CFLAGS="$CFLAGS"
+-# Don't try gcc -ansi; that turns off useful extensions and
+-# breaks some systems' header files.
+-# AIX -qlanglvl=ansi
+-# Ultrix and OSF/1 -std1
+-# HP-UX -Aa -D_HPUX_SOURCE
+-# SVR4 -Xc
+-for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" -Xc
+-do
+- CFLAGS="$ac_save_CFLAGS $ac_arg"
+- AC_TRY_COMPILE(
+-[#if !defined(__STDC__) || __STDC__ != 1
+-choke me
+-#endif
+-], [int test (int i, double x);
+-struct s1 {int (*f) (int a);};
+-struct s2 {int (*f) (double a);};],
+-[ac_cv_prog_cc_stdc="$ac_arg"; break])
+-done
+-CFLAGS="$ac_save_CFLAGS"
+-])
+-AC_MSG_RESULT($ac_cv_prog_cc_stdc)
+-case "x$ac_cv_prog_cc_stdc" in
+- x|xno) ;;
+- *) CC="$CC $ac_cv_prog_cc_stdc" ;;
+-esac
+-])
+-
+-## --------------------------------------------------------- ##
+-## Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ##
+-## substitution. ##
+-## --------------------------------------------------------- ##
+-
+-AC_DEFUN(fp_PROG_INSTALL,
+-[AC_PROG_INSTALL
+-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755'
+-AC_SUBST(INSTALL_SCRIPT)dnl
+-])
+-
+diff --git a/configure.in b/configure.in
+index 6b25ed5..a6a7f5b 100644
+--- a/configure.in
++++ b/configure.in
+@@ -103,6 +103,12 @@ nana_DEFINE(DI_MAKE_VALID_BREAKPOINT,(exprn),
+ sparc-*-*|i?86-*-*)
+ DI_MAKE_VALID_BREAKPOINT='asm("nop")'
+ ;;
++ arm*-*-*|frv-*-*|mips*-*-*)
++ DI_MAKE_VALID_BREAKPOINT='asm("nop")'
++ ;;
++ sh*-*-*)
++ DI_MAKE_VALID_BREAKPOINT='asm("nop\n\tnop\n\t")'
++ ;;
+ esac
+ ])
+
+@@ -113,6 +119,12 @@ nana_DEFINE(DL_MAKE_VALID_BREAKPOINT,(),
+ sparc-*-*|i?86-*-*)
+ DL_MAKE_VALID_BREAKPOINT='asm("nop")'
+ ;;
++ arm*-*-*|frv-*-*|mips*-*-*)
++ DL_MAKE_VALID_BREAKPOINT='asm("nop")'
++ ;;
++ sh*-*-*)
++ DL_MAKE_VALID_BREAKPOINT='asm("nop\n\tnop\n\t")'
++ ;;
+ esac
+ ])
+
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb b/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb
new file mode 100644
index 000000000..19a90ff07
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Support for assertion checking and logging in GNU C/C++"
+DESCRIPTION = "GNU Nana is a free library providing improved support for assertion\
+checking (as in assert.h) and logging (printf style debugging) in \
+GNU C and C++."
+SECTION = "Development/Languages/C and C++"
+
+SRC_URI = "http://download.savannah.gnu.org/releases/${PN}/${BP}.tar.gz \
+ file://change-mandir-to-DESTDIR.patch \
+ file://modify-acinclude.m4-and-configure.in.patch \
+"
+SRC_URI[md5sum] = "66c88aa0ad095b2e67673773135475f1"
+SRC_URI[sha256sum] = "fd1819ffea94b209513959447e4802afe2719600e7d161cd78b265a42812affa"
+
+LICENSE = "BSD-2-Clause"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=16aa57f3b7fdda870cee597275bd5d11"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OEMAKE = "DESTDIR=${D}"
+
+do_configure_prepend_class-nativesdk() {
+ sed -i -e 's:@CPP@:\$\{CXX\} \$\{CXXFLAGS\} \-E:g' ${S}/src/nana.in
+ sed -i -e 's:@CC@:\$\{CC\} \$\{CFLAGS\} \-E:g' ${S}/src/nana-clg.in
+ sed -i -e 's:@CXX@::g' ${S}/src/nana-c++lg.in
+ sed -i -e 's:@GDB@:\$\{GDB\}:g' ${S}/src/nana-run.in
+}
+
+do_install_prepend() {
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man3
+ install -d ${D}${datadir}/info
+}
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat/0001-nicstat.c-Do-not-define-uint64_t-and-uint32_t.patch b/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat/0001-nicstat.c-Do-not-define-uint64_t-and-uint32_t.patch
new file mode 100644
index 000000000..a208f97eb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat/0001-nicstat.c-Do-not-define-uint64_t-and-uint32_t.patch
@@ -0,0 +1,37 @@
+From 52590fbf735cef3fec85a042458aa89a02c52b57 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 11:33:12 -0700
+Subject: [PATCH] nicstat.c: Do not define uint64_t and uint32_t
+
+Use the defines from platform
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ nicstat.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/nicstat.c b/nicstat.c
+index 83ad557..2a6e0c1 100644
+--- a/nicstat.c
++++ b/nicstat.c
+@@ -32,6 +32,7 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <stdint.h>
+ #include <unistd.h>
+ #include <string.h>
+ #include <ctype.h>
+@@ -88,8 +89,6 @@
+ #define PROC_NET_BUFSIZ (128 * 1024)
+ #define PROC_UPTIME "/proc/uptime"
+ /* Needs to be fixed if not built under ILP32 */
+-typedef unsigned long long uint64_t;
+-typedef unsigned int uint32_t;
+ extern char *optarg;
+ extern int optind, opterr, optopt;
+ #endif /* OS_LINUX */
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb b/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb
new file mode 100644
index 000000000..3875f0f60
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "nicstat is a Solaris and Linux command-line that prints out network \
+statistics for all network interface cards (NICs), including packets, kilobytes \
+per second, average packet sizes and more."
+HOMEPAGE = "http://nicstat.sourceforge.net"
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b4a94da2a1f918b217ef5156634fc9e0"
+
+SRC_URI = "http://softlayer-sng.dl.sourceforge.net/project/${BPN}/${BP}.tar.gz \
+ file://0001-nicstat.c-Do-not-define-uint64_t-and-uint32_t.patch \
+ "
+SRC_URI[md5sum] = "9a0b87bbc670c1e738e5b40c7afd184d"
+SRC_URI[sha256sum] = "c4cc33f8838f4523f27c3d7584eedbe59f4c587f0821612f5ac2201adc18b367"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -o nicstat nicstat.c
+}
+do_install() {
+ install -d ${D}/${bindir}/
+ install -d ${D}/${mandir}/
+ install -m 0755 ${S}/nicstat ${D}${bindir}/
+ install -m 0644 ${S}/nicstat.1 ${D}/${mandir}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb b/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb
new file mode 100644
index 000000000..13e67cba1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Set of CLI tools for Openlmi providers"
+DESCRIPTION = "openlmi-tools is a set of command line tools for Openlmi providers."
+HOMEPAGE = "http://www.openlmi.org/"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
+SECTION = "System/Management"
+
+inherit setuptools
+
+DEPENDS = "python-native pywbem-native python-m2crypto pywbem"
+
+SRC_URI = "http://fedorahosted.org/released/${BPN}/${BP}.tar.gz \
+ "
+SRC_URI[md5sum] = "e156246cb7b49753db82f4ddf7f03e50"
+SRC_URI[sha256sum] = "292b8f5f2250655a4add8183c529b73358bc980bd4f23cfa484a940953fce9e4"
+
+do_compile_prepend() {
+ cd cli
+ sed 's/@@VERSION@@/$(VERSION)/g' setup.py.skel >setup.py
+}
+do_install_prepend() {
+ cd cli
+}
+
+python() {
+ if 'meta-python' not in d.getVar('BBFILE_COLLECTIONS').split():
+ raise bb.parse.SkipRecipe('Requires meta-python to be present.')
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/0001-lock.c-Define-PTHREAD_MUTEX_RECURSIVE_NP-if-undefine.patch b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/0001-lock.c-Define-PTHREAD_MUTEX_RECURSIVE_NP-if-undefine.patch
new file mode 100644
index 000000000..7823fde7a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/0001-lock.c-Define-PTHREAD_MUTEX_RECURSIVE_NP-if-undefine.patch
@@ -0,0 +1,29 @@
+From e05bad73f5fe4be1626560d92465893a5fc931e5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2017 00:01:19 -0700
+Subject: [PATCH] lock.c: Define PTHREAD_MUTEX_RECURSIVE_NP if undefined
+
+Check for PTHREAD_MUTEX_RECURSIVE_NP being defined instead of
+checking for OS
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/lib/u/lock.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lib/u/lock.c b/src/lib/u/lock.c
+index 025eea4c..b31c77b5 100644
+--- a/src/lib/u/lock.c
++++ b/src/lib/u/lock.c
+@@ -50,7 +50,7 @@
+ extern int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
+ #endif
+
+-#if defined (__SVR4) && defined (__sun)
++#ifndef PTHREAD_MUTEX_RECURSIVE_NP
+ #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
+ #endif
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/libssl-is-required-if-eventint-supported.patch b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/libssl-is-required-if-eventint-supported.patch
new file mode 100644
index 000000000..bd540e37c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/libssl-is-required-if-eventint-supported.patch
@@ -0,0 +1,17 @@
+libssl is required by wsman_client_transport if ENABLE_EVENTING_SUPPORT enabled.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+diff -Nurp openwsman-2.4.12.orig/src/lib/CMakeLists.txt openwsman-2.4.12/src/lib/CMakeLists.txt
+--- openwsman-2.4.12.orig/src/lib/CMakeLists.txt 2014-10-28 23:04:47.000000000 +0800
++++ openwsman-2.4.12/src/lib/CMakeLists.txt 2014-12-31 11:09:20.340428523 +0800
+@@ -56,6 +56,9 @@ TARGET_LINK_LIBRARIES( ${WSMAN_CLIENT_TR
+ SET_TARGET_PROPERTIES( ${WSMAN_CLIENT_TRANSPORT_PKG} PROPERTIES VERSION 1.0.0 SOVERSION 1)
+ INSTALL(TARGETS ${WSMAN_CLIENT_TRANSPORT_PKG} DESTINATION ${LIB_INSTALL_DIR})
+
++IF( ENABLE_EVENTING_SUPPORT )
++TARGET_LINK_LIBRARIES( ${WSMAN_CLIENT_TRANSPORT_PKG} ${OPENSSL_LIBRARIES} )
++ENDIF( ENABLE_EVENTING_SUPPORT )
+
+ ############### wsman_client ###############
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/openwsmand.service b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/openwsmand.service
new file mode 100644
index 000000000..154f3cdaf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman/openwsmand.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Openwsman WS-Management Service
+After=syslog.target
+
+[Service]
+Type=forking
+ExecStart=@SBINDIR@/openwsmand
+ExecStartPre=@SYSCONFDIR@/openwsman/owsmangencert.sh
+PIDFile=@LOCALSTATEDIR@/run/wsmand.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman_2.6.3.bb b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman_2.6.3.bb
new file mode 100644
index 000000000..f618f02b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/openwsman/openwsman_2.6.3.bb
@@ -0,0 +1,70 @@
+SUMMARY = "Opensource Implementation of WS-Management"
+DESCRIPTION = "Openwsman is a project intended to provide an open-source \
+implementation of the Web Services Management specipication \
+(WS-Management) and to expose system management information on the \
+Linux operating system using the WS-Management protocol. WS-Management \
+is based on a suite of web services specifications and usage \
+requirements that exposes a set of operations focused on and covers \
+all system management aspects. \
+Openwsman Server and service libraries"
+HOMEPAGE = "http://www.openwsman.org/"
+SECTION = "Applications/System"
+
+DEPENDS = "curl libxml2 openssl libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+SRCREV = "feb7ec9b004fcaea0dbe65ce8a1a79cc29dd994c"
+PV = "2.6.3"
+
+SRC_URI = "git://github.com/Openwsman/openwsman.git \
+ file://libssl-is-required-if-eventint-supported.patch \
+ file://openwsmand.service \
+ file://0001-lock.c-Define-PTHREAD_MUTEX_RECURSIVE_NP-if-undefine.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d4f53d4c6cf73b9d43186ce3be6dd0ba"
+
+inherit systemd cmake pkgconfig pythonnative perlnative
+
+SYSTEMD_SERVICE_${PN} = "openwsmand.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+LDFLAGS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', " -fuse-ld=bfd ", '', d)}"
+
+EXTRA_OECMAKE = "-DBUILD_BINDINGS=NO \
+ -DBUILD_LIBCIM=NO \
+ -DBUILD_PERL=YES \
+ -DCMAKE_INSTALL_PREFIX=${prefix} \
+ -DLIB=${baselib} \
+ "
+
+do_configure_prepend() {
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 755 ${B}/etc/init/openwsmand.sh ${D}/${sysconfdir}/init.d/openwsmand
+ ln -sf ${sysconfdir}/init.d/openwsmand ${D}/${sbindir}/rcopenwsmand
+ chmod 755 ${D}/${sysconfdir}/openwsman/owsmangencert.sh
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/openwsmand.service ${D}/${systemd_unitdir}/system
+
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/openwsmand.service
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/openwsmand.service
+ sed -i -e 's,@LOCALSTATEDIR@,${localstatedir},g' ${D}${systemd_unitdir}/system/openwsmand.service
+ fi
+}
+
+FILES_${PN}-dbg += "${libdir}/openwsman/plugins/.debug/ \
+ ${libdir}/openwsman/authenticators/.debug/ \
+ "
+
+INSANE_SKIP_${PN} = "dev-so"
diff --git a/meta-openembedded/meta-oe/recipes-extended/p7zip/files/0001-Fix-narrowing-errors-Wc-11-narrowing.patch b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/0001-Fix-narrowing-errors-Wc-11-narrowing.patch
new file mode 100644
index 000000000..ae2751745
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/0001-Fix-narrowing-errors-Wc-11-narrowing.patch
@@ -0,0 +1,48 @@
+From b6b1782af4aa7f9084d32e4144738dc2535c8d6f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 23 Apr 2018 23:07:21 -0700
+Subject: [PATCH] Fix narrowing errors -Wc++11-narrowing
+
+Clang 6.x finds these errors
+
+ ../../../../CPP/Windows/ErrorMsg.cpp:24:10: error: case value evaluates to -2147024809, which cannot be narrowed to type 'DWORD' (aka 'unsigned int') [-Wc++11-narrowing]
+ case E_INVALIDARG : txt = "E_INVALIDARG"; break ;
+ ^
+
+HRESULT causes the macro to be parsed as a signed long, so we need to force it
+to be checked as an unsigned long instead.
+
+also reported here https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=224930
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CPP/Windows/ErrorMsg.cpp | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/CPP/Windows/ErrorMsg.cpp b/CPP/Windows/ErrorMsg.cpp
+index 99684ae..78a64ba 100644
+--- a/CPP/Windows/ErrorMsg.cpp
++++ b/CPP/Windows/ErrorMsg.cpp
+@@ -15,13 +15,13 @@ UString MyFormatMessage(DWORD errorCode)
+
+ switch(errorCode) {
+ case ERROR_NO_MORE_FILES : txt = "No more files"; break ;
+- case E_NOTIMPL : txt = "E_NOTIMPL"; break ;
+- case E_NOINTERFACE : txt = "E_NOINTERFACE"; break ;
+- case E_ABORT : txt = "E_ABORT"; break ;
+- case E_FAIL : txt = "E_FAIL"; break ;
+- case STG_E_INVALIDFUNCTION : txt = "STG_E_INVALIDFUNCTION"; break ;
+- case E_OUTOFMEMORY : txt = "E_OUTOFMEMORY"; break ;
+- case E_INVALIDARG : txt = "E_INVALIDARG"; break ;
++ case (DWORD) E_NOTIMPL : txt = "E_NOTIMPL"; break ;
++ case (DWORD) E_NOINTERFACE : txt = "E_NOINTERFACE"; break ;
++ case (DWORD) E_ABORT : txt = "E_ABORT"; break ;
++ case (DWORD) E_FAIL : txt = "E_FAIL"; break ;
++ case (DWORD) STG_E_INVALIDFUNCTION : txt = "STG_E_INVALIDFUNCTION"; break ;
++ case (DWORD) E_OUTOFMEMORY : txt = "E_OUTOFMEMORY"; break ;
++ case (DWORD) E_INVALIDARG : txt = "E_INVALIDARG"; break ;
+ case ERROR_DIRECTORY : txt = "Error Directory"; break ;
+ default:
+ txt = strerror(errorCode);
diff --git a/meta-openembedded/meta-oe/recipes-extended/p7zip/files/CVE-2017-17969.patch b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/CVE-2017-17969.patch
new file mode 100644
index 000000000..177d1455f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/CVE-2017-17969.patch
@@ -0,0 +1,31 @@
+p7zip: Fix CVE-2017-17969
+
+[No upstream tracking] -- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=888297
+
+Heap-based buffer overflow in 7zip
+
+Compress/ShrinkDecoder.cpp: Heap-based buffer overflow
+in the NCompress::NShrink::CDecoder::CodeReal method
+in 7-Zip before 18.00 and p7zip allows remote attackers
+to cause a denial of service (out-of-bounds write)
+or potentially execute arbitrary code via a crafted ZIP archive.
+
+Upstream-Status: Backport [https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/8316/attachment/CVE-2017-17969.patch]
+CVE: CVE-2017-17969
+Signed-off-by: Radovan Scasny <radovan.scasny@siemens.com>
+
+--- a/CPP/7zip/Compress/ShrinkDecoder.cpp
++++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
+@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
+ {
+ _stack[i++] = _suffixes[cur];
+ cur = _parents[cur];
++ if (cur >= kNumItems || i >= kNumItems)
++ break;
+ }
++
++ if (cur >= kNumItems || i >= kNumItems)
++ break;
+
+ _stack[i++] = (Byte)cur;
+ lastChar2 = (Byte)cur;
diff --git a/meta-openembedded/meta-oe/recipes-extended/p7zip/files/do_not_override_compiler_and_do_not_strip.patch b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/do_not_override_compiler_and_do_not_strip.patch
new file mode 100644
index 000000000..b0a560fe9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/p7zip/files/do_not_override_compiler_and_do_not_strip.patch
@@ -0,0 +1,30 @@
+do not override compiler and do not strip
+
+The default makefile sets the compiler to g++ or gcc. This leads to a wrong architecture when cross-compiling.
+Remove the hardcoded compiler and just append the flags to CXX and CC.
+
+Upstream-Status: Pending
+Signed-off-by: Raphael Freudiger <raphael.freudiger@siemens.com>
+Reviewed-By: Pascal Bach <pascal.bach@siemens.com>
+
+diff -Nurp p7zip_15.14.1_orig/makefile.machine p7zip_15.14.1/makefile.machine
+--- p7zip_15.14.1_orig/makefile.machine 2016-03-23 20:37:47.000000000 +0100
++++ p7zip_15.14.1/makefile.machine 2016-06-17 15:33:39.720454477 +0200
+@@ -2,7 +2,7 @@
+ # makefile for Linux (x86, PPC, alpha ...)
+ #
+
+-OPTFLAGS=-O -s
++OPTFLAGS=-O
+
+ ALLFLAGS=${OPTFLAGS} -pipe \
+ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+@@ -10,8 +10,6 @@ ALLFLAGS=${OPTFLAGS} -pipe \
+ -D_7ZIP_LARGE_PAGES \
+ $(LOCAL_FLAGS)
+
+-CXX=g++
+-CC=gcc
+ CC_SHARED=-fPIC
+ LINK_SHARED=-fPIC -shared
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/p7zip/p7zip_16.02.bb b/meta-openembedded/meta-oe/recipes-extended/p7zip/p7zip_16.02.bb
new file mode 100644
index 000000000..d986da904
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/p7zip/p7zip_16.02.bb
@@ -0,0 +1,42 @@
+SUMMARY = "7-zip is a commandline utility handling 7z archives."
+HOMEPAGE = "http://www.7-zip.org/"
+LICENSE = "LGPL-2.1+ & unRAR"
+LIC_FILES_CHKSUM = "file://DOC/copying.txt;md5=4fbd65380cdd255951079008b364516c \
+ file://DOC/unRarLicense.txt;md5=9c87ddde469ef94aed153b0951d088de \
+ file://DOC/License.txt;md5=879598edf1f54dddb6930d7581357f8b"
+
+SRC_URI = "http://downloads.sourceforge.net/p7zip/p7zip/${PV}/p7zip_${PV}_src_all.tar.bz2 \
+ file://do_not_override_compiler_and_do_not_strip.patch \
+ file://CVE-2017-17969.patch \
+ file://0001-Fix-narrowing-errors-Wc-11-narrowing.patch \
+ "
+
+SRC_URI[md5sum] = "a0128d661cfe7cc8c121e73519c54fbf"
+SRC_URI[sha256sum] = "5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f"
+
+S = "${WORKDIR}/${BPN}_${PV}"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/bin/* ${D}${bindir}
+}
+
+# all3: to build bin/7za, bin/7z (with its plugins), bin/7zr and bin/7zCon.sfx
+EXTRA_OEMAKE_class-native = "all3"
+
+do_install_class-native() {
+ install -d ${D}${bindir}
+ install -d ${D}${bindir}/Codecs
+ install -m 0755 ${S}/bin/7* ${D}${bindir}
+ install -m 0755 ${S}/bin/Codecs/* ${D}${bindir}/Codecs
+
+ # Create a shell script wrapper to execute next to 7z.so
+ mv ${D}${bindir}/7z ${D}${bindir}/7z.bin
+ cat > ${D}${bindir}/7z << 'EOF'
+#!/bin/sh
+exec "$(dirname "$0")"/7z.bin "$@"
+EOF
+ chmod 0755 ${D}${bindir}/7z
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/p8platform/p8platform_git.bb b/meta-openembedded/meta-oe/recipes-extended/p8platform/p8platform_git.bb
new file mode 100644
index 000000000..f6347c2a4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/p8platform/p8platform_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Platform support library used by libCEC and binary add-ons for Kodi"
+HOMEPAGE = "http://libcec.pulse-eight.com/"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://src/os.h;md5=752555fa94e82005d45fd201fee5bd33"
+
+PV = "2.1.0"
+
+SRC_URI = "git://github.com/Pulse-Eight/platform.git"
+SRCREV = "d7bceb64541cb046421cbcd4c98d91e9bf24822f"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE += "-DCMAKE_INSTALL_LIBDIR=${libdir} -DCMAKE_INSTALL_LIBDIR_NOARCH=${libdir}"
+
+FILES_${PN}-dev += "${libdir}/p8-platform"
diff --git a/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb b/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb
new file mode 100644
index 000000000..1638c41c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb
@@ -0,0 +1,51 @@
+SUMMARY = "pam-ssh-agent-auth"
+DESCRIPTION = "A PAM module which permits authentication via ssh-agent."
+HOMEPAGE = "http://sourceforge.net/projects/pamsshagentauth/"
+SECTION = "libs"
+LICENSE = "openssl & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.OpenSSL;md5=8ab01146141ded59b75f8ba7811ed05a \
+ file://OPENSSH_LICENSE;md5=7ae09218173be1643c998a4b71027f9b \
+"
+
+SRC_URI = "http://sourceforge.net/projects/pamsshagentauth/files/pam_ssh_agent_auth/v${PV}/pam_ssh_agent_auth-${PV}.tar.bz2"
+SRC_URI[md5sum] = "8dbe90ab3625e545036333e6f51ccf1d"
+SRC_URI[sha256sum] = "3c53d358d6eaed1b211239df017c27c6f9970995d14102ae67bae16d4f47a763"
+
+DEPENDS += "libpam openssl"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+# This gets us ssh-agent, which we are almost certain to want.
+#
+RDEPENDS_${PN} += "openssh-misc"
+
+# Kind of unfortunate to have underscores in the name.
+#
+S = "${WORKDIR}/pam_ssh_agent_auth-${PV}"
+
+inherit autotools-brokensep
+
+# Avoid autoreconf. Override the --libexec oe_runconf specifies so that
+# the module is put with the other pam modules. Because it cannot, in general,
+# do a runtime test, configure wants to use rpl_malloc() and rpl_realloc()
+# instead of malloc() and realloc(). We set variables to tell it not to because
+# these functions do not exist.
+#
+do_configure () {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
+ oe_runconf --without-openssl-header-check --libexecdir=${base_libdir}/security \
+ ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
+}
+
+# Link with CC. Configure cannot figure out the correct AR.
+#
+do_compile () {
+ oe_runmake LD="${CC}" AR="${AR}"
+}
+
+# This stuff is not any place looked at by default.
+#
+FILES_${PN} += "${base_libdir}/security/pam*"
+FILES_${PN}-dbg += "${base_libdir}/security/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/perl/libfile-fnmatch-perl_0.02.bb b/meta-openembedded/meta-oe/recipes-extended/perl/libfile-fnmatch-perl_0.02.bb
new file mode 100644
index 000000000..035fe9f65
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/perl/libfile-fnmatch-perl_0.02.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Perl module that provides simple filename and pathname matching"
+DESCRIPTION = "File::FnMatch::fnmatch() provides simple, shell-like pattern \
+matching. \
+Though considerably less powerful than regular expressions, shell patterns \
+are nonetheless useful and familiar to a large audience of end-users."
+
+HOMEPAGE = "http://search.cpan.org/dist/File-FnMatch/"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://README;beginline=34;endline=37;md5=54fdfac62963b7cece5583ab38f2cf0d"
+
+SRC_URI = "https://cpan.metacpan.org/authors/id/M/MJ/MJP/File-FnMatch-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "22f77c20d0fb5af01a3165e2df2fe34c"
+SRC_URI[sha256sum] = "962454b8e86bea8b132bf8af35757d0c6a8f5d599015bd6a5d68cb7ae7a9e916"
+
+S = "${WORKDIR}/File-FnMatch-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.NetworkManager.rules b/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.NetworkManager.rules
new file mode 100644
index 000000000..4b50cf881
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.NetworkManager.rules
@@ -0,0 +1,8 @@
+/* give group 'network' rights to change settings */
+/* taken from https://wiki.archlinux.org/index.php/NetworkManager#Set_up_PolicyKit_permissions */
+
+polkit.addRule(function(action, subject) {
+ if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.timedate1.rules b/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.timedate1.rules
new file mode 100644
index 000000000..95b0e0f69
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/files/50-org.freedesktop.timedate1.rules
@@ -0,0 +1,8 @@
+/* give group 'datetime' rights to change settings */
+/* based upon http://lists.freedesktop.org/archives/systemd-devel/2013-March/009576.html */
+
+polkit.addRule(function(action, subject) {
+ if (action.id.indexOf("org.freedesktop.timedate1.") == 0 && subject.isInGroup("datetime")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-datetime.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-datetime.bb
new file mode 100644
index 000000000..934a53e5c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-datetime.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Create usergroup datetime. All members off this group are allowed set date/time/timezone via system dbus"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+require polkit-group-rule.inc
+
+SRC_URI = "file://50-org.freedesktop.timedate1.rules"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/50-org.freedesktop.timedate1.rules ${D}${sysconfdir}/polkit-1/rules.d
+}
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system datetime"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-network.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-network.bb
new file mode 100644
index 000000000..66a73eaaf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule-network.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Create usergroup network. All members off this group are allowed to modify networkmanager settings"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+require polkit-group-rule.inc
+
+SRC_URI = "file://50-org.freedesktop.NetworkManager.rules"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/50-org.freedesktop.NetworkManager.rules ${D}${sysconfdir}/polkit-1/rules.d
+}
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system network"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule.inc b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule.inc
new file mode 100644
index 000000000..40e400542
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit-group-rule.inc
@@ -0,0 +1,10 @@
+# polkit must prepare polkitd group
+DEPENDS += "polkit"
+
+inherit useradd
+
+do_install_prepend() {
+ install -m 700 -d ${D}${sysconfdir}/polkit-1/rules.d
+ chown polkitd:polkitd ${D}${sysconfdir}/polkit-1/rules.d
+}
+USERADD_PARAM_${PN}_prepend = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-make-netgroup-support-configurable.patch b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-make-netgroup-support-configurable.patch
new file mode 100644
index 000000000..4e3af876e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-make-netgroup-support-configurable.patch
@@ -0,0 +1,107 @@
+From 7d5e205aa58a10e7b1ccc2fa75b443508a5c3e18 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 20 Jan 2016 04:31:59 +0000
+Subject: [PATCH] make netgroup support configurable
+
+Disable using innetgr and *netigrent function if not available
+
+These functions are not available on all libc implementations e.g. musl
+doesnt have them.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ configure.ac | 2 +-
+ src/polkitbackend/polkitbackendinteractiveauthority.c | 6 +++++-
+ src/polkitbackend/polkitbackendjsauthority.c | 5 ++---
+ 3 files changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 07982d1..21590b2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -158,7 +158,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"],
+ [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
+ AC_SUBST(EXPAT_LIBS)
+
+-AC_CHECK_FUNCS(clearenv fdatasync)
++AC_CHECK_FUNCS(clearenv fdatasync getnetgrent innetgr)
+
+ if test "x$GCC" = "xyes"; then
+ LDFLAGS="-Wl,--as-needed $LDFLAGS"
+diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
+index 7019356..cf39d77 100644
+--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
++++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
+@@ -2213,7 +2213,7 @@ get_users_in_group (PolkitIdentity *group,
+ out:
+ return ret;
+ }
+-
++#if defined HAVE_GETNETGRENT
+ static GList *
+ get_users_in_net_group (PolkitIdentity *group,
+ gboolean include_root)
+@@ -2270,6 +2270,8 @@ get_users_in_net_group (PolkitIdentity *group,
+ return ret;
+ }
+
++#endif
++
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ static void
+@@ -2355,10 +2357,12 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
+ {
+ user_identities = g_list_concat (user_identities, get_users_in_group (identity, FALSE));
+ }
++#if defined HAVE_GETNETGRENT
+ else if (POLKIT_IS_UNIX_NETGROUP (identity))
+ {
+ user_identities = g_list_concat (user_identities, get_users_in_net_group (identity, FALSE));
+ }
++#endif
+ else
+ {
+ g_warning ("Unsupported identity");
+diff --git a/src/polkitbackend/polkitbackendjsauthority.c b/src/polkitbackend/polkitbackendjsauthority.c
+index 097dcc5..e59b3f7 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.c
++++ b/src/polkitbackend/polkitbackendjsauthority.c
+@@ -1498,7 +1498,6 @@ js_polkit_spawn (JSContext *cx,
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+-
+ static JSBool
+ js_polkit_user_is_in_netgroup (JSContext *cx,
+ unsigned argc,
+@@ -1518,6 +1517,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
+ user = JS_EncodeString (cx, user_str);
+ netgroup = JS_EncodeString (cx, netgroup_str);
+
++#if defined HAVE_INNETGR
+ if (innetgr (netgroup,
+ NULL, /* host */
+ user,
+@@ -1525,6 +1525,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
+ {
+ is_in_netgroup = JS_TRUE;
+ }
++#endif
+
+ JS_free (cx, netgroup);
+ JS_free (cx, user);
+@@ -1536,8 +1537,6 @@ js_polkit_user_is_in_netgroup (JSContext *cx,
+ return ret;
+ }
+
+-
+-
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ typedef struct
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/polkit-1_pam.patch b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/polkit-1_pam.patch
new file mode 100644
index 000000000..74647efce
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/polkit-1_pam.patch
@@ -0,0 +1,23 @@
+polkit: No system-auth in OE-Core, we can use common-* in place of it.
+
+Upstream-Status:Inappropriate [configuration]
+
+Signed-off-by: Xiaofeng Yan <xiaofeng.yan@windriver.com>
+
+--- a/configure.ac 2011-03-04 02:26:20.000000000 +0800
++++ b/configure.ac.new 2011-07-18 10:14:12.516818852 +0800
+@@ -350,10 +350,10 @@
+ PAM_FILE_INCLUDE_PASSWORD=system
+ PAM_FILE_INCLUDE_SESSION=system
+ else
+- PAM_FILE_INCLUDE_AUTH=system-auth
+- PAM_FILE_INCLUDE_ACCOUNT=system-auth
+- PAM_FILE_INCLUDE_PASSWORD=system-auth
+- PAM_FILE_INCLUDE_SESSION=system-auth
++ PAM_FILE_INCLUDE_AUTH=common-auth
++ PAM_FILE_INCLUDE_ACCOUNT=common-account
++ PAM_FILE_INCLUDE_PASSWORD=common-password
++ PAM_FILE_INCLUDE_SESSION=common-session
+ fi
+
+ AC_SUBST(PAM_FILE_INCLUDE_AUTH)
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_0.113.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_0.113.bb
new file mode 100644
index 000000000..f34928fe3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_0.113.bb
@@ -0,0 +1,51 @@
+SUMMARY = "PolicyKit Authorization Framework"
+DESCRIPTION = "The polkit package is an application-level toolkit for defining and handling the policy that allows unprivileged processes to speak to privileged processes."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/polkit"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=155db86cdbafa7532b41f390409283eb \
+ file://src/polkit/polkit.h;beginline=1;endline=20;md5=0a8630b0133176d0504c87a0ded39db4"
+
+DEPENDS = "expat glib-2.0 intltool-native mozjs"
+
+inherit autotools gtk-doc pkgconfig useradd systemd gobject-introspection
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', \
+ bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d), d)} \
+ "
+
+PACKAGECONFIG[pam] = "--with-authfw=pam,--with-authfw=shadow,libpam,libpam"
+PACKAGECONFIG[systemd] = "--enable-libsystemd-login=yes --with-systemdsystemunitdir=${systemd_unitdir}/system/,--enable-libsystemd-login=no --with-systemdsystemunitdir=,systemd"
+# there is no --enable/--disable option for consolekit and it's not picked by shlibs, so add it to RDEPENDS
+PACKAGECONFIG[consolekit] = ",,,consolekit"
+
+PAM_SRC_URI = "file://polkit-1_pam.patch"
+SRC_URI = "http://www.freedesktop.org/software/polkit/releases/polkit-${PV}.tar.gz \
+ file://0001-make-netgroup-support-configurable.patch \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+"
+SRC_URI[md5sum] = "4b77776c9e4f897dcfe03b2c34198edf"
+SRC_URI[sha256sum] = "e1c095093c654951f78f8618d427faf91cf62abdefed98de40ff65eca6413c81"
+
+EXTRA_OECONF = "--with-os-type=moblin --disable-man-pages"
+
+do_compile_prepend () {
+ export GIR_EXTRA_LIBS_PATH="${B}/src/polkit/.libs"
+}
+
+PACKAGES =+ "${PN}-examples"
+
+FILES_${PN}_append = " \
+ ${libdir}/${BPN}-1 \
+ ${nonarch_libdir}/${BPN}-1 \
+ ${datadir}/dbus-1 \
+ ${datadir}/${BPN}-1 \
+"
+
+FILES_${PN}-examples = "${bindir}/*example*"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/${BPN}-1 polkitd"
+
+SYSTEMD_SERVICE_${PN} = "${BPN}.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0001-rarpd.8-add-man-file.patch b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0001-rarpd.8-add-man-file.patch
new file mode 100644
index 000000000..77c75b4a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0001-rarpd.8-add-man-file.patch
@@ -0,0 +1,89 @@
+From d91161eb163c16408202a91b4325a3381ab33752 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 18 Nov 2014 17:55:31 +0900
+Subject: [PATCH 1/5] rarpd.8 : add man file
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ rarpd.8 | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 69 insertions(+)
+ create mode 100644 rarpd.8
+
+diff --git a/rarpd.8 b/rarpd.8
+new file mode 100644
+index 0000000..ce7bd70
+--- /dev/null
++++ b/rarpd.8
+@@ -0,0 +1,69 @@
++.TH RARP 8 "7 April 2000" "rarpd" "Linux Programmer's Manual"
++.SH NAME
++rarpd \- Reverse Address Resolution Protocol (RARP) daemon
++.SH SYNOPSIS
++.B "rarpd [-aAvde] [-b bootdir ] [ interface ]"
++.SH DESCRIPTION
++.B Rarpd
++is a daemon which responds to RARP requests.
++RARP is used by some machines at boot time to discover their IP address.
++They provide their Ethernet address and
++.B rarpd
++responds with their IP address if it finds it in the ethers database
++(either
++.I /etc/ethers
++file or NIS+ lookup) and using DNS lookup if ethers database
++contains a hostname and not an IP address.
++By default
++.B rarpd
++also checks if a bootable image with a name starting with the IP address
++in hexadecimal uppercase letters is present in the TFTP boot directory
++(usually
++.I /tftpboot
++) before it decides to respond to the RARP request.
++.SH OPTIONS
++.TP
++.B \-a
++Do not bind to the interface.
++.TP
++.B \-A
++Respond to ARP as well as RARP requests.
++.TP
++.B \-v
++Tell the user what is going on by being verbose.
++.TP
++.B \-d
++Debugging mode. Do not detach from the tty.
++.TP
++.B \-e
++Skip the check for bootable image in the TFTP boot directory. If not
++present, then even if the Ethernet address is present in
++the ethers database but the bootable image for the resolved IP does not exist,
++.B rarpd
++will not respond to the request.
++.TP
++.B "\-b bootdir"
++Use
++.I bootdir
++instead of the default
++.I /tftpboot
++as the TFTP boot directory for bootable image checks.
++.SH OBSOLETES
++This
++.B rarpd
++obsoletes kernel
++.B rarp
++daemon present in Linux kernels up to 2.2 which was controlled by the
++rarp(8) command.
++.SH FILES
++.I /etc/ethers,
++.br
++.I /etc/nsswitch.conf,
++.br
++.I /tftpboot
++.SH SEE ALSO
++ethers(5)
++.SH AUTHORS
++Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
++.br
++Jakub Jelinek, <jakub@redhat.com>
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0002-Makefile-modify-compile-parameters.patch b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0002-Makefile-modify-compile-parameters.patch
new file mode 100644
index 000000000..0b3ebc468
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0002-Makefile-modify-compile-parameters.patch
@@ -0,0 +1,26 @@
+From d23b13bd959204824070433d954c5dfbfc421bb7 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 18 Nov 2014 18:05:27 +0900
+Subject: [PATCH 2/5] Makefile : modify compile parameters
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 19966b4..86a8169 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ CC=gcc
+ CFLAGS=-O2 -Wall -g $(DEFINES)
+
+-OBJ=rarpd.o ethernet.o
++OBJ=rarpd.o
+
+ all: rarpd
+
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0003-rarpd.c-bug-fix.patch b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0003-rarpd.c-bug-fix.patch
new file mode 100644
index 000000000..7ce127909
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0003-rarpd.c-bug-fix.patch
@@ -0,0 +1,263 @@
+From b49c8e6e66801406520d1bff791c66dff7b1cddb Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 18 Nov 2014 18:10:20 +0900
+Subject: [PATCH 3/5] rarpd.c : bug fix
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ rarpd.c | 98 +++++++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 56 insertions(+), 42 deletions(-)
+
+diff --git a/rarpd.c b/rarpd.c
+index 335d2d2..d45300e 100644
+--- a/rarpd.c
++++ b/rarpd.c
+@@ -7,9 +7,11 @@
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
++ * Jakub Jelinek, <jakub@redhat.com>
+ */
+
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <syslog.h>
+ #include <dirent.h>
+ #include <malloc.h>
+@@ -26,6 +28,8 @@
+ #include <net/if.h>
+ #include <net/if_arp.h>
+ #include <netinet/in.h>
++#include <netinet/ether.h>
++#include <asm/types.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+
+@@ -39,27 +43,26 @@ int only_ethers;
+ int all_ifaces;
+ int listen_arp;
+ char *ifname;
+-char *tftp_dir = "/etc/tftpboot";
++char *tftp_dir = "/tftpboot";
+
+-extern int ether_ntohost(char *name, unsigned char *ea);
+ void usage(void) __attribute__((noreturn));
+
+-struct iflink
++struct rarpiflink
+ {
+- struct iflink *next;
+- int index;
+- int hatype;
+- unsigned char lladdr[16];
+- unsigned char name[IFNAMSIZ];
+- struct ifaddr *ifa_list;
++ struct rarpiflink *next;
++ int index;
++ int hatype;
++ unsigned char lladdr[16];
++ unsigned char name[IFNAMSIZ];
++ struct rarpifaddr *ifa_list;
+ } *ifl_list;
+
+-struct ifaddr
++struct rarpifaddr
+ {
+- struct ifaddr *next;
+- __u32 prefix;
+- __u32 mask;
+- __u32 local;
++ struct rarpifaddr *next;
++ __u32 prefix;
++ __u32 mask;
++ __u32 local;
+ };
+
+ struct rarp_map
+@@ -87,8 +90,8 @@ void load_if()
+ {
+ int fd;
+ struct ifreq *ifrp, *ifend;
+- struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct rarpiflink *ifl;
++ struct rarpifaddr *ifa;
+ struct ifconf ifc;
+ struct ifreq ibuf[256];
+
+@@ -144,7 +147,7 @@ void load_if()
+ continue;
+ }
+
+- ifl = (struct iflink*)malloc(sizeof(*ifl));
++ ifl = (struct rarpiflink*)malloc(sizeof(*ifl));
+ if (ifl == NULL)
+ continue;
+ memset(ifl, 0, sizeof(*ifl));
+@@ -154,6 +157,7 @@ void load_if()
+ ifl->hatype = ifrp->ifr_hwaddr.sa_family;
+ memcpy(ifl->lladdr, ifrp->ifr_hwaddr.sa_data, 14);
+ strncpy(ifl->name, ifrp->ifr_name, IFNAMSIZ);
++ ifl->name[IFNAMSIZ-1] = 0;
+ p = strchr(ifl->name, ':');
+ if (p)
+ *p = 0;
+@@ -179,7 +183,7 @@ void load_if()
+ if (ifa == NULL) {
+ if (mask == 0 || prefix == 0)
+ continue;
+- ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++ ifa = (struct rarpifaddr*)malloc(sizeof(*ifa));
+ memset(ifa, 0, sizeof(*ifa));
+ ifa->local = addr;
+ ifa->prefix = prefix;
+@@ -207,6 +211,7 @@ void load_if()
+ }
+ }
+ }
++ close(fd);
+ }
+
+ void configure()
+@@ -225,20 +230,21 @@ int bootable(__u32 addr)
+ d = opendir(tftp_dir);
+ if (d == NULL) {
+ syslog(LOG_ERR, "opendir: %m");
+- return 0;
++ goto done_bootable;
+ }
+ while ((dent = readdir(d)) != NULL) {
+ if (strncmp(dent->d_name, name, 8) == 0)
+ break;
+ }
++done_bootable:
+ closedir(d);
+ return dent != NULL;
+ }
+
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct rarpifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+- struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct rarpiflink *ifl;
++ struct rarpifaddr *ifa;
+ int retry = 0;
+ int i;
+
+@@ -294,7 +300,7 @@ struct rarp_map *rarp_lookup(int ifindex, int hatype,
+
+ if (r == NULL) {
+ if (hatype == ARPHRD_ETHER && halen == 6) {
+- struct ifaddr *ifa;
++ struct rarpifaddr *ifa;
+ struct hostent *hp;
+ char ename[256];
+ static struct rarp_map emap = {
+@@ -304,7 +310,7 @@ struct rarp_map *rarp_lookup(int ifindex, int hatype,
+ 6,
+ };
+
+- if (ether_ntohost(ename, lladdr) != 0 ||
++ if (ether_ntohost(ename, (struct ether_addr *)lladdr) != 0 ||
+ (hp = gethostbyname(ename)) == NULL) {
+ if (verbose)
+ syslog(LOG_INFO, "not found in /etc/ethers");
+@@ -345,7 +351,7 @@ static int load_arp_bpflet(int fd)
+
+ int put_mylladdr(unsigned char **ptr_p, int ifindex, int alen)
+ {
+- struct iflink *ifl;
++ struct rarpiflink *ifl;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+@@ -362,8 +368,8 @@ int put_mylladdr(unsigned char **ptr_p, int ifindex, int alen)
+ int put_myipaddr(unsigned char **ptr_p, int ifindex, __u32 hisipaddr)
+ {
+ __u32 laddr = 0;
+- struct iflink *ifl;
+- struct ifaddr *ifa;
++ struct rarpiflink *ifl;
++ struct rarpifaddr *ifa;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+@@ -388,7 +394,7 @@ void arp_advise(int ifindex, unsigned char *lladdr, int lllen, __u32 ipaddr)
+ int fd;
+ struct arpreq req;
+ struct sockaddr_in *sin;
+- struct iflink *ifl;
++ struct rarpiflink *ifl;
+
+ for (ifl=ifl_list; ifl; ifl = ifl->next)
+ if (ifl->index == ifindex)
+@@ -421,6 +427,10 @@ void serve_it(int fd)
+ struct rarp_map *rmap;
+ unsigned char *ptr;
+ int n;
++ int i;
++ char tmpbuf[16*3];
++ char tmpname[IFNAMSIZ];
++ struct rarpiflink *ifl;
+
+ n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, &sll_len);
+ if (n<0) {
+@@ -447,21 +457,23 @@ void serve_it(int fd)
+ if (a->ar_op != htons(ARPOP_RREQUEST))
+ return;
+
+- if (verbose) {
+- int i;
+- char tmpbuf[16*3];
+- char *ptr = tmpbuf;
+- for (i=0; i<sll.sll_halen; i++) {
+- if (i) {
+- sprintf(ptr, ":%02x", sll.sll_addr[i]);
+- ptr++;
+- } else
+- sprintf(ptr, "%02x", sll.sll_addr[i]);
+- ptr += 2;
+- }
+- syslog(LOG_INFO, "RARP request from %s on if%d", tmpbuf, sll.sll_ifindex);
++ ptr = tmpbuf;
++ snprintf(tmpbuf, 2, "%02x", sll.sll_addr[0]);
++ for (ptr=tmpbuf+2, i=1; i<sll.sll_halen; i++) {
++ snprintf(ptr, 3, ":%02x", sll.sll_addr[i]);
++ ptr += 3;
+ }
+
++ for (ifl=ifl_list; ifl; ifl = ifl->next)
++ if (ifl->index == sll.sll_ifindex)
++ break;
++ if (ifl) {
++ strncpy(tmpname, ifl->name, IFNAMSIZ);
++ tmpname[IFNAMSIZ-1] = 0;
++ } else
++ sprintf(tmpname, "if%d", sll.sll_ifindex);
++ syslog(LOG_INFO, "RARP request from %s on %s", tmpbuf, tmpname);
++
+ /* Sanity checks */
+
+ /* 1. IP only -> pln==4 */
+@@ -526,6 +538,8 @@ void serve_it(int fd)
+ ptr += rmap->lladdr_len;
+ memcpy(ptr, &rmap->ipaddr, 4);
+ ptr += 4;
++ syslog(LOG_INFO, "RARP response to %s %s on %s", tmpbuf,
++ inet_ntoa(*(struct in_addr *)&rmap->ipaddr), tmpname);
+
+ /* Update our ARP cache. Probably, this guy
+ will not able to make ARP (if it is broken)
+@@ -613,7 +627,7 @@ int main(int argc, char **argv)
+ if (ifname) {
+ struct ifreq ifr;
+ memset(&ifr, 0, sizeof(ifr));
+- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
+ if (ioctl(pset[0].fd, SIOCGIFINDEX, &ifr)) {
+ perror("ioctl(SIOCGIFINDEX)");
+ usage();
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0004-rarpd.init-add-new-init-file.patch b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0004-rarpd.init-add-new-init-file.patch
new file mode 100644
index 000000000..3ba11ffe5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0004-rarpd.init-add-new-init-file.patch
@@ -0,0 +1,116 @@
+From 0ef1a95b220c7e110da950e5cc544c50c25b1bc6 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 18 Nov 2014 18:11:56 +0900
+Subject: [PATCH 4/5] rarpd.init : add new init file
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ rarpd.init | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 96 insertions(+)
+ create mode 100644 rarpd.init
+
+diff --git a/rarpd.init b/rarpd.init
+new file mode 100644
+index 0000000..efcf825
+--- /dev/null
++++ b/rarpd.init
+@@ -0,0 +1,96 @@
++#!/bin/bash
++#
++# /etc/init.d/rarpd
++#
++# Starts the rarpd daemon
++#
++# chkconfig: - 82 16
++# description: Server Reverse Address Resolution Protocol requests.
++# processname: rarpd
++
++### BEGIN INIT INFO
++# Provides: rarpd
++# Required-Start: $syslog $network
++# Required-Stop: $syslog $network
++# Default-Start:
++# Default-Stop: 0 1 2 3 4 5 6
++# Short-Description: start and stop rarpd
++# Description: RARP (Reverse Address Resolution Protocol) is a protocol \
++# which allows individual devices on an IP network to get \
++# their own IP addresses from the RARP server. \
++### END INIT INFO
++
++# Source function library.
++. /etc/init.d/functions
++
++# Read the config file if exists
++if [ -f /etc/sysconfig/rarpd ]; then
++ . /etc/sysconfig/rarpd
++fi
++
++RETVAL=0
++prog="rarpd"
++
++
++start() {
++ #if these files don't exist rarpd can't work
++ test -x /usr/sbin/rarpd -a -f /etc/ethers || exit 6
++ # Check if rarpd is already running
++ #if [ ! -f /var/lock/subsys/rarpd ]; then
++ status rarpd;
++ if [ $? -ne 0 ]; then
++ echo -n $"Starting $prog: "
++ daemon /usr/sbin/rarpd $OPTIONS $INTERFACE
++ RETVAL=$?
++ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rarpd
++ echo
++ fi
++ return $RETVAL
++}
++
++stop() {
++ echo -n $"Stopping $prog: "
++ killproc /usr/sbin/rarpd
++ RETVAL=$?
++ [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rarpd
++ echo
++ return $RETVAL
++}
++reload() {
++ RETVAL=3
++}
++
++#
++# See how we were called.
++#
++case "$1" in
++ start)
++ start
++ ;;
++ stop)
++ stop
++ ;;
++ reload)
++ reload
++ ;;
++ force-reload|restart)
++ stop
++ start
++ ;;
++ condrestart)
++ if [ -f /var/lock/subsys/rarpd ]; then
++ stop
++ start
++ fi
++ ;;
++ status)
++ status rarpd
++ RETVAL=$?
++ ;;
++ *)
++ echo $"Usage: $0 {start|stop|restart|condrestart|reload|status|force-reload}"
++ RETVAL=2
++
++esac
++
++exit $RETVAL
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0005-ethernet.c-remove-it.patch b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0005-ethernet.c-remove-it.patch
new file mode 100644
index 000000000..c77c80612
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/0005-ethernet.c-remove-it.patch
@@ -0,0 +1,244 @@
+From abe15ba10ddc3548c528ccb088097d7abf5be48b Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 18 Nov 2014 18:14:07 +0900
+Subject: [PATCH 5/5] ethernet.c : remove it
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ ethernet.c | 224 -------------------------------------------------------------
+ 1 file changed, 224 deletions(-)
+ delete mode 100644 ethernet.c
+
+diff --git a/ethernet.c b/ethernet.c
+deleted file mode 100644
+index d682b63..0000000
+--- a/ethernet.c
++++ /dev/null
+@@ -1,224 +0,0 @@
+-/*
+- * Copyright (c) 1990, 1993 The Regents of the University of California.
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that: (1) source code distributions
+- * retain the above copyright notice and this paragraph in its entirety, (2)
+- * distributions including binary code include the above copyright notice and
+- * this paragraph in its entirety in the documentation or other materials
+- * provided with the distribution, and (3) all advertising materials mentioning
+- * features or use of this software display the following acknowledgement:
+- * ``This product includes software developed by the University of California,
+- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+- * the University nor the names of its contributors may be used to endorse
+- * or promote products derived from this software without specific prior
+- * written permission.
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+- */
+-#ifndef lint
+-static char rcsid[] =
+- "@(#) $Header: etherent.c,v 1.4 96/06/14 20:34:25 leres Exp $ (LBL)";
+-#endif
+-
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <sys/time.h>
+-
+-#include <ctype.h>
+-#include <stdio.h>
+-#include <string.h>
+-
+-#ifndef ETHERS_FILE
+-#define ETHERS_FILE "/etc/ethers"
+-#endif
+-
+-struct etherent {
+- u_char addr[6];
+- char name[122];
+-};
+-
+-static FILE *ether_fp = NULL;
+-
+-
+-/* Hex digit to integer. */
+-static inline int
+-xdtoi(c)
+- int c;
+-{
+-
+- if (isdigit(c))
+- return c - '0';
+- else if (islower(c))
+- return c - 'a' + 10;
+- else
+- return c - 'A' + 10;
+-}
+-
+-static inline int
+-skip_space(f)
+- FILE *f;
+-{
+- int c;
+-
+- do {
+- c = getc(f);
+- } while (isspace(c) && c != '\n');
+-
+- return c;
+-}
+-
+-static inline int
+-skip_line(f)
+- FILE *f;
+-{
+- int c;
+-
+- do
+- c = getc(f);
+- while (c != '\n' && c != EOF);
+-
+- return c;
+-}
+-
+-static struct etherent *
+-next_etherent(fp)
+- FILE *fp;
+-{
+- register int c, d, i;
+- char *bp;
+- static struct etherent e;
+- static int nline = 1;
+- top:
+- while (nline) {
+- /* Find addr */
+- c = skip_space(fp);
+- if (c == '\n')
+- continue;
+- /* If this is a comment, or first thing on line
+- cannot be etehrnet address, skip the line. */
+- else if (!isxdigit(c))
+- c = skip_line(fp);
+- else {
+- /* must be the start of an address */
+- for (i = 0; i < 6; i += 1) {
+- d = xdtoi(c);
+- c = getc(fp);
+- if (c != ':') {
+- d <<= 4;
+- d |= xdtoi(c);
+- c = getc(fp);
+- }
+- e.addr[i] = d;
+- if (c != ':')
+- break;
+- c = getc(fp);
+- }
+- nline = 0;
+- }
+- if (c == EOF)
+- return NULL;
+- }
+-
+- /* If we started a new line, 'c' holds the char past the ether addr,
+- which we assume is white space. If we are continuing a line,
+- 'c' is garbage. In either case, we can throw it away. */
+-
+- c = skip_space(fp);
+- if (c == '\n') {
+- nline = 1;
+- goto top;
+- }
+- else if (c == '#') {
+- (void)skip_line(fp);
+- nline = 1;
+- goto top;
+- }
+- else if (c == EOF)
+- return NULL;
+-
+- /* Must be a name. */
+- bp = e.name;
+- /* Use 'd' to prevent buffer overflow. */
+- d = sizeof(e.name) - 1;
+- do {
+- *bp++ = c;
+- c = getc(fp);
+- } while (!isspace(c) && c != EOF && --d > 0);
+- *bp = '\0';
+- if (c == '\n')
+- nline = 1;
+-
+- return &e;
+-}
+-
+-/* Open/rewind the ethers files; returns 1 if file was reopened */
+-int
+-ether_rewind()
+-{
+- struct stat st;
+- static long mtime = 0, ctime = 0;
+-
+- if (ether_fp != NULL) {
+- if (fstat(fileno(ether_fp), &st) < 0 ||
+- mtime != st.st_mtime || ctime != st.st_ctime ||
+- fseek(ether_fp, 0L, SEEK_SET) < 0) {
+- fclose(ether_fp);
+- ether_fp = NULL;
+- }
+- }
+- if (ether_fp == NULL) {
+- ether_fp = fopen(ETHERS_FILE, "r");
+- if (ether_fp == NULL)
+- return (-1);
+- if (fstat(fileno(ether_fp), &st) < 0) {
+- fclose(ether_fp);
+- ether_fp = NULL;
+- return (-1);
+- }
+- mtime = st.st_mtime;
+- ctime = st.st_ctime;
+- return (1);
+- }
+- return (0);
+-}
+-
+-/* Map an ethernet address to a name; returns 0 on success, else 1. */
+-int
+-ether_ntohost(name, ea)
+- register char *name;
+- register u_char *ea;
+-{
+- register struct etherent *ep;
+-
+- if (ether_rewind() < 0)
+- return (1);
+-
+- while ((ep = next_etherent(ether_fp)) != NULL)
+- if (bcmp(ep->addr, ea, 6) == 0) {
+- strcpy(name, ep->name);
+- return (0);
+- }
+- return (1);
+-}
+-
+-/* Map an ethernet name to an address; returns 0 on success, else 1. */
+-int
+-ether_hostton(name, ea)
+- register char *name;
+- register u_char *ea;
+-{
+- register struct etherent *ep;
+-
+- if (ether_rewind() < 0)
+- return (1);
+-
+- while ((ep = next_etherent(ether_fp)) != NULL)
+- if (strcmp(ep->name, name) == 0) {
+- bcopy(ep->addr, ea, 6);
+- return (0);
+- }
+- return (1);
+-}
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/ethers.sample b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/ethers.sample
new file mode 100644
index 000000000..249ca6b3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/ethers.sample
@@ -0,0 +1 @@
+# see man ethers for syntax
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/rarpd.service b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/rarpd.service
new file mode 100644
index 000000000..137710eb1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd/rarpd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Reverse Address Resolution Protocol Requests Server
+Requires=network.target
+After=syslog.target network.target
+
+[Service]
+Type=forking
+EnvironmentFile=-/etc/sysconfig/rarpd
+ExecStart=/usr/sbin/rarpd $OPTIONS $INTERFACE
+StandardError=syslog
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb
new file mode 100644
index 000000000..7c9f2df9d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb
@@ -0,0 +1,51 @@
+SUMMARY = "The RARP daemon."
+DESCRIPTION = "RARP (Reverse Address Resolution Protocol) is a protocol which \
+allows individual devices on an IP network to get their own IP addresses from \
+the RARP server. Some machines (e.g. SPARC boxes) use this protocol instead \
+of e.g. DHCP to query their IP addresses during network bootup. \
+Linux kernels up to 2.2 used to provide a kernel daemon for this service, \
+but since 2.3 kernels it is served by this userland daemon. \
+You should install rarpd if you want to set up a RARP server on your \
+network."
+SECTION = "System Environment/Daemons"
+
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/${BPN}/${BP}.tar.gz/be2a88f8ccddf2a40ac484cb3294fedc/${BP}.tar.gz"
+SRC_URI[md5sum] = "be2a88f8ccddf2a40ac484cb3294fedc"
+SRC_URI[sha256sum] = "4d6145d435a5d8b567b9798620f57f9b0a464078a1deba267958f168fbe776e6"
+
+SRC_URI += "file://0001-rarpd.8-add-man-file.patch \
+ file://0002-Makefile-modify-compile-parameters.patch \
+ file://0003-rarpd.c-bug-fix.patch \
+ file://0004-rarpd.init-add-new-init-file.patch \
+ file://0005-ethernet.c-remove-it.patch \
+ file://ethers.sample \
+ file://rarpd.service \
+"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://rarpd.c;md5=199b20b172ea93121bc613a9c77b6931"
+
+S = "${WORKDIR}/${BPN}"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_install() {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man8
+ install -m 755 rarpd.init ${D}${sysconfdir}/init.d/rarpd
+ install -m 755 rarpd ${D}${sbindir}/rarpd
+ install -m 644 rarpd.8 ${D}${mandir}/man8/rarpd.8
+ install -m 644 ${WORKDIR}/ethers.sample ${D}${sysconfdir}/ethers
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/rarpd.service ${D}${systemd_unitdir}/system/
+}
+
+inherit systemd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "rarpd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+RDEPENDS_${PN} += "bash"
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-update-Makefile-to-add-symbols-to-staticlib.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-update-Makefile-to-add-symbols-to-staticlib.patch
new file mode 100644
index 000000000..2b3b58793
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-update-Makefile-to-add-symbols-to-staticlib.patch
@@ -0,0 +1,19 @@
+--- redis-3.0.2/deps/hiredis/Makefile.orig 2016-05-06 19:36:26.179003036 -0700
++++ redis-3.0.2/deps/hiredis/Makefile 2016-05-06 19:40:15.341340736 -0700
+@@ -25,7 +25,7 @@
+
+ # Fallback to gcc when $CC is not in $PATH.
+ CC?=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
+-OPTIMIZATION?=-O3
++OPTIMIZATION?=-O2
+ WARNINGS=-Wall -W -Wstrict-prototypes -Wwrite-strings
+ DEBUG?= -g -ggdb
+ REAL_CFLAGS=$(OPTIMIZATION) -fPIC $(CFLAGS) $(WARNINGS) $(DEBUG) $(ARCH)
+@@ -68,6 +68,7 @@
+
+ $(STLIBNAME): $(OBJ)
+ $(STLIB_MAKE_CMD) $(OBJ)
++ $(RANLIB) $@
+
+ dynamic: $(DYLIBNAME)
+ static: $(STLIBNAME)
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-use-default-CC-if-it-is-set.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-use-default-CC-if-it-is-set.patch
new file mode 100644
index 000000000..f9f1c0dbd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/hiredis-use-default-CC-if-it-is-set.patch
@@ -0,0 +1,30 @@
+From dc745a33f3875cc72d41bd34ed490b352e546352 Mon Sep 17 00:00:00 2001
+From: Venture Research <tech@ventureresearch.com>
+Date: Fri, 8 Feb 2013 17:39:52 -0600
+Subject: [PATCH] hiredis: use default CC if it is set
+
+Instead of trying to automagically figure out CC, which breaks with OE
+as CC has spaces in it, just skip it if one was already passed in.
+
+Signed-off-by: Venture Research <tech@ventureresearch.com>
+
+Update to work with 3.0.x
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+---
+ deps/hiredis/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: deps/hiredis/Makefile
+===================================================================
+--- a/deps/hiredis/Makefile
++++ b/deps/hiredis/Makefile
+@@ -24,7 +24,7 @@ endef
+ export REDIS_TEST_CONFIG
+
+ # Fallback to gcc when $CC is not in $PATH.
+-CC:=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
++CC?=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
+ OPTIMIZATION?=-O3
+ WARNINGS=-Wall -W -Wstrict-prototypes -Wwrite-strings
+ DEBUG?= -g -ggdb
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/init-redis-server b/meta-openembedded/meta-oe/recipes-extended/redis/redis/init-redis-server
new file mode 100755
index 000000000..6014d70c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/init-redis-server
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: redis-server
+# Required-Start: $network
+# Required-Stop: $network
+# Default-Start: S 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Redis, a key-value store
+# Description: Redis is an open source, advanced key-value store.
+# http://redis.io
+### END INIT INFO
+
+test -f /usr/bin/redis-server || exit 0
+
+ARGS="/etc/redis/redis.conf"
+
+case "$1" in
+ start)
+ echo "Starting redis-server..."
+ start-stop-daemon --start --quiet --exec /usr/bin/redis-server -- $ARGS
+ ;;
+ stop)
+ echo "Stopping redis-server..."
+ start-stop-daemon --stop --quiet --exec /usr/bin/redis-server
+ ;;
+ restart)
+ echo "Stopping redis-server..."
+ start-stop-daemon --stop --quiet --exec /usr/bin/redis-server
+ echo "Starting redis-server..."
+ start-stop-daemon --start --quiet --exec /usr/bin/redis-server -- $ARGS
+ ;;
+ *)
+ echo "Usage: /etc/init.d/redis-server {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/lua-update-Makefile-to-use-environment-build-setting.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/lua-update-Makefile-to-use-environment-build-setting.patch
new file mode 100644
index 000000000..7e62ae131
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/lua-update-Makefile-to-use-environment-build-setting.patch
@@ -0,0 +1,71 @@
+From 394108035d350ae662a431c80131f812b5f72dff Mon Sep 17 00:00:00 2001
+From: Venture Research <tech@ventureresearch.com>
+Date: Fri, 8 Feb 2013 20:22:19 -0600
+Subject: [PATCH] lua: update Makefile to use environment build settings
+
+OE-specific parameters, instead of overriding all of these simply use
+the ones that are already passed in. Also configure for only Linux...
+
+Signed-off-by: Venture Research <tech@ventureresearch.com>
+
+Updated to work with 3.0.x
+
+Signed-off-by: Armin Kuster <akust808@gmail.com>
+
+---
+ deps/lua/src/Makefile | 18 +++++++-----------
+ 1 file changed, 7 insertions(+), 11 deletions(-)
+
+Index: redis-3.0.2/deps/lua/src/Makefile
+===================================================================
+--- redis-3.0.2.orig/deps/lua/src/Makefile
++++ redis-3.0.2/deps/lua/src/Makefile
+@@ -5,18 +5,14 @@
+ # == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
+
+ # Your platform. See PLATS for possible values.
+-PLAT= none
++PLAT= linux
+
+-CC?= gcc
+-CFLAGS= -O2 -Wall $(MYCFLAGS)
+-AR= ar rcu
+-RANLIB= ranlib
+-RM= rm -f
+-LIBS= -lm $(MYLIBS)
+-
+-MYCFLAGS=
++MYCFLAGS=-DLUA_USE_LINUX
+ MYLDFLAGS=
+-MYLIBS=
++MYLIBS=-Wl,-E -ldl -lreadline -lhistory -lncurses
++
++CFLAGS += $(MYCFLAGS)
++LIBS += -lm $(MYLIBS)
+
+ # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
+
+Index: redis-3.0.2/deps/Makefile
+===================================================================
+--- redis-3.0.2.orig/deps/Makefile
++++ redis-3.0.2/deps/Makefile
+@@ -63,7 +63,6 @@ LUA_LDFLAGS+= $(LDFLAGS)
+ # lua's Makefile defines AR="ar rcu", which is unusual, and makes it more
+ # challenging to cross-compile lua (and redis). These defines make it easier
+ # to fit redis into cross-compilation environments, which typically set AR.
+-AR=ar
+ ARFLAGS=rcu
+
+ lua: .make-prerequisites
+Index: redis-3.0.2/deps/lua/Makefile
+===================================================================
+--- redis-3.0.2.orig/deps/lua/Makefile
++++ redis-3.0.2/deps/lua/Makefile
+@@ -33,7 +33,6 @@ INSTALL_DATA= $(INSTALL) -m 0644
+
+ # Utilities.
+ MKDIR= mkdir -p
+-RANLIB= ranlib
+
+ # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/oe-use-libc-malloc.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/oe-use-libc-malloc.patch
new file mode 100644
index 000000000..b768a7749
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/oe-use-libc-malloc.patch
@@ -0,0 +1,34 @@
+From f8861d2129b9e18bba137705bfa38c6bd9be1790 Mon Sep 17 00:00:00 2001
+From: Venture Research <tech@ventureresearch.com>
+Date: Wed, 6 Feb 2013 20:51:02 -0600
+Subject: [PATCH] hack to force use of libc malloc
+
+Hack to force libc usage as it seems the option to pass it in has been
+removed in favor of magic.
+
+Note that this of course doesn't allow tcmalloc and jemalloc, however
+jemalloc wasn't building correctly.
+
+Signed-off-by: Venture Research <tech@ventureresearch.com>
+
+Update to work with 3.0.x
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+---
+ src/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: src/Makefile
+===================================================================
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -13,7 +13,8 @@
+ # Just use 'make dep', but this is only needed by developers.
+
+ release_hdr := $(shell sh -c './mkreleasehdr.sh')
+-uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
++# use fake uname option to force use of generic libc
++uname_S := "USE_LIBC_MALLOC"
+ OPTIMIZATION?=-O2
+ DEPENDENCY_TARGETS=hiredis linenoise lua
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.conf b/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.conf
new file mode 100644
index 000000000..ab024ad85
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.conf
@@ -0,0 +1,550 @@
+# Redis configuration file example
+
+# Note on units: when memory size is needed, it is possible to specify
+# it in the usual form of 1k 5GB 4M and so forth:
+#
+# 1k => 1000 bytes
+# 1kb => 1024 bytes
+# 1m => 1000000 bytes
+# 1mb => 1024*1024 bytes
+# 1g => 1000000000 bytes
+# 1gb => 1024*1024*1024 bytes
+#
+# units are case insensitive so 1GB 1Gb 1gB are all the same.
+
+# By default Redis does not run as a daemon. Use 'yes' if you need it.
+# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
+#
+# OE: run as a daemon.
+#
+daemonize yes
+
+# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
+# default. You can specify a custom pid file location here.
+pidfile /var/run/redis.pid
+
+# Accept connections on the specified port, default is 6379.
+# If port 0 is specified Redis will not listen on a TCP socket.
+port 6379
+
+# If you want you can bind a single interface, if the bind option is not
+# specified all the interfaces will listen for incoming connections.
+#
+bind 127.0.0.1
+
+# Specify the path for the unix socket that will be used to listen for
+# incoming connections. There is no default, so Redis will not listen
+# on a unix socket when not specified.
+#
+# unixsocket /tmp/redis.sock
+# unixsocketperm 755
+
+# Close the connection after a client is idle for N seconds (0 to disable)
+timeout 0
+
+# Set server verbosity to 'debug'
+# it can be one of:
+# debug (a lot of information, useful for development/testing)
+# verbose (many rarely useful info, but not a mess like the debug level)
+# notice (moderately verbose, what you want in production probably)
+# warning (only very important / critical messages are logged)
+loglevel notice
+
+# Specify the log file name. Also 'stdout' can be used to force
+# Redis to log on the standard output. Note that if you use standard
+# output for logging but daemonize, logs will be sent to /dev/null
+# logfile /var/log/redis.log
+
+# To enable logging to the system logger, just set 'syslog-enabled' to yes,
+# and optionally update the other syslog parameters to suit your needs.
+syslog-enabled yes
+
+# Specify the syslog identity.
+syslog-ident redis
+
+# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
+# syslog-facility local0
+
+# Set the number of databases. The default database is DB 0, you can select
+# a different one on a per-connection basis using SELECT <dbid> where
+# dbid is a number between 0 and 'databases'-1
+databases 16
+
+################################ SNAPSHOTTING #################################
+#
+# Save the DB on disk:
+#
+# save <seconds> <changes>
+#
+# Will save the DB if both the given number of seconds and the given
+# number of write operations against the DB occurred.
+#
+# In the example below the behaviour will be to save:
+# after 900 sec (15 min) if at least 1 key changed
+# after 300 sec (5 min) if at least 10 keys changed
+# after 60 sec if at least 10000 keys changed
+#
+# Note: you can disable saving at all commenting all the "save" lines.
+#
+# It is also possible to remove all the previously configured save
+# points by adding a save directive with a single empty string argument
+# like in the following example:
+#
+# save ""
+
+#save 900 1
+#save 300 10
+#save 60 10000
+
+# OE: tune for a small embedded system with a limited # of keys.
+save 120 1
+save 60 100
+save 30 1000
+
+# By default Redis will stop accepting writes if RDB snapshots are enabled
+# (at least one save point) and the latest background save failed.
+# This will make the user aware (in an hard way) that data is not persisting
+# on disk properly, otherwise chances are that no one will notice and some
+# distater will happen.
+#
+# If the background saving process will start working again Redis will
+# automatically allow writes again.
+#
+# However if you have setup your proper monitoring of the Redis server
+# and persistence, you may want to disable this feature so that Redis will
+# continue to work as usually even if there are problems with disk,
+# permissions, and so forth.
+stop-writes-on-bgsave-error yes
+
+# Compress string objects using LZF when dump .rdb databases?
+# For default that's set to 'yes' as it's almost always a win.
+# If you want to save some CPU in the saving child set it to 'no' but
+# the dataset will likely be bigger if you have compressible values or keys.
+rdbcompression yes
+
+# Since verison 5 of RDB a CRC64 checksum is placed at the end of the file.
+# This makes the format more resistant to corruption but there is a performance
+# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
+# for maximum performances.
+#
+# RDB files created with checksum disabled have a checksum of zero that will
+# tell the loading code to skip the check.
+rdbchecksum yes
+
+# The filename where to dump the DB
+dbfilename dump.rdb
+
+# The working directory.
+#
+# The DB will be written inside this directory, with the filename specified
+# above using the 'dbfilename' configuration directive.
+#
+# Also the Append Only File will be created inside this directory.
+#
+# Note that you must specify a directory here, not a file name.
+dir /var/lib/redis/
+
+################################# REPLICATION #################################
+
+# Master-Slave replication. Use slaveof to make a Redis instance a copy of
+# another Redis server. Note that the configuration is local to the slave
+# so for example it is possible to configure the slave to save the DB with a
+# different interval, or to listen to another port, and so on.
+#
+# slaveof <masterip> <masterport>
+
+# If the master is password protected (using the "requirepass" configuration
+# directive below) it is possible to tell the slave to authenticate before
+# starting the replication synchronization process, otherwise the master will
+# refuse the slave request.
+#
+# masterauth <master-password>
+
+# When a slave lost the connection with the master, or when the replication
+# is still in progress, the slave can act in two different ways:
+#
+# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
+# still reply to client requests, possibly with out of date data, or the
+# data set may just be empty if this is the first synchronization.
+#
+# 2) if slave-serve-stale data is set to 'no' the slave will reply with
+# an error "SYNC with master in progress" to all the kind of commands
+# but to INFO and SLAVEOF.
+#
+slave-serve-stale-data yes
+
+# You can configure a slave instance to accept writes or not. Writing against
+# a slave instance may be useful to store some ephemeral data (because data
+# written on a slave will be easily deleted after resync with the master) but
+# may also cause problems if clients are writing to it because of a
+# misconfiguration.
+#
+# Since Redis 2.6 by default slaves are read-only.
+#
+# Note: read only slaves are not designed to be exposed to untrusted clients
+# on the internet. It's just a protection layer against misuse of the instance.
+# Still a read only slave exports by default all the administrative commands
+# such as CONFIG, DEBUG, and so forth. To a limited extend you can improve
+# security of read only slaves using 'rename-command' to shadow all the
+# administrative / dangerous commands.
+slave-read-only yes
+
+# Slaves send PINGs to server in a predefined interval. It's possible to change
+# this interval with the repl_ping_slave_period option. The default value is 10
+# seconds.
+#
+# repl-ping-slave-period 10
+
+# The following option sets a timeout for both Bulk transfer I/O timeout and
+# master data or ping response timeout. The default value is 60 seconds.
+#
+# It is important to make sure that this value is greater than the value
+# specified for repl-ping-slave-period otherwise a timeout will be detected
+# every time there is low traffic between the master and the slave.
+#
+# repl-timeout 60
+
+# The slave priority is an integer number published by Redis in the INFO output.
+# It is used by Redis Sentinel in order to select a slave to promote into a
+# master if the master is no longer working correctly.
+#
+# A slave with a low priority number is considered better for promotion, so
+# for instance if there are three slaves with priority 10, 100, 25 Sentinel will
+# pick the one wtih priority 10, that is the lowest.
+#
+# However a special priority of 0 marks the slave as not able to perform the
+# role of master, so a slave with priority of 0 will never be selected by
+# Redis Sentinel for promotion.
+#
+# By default the priority is 100.
+slave-priority 100
+
+################################## SECURITY ###################################
+
+# Require clients to issue AUTH <PASSWORD> before processing any other
+# commands. This might be useful in environments in which you do not trust
+# others with access to the host running redis-server.
+#
+# This should stay commented out for backward compatibility and because most
+# people do not need auth (e.g. they run their own servers).
+#
+# Warning: since Redis is pretty fast an outside user can try up to
+# 150k passwords per second against a good box. This means that you should
+# use a very strong password otherwise it will be very easy to break.
+#
+# requirepass foobared
+
+# Command renaming.
+#
+# It is possible to change the name of dangerous commands in a shared
+# environment. For instance the CONFIG command may be renamed into something
+# of hard to guess so that it will be still available for internal-use
+# tools but not available for general clients.
+#
+# Example:
+#
+# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
+#
+# It is also possible to completely kill a command renaming it into
+# an empty string:
+#
+# rename-command CONFIG ""
+
+################################### LIMITS ####################################
+
+# Set the max number of connected clients at the same time. By default
+# this limit is set to 10000 clients, however if the Redis server is not
+# able ot configure the process file limit to allow for the specified limit
+# the max number of allowed clients is set to the current file limit
+# minus 32 (as Redis reserves a few file descriptors for internal uses).
+#
+# Once the limit is reached Redis will close all the new connections sending
+# an error 'max number of clients reached'.
+#
+# maxclients 10000
+
+# Don't use more memory than the specified amount of bytes.
+# When the memory limit is reached Redis will try to remove keys
+# accordingly to the eviction policy selected (see maxmemmory-policy).
+#
+# If Redis can't remove keys according to the policy, or if the policy is
+# set to 'noeviction', Redis will start to reply with errors to commands
+# that would use more memory, like SET, LPUSH, and so on, and will continue
+# to reply to read-only commands like GET.
+#
+# This option is usually useful when using Redis as an LRU cache, or to set
+# an hard memory limit for an instance (using the 'noeviction' policy).
+#
+# WARNING: If you have slaves attached to an instance with maxmemory on,
+# the size of the output buffers needed to feed the slaves are subtracted
+# from the used memory count, so that network problems / resyncs will
+# not trigger a loop where keys are evicted, and in turn the output
+# buffer of slaves is full with DELs of keys evicted triggering the deletion
+# of more keys, and so forth until the database is completely emptied.
+#
+# In short... if you have slaves attached it is suggested that you set a lower
+# limit for maxmemory so that there is some free RAM on the system for slave
+# output buffers (but this is not needed if the policy is 'noeviction').
+#
+# maxmemory <bytes>
+
+# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
+# is reached? You can select among five behavior:
+#
+# volatile-lru -> remove the key with an expire set using an LRU algorithm
+# allkeys-lru -> remove any key accordingly to the LRU algorithm
+# volatile-random -> remove a random key with an expire set
+# allkeys-random -> remove a random key, any key
+# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
+# noeviction -> don't expire at all, just return an error on write operations
+#
+# Note: with all the kind of policies, Redis will return an error on write
+# operations, when there are not suitable keys for eviction.
+#
+# At the date of writing this commands are: set setnx setex append
+# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
+# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
+# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
+# getset mset msetnx exec sort
+#
+# The default is:
+#
+# maxmemory-policy volatile-lru
+
+# LRU and minimal TTL algorithms are not precise algorithms but approximated
+# algorithms (in order to save memory), so you can select as well the sample
+# size to check. For instance for default Redis will check three keys and
+# pick the one that was used less recently, you can change the sample size
+# using the following configuration directive.
+#
+# maxmemory-samples 3
+
+############################## APPEND ONLY MODE ###############################
+
+# By default Redis asynchronously dumps the dataset on disk. This mode is
+# good enough in many applications, but an issue with the Redis process or
+# a power outage may result into a few minutes of writes lost (depending on
+# the configured save points).
+#
+# The Append Only File is an alternative persistence mode that provides
+# much better durability. For instance using the default data fsync policy
+# (see later in the config file) Redis can lose just one second of writes in a
+# dramatic event like a server power outage, or a single write if something
+# wrong with the Redis process itself happens, but the operating system is
+# still running correctly.
+#
+# AOF and RDB persistence can be enabled at the same time without problems.
+# If the AOF is enabled on startup Redis will load the AOF, that is the file
+# with the better durability guarantees.
+#
+# Please check http://redis.io/topics/persistence for more information.
+
+#
+# OE: changed default to enable this
+appendonly yes
+
+# The name of the append only file (default: "appendonly.aof")
+# appendfilename appendonly.aof
+
+# The fsync() call tells the Operating System to actually write data on disk
+# instead to wait for more data in the output buffer. Some OS will really flush
+# data on disk, some other OS will just try to do it ASAP.
+#
+# Redis supports three different modes:
+#
+# no: don't fsync, just let the OS flush the data when it wants. Faster.
+# always: fsync after every write to the append only log . Slow, Safest.
+# everysec: fsync only one time every second. Compromise.
+#
+# The default is "everysec" that's usually the right compromise between
+# speed and data safety. It's up to you to understand if you can relax this to
+# "no" that will let the operating system flush the output buffer when
+# it wants, for better performances (but if you can live with the idea of
+# some data loss consider the default persistence mode that's snapshotting),
+# or on the contrary, use "always" that's very slow but a bit safer than
+# everysec.
+#
+# More details please check the following article:
+# http://antirez.com/post/redis-persistence-demystified.html
+#
+# If unsure, use "everysec".
+
+# appendfsync always
+appendfsync everysec
+# appendfsync no
+
+# When the AOF fsync policy is set to always or everysec, and a background
+# saving process (a background save or AOF log background rewriting) is
+# performing a lot of I/O against the disk, in some Linux configurations
+# Redis may block too long on the fsync() call. Note that there is no fix for
+# this currently, as even performing fsync in a different thread will block
+# our synchronous write(2) call.
+#
+# In order to mitigate this problem it's possible to use the following option
+# that will prevent fsync() from being called in the main process while a
+# BGSAVE or BGREWRITEAOF is in progress.
+#
+# This means that while another child is saving the durability of Redis is
+# the same as "appendfsync none", that in practical terms means that it is
+# possible to lost up to 30 seconds of log in the worst scenario (with the
+# default Linux settings).
+#
+# If you have latency problems turn this to "yes". Otherwise leave it as
+# "no" that is the safest pick from the point of view of durability.
+no-appendfsync-on-rewrite no
+
+# Automatic rewrite of the append only file.
+# Redis is able to automatically rewrite the log file implicitly calling
+# BGREWRITEAOF when the AOF log size will growth by the specified percentage.
+#
+# This is how it works: Redis remembers the size of the AOF file after the
+# latest rewrite (or if no rewrite happened since the restart, the size of
+# the AOF at startup is used).
+#
+# This base size is compared to the current size. If the current size is
+# bigger than the specified percentage, the rewrite is triggered. Also
+# you need to specify a minimal size for the AOF file to be rewritten, this
+# is useful to avoid rewriting the AOF file even if the percentage increase
+# is reached but it is still pretty small.
+#
+# Specify a percentage of zero in order to disable the automatic AOF
+# rewrite feature.
+
+auto-aof-rewrite-percentage 100
+auto-aof-rewrite-min-size 64mb
+
+################################ LUA SCRIPTING ###############################
+
+# Max execution time of a Lua script in milliseconds.
+#
+# If the maximum execution time is reached Redis will log that a script is
+# still in execution after the maximum allowed time and will start to
+# reply to queries with an error.
+#
+# When a long running script exceed the maximum execution time only the
+# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
+# used to stop a script that did not yet called write commands. The second
+# is the only way to shut down the server in the case a write commands was
+# already issue by the script but the user don't want to wait for the natural
+# termination of the script.
+#
+# Set it to 0 or a negative value for unlimited execution without warnings.
+lua-time-limit 5000
+
+################################## SLOW LOG ###################################
+
+# The Redis Slow Log is a system to log queries that exceeded a specified
+# execution time. The execution time does not include the I/O operations
+# like talking with the client, sending the reply and so forth,
+# but just the time needed to actually execute the command (this is the only
+# stage of command execution where the thread is blocked and can not serve
+# other requests in the meantime).
+#
+# You can configure the slow log with two parameters: one tells Redis
+# what is the execution time, in microseconds, to exceed in order for the
+# command to get logged, and the other parameter is the length of the
+# slow log. When a new command is logged the oldest one is removed from the
+# queue of logged commands.
+
+# The following time is expressed in microseconds, so 1000000 is equivalent
+# to one second. Note that a negative number disables the slow log, while
+# a value of zero forces the logging of every command.
+slowlog-log-slower-than 10000
+
+# There is no limit to this length. Just be aware that it will consume memory.
+# You can reclaim memory used by the slow log with SLOWLOG RESET.
+slowlog-max-len 128
+
+############################### ADVANCED CONFIG ###############################
+
+# Hashes are encoded using a memory efficient data structure when they have a
+# small number of entries, and the biggest entry does not exceed a given
+# threshold. These thresholds can be configured using the following directives.
+hash-max-ziplist-entries 512
+hash-max-ziplist-value 64
+
+# Similarly to hashes, small lists are also encoded in a special way in order
+# to save a lot of space. The special representation is only used when
+# you are under the following limits:
+list-max-ziplist-entries 512
+list-max-ziplist-value 64
+
+# Sets have a special encoding in just one case: when a set is composed
+# of just strings that happens to be integers in radix 10 in the range
+# of 64 bit signed integers.
+# The following configuration setting sets the limit in the size of the
+# set in order to use this special memory saving encoding.
+set-max-intset-entries 512
+
+# Similarly to hashes and lists, sorted sets are also specially encoded in
+# order to save a lot of space. This encoding is only used when the length and
+# elements of a sorted set are below the following limits:
+zset-max-ziplist-entries 128
+zset-max-ziplist-value 64
+
+# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
+# order to help rehashing the main Redis hash table (the one mapping top-level
+# keys to values). The hash table implementation Redis uses (see dict.c)
+# performs a lazy rehashing: the more operation you run into an hash table
+# that is rehashing, the more rehashing "steps" are performed, so if the
+# server is idle the rehashing is never complete and some more memory is used
+# by the hash table.
+#
+# The default is to use this millisecond 10 times every second in order to
+# active rehashing the main dictionaries, freeing memory when possible.
+#
+# If unsure:
+# use "activerehashing no" if you have hard latency requirements and it is
+# not a good thing in your environment that Redis can reply form time to time
+# to queries with 2 milliseconds delay.
+#
+# use "activerehashing yes" if you don't have such hard requirements but
+# want to free memory asap when possible.
+activerehashing yes
+
+# The client output buffer limits can be used to force disconnection of clients
+# that are not reading data from the server fast enough for some reason (a
+# common reason is that a Pub/Sub client can't consume messages as fast as the
+# publisher can produce them).
+#
+# The limit can be set differently for the three different classes of clients:
+#
+# normal -> normal clients
+# slave -> slave clients and MONITOR clients
+# pubsub -> clients subcribed to at least one pubsub channel or pattern
+#
+# The syntax of every client-output-buffer-limit directive is the following:
+#
+# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
+#
+# A client is immediately disconnected once the hard limit is reached, or if
+# the soft limit is reached and remains reached for the specified number of
+# seconds (continuously).
+# So for instance if the hard limit is 32 megabytes and the soft limit is
+# 16 megabytes / 10 seconds, the client will get disconnected immediately
+# if the size of the output buffers reach 32 megabytes, but will also get
+# disconnected if the client reaches 16 megabytes and continuously overcomes
+# the limit for 10 seconds.
+#
+# By default normal clients are not limited because they don't receive data
+# without asking (in a push way), but just after a request, so only
+# asynchronous clients may create a scenario where data is requested faster
+# than it can read.
+#
+# Instead there is a default limit for pubsub and slave clients, since
+# subscribers and slaves receive data in a push fashion.
+#
+# Both the hard or the soft limit can be disabled just setting it to zero.
+client-output-buffer-limit normal 0 0 0
+client-output-buffer-limit slave 256mb 64mb 60
+client-output-buffer-limit pubsub 32mb 8mb 60
+
+################################## INCLUDES ###################################
+
+# Include one or more other config files here. This is useful if you
+# have a standard template that goes to all Redis server but also need
+# to customize a few per-server settings. Include files can include
+# other files, so use this wisely.
+#
+# include /path/to/local.conf
+# include /path/to/other.conf
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.service b/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.service
new file mode 100644
index 000000000..36d29852d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/redis.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Redis In-Memory Data Store
+After=network.target
+
+[Service]
+User=redis
+Group=redis
+ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
+ExecStop=/usr/bin/redis-cli shutdown
+Restart=always
+LimitNOFILE=10032
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_3.0.2.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_3.0.2.bb
new file mode 100644
index 000000000..9395b33b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_3.0.2.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Redis key-value store"
+DESCRIPTION = "Redis is an open source, advanced key-value store."
+HOMEPAGE = "http://redis.io"
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3c01b49fed4df1a79843688fa3f7b9d6"
+DEPENDS = ""
+
+SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
+ file://hiredis-use-default-CC-if-it-is-set.patch \
+ file://lua-update-Makefile-to-use-environment-build-setting.patch \
+ file://oe-use-libc-malloc.patch \
+ file://redis.conf \
+ file://init-redis-server \
+ file://redis.service \
+ file://hiredis-update-Makefile-to-add-symbols-to-staticlib.patch \
+"
+
+SRC_URI[md5sum] = "87be8867447f62524b584813e5a7bd14"
+SRC_URI[sha256sum] = "93e422c0d584623601f89b956045be158889ebe594478a2c24e1bf218495633f"
+
+inherit autotools-brokensep update-rc.d systemd useradd
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --home-dir /var/lib/redis -g redis --shell /bin/false redis"
+GROUPADD_PARAM_${PN} = "--system redis"
+
+
+REDIS_ON_SYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}"
+
+do_install() {
+ export PREFIX=${D}/${prefix}
+ oe_runmake install
+ install -d ${D}/${sysconfdir}/redis
+ install -m 0644 ${WORKDIR}/redis.conf ${D}/${sysconfdir}/redis/redis.conf
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init-redis-server ${D}/${sysconfdir}/init.d/redis-server
+ install -d ${D}/var/lib/redis/
+ chown redis.redis ${D}/var/lib/redis/
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/redis.service ${D}${systemd_system_unitdir}
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${systemd_system_unitdir}/redis.service
+
+ if [ "${REDIS_ON_SYSTEMD}" = true ]; then
+ sed -i 's!daemonize yes!# daemonize yes!' ${D}/${sysconfdir}/redis/redis.conf
+ fi
+}
+
+CONFFILES_${PN} = "${sysconfdir}/redis/redis.conf"
+
+INITSCRIPT_NAME = "redis-server"
+INITSCRIPT_PARAMS = "defaults 87"
+
+SYSTEMD_SERVICE_${PN} = "redis.service"
diff --git a/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.6.0.bb b/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.6.0.bb
new file mode 100644
index 000000000..797bcaaee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.6.0.bb
@@ -0,0 +1,128 @@
+SUMMARY = "High performance data logging and graphing system for time series data"
+HOMEPAGE = "http://oss.oetiker.ch/rrdtool/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=3349111ed0533471494beec99715bc9d"
+
+DEPENDS = "libpng zlib cairo pango glib-2.0 libxml2 groff-native"
+
+SRCREV = "61f116744262c4c18922dcf806e496715f199669"
+PV = "1.6.0"
+
+SRC_URI = "\
+ git://github.com/oetiker/rrdtool-1.x.git;branch=1.6;protocol=http; \
+"
+
+S = "${WORKDIR}/git"
+
+inherit cpan autotools-brokensep gettext pythonnative python-dir systemd
+
+BBCLASSEXTEND = "native"
+
+SYSTEMD_PACKAGES = "rrdcached"
+SYSTEMD_SERVICE_rrdcached = "rrdcached.socket rrdcached.service"
+
+EXTRA_AUTORECONF = "-I m4 --exclude=autopoint"
+
+PACKAGECONFIG ??= "python perl ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+PACKAGECONFIG[python] = "--enable-python=yes \
+am_cv_python_pythondir=${STAGING_LIBDIR}/python${PYTHON_BASEVERSION}/site-packages \
+am_cv_python_pyexecdir=${STAGING_LIBDIR}/python${PYTHON_BASEVERSION}/site-packages,\
+--disable-python,python,"
+
+PACKAGECONFIG[perl] = \
+"--enable-perl=yes --with-perl-options='INSTALLDIRS="vendor"' \
+ac_cv_path_PERL_CC='${CC}', \
+--disable-perl,perl,"
+
+PACKAGECONFIG[dbi] = "--enable-libdbi,--disable-libdbi,libdbi"
+
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd,"
+
+EXTRA_OECONF = " \
+ --enable-shared \
+ --disable-libwrap \
+ --program-prefix='' \
+ rd_cv_ieee_works=yes \
+ --disable-ruby \
+ --disable-lua \
+ --disable-tcl \
+ --disable-rpath \
+ --enable-nls=${USE_NLS} \
+"
+
+export STAGING_LIBDIR
+export STAGING_INCDIR
+
+# emulate cpan_do_configure
+EXTRA_OEMAKE = ' PERL5LIB="${PERL_ARCHLIB}" '
+# Avoid do_configure error on some hosts
+
+do_configure() {
+ unset PERLHOSTLIB
+ #fix the pkglib problem with newer automake
+ #perl
+ sed -i -e "s|-Wl,--rpath -Wl,\$rp||g" \
+ ${S}/bindings/perl-shared/Makefile.PL
+
+ #python
+ sed -i -e '/PYTHON_INCLUDES="-I${/c \
+ PYTHON_INCLUDES="-I=/usr/include/python${PYTHON_BASEVERSION}"' \
+ ${S}/m4/acinclude.m4
+ #remove the useless RPATH from the rrdtool.so
+ sed -i -e 's|LD_RUN_PATH=$(libdir)||g' ${S}/bindings/Makefile.am
+
+ autotools_do_configure
+
+ #modify python sitepkg
+ #remove the dependency of perl-shared:Makefile
+ #or perl-shared/Makefile will be regenerated
+ #if any code touch bindings/Makefile after below perl bindings code
+ sed -i -e "s:python/setup.py install:python/setup.py install \
+ --install-lib=${PYTHON_SITEPACKAGES_DIR}:" \
+ -e "s:perl-shared/Makefile.PL Makefile:perl-shared/Makefile.PL:" \
+ ${B}/bindings/Makefile
+
+ #redo the perl bindings
+ (
+ cd ${S}/bindings/perl-shared;
+ perl Makefile.PL INSTALLDIRS="vendor" INSTALLPRIVLIB="abc";
+
+ cd ../../bindings/perl-piped;
+ perl Makefile.PL INSTALLDIRS="vendor";
+ )
+
+ #change the interpreter in file
+ sed -i -e "s|^PERL = ${STAGING_BINDIR_NATIVE}/.*|PERL = /usr/bin/perl|g" \
+ ${B}/examples/Makefile
+ sed -i -e "s|${STAGING_BINDIR_NATIVE}/perl-native/perl|/usr/bin/perl|g" \
+ ${B}/examples/*.pl
+}
+
+PACKAGES =+ "${PN}-perl ${PN}-python"
+PACKAGES =+ "rrdcached"
+
+DESCRIPTION_rrdcached = \
+"The rrdcached package contains the data caching daemon for RRDtool."
+
+FILES_rrdcached = "${bindir}/rrdcached \
+ ${systemd_unitdir}/system/rrdcached.service \
+ ${systemd_unitdir}/system/rrdcached.socket"
+
+FILES_${PN}-doc += "${datadir}/rrdtool/examples"
+
+DESCRIPTION_${PN}-perl = \
+"The ${PN}-perl package includes RRDtool bindings for perl."
+FILES_${PN}-perl = "${libdir}/perl/vendor_perl/*/*.pm \
+ ${libdir}/perl/vendor_perl/*/auto/RRDs/RRDs.*"
+RDEPENDS_${PN}-perl = "perl perl-module-lib perl-module-getopt-long perl-module-time-hires \
+ perl-module-io-file perl-module-ipc-open2 perl-module-io-socket"
+
+DESCRIPTION_${PN}-python = \
+"The ${PN}-python package includes RRDtool bindings for python."
+FILES_${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/*"
+RDEPENDS_${PN}-python = "python"
+
+FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/RRDs/.debug \
+ ${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.4.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.4.bb
new file mode 100644
index 000000000..2e23d7ec6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A fork of json-c library"
+HOMEPAGE = "https://github.com/rsyslog/libfastjson"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a958bb07122368f3e1d9b2efe07d231f"
+
+DEPENDS = ""
+
+SRC_URI = "git://github.com/rsyslog/libfastjson.git;protocol=https"
+
+SRCREV = "6e057a094cb225c9d80d8d6e6b1f36ca88a942dd"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.2.14.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.2.14.bb
new file mode 100644
index 000000000..28047eb54
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.2.14.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A reliable logging library"
+HOMEPAGE = "https://github.com/rsyslog/libfastjson"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1fb9c10ed9fd6826757615455ca893a9"
+
+DEPENDS = "gmp nettle libidn zlib gnutls"
+
+SRC_URI = "git://github.com/rsyslog/librelp.git;protocol=https"
+
+SRCREV = "fc512e337bfc7c92770246dbff5f482b879498b9"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/0001-Include-sys-time-h.patch b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/0001-Include-sys-time-h.patch
new file mode 100644
index 000000000..ca88dd3f7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/0001-Include-sys-time-h.patch
@@ -0,0 +1,31 @@
+From 9739095de6ae5f844354756ae968f5f8864eb3e3 Mon Sep 17 00:00:00 2001
+From: Ming Liu <peter.x.liu@external.atlascopco.com>
+Date: Sun, 26 Feb 2017 14:10:21 +0100
+Subject: [PATCH] Include sys/time.h
+
+struct timeval is defined in sys/time.h with a musl libc.
+
+Upstream-Status: Inappropriate [musl libc specific]
+
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+
+---
+ tests/msleep.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/tests/msleep.c b/tests/msleep.c
+index 26a8206..ca818be 100644
+--- a/tests/msleep.c
++++ b/tests/msleep.c
+@@ -26,11 +26,7 @@
+ #include "config.h"
+ #include <stdio.h>
+ #include <stdlib.h>
+-#if defined(__FreeBSD__)
+ #include <sys/time.h>
+-#else
+-#include <time.h>
+-#endif
+
+ int main(int argc, char *argv[])
+ {
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/initscript b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/initscript
new file mode 100644
index 000000000..7a8f8f991
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/initscript
@@ -0,0 +1,118 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/rsyslog and type
+# > update-rc.d rsyslog defaults 5
+#
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+NAME=rsyslog
+RSYSLOGD=rsyslogd
+RSYSLOGD_BIN=/usr/sbin/rsyslogd
+RSYSLOGD_OPTIONS=""
+RSYSLOGD_PIDFILE=/var/run/rsyslogd.pid
+SCRIPTNAME=/etc/init.d/$NAME
+# Exit if the package is not installed
+[ -x "$RSYSLOGD_BIN" ] || exit 0
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ DAEMON=$1
+ DAEMON_ARGS=$2
+ PIDFILE=$3
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon could not be started
+ # if daemon had already been started, start-stop-daemon will return 1
+ # so add -o/--oknodo(if nothing is done, exit 0)
+ start-stop-daemon -S --quiet --pidfile $PIDFILE --exec $DAEMON \
+ --oknodo -- $DAEMON_ARGS || return 1
+}
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ NAME=$1
+ PIDFILE=$2
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ # QUIT/TERM/INT should work here, but they don't ?????
+ start-stop-daemon -K --quiet --signal KILL --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ NAME=$1
+ PIDFILE=$2
+ start-stop-daemon -K --signal HUP --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+do_status() {
+ NAME=$1
+ PIDFILE=$2
+ # -t: test only but not stop
+ start-stop-daemon -K -t --quiet --pidfile $PIDFILE --name $NAME
+ # exit with status 0 if process is found
+ if [ "$?" = "0" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+case "$1" in
+ start)
+ echo -n "starting $RSYSLOGD ... "
+ do_start "$RSYSLOGD_BIN" "$RSYSLOGD_OPTIONS" "$RSYSLOGD_PIDFILE"
+ case "$?" in
+ 0) echo "done" ;;
+ 1) echo "failed" ;;
+ esac
+ ;;
+ stop)
+ echo -n "stopping $RSYSLOGD ... "
+ do_stop "$RSYSLOGD" "$RSYSLOGD_PIDFILE"
+ case "$?" in
+ 0|1) echo "done" ;;
+ 2) echo "failed" ;;
+ esac
+ ;;
+ reload|force-reload)
+ echo -n "reloading $RSYSLOGD ... "
+ do_reload "$RSYSLOGD" "$RSYSLOGD_PIDFILE"
+ echo "done"
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ status)
+ echo -n "status $RSYSLOGD ... "
+ do_status "$RSYSLOGD" "$RSYSLOGD_PIDFILE"
+ if [ "$?" = "0" ]; then
+ echo "running"
+ exit 0
+ else
+ echo "stopped"
+ exit 1
+ fi
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
+ exit 3
+ ;;
+esac
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog-fix-ptest-not-finish.patch b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog-fix-ptest-not-finish.patch
new file mode 100644
index 000000000..a248f75e5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog-fix-ptest-not-finish.patch
@@ -0,0 +1,118 @@
+From 07ad2a1905089b9124623324a9969e4522317110 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Fri, 12 Sep 2014 03:41:11 -0400
+Subject: [PATCH] rsyslog: update configure to fix ptest
+
+$MaxMessageSize doesn't work if before $IncludeConfig diag-common.conf, then
+test cases fall into infinite loop with error message:
+
+8062.511110729:4902c480: error: message received is larger than max msg size, we split it
+8062.511152265:4902c480: discarding zero-sized message
+
+Update configure to fix it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ tests/testsuites/complex1.conf | 2 +-
+ tests/testsuites/gzipwr_large.conf | 2 +-
+ tests/testsuites/gzipwr_large_dynfile.conf | 2 +-
+ tests/testsuites/imptcp_conndrop.conf | 2 +-
+ tests/testsuites/imptcp_large.conf | 2 +-
+ tests/testsuites/imtcp_conndrop.conf | 2 +-
+ tests/testsuites/wr_large.conf | 2 +-
+ 7 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/tests/testsuites/complex1.conf b/tests/testsuites/complex1.conf
+index 9b6a9f3..e00caa4 100644
+--- a/tests/testsuites/complex1.conf
++++ b/tests/testsuites/complex1.conf
+@@ -1,7 +1,7 @@
+ # complex test case with multiple actions in gzip mode
+ # rgerhards, 2009-05-22
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $MainMsgQueueTimeoutEnqueue 5000
+
+diff --git a/tests/testsuites/gzipwr_large.conf b/tests/testsuites/gzipwr_large.conf
+index 54ad3bb..e8247a9 100644
+--- a/tests/testsuites/gzipwr_large.conf
++++ b/tests/testsuites/gzipwr_large.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imtcp/.libs/imtcp
+ $MainMsgQueueTimeoutShutdown 10000
+diff --git a/tests/testsuites/gzipwr_large_dynfile.conf b/tests/testsuites/gzipwr_large_dynfile.conf
+index 3a1b255..297cb70 100644
+--- a/tests/testsuites/gzipwr_large_dynfile.conf
++++ b/tests/testsuites/gzipwr_large_dynfile.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imtcp/.libs/imtcp
+ $MainMsgQueueTimeoutShutdown 10000
+diff --git a/tests/testsuites/imptcp_conndrop.conf b/tests/testsuites/imptcp_conndrop.conf
+index 77a5d79..d9a14a8 100644
+--- a/tests/testsuites/imptcp_conndrop.conf
++++ b/tests/testsuites/imptcp_conndrop.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imptcp/.libs/imptcp
+ $MainMsgQueueTimeoutShutdown 10000
+diff --git a/tests/testsuites/imptcp_large.conf b/tests/testsuites/imptcp_large.conf
+index 77a5d79..d9a14a8 100644
+--- a/tests/testsuites/imptcp_large.conf
++++ b/tests/testsuites/imptcp_large.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imptcp/.libs/imptcp
+ $MainMsgQueueTimeoutShutdown 10000
+diff --git a/tests/testsuites/imtcp_conndrop.conf b/tests/testsuites/imtcp_conndrop.conf
+index de41bc4..7844dc7 100644
+--- a/tests/testsuites/imtcp_conndrop.conf
++++ b/tests/testsuites/imtcp_conndrop.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imtcp/.libs/imtcp
+ $MainMsgQueueTimeoutShutdown 10000
+diff --git a/tests/testsuites/wr_large.conf b/tests/testsuites/wr_large.conf
+index b64f132..b0ae264 100644
+--- a/tests/testsuites/wr_large.conf
++++ b/tests/testsuites/wr_large.conf
+@@ -1,7 +1,7 @@
+ # simple async writing test
+ # rgerhards, 2010-03-09
+-$MaxMessageSize 10k
+ $IncludeConfig diag-common.conf
++$MaxMessageSize 10k
+
+ $ModLoad ../plugins/imtcp/.libs/imtcp
+ $MainMsgQueueTimeoutShutdown 10000
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.conf b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.conf
new file mode 100644
index 000000000..324ae6d82
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.conf
@@ -0,0 +1,86 @@
+# if you experience problems, check
+# http://www.rsyslog.com/troubleshoot for assistance
+
+# rsyslog v3: load input modules
+# If you do not load inputs, nothing happens!
+# You may need to set the module load path if modules are not found.
+#
+# Ported from debian's sysklogd.conf
+
+$ModLoad immark # provides --MARK-- message capability
+$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
+$ModLoad imklog # kernel logging (formerly provided by rklogd)
+
+#
+# Set the default permissions
+#
+$FileOwner root
+$FileGroup adm
+$FileCreateMode 0640
+$DirCreateMode 0755
+$Umask 0022
+
+auth,authpriv.* /var/log/auth.log
+*.*;auth,authpriv.none -/var/log/syslog
+cron.* /var/log/cron.log
+daemon.* -/var/log/daemon.log
+kern.* -/var/log/kern.log
+lpr.* -/var/log/lpr.log
+mail.* -/var/log/mail.log
+user.* -/var/log/user.log
+
+#
+# Logging for the mail system. Split it up so that
+# it is easy to write scripts to parse these files.
+#
+mail.info -/var/log/mail.info
+mail.warn -/var/log/mail.warn
+mail.err /var/log/mail.err
+
+# Logging for INN news system
+#
+news.crit /var/log/news.crit
+news.err /var/log/news.err
+news.notice -/var/log/news.notice
+
+#
+# Some `catch-all' logfiles.
+#
+*.=debug;\
+ auth,authpriv.none;\
+ news.none;mail.none -/var/log/debug
+*.=info;*.=notice;*.=warn;\
+ auth,authpriv.none;\
+ cron,daemon.none;\
+ mail,news.none -/var/log/messages
+
+#
+# Emergencies are sent to everybody logged in.
+#
+*.emerg :omusrmsg:*
+
+# Save boot messages also to boot.log
+local7.* /var/log/boot.log
+
+# Remote Logging (we use TCP for reliable delivery)
+# An on-disk queue is created for this action. If the remote host is
+# down, messages are spooled to disk and sent when it is up again.
+#$WorkDirectory /var/spool/rsyslog # where to place spool files
+#$ActionQueueFileName uniqName # unique name prefix for spool files
+$ActionQueueMaxDiskSpace 10m # 1gb space limit (use as much as possible)
+#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
+#$ActionQueueType LinkedList # run asynchronously
+#$ActionResumeRetryCount -1 # infinite retries if host is down
+# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
+#*.* @@remote-host:514
+
+
+# ######### Receiving Messages from Remote Hosts ##########
+# TCP Syslog Server:
+# provides TCP syslog reception and GSS-API (if compiled to support it)
+#$ModLoad imtcp.so # load module
+#$InputTCPServerRun 514 # start up TCP listener at port 514
+
+# UDP Syslog Server:
+#$ModLoad imudp.so # provides UDP syslog reception
+#$UDPServerRun 514 # start a UDP syslog server at standard port 514
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate
new file mode 100644
index 000000000..94ec517b2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate
@@ -0,0 +1,39 @@
+# /etc/logrotate.d/rsyslog - Ported from Debian
+
+/var/log/syslog
+{
+ rotate 7
+ daily
+ missingok
+ notifempty
+ delaycompress
+ compress
+ postrotate
+ /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
+ endscript
+}
+
+/var/log/mail.info
+/var/log/mail.warn
+/var/log/mail.err
+/var/log/mail.log
+/var/log/daemon.log
+/var/log/kern.log
+/var/log/auth.log
+/var/log/user.log
+/var/log/lpr.log
+/var/log/cron.log
+/var/log/debug
+/var/log/messages
+{
+ rotate 4
+ weekly
+ missingok
+ notifempty
+ compress
+ delaycompress
+ sharedscripts
+ postrotate
+ /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
+ endscript
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest
new file mode 100644
index 000000000..3770a7506
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+#
+make -C tests -k check-TESTS
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/use-pkgconfig-to-check-libgcrypt.patch b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/use-pkgconfig-to-check-libgcrypt.patch
new file mode 100644
index 000000000..162d239a1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/use-pkgconfig-to-check-libgcrypt.patch
@@ -0,0 +1,43 @@
+From d0852006bf3d305e8984b85b41997d43d4476937 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Wed, 18 Jun 2014 13:46:52 +0800
+Subject: [PATCH] use pkgconfig to check libgcrypt
+
+Upstream-status: Inappropriate [configuration]
+
+libgcrypt does no longer provide libgcrypt-config, and provide
+*.pc, so we should use pkgconfig to check
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+
+---
+ configure.ac | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 62178c3..b56c9c7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -889,20 +889,7 @@ AC_ARG_ENABLE(libgcrypt,
+ [enable_libgcrypt=yes]
+ )
+ if test "x$enable_libgcrypt" = "xyes"; then
+- AC_PATH_PROG([LIBGCRYPT_CONFIG],[libgcrypt-config],[no])
+- if test "x${LIBGCRYPT_CONFIG}" = "xno"; then
+- AC_MSG_FAILURE([libgcrypt-config not found in PATH])
+- fi
+- AC_CHECK_LIB(
+- [gcrypt],
+- [gcry_cipher_open],
+- [LIBGCRYPT_CFLAGS="`${LIBGCRYPT_CONFIG} --cflags`"
+- LIBGCRYPT_LIBS="`${LIBGCRYPT_CONFIG} --libs`"
+- ],
+- [AC_MSG_FAILURE([libgcrypt is missing])],
+- [`${LIBGCRYPT_CONFIG} --libs --cflags`]
+- )
+- AC_DEFINE([ENABLE_LIBGCRYPT], [1], [Indicator that LIBGCRYPT is present])
++ PKG_CHECK_MODULES(LIBGCRYPT, libgcrypt)
+ fi
+ AM_CONDITIONAL(ENABLE_LIBGCRYPT, test x$enable_libgcrypt = xyes)
+ AC_SUBST(LIBGCRYPT_CFLAGS)
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.29.0.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.29.0.bb
new file mode 100644
index 000000000..476540d0a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.29.0.bb
@@ -0,0 +1,150 @@
+SUMMARY = "Rsyslog is an enhanced multi-threaded syslogd"
+DESCRIPTION = "\
+Rsyslog is an enhanced syslogd supporting, among others, MySQL,\
+ PostgreSQL, failover log destinations, syslog/tcp, fine grain\
+ output format control, high precision timestamps, queued operations\
+ and the ability to filter on any message part. It is quite\
+ compatible to stock sysklogd and can be used as a drop-in replacement.\
+ Its advanced features make it suitable for enterprise-class,\
+ encryption protected syslog relay chains while at the same time being\
+ very easy to setup for the novice user."
+
+DEPENDS = "zlib libestr libfastjson bison-native flex-native liblogging"
+HOMEPAGE = "http://www.rsyslog.com/"
+LICENSE = "GPLv3 & LGPLv3 & Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=51d9635e646fb75e1b74c074f788e973 \
+ file://COPYING.LESSER;md5=cb7903f1e5c39ae838209e130dca270a \
+ file://COPYING.ASL20;md5=052f8a09206615ab07326ff8ce2d9d32\
+"
+
+SRC_URI = "http://www.rsyslog.com/download/files/download/rsyslog/${BPN}-${PV}.tar.gz \
+ file://initscript \
+ file://rsyslog.conf \
+ file://rsyslog.logrotate \
+ file://use-pkgconfig-to-check-libgcrypt.patch \
+ file://run-ptest \
+ file://rsyslog-fix-ptest-not-finish.patch \
+"
+
+SRC_URI_append_libc-musl = " \
+ file://0001-Include-sys-time-h.patch \
+"
+
+SRC_URI[md5sum] = "3805617f65a4b4bea34606487a5255a0"
+SRC_URI[sha256sum] = "220ba30b5afb0f3ddb328613fea7aa3966b01e4d0c52d6de9ab27b0858f19738"
+
+inherit autotools pkgconfig systemd update-rc.d ptest
+
+EXTRA_OECONF += "--disable-generate-man-pages ap_cv_atomic_builtins=yes"
+
+# first line is default yes in configure
+PACKAGECONFIG ??= " \
+ rsyslogd rsyslogrt klog inet regexp uuid libgcrypt \
+ imdiag gnutls imfile \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'snmp systemd', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'testbench relp ${VALGRIND}', '', d)} \
+"
+
+# default yes in configure
+PACKAGECONFIG[relp] = "--enable-relp,--disable-relp,librelp,"
+PACKAGECONFIG[rsyslogd] = "--enable-rsyslogd,--disable-rsyslogd,,"
+PACKAGECONFIG[rsyslogrt] = "--enable-rsyslogrt,--disable-rsyslogrt,,"
+PACKAGECONFIG[inet] = "--enable-inet,--disable-inet,,"
+PACKAGECONFIG[klog] = "--enable-klog,--disable-klog,,"
+PACKAGECONFIG[regexp] = "--enable-regexp,--disable-regexp,,"
+PACKAGECONFIG[uuid] = "--enable-uuid,--disable-uuid,util-linux,"
+PACKAGECONFIG[libgcrypt] = "--enable-libgcrypt,--disable-libgcrypt,libgcrypt,"
+PACKAGECONFIG[testbench] = "--enable-testbench --enable-omstdout,--disable-testbench --disable-omstdout,,"
+
+# default no in configure
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug,,"
+PACKAGECONFIG[imdiag] = "--enable-imdiag,--disable-imdiag,,"
+PACKAGECONFIG[imfile] = "--enable-imfile,--disable-imfile,,"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp,"
+PACKAGECONFIG[gnutls] = "--enable-gnutls,--disable-gnutls,gnutls,"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd,"
+PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5,"
+PACKAGECONFIG[postgresql] = "--enable-pgsql,--disable-pgsql,postgresql,"
+PACKAGECONFIG[libdbi] = "--enable-libdbi,--disable-libdbi,libdbi,"
+PACKAGECONFIG[mail] = "--enable-mail,--disable-mail,,"
+PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind,"
+
+TESTDIR = "tests"
+do_compile_ptest() {
+ echo 'buildtest-TESTS: $(check_PROGRAMS)' >> ${TESTDIR}/Makefile
+ oe_runmake -C ${TESTDIR} buildtest-TESTS
+}
+
+do_install_ptest() {
+ # install the tests
+ cp -rf ${S}/${TESTDIR} ${D}${PTEST_PATH}
+ cp -rf ${B}/${TESTDIR} ${D}${PTEST_PATH}
+
+ # do NOT need to rebuild Makefile itself
+ sed -i 's/^Makefile:.*$/Makefile:/' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+
+ # fix the srcdir, top_srcdir
+ sed -i 's,^\(srcdir = \).*,\1${PTEST_PATH}/tests,' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+ sed -i 's,^\(top_srcdir = \).*,\1${PTEST_PATH}/tests,' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+
+ # valgrind is not compatible with arm and mips,
+ # so remove related test cases if there is no valgrind.
+ if [ x${VALGRIND} = x ]; then
+ sed -i '/udp-msgreduc-/d' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+ fi
+
+ # install test-driver
+ install -m 644 ${S}/test-driver ${D}${PTEST_PATH}
+
+ # install necessary links
+ install -d ${D}${PTEST_PATH}/tools
+ ln -sf ${sbindir}/rsyslogd ${D}${PTEST_PATH}/tools/rsyslogd
+
+ install -d ${D}${PTEST_PATH}/runtime
+ install -d ${D}${PTEST_PATH}/runtime/.libs
+ (
+ cd ${D}/${libdir}/rsyslog
+ allso="*.so"
+ for i in $allso; do
+ ln -sf ${libdir}/rsyslog/$i ${D}${PTEST_PATH}/runtime/.libs/$i
+ done
+ )
+
+ # fix the module load path with runtime/.libs
+ find ${D}${PTEST_PATH}/${TESTDIR} -name "*.conf" -o -name "*.sh" -o -name "*.c" | xargs \
+ sed -i -e 's:../plugins/.*/.libs/:../runtime/.libs/:g'
+}
+
+do_install_append() {
+ install -d "${D}${sysconfdir}/init.d"
+ install -d "${D}${sysconfdir}/logrotate.d"
+ install -m 755 ${WORKDIR}/initscript ${D}${sysconfdir}/init.d/syslog
+ install -m 644 ${WORKDIR}/rsyslog.conf ${D}${sysconfdir}/rsyslog.conf
+ install -m 644 ${WORKDIR}/rsyslog.logrotate ${D}${sysconfdir}/logrotate.d/logrotate.rsyslog
+}
+
+FILES_${PN} += "${bindir}"
+
+INITSCRIPT_NAME = "syslog"
+INITSCRIPT_PARAMS = "defaults"
+
+CONFFILES_${PN} = "${sysconfdir}/rsyslog.conf"
+
+RCONFLICTS_${PN} = "busybox-syslog sysklogd syslog-ng"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "${BPN}.service"
+
+RDEPENDS_${PN} += "logrotate"
+
+# for rsyslog-ptest
+VALGRIND = "valgrind"
+VALGRIND_mips = ""
+VALGRIND_mips64 = ""
+VALGRIND_mips64n32 = ""
+VALGRIND_arm = ""
+VALGRIND_aarch64 = ""
+RDEPENDS_${PN}-ptest += "make diffutils gzip bash gawk coreutils procps"
+RRECOMMENDS_${PN}-ptest += "${TCLIBC}-dbg ${VALGRIND}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel/sblim-cmpi-devel-2.0.3-docdir.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel/sblim-cmpi-devel-2.0.3-docdir.patch
new file mode 100644
index 000000000..58940c1e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel/sblim-cmpi-devel-2.0.3-docdir.patch
@@ -0,0 +1,17 @@
+Port from Fedora20
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+
+diff -up sblim-cmpi-devel-2.0.3/Makefile.in.orig sblim-cmpi-devel-2.0.3/Makefile.in
+--- sblim-cmpi-devel-2.0.3/Makefile.in.orig 2012-07-31 06:11:51.000000000 +0200
++++ sblim-cmpi-devel-2.0.3/Makefile.in 2013-08-07 18:28:09.600712807 +0200
+@@ -221,7 +221,7 @@ build_vendor = @build_vendor@
+ builddir = @builddir@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+-docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
++docdir = $(datadir)/doc/$(PACKAGE)
+ dvidir = @dvidir@
+ exec_prefix = @exec_prefix@
+ host = @host@
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel_2.0.3.bb b/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel_2.0.3.bb
new file mode 100644
index 000000000..0e5fc7b6b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-cmpi-devel/sblim-cmpi-devel_2.0.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "SBLIM CMPI Provider Development Support"
+DESCRIPTION = "\
+This packages provides the C and C++ CMPI header files needed by provider \
+developers and can be used standalone. If used for C++ provider development \
+it is also necessary to have tog-pegasus-devel installed."
+HOMEPAGE = "http://sblim.wiki.sourceforge.net/"
+LICENSE = "EPL-1.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f63d3a4e701129e869e89d7dcac8982"
+SECTION = "Development/Libraries"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sblim/${BP}.tar.bz2 \
+ file://sblim-cmpi-devel-2.0.3-docdir.patch"
+SRC_URI[md5sum] = "b934616f88a848f17ca3cf1b9e792cbf"
+SRC_URI[sha256sum] = "1671cabff6b922b6fde897673d9fdafd56c9310f82a7eacc0547d596b9cdfea6"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfc-common/sblim-sfc-common_1.0.1.bb b/meta-openembedded/meta-oe/recipes-extended/sblim-sfc-common/sblim-sfc-common_1.0.1.bb
new file mode 100644
index 000000000..2a9b4bb88
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfc-common/sblim-sfc-common_1.0.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Common functions for SBLIM Small Footprint CIM Broker and CIM Client Library."
+DESCRIPTION = "\
+This package provides a common library for functions shared between Small Footprint CIM Broker (sblim-sfcb) \
+Small Footprint CIM Client (and sblim-sfcc)."
+HOMEPAGE = "http://sourceforge.net/projects/sblim/"
+LICENSE = "EPL"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f300afd598546add034364cd0a533261"
+SECTION = "Development/Libraries"
+
+DEPENDS = "cmpi-bindings"
+
+S = "${WORKDIR}/sblim-sfcCommon-${PV}"
+SRC_URI = "http://downloads.sourceforge.net/sblim/sblim-sfcCommon-${PV}.tar.bz2"
+SRC_URI[md5sum] = "8aa2655d97bdea54c4750f220b40990c"
+SRC_URI[sha256sum] = "b9b1037173d6ae0181c3bd5a316ddab5afd6a342ad0dbdc18e940fc0ad2c3297"
+
+inherit autotools
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+
+ rm -rf ${D}${libdir}/libsfcUtil.a
+ rm -rf ${D}${libdir}/libsfcUtil.la
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/files/sfcb.service b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/files/sfcb.service
new file mode 100644
index 000000000..5adf63c8a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/files/sfcb.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Small Footprint CIM Broker Service
+After=syslog.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/sfcbd -d
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-Replace-need-for-error.h-when-it-does-not-exist.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-Replace-need-for-error.h-when-it-does-not-exist.patch
new file mode 100644
index 000000000..e72305023
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-Replace-need-for-error.h-when-it-does-not-exist.patch
@@ -0,0 +1,124 @@
+From 394bf0f1ed07419d40f6024363cc1ffc7ef61bc6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Aug 2017 21:56:25 -0700
+Subject: [PATCH] Replace need for error.h when it does not exist
+
+helps fixing build on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ brokerUpc.c | 5 ++++-
+ configure.ac | 2 +-
+ httpAdapter.c | 4 +++-
+ support.c | 14 +++++++++++++-
+ trace.c | 4 +++-
+ 5 files changed, 24 insertions(+), 5 deletions(-)
+
+diff --git a/brokerUpc.c b/brokerUpc.c
+index 17cbd9b..fe2b347 100644
+--- a/brokerUpc.c
++++ b/brokerUpc.c
+@@ -20,8 +20,11 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_ERROR_H
+ #include <error.h>
+-
++#else
++#include <err.h>
++#endif
+ #include "support.h"
+ #include "native.h"
+ #include <sfcCommon/utilft.h>
+diff --git a/configure.ac b/configure.ac
+index ab2964e..d4915a1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -517,7 +517,7 @@ fi
+ # Checks for header files.
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+-AC_CHECK_HEADERS([fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h zlib.h])
++AC_CHECK_HEADERS([error.h fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h zlib.h])
+ AC_CHECK_HEADERS([cmpi/cmpimacs.h cmpi/cmpift.h cmpi/cmpidt.h],[],[AC_MSG_ERROR([Could not find required CPMI header.])])
+
+ # Checks for typedefs, structures, and compiler characteristics.
+diff --git a/httpAdapter.c b/httpAdapter.c
+index 2719e6c..e768972 100644
+--- a/httpAdapter.c
++++ b/httpAdapter.c
+@@ -71,7 +71,9 @@
+ #ifdef HAVE_UDS
+ #include <grp.h>
+ #endif
+-
++#ifndef __SOCKADDR_ARG
++# define __SOCKADDR_ARG struct sockaddr *__restrict
++#endif
+ /* should probably go into cimRequest.h */
+ #define CIM_PROTOCOL_ANY 0
+ #define CIM_PROTOCOL_CIM_XML 1
+diff --git a/support.c b/support.c
+index c7bba8b..5b3eef1 100644
+--- a/support.c
++++ b/support.c
+@@ -32,7 +32,11 @@
+ #include "support.h"
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_ERROR_H
+ #include <error.h>
++#else
++#include <err.h>
++#endif
+ #include <errno.h>
+ #include "native.h"
+ #include "trace.h"
+@@ -331,17 +335,25 @@ loadQualifierDeclMI(const char *provider,
+ _SFCB_RETURN(NULL);
+ };
+
++
+ /****************************************************************************/
+
+ /** Exits the program with a memory allocation error message in case the given
+ * condition holds.
+ */
++#if HAVE_ERROR_H
+ #define __ALLOC_ERROR(cond) \
+ if ( cond ) { \
+ error_at_line ( -1, errno, __FILE__, __LINE__, \
+ "unable to allocate requested memory." ); \
+ }
+-
++#else
++#define __ALLOC_ERROR(cond) \
++ if ( cond ) { \
++ err(1, "%s:%d: %s", __FILE__, __LINE__, \
++ "unable to allocate requested memory." ); \
++ }
++#endif
+ /**
+ * flag to ensure MM is initialized only once
+ */
+diff --git a/trace.c b/trace.c
+index d7f30db..438af46 100644
+--- a/trace.c
++++ b/trace.c
+@@ -279,7 +279,9 @@ _sfcb_trap(int tn)
+ }
+ #endif
+ }
+-
++#ifndef SA_INTERRUPT
++# define SA_INTERRUPT 0x20000000 /* from GLIBC's <bits/sigaction.h> */
++#endif
+ sigHandler *
+ setSignal(int sn, sigHandler * sh, int flags)
+ {
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-include-stdint.h-system-header-for-UINT16_MAX.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-include-stdint.h-system-header-for-UINT16_MAX.patch
new file mode 100644
index 000000000..c2111a2c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/0001-include-stdint.h-system-header-for-UINT16_MAX.patch
@@ -0,0 +1,29 @@
+From 446fb15f79499f52ce01ca759dbdcfe635519a82 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 07:09:33 -0700
+Subject: [PATCH] include stdint.h system header for UINT16_MAX
+
+Fixes build error
+
+error: 'UINT16_MAX' undeclared (first use in this function)
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ interopServerProvider.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/interopServerProvider.c b/interopServerProvider.c
+index 23ae182..532febe 100644
+--- a/interopServerProvider.c
++++ b/interopServerProvider.c
+@@ -33,6 +33,7 @@
+ #include <sfcCommon/utilft.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <stdint.h>
+ #include <ctype.h>
+ #include <string.h>
+ #include <sys/types.h>
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.15-fix-provider-debugging.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.15-fix-provider-debugging.patch
new file mode 100644
index 000000000..4fbecaa63
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.15-fix-provider-debugging.patch
@@ -0,0 +1,12 @@
+diff -up sblim-sfcb-1.4.5/providerDrv.c.orig sblim-sfcb-1.4.5/providerDrv.c
+--- sblim-sfcb-1.4.5/providerDrv.c.orig 2013-09-04 12:59:22.140813239 +0200
++++ sblim-sfcb-1.4.5/providerDrv.c 2013-09-04 12:59:40.511870274 +0200
+@@ -3585,7 +3585,7 @@ processProviderInvocationRequests(char *
+ rc = spRecvReq(&providerSockets.receive, &parms->requestor,
+ (void **) &parms->req, &rl, &mqg);
+ if (mqg.rdone) {
+- int debug_break = 0;
++ volatile int debug_break = 0;
+ if (rc != 0) {
+ mlogf(M_ERROR,M_SHOW, "spRecvReq returned error %d. Skipping message.\n", rc);
+ free(parms);
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-maxMsgLen.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-maxMsgLen.patch
new file mode 100644
index 000000000..a0dd81653
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-maxMsgLen.patch
@@ -0,0 +1,14 @@
+diff -up sblim-sfcb-1.3.16/sfcb.cfg.pre.in.old sblim-sfcb-1.3.16/sfcb.cfg.pre.in
+--- sblim-sfcb-1.3.16/sfcb.cfg.pre.in.old 2012-06-13 23:21:09.000000000 +0200
++++ sblim-sfcb-1.3.16/sfcb.cfg.pre.in 2013-06-24 15:34:38.881992781 +0200
+@@ -113,8 +113,8 @@ provProcs: 32
+
+ ## Max message length, in bytes. This is a limit on the size of messages
+ ## written across sockets, for instance, between providers and SFCB.
+-## Default is 10000000
+-maxMsgLen: 10000000
++## Default is 100000000
++maxMsgLen: 100000000
+
+ ## Location of the registration directory, where providerRegister can be found
+ ## Default is @localstatedir@/lib/sfcb/registration
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-multilib-man-cfg.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-multilib-man-cfg.patch
new file mode 100644
index 000000000..c8cece2c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.16-multilib-man-cfg.patch
@@ -0,0 +1,41 @@
+diff -up sblim-sfcb-1.3.16/man/sfcbd.1.pre.in.orig sblim-sfcb-1.3.16/man/sfcbd.1.pre.in
+--- sblim-sfcb-1.3.16/man/sfcbd.1.pre.in.orig 2014-02-26 14:05:32.213091734 +0100
++++ sblim-sfcb-1.3.16/man/sfcbd.1.pre.in 2014-02-26 15:10:54.476196379 +0100
+@@ -151,7 +151,7 @@ Default=\fI@localstatedir@/lib/sfcb/regi
+ .TP
+ .B providerDirs
+ A space separated list of directories where sfcb is looking for provider
+-libraries. Default=\fI@libdir@\ @libdir@/cmpi\fR
++libraries. Default=\fI/usr/lib\ /usr/lib/cmpi /usr/lib64\ /usr/lib64/cmpi\fR
+ .TP
+ .B providerSampleInterval
+ The interval in seconds at which the provider manager is checking for
+@@ -275,11 +275,11 @@ SSL private key file for sfcb.
+ SSL client certificate / trust store for sfcb.
+ .SH LIBRARIES
+ .TP
+-.I @libdir@/libsfc*
++.I /usr/lib/libsfc* /usr/lib64/libsfc*
+ Binaries for sfcb runtime libraries.
+ .TP
+-.I @libdir@/cmpi/*
+-Binaries for providers
++.I /usr/lib/cmpi/* /usr/lib64/cmpi/*
++Binaries for providers.
+ .SH AUTHOR
+ Adrian Schuur <schuur@de.ibm.com>
+ .SH CONRIBUTORS
+diff -up sblim-sfcb-1.3.16/sfcb.cfg.pre.in.orig sblim-sfcb-1.3.16/sfcb.cfg.pre.in
+--- sblim-sfcb-1.3.16/sfcb.cfg.pre.in.orig 2014-02-26 15:35:43.133869718 +0100
++++ sblim-sfcb-1.3.16/sfcb.cfg.pre.in 2014-02-26 15:38:12.794240532 +0100
+@@ -121,8 +121,8 @@ maxMsgLen: 100000000
+ registrationDir: @localstatedir@/lib/sfcb/registration
+
+ ## Locations to look for provider libraries. Delimit paths with a space.
+-## Default is @libdir@/sfcb @libdir@ @libdir@/cmpi
+-providerDirs: @libdir@/sfcb @libdir@ @libdir@/cmpi
++## Default is /usr/lib/sfcb /usr/lib64/sfcb /usr/lib /usr/lib64 /usr/lib/cmpi /usr/lib64/cmpi
++providerDirs: /usr/lib/sfcb /usr/lib64/sfcb /usr/lib /usr/lib64 /usr/lib/cmpi /usr/lib64/cmpi
+
+ ## Enable the root/interop namespace (affects indications)
+ ## Default: true
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch
new file mode 100644
index 000000000..7f95a9da3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch
@@ -0,0 +1,42 @@
+diff -up sblim-sfcb-1.3.9/man/sfcbrepos.1.pre.in.orig sblim-sfcb-1.3.9/man/sfcbrepos.1.pre.in
+--- sblim-sfcb-1.3.9/man/sfcbrepos.1.pre.in.orig 2009-10-13 21:54:13.000000000 +0200
++++ sblim-sfcb-1.3.9/man/sfcbrepos.1.pre.in 2010-09-06 14:01:57.294564062 +0200
+@@ -26,7 +26,7 @@ Supported command line options are:
+ .TP
+ \fB\-c\fR \fIschemadir\fR
+ Path to obtain the CIM Schema classes.
+-Default is \fI@datadir@/sfcb\fR
++Default is \fI@datadir@/mof/cim-current\fR
+ .TP
+ \fB\-s\fR \fIstagingdir\fR
+ Path to sfcb staging area containing class MOFs and registration files
+@@ -58,7 +58,7 @@ Alias of \fB-b\fR
+ Display usage information and exit.
+ .SH FILES
+ .TP
+-\fI@datadir@/sfcb/CIM/CIM_Schema.mof\fR
++\fI@datadir@/mof/cim-current/CIM_Schema.mof\fR
+ CIM Schema
+ .TP
+ \fI@localstatedir@/lib/sfcb/registration/providerRegister\fR
+diff -up sblim-sfcb-1.3.9/sfcbrepos.sh.in.orig sblim-sfcb-1.3.9/sfcbrepos.sh.in
+--- sblim-sfcb-1.3.9/sfcbrepos.sh.in.orig 2009-12-22 01:18:29.000000000 +0100
++++ sblim-sfcb-1.3.9/sfcbrepos.sh.in 2010-09-06 13:45:28.671491648 +0200
+@@ -59,7 +59,7 @@ then
+ echo -e "\t-X create repository in non-native format as specifed by argument"
+ echo -e "\t-s specify staging directory [@localstatedir@/lib/sfcb/stage]"
+ echo -e "\t-r specify repository directory [@localstatedir@/lib/sfcb/registration]"
+- echo -e "\t-c specify directory containing CIM Schema MOFs [@datadir@/sfcb/CIM]"
++ echo -e "\t-c specify directory containing CIM Schema MOFs [@datadir@/mof/cim-current]"
+ echo -e "\t-t create tiny class repository by omitting inheritance information"
+ echo -e "\t-z compress repository with gzip"
+ echo
+@@ -99,7 +99,7 @@ fi
+
+ if [ -z "$cimschemadir" ]
+ then
+- cimschemadir=${DESTDIR}@datadir@/sfcb/CIM
++ cimschemadir=${DESTDIR}@datadir@/mof/cim-current
+ fi
+
+ if [ -d $stagingdir ] && [ -f $stagingdir/default.reg ] &&
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.5-service.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.5-service.patch
new file mode 100644
index 000000000..eaccfa594
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.5-service.patch
@@ -0,0 +1,27 @@
+diff -up sblim-sfcb-1.4.6/Makefile.in.orig sblim-sfcb-1.4.6/Makefile.in
+--- sblim-sfcb-1.4.6/Makefile.in.orig 2013-10-07 10:43:34.783228137 +0200
++++ sblim-sfcb-1.4.6/Makefile.in 2013-10-07 10:44:30.178533289 +0200
+@@ -627,7 +627,6 @@ initdir = $(sysconfdir)/init.d
+ pamdir = $(sysconfdir)/pam.d
+ sfcblibdir = $(libdir)/sfcb
+ cmpilibdir = $(libdir)/cmpi
+-systemddir = $(DESTDIR)@SYSTEMDDIR@
+ MANFILES = man/genSslCert.1 man/getSchema.1 man/sfcbd.1 man/sfcbmof.1 \
+ man/sfcbrepos.1 man/sfcbstage.1 man/sfcbunstage.1 man/sfcbuuid.1 \
+ man/wbemcat.1 man/xmltest.1
+@@ -2366,7 +2365,6 @@ unittest:
+ cd test && sh check_all.sh
+
+ install-data-local:
+- if test -d $(systemddir); then cp $(srcdir)/sblim-sfcb.service $(systemddir); fi;
+ test -d $(DESTDIR)$(sfcbstatedir)/registration/repository || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/registration/repository
+ test -d $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop
+ test -d $(DESTDIR)$(sfcbstatedir)/stage/regs || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/stage/regs
+@@ -2384,7 +2382,6 @@ install-data-local:
+ uninstall-local:
+ rm -f $(DESTDIR)$(sfcbstatedir)/stage/default.reg
+ rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop/10_interop.mof
+- rm -f $(systemddir)/sblim-sfcb.service
+ @INDICATIONS_TRUE@ rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop/20_indication.mof
+ @INDICATIONS_TRUE@ rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/indication.mof
+ @DOCS_TRUE@ rm -rf $(DESTDIR)$(sfcbdocdir)/html
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.8-default-ecdh-curve-name.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.8-default-ecdh-curve-name.patch
new file mode 100644
index 000000000..3268d49f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.8-default-ecdh-curve-name.patch
@@ -0,0 +1,26 @@
+diff -up sblim-sfcb-1.4.8/control.c.orig sblim-sfcb-1.4.8/control.c
+--- sblim-sfcb-1.4.8/control.c.orig 2014-03-27 00:46:28.000000000 +0100
++++ sblim-sfcb-1.4.8/control.c 2014-05-15 12:31:38.304169409 +0200
+@@ -170,7 +170,7 @@ static Control init[] = {
+ {"sslCertList", CTL_STRING, SFCB_CONFDIR "/clist.pem", {0}},
+ {"sslCiphers", CTL_STRING, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH", {0}},
+ {"sslDhParamsFilePath", CTL_STRING, NULL, {0}},
+- {"sslEcDhCurveName", CTL_STRING, "secp224r1", {0}},
++ {"sslEcDhCurveName", CTL_STRING, "secp384r1", {0}},
+ {"enableSslCipherServerPref", CTL_BOOL, NULL, {.b=0}},
+
+ {"registrationDir", CTL_STRING, SFCB_STATEDIR "/registration", {0}},
+diff -up sblim-sfcb-1.4.8/sfcb.cfg.pre.in.orig sblim-sfcb-1.4.8/sfcb.cfg.pre.in
+--- sblim-sfcb-1.4.8/sfcb.cfg.pre.in.orig 2014-05-15 12:31:59.188244865 +0200
++++ sblim-sfcb-1.4.8/sfcb.cfg.pre.in 2014-05-15 12:32:45.554408412 +0200
+@@ -293,8 +293,8 @@ sslCiphers: ALL:!ADH:!LOW:!EXP:!MD5:@STR
+ ## environment. If this value is not set, the indicated default is in effect.
+ ## If the value is set but the curve name is not recognized by the underlying
+ ## openssl implementation, SFCB will abort.
+-## Default is secp224r1
+-#sslEcDhCurveName: secp224r1
++## Default is secp384r1
++#sslEcDhCurveName: secp384r1
+
+ ## When set to true, sets the SSL_OP_CIPHER_SERVER_PREFERENCE flag for the ssl
+ ## context, to enforce server's preference instead of the client preference for
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.9-fix-ftbfs.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.9-fix-ftbfs.patch
new file mode 100644
index 000000000..9548b3c06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb-1.4.9/sblim-sfcb-1.4.9-fix-ftbfs.patch
@@ -0,0 +1,12 @@
+diff -up sblim-sfcb-1.4.9/control.c.orig sblim-sfcb-1.4.9/control.c
+--- sblim-sfcb-1.4.9/control.c.orig 2015-07-13 15:06:21.331660336 +0200
++++ sblim-sfcb-1.4.9/control.c 2015-07-13 15:08:38.031308917 +0200
+@@ -83,7 +83,7 @@ long httpReqHandlerTimeout;
+ * Kindly null terminate, always, even if might overwrite
+ * the last char of the truncated string.
+ */
+-inline char *strncpy_kind(char *to, char *from, size_t size) {
++char *strncpy_kind(char *to, char *from, size_t size) {
+ strncpy(to, from, size);
+ *(to + size - 1) = '\0';
+ return to;
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb
new file mode 100644
index 000000000..10ffaaa31
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb
@@ -0,0 +1,87 @@
+SUMMARY = "Small Footprint CIM Broker"
+DESCRIPTION = "\
+Small Footprint CIM Broker (sfcb) is a CIM server conforming to the CIM \
+Operations over HTTP protocol. It is robust, with low resource consumption \
+and therefore specifically suited for embedded and resource constrained \
+environments. sfcb supports providers written against the Common \
+Manageability Programming Interface (CMPI)."
+HOMEPAGE = "http://www.sblim.org"
+SECTION = "Applications/System"
+LICENSE = "EPL-1.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f300afd598546add034364cd0a533261"
+DEPENDS = "curl libpam openssl sblim-sfc-common unzip-native"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+SRC_URI = "http://downloads.sourceforge.net/sblim/${BP}.tar.bz2 \
+ file://sfcb.service \
+ file://sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch \
+ file://sblim-sfcb-1.3.15-fix-provider-debugging.patch \
+ file://sblim-sfcb-1.3.16-maxMsgLen.patch \
+ file://sblim-sfcb-1.4.5-service.patch \
+ file://sblim-sfcb-1.3.16-multilib-man-cfg.patch \
+ file://sblim-sfcb-1.4.8-default-ecdh-curve-name.patch \
+ file://sblim-sfcb-1.4.9-fix-ftbfs.patch \
+ file://0001-include-stdint.h-system-header-for-UINT16_MAX.patch \
+ file://0001-Replace-need-for-error.h-when-it-does-not-exist.patch \
+"
+
+SRC_URI[md5sum] = "28021cdabc73690a94f4f9d57254ce30"
+SRC_URI[sha256sum] = "634a67b2f7ac3b386a79160eb44413d618e33e4e7fc74ae68b0240484af149dd"
+
+inherit autotools
+inherit systemd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "sblim-sfcb.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+LDFLAGS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+
+EXTRA_OECONF = '--enable-debug \
+ --enable-ssl \
+ --enable-pam \
+ --enable-ipv6 \
+ CFLAGS="${CFLAGS} -D_GNU_SOURCE"'
+
+# make all with -j option is unsafe.
+PARALLEL_MAKE = ""
+
+INSANE_SKIP_${PN} = "dev-so"
+CONFIG_SITE = "${WORKDIR}/config-site.${P}"
+
+do_install() {
+ cp -f ${S}/sfcb.cfg.pre.in ${S}/sfcb.cfg
+
+ oe_runmake DESTDIR=${D} install
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/sfcb.service ${D}${systemd_unitdir}/system/sblim-sfcb.service
+
+ install -d ${D}${sysconfdir}/init.d
+ mv ${D}${sysconfdir}/init.d/sfcb ${D}${sysconfdir}/init.d/sblim-sfcb
+ sed -i -e 's/\/var\/lock\/subsys\/sfcb/\/var\/lock\/subsys\/sblim-sfcb/g' ${D}${sysconfdir}/init.d/sblim-sfcb
+
+ rm -rf ${D}${libdir}/sfcb/*.la
+}
+
+pkg_postinst_${PN} () {
+ OPTS=""
+
+ if [ x"$D" != "x" ]; then
+ OPTS="--root=$D"
+ if type systemctl >/dev/null 2>/dev/null; then
+ systemctl $OPTS ${SYSTEMD_AUTO_ENABLE} ${SYSTEMD_SERVICE}
+ fi
+ exit 1
+ fi
+
+ ${datadir}/sfcb/genSslCert.sh ${sysconfdir}/sfcb
+ ${bindir}/sfcbrepos -f
+}
+
+FILES_${PN} += "${libdir}/sfcb ${datadir}/sfcb"
+FILES_${PN}-dbg += "${libdir}/sfcb/.debug"
+
+RDEPENDS_${PN} = "perl bash"
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc/0001-cimxml-Include-sys-select.h-for-fd_set.patch b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc/0001-cimxml-Include-sys-select.h-for-fd_set.patch
new file mode 100644
index 000000000..19e50ec79
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc/0001-cimxml-Include-sys-select.h-for-fd_set.patch
@@ -0,0 +1,37 @@
+From 9981542cb443cdaf9134500b78fe7eda9f99861f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 7 Sep 2017 21:43:26 -0700
+Subject: [PATCH] cimxml: Include sys/select.h for fd_set
+
+define __SOCKADDR_ARG on linux when libc != glibc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+ backend/cimxml/indicationlistener.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/backend/cimxml/indicationlistener.c b/backend/cimxml/indicationlistener.c
+index 0d7d9fe..37c45ae 100755
+--- a/backend/cimxml/indicationlistener.c
++++ b/backend/cimxml/indicationlistener.c
+@@ -25,6 +25,7 @@
+
+ #include <pthread.h>
+ #include <sys/socket.h>
++#include <sys/select.h>
+ #include <netinet/in.h>
+ #include <fcntl.h>
+ #include <errno.h>
+@@ -36,7 +37,7 @@ static int do_listen=1;
+ #define hdrBufsize 5000
+ #define hdrLimmit 5000
+
+-#ifdef __APPLE__
++#if defined(__APPLE__) || (defined(__linux__) && !defined(__GLIBC__))
+ # define __SOCKADDR_ARG struct sockaddr *__restrict
+ #endif
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc_2.2.8.bb b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc_2.2.8.bb
new file mode 100644
index 000000000..df55a6799
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcc/sblim-sfcc_2.2.8.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Small Footprint CIM Client Library"
+DESCRIPTION = "Small Footprint CIM Client Library Runtime Libraries"
+HOMEPAGE = "http://www.sblim.org"
+
+SRC_URI = "http://netcologne.dl.sourceforge.net/project/sblim/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-cimxml-Include-sys-select.h-for-fd_set.patch \
+ "
+
+SRC_URI[md5sum] = "0bac0dec19f17ec065b6c332a56d7bae"
+SRC_URI[sha256sum] = "1b8f187583bc6c6b0a63aae0165ca37892a2a3bd4bb0682cd76b56268b42c3d6"
+
+LICENSE = "EPL-1.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f300afd598546add034364cd0a533261"
+
+DEPENDS = "curl"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/mdadm.patch b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/mdadm.patch
new file mode 100644
index 000000000..6edda08cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/mdadm.patch
@@ -0,0 +1,13 @@
+--- mdadm.d/mdadm-1.3.0/mdadm.h.org 2017-06-20 00:35:55.366978372 -0700
++++ mdadm.d/mdadm-1.3.0/mdadm.h 2017-06-20 00:36:41.244363348 -0700
+@@ -29,8 +29,9 @@
+
+ #define __USE_LARGEFILE64
+ #include <unistd.h>
+-extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
++//extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
+
++#include <sys/sysmacros.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <stdlib.h>
diff --git a/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/print-format.patch b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/print-format.patch
new file mode 100644
index 000000000..ac8178058
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools/print-format.patch
@@ -0,0 +1,218 @@
+Index: scsirastools-1.6.6/src/sgcommon.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgcommon.c
++++ scsirastools-1.6.6/src/sgcommon.c
+@@ -304,8 +304,8 @@ void showit(char *buf)
+ fdlog = stderr;
+ }
+ }
+- if (flogopen) fprintf(fdlog, buf); /*write to log */
+- fprintf(fdmsg, buf); /*defaults to stdout */
++ if (flogopen) fprintf(fdlog, "%s", buf); /*write to log */
++ fprintf(fdmsg, "%s", buf); /*defaults to stdout */
+ }
+
+ void showlog(const char * format, ...)
+Index: scsirastools-1.6.6/src/sgdefects.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgdefects.c
++++ scsirastools-1.6.6/src/sgdefects.c
+@@ -226,7 +226,7 @@ int main(int argc, char **argv)
+ (" ******************************************\n");
+ if (flogopen)
+ printf("Log file %s is open\n", logfile);
+- printf(HeaderStr);
++ printf("%s", HeaderStr);
+ /* get SCSI Device Info */
+ idev = 0;
+ flags = O_RDWR; /* could use OPEN_FLAG if read-only. */
+Index: scsirastools-1.6.6/src/sgdiag.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgdiag.c
++++ scsirastools-1.6.6/src/sgdiag.c
+@@ -250,7 +250,7 @@ int main(int argc, char **argv)
+ printf(" ******************************************\n");
+ if (flogopen)
+ printf("Log file %s is open, debug=%d\n", logfile,fdebug);
+- printf(HeaderStr);
++ printf("%s", HeaderStr);
+ }
+ /* get SCSI Device Info */
+ idev = 0;
+@@ -356,12 +356,12 @@ int main(int argc, char **argv)
+ case 'F':
+ case 'f':
+ func = 'f';
+- printf(erase_msg);
++ printf("%s", erase_msg);
+ break;
+ case 'W':
+ case 'w':
+ func = 'w';
+- printf(erase_msg);
++ printf("%s", erase_msg);
+ break;
+ case 'S':
+ case 's':
+Index: scsirastools-1.6.6/src/sgdiskmon.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgdiskmon.c
++++ scsirastools-1.6.6/src/sgdiskmon.c
+@@ -197,9 +197,9 @@ void showit(char *buf)
+ }
+ }
+ if (flogopen)
+- fprintf(fdlog, buf); /*write to log */
++ fprintf(fdlog, "%s", buf); /*write to log */
+ if (!background)
+- fprintf(fdmsg, buf); /*message display defaults to stdout */
++ fprintf(fdmsg, "%s", buf); /*message display defaults to stdout */
+ }
+
+ /*
+@@ -235,7 +235,7 @@ rem_scsi_dev(int bus, int ch, int id, in
+ fp = fopen("/proc/scsi/scsi","r+");
+ if (fp == NULL) return(errno);
+ sprintf(cmd,"remove-single-device %d %d %d %d",bus,ch,id,lun);
+- n = fprintf(fp,cmd);
++ n = fprintf(fp,"%s", cmd);
+ fclose(fp);
+ strcat(cmd,"\n");
+ showit(cmd);
+@@ -256,7 +256,7 @@ add_scsi_dev(int bus, int ch, int id, in
+ fp = fopen("/proc/scsi/scsi","r+");
+ if (fp == NULL) return(errno);
+ sprintf(cmd,"add-single-device %d %d %d %d",bus,ch,id,lun);
+- n = fprintf(fp,cmd);
++ n = fprintf(fp, "%s", cmd);
+ fclose(fp);
+ strcat(cmd,"\n");
+ showit(cmd);
+@@ -1233,7 +1233,7 @@ main(int argc, char **argv)
+ interval = atoi(optarg);
+ break;
+ default:
+- printf(output2); /*prog header*/
++ printf("%s", output2); /*prog header*/
+ printf("Usage: %s [-bemnrx -t time]\n",progname);
+ printf(" -b Run in Background as a daemon\n");
+ printf(" -e Do not write to any files.\n");
+@@ -1246,7 +1246,7 @@ main(int argc, char **argv)
+ exit(1);
+ }
+ }
+- if (!background) printf(output2); /*prog header*/
++ if (!background) printf("%s", output2); /*prog header*/
+
+ /* only run this as superuser */
+ i = geteuid();
+Index: scsirastools-1.6.6/src/sgmode.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgmode.c
++++ scsirastools-1.6.6/src/sgmode.c
+@@ -303,7 +303,7 @@ int main(int argc, char **argv)
+ (" ******************************************\n");
+ if (flogopen)
+ printf("Log file %s is open\n", logfile);
+- printf(HeaderStr);
++ printf("%s", HeaderStr);
+ /* get SCSI Device Info */
+ idev = 0;
+ flags = O_RDWR; /* could use OPEN_FLAG if read-only. */
+@@ -585,8 +585,8 @@ int do_modeselect(int idx)
+ if (!foverwrite) {
+ /* use existing capacity from mode sense */
+ memcpy(sel_buffer + 4, out_buffer + 4, 8);
+- sprintf(scratch, "Using existing capacity instead\n");
+- printf(scratch);
++ sprintf(scratch, "%s", "Using existing capacity instead\n");
++ printf("%s",scratch);
+ showlog( scratch);
+ } else { /* foverwrite==1, changing something */
+ /* usually only change num blks, if change blk size, flag it. */
+Index: scsirastools-1.6.6/src/sgraidmon.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgraidmon.c
++++ scsirastools-1.6.6/src/sgraidmon.c
+@@ -269,9 +269,9 @@ void showit(char *buf)
+ }
+ }
+ if (flogopen)
+- fprintf(fdlog, buf); /*write to log */
++ fprintf(fdlog, "%s", buf); /*write to log */
+ if (!background)
+- fprintf(fdmsg, buf); /*message display defaults to stdout */
++ fprintf(fdmsg, "%s", buf); /*message display defaults to stdout */
+ }
+
+ /*
+@@ -563,7 +563,7 @@ add_scsi_dev(int bus, int ch, int id, in
+ fp = fopen("/proc/scsi/scsi","r+");
+ if (fp == NULL) return(errno);
+ sprintf(cmd,"add-single-device %d %d %d %d",bus,ch,id,lun);
+- fprintf(fp,cmd);
++ fprintf(fp, "%s", cmd);
+ fclose(fp);
+ strcat(cmd,"\n");
+ showit(cmd);
+@@ -1585,7 +1585,7 @@ main(int argc, char **argv)
+ interval = atoi(optarg);
+ break;
+ default:
+- printf(output2); /*prog header*/
++ printf("%s", output2); /*prog header*/
+ printf("Usage: %s [-bemnrx -t time]\n",progname);
+ printf(" -b Run in Background as a daemon\n");
+ printf(" -e Do not write to any files.\n");
+@@ -1598,7 +1598,7 @@ main(int argc, char **argv)
+ exit(1);
+ }
+ }
+- if (!background) printf(output2); /*prog header*/
++ if (!background) printf("%s", output2); /*prog header*/
+
+ /* only run this as superuser */
+ i = geteuid();
+Index: scsirastools-1.6.6/src/sgsafte.c
+===================================================================
+--- scsirastools-1.6.6.orig/src/sgsafte.c
++++ scsirastools-1.6.6/src/sgsafte.c
+@@ -174,9 +174,9 @@ void showit(char *buf)
+ }
+ }
+ if (flogopen)
+- fprintf(fdlog, buf); /*write to log */
++ fprintf(fdlog, "%s", buf); /*write to log */
+ if (!background)
+- fprintf(fdmsg, buf); /*message display defaults to stdout */
++ fprintf(fdmsg, "%s", buf); /*message display defaults to stdout */
+ }
+
+ /*
+@@ -384,7 +384,7 @@ add_scsi_dev(int bus, int ch, int id, in
+ fp = fopen("/proc/scsi/scsi","r+");
+ if (fp == NULL) return(errno);
+ sprintf(cmd,"add-single-device %d %d %d %d",bus,ch,id,lun);
+- fprintf(fp,cmd);
++ fprintf(fp, "%s", cmd);
+ fclose(fp);
+ strcat(cmd,"\n");
+ showit(cmd);
+@@ -1261,7 +1261,7 @@ main(int argc, char **argv)
+ do_numeric = 0;
+ break;
+ default:
+- printf(output2); /*prog header*/
++ printf("%s", output2); /*prog header*/
+ printf("Usage: %s [-d num -rf -emnx]\n",progname);
+ printf(" -d drive number to set (0, 1, ...)\n");
+ printf(" -r set SAF-TE status to ready\n");
+@@ -1273,7 +1273,7 @@ main(int argc, char **argv)
+ exit(1);
+ }
+ }
+- if (!background) printf(output2); /*prog header*/
++ if (!background) printf("%s", output2); /*prog header*/
+
+ if (setval != 0 && drivenum == -1) drivenum = 0; /*default to first drive*/
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb
new file mode 100644
index 000000000..e202d16eb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Linux SCSi tools to service maintain disk storage devices"
+DESCRIPTION = "scsirastools were designed to add to the Serviceability of \
+ SCSI devices under Linux so that the system does not have \
+ to be rebooted or taken out of service to perform common \
+ maintenance or service functions. It handles SCSI, \
+ Linux SW RAID, SAS, SATA, and USB devices via SCSI emulation."
+HOMEPAGE = "http://scsirastools.sourceforge.net/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=687ea108478d26152ae46eb29d9d1545"
+
+DEPENDS += "groff-native"
+
+SRC_URI = "http://prdownloads.sourceforge.net/scsirastools/scsirastools-${PV}.tar.gz \
+ file://mdadm.patch;apply=no \
+ file://print-format.patch \
+"
+SRC_URI[md5sum] = "6271a61b2ce40aaf33ef61775148cda1"
+SRC_URI[sha256sum] = "e7b997e75decb06a650c42c35cd63d0c94c34e39cf133c723337b0eeabbfdf6a"
+
+inherit autotools update-rc.d
+
+# mdadm Makefile has CC set to gcc, hence override CC to ${CC}
+EXTRA_OEMAKE += "CC='${CC}'"
+
+
+do_configure_append() {
+ oe_runmake -C mdadm.d mdadm-1.3.0
+ patch -p0 < ${WORKDIR}/mdadm.patch
+}
+INITSCRIPT_PACKAGES = "${PN}-diskmon ${PN}-raidmon"
+INITSCRIPT_NAME_${PN}-diskmon = "sgdisk"
+INITSCRIPT_PARAMS_${PN}-diskmon = "defaults 80 20"
+INITSCRIPT_NAME_${PN}-raidmon = "sgraid"
+INITSCRIPT_PARAMS_${PN}-raidmon = "defaults 80 20"
+
+PACKAGES =+ "${PN}-diskmon ${PN}-diskmon-dbg"
+PACKAGES =+ "${PN}-raidmon ${PN}-raidmon-dbg"
+
+FILES_${PN}-dbg += "/usr/share/scsirastools/.debug"
+
+FILES_${PN}-diskmon = "${sbindir}/sgdiskmon ${sysconfdir}/init.d/sgdisk"
+FILES_${PN}-diskmon-dbg = "${sbindir}/.debug/sgdiskmon"
+
+FILES_${PN}-raidmon = "${sbindir}/sgraidmon ${sysconfdir}/init.d/sgraid"
+FILES_${PN}-raidmon-dbg = "${sbindir}/.debug/sgraidmon"
+
+RDEPENDS_${PN} += "bash"
+RDEPENDS_${PN}-diskmon += "${PN}"
+RDEPENDS_${PN}-raidmon += "${PN}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/0001-makefile-Add-LDFLAGS-to-linking-rule.patch b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/0001-makefile-Add-LDFLAGS-to-linking-rule.patch
new file mode 100644
index 000000000..87fdd6058
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/0001-makefile-Add-LDFLAGS-to-linking-rule.patch
@@ -0,0 +1,29 @@
+From 92bf2f24d4762efd1dbcc4add457e2b600aa50cf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 08:02:17 -0700
+Subject: [PATCH] makefile: Add LDFLAGS to linking rule
+
+This make it use correct link flags and fixes errors like
+No GNU_HASH in the elf binary
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index c2b0bc7..cdfb58f 100755
+--- a/Makefile
++++ b/Makefile
+@@ -34,7 +34,7 @@ sgpio.o: sgpio.c
+ ${CC} $(CFLAGS) -c sgpio.c
+
+ sgpio: sgpio.o
+- ${CC} -g sgpio.o -o sgpio
++ ${CC} $(LDFLAGS) -g sgpio.o -o sgpio
+
+ clean:
+ rm -f sgpio.o sgpio
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/Makefile-error-fix.patch b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/Makefile-error-fix.patch
new file mode 100644
index 000000000..709f8316f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio/Makefile-error-fix.patch
@@ -0,0 +1,127 @@
+Fix Makefile:
+
+* change the file format from dos to unix to avoid do_patch failed.
+* override gcc,SBIN_DIR and INSTALL for cross-compilation.
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ Makefile | 107 ++++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 55 insertions(+), 52 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 278d966..c2b0bc7 100755
+--- a/Makefile
++++ b/Makefile
+@@ -1,52 +1,55 @@
+-########################################################################
+-# Copyright (C) 2007-2008, Intel Corp. All rights reserved.
+-#
+-#
+-# This program is free software; you can redistribute it and/or modify it under
+-# the terms of the GNU General Public License as published by the Free Software
+-# Foundation; either version 2 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 General Public License
+-# for more details.
+-#
+-# You should have received a copy of the GNU 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
+-########################################################################
+-
+-
+-# Intel SGPIO enclosure management utility
+-#
+-# Author: Eric R Hall <Eric.R.Hall@intel.com>
+-
+-
+-MANDIR ?= /usr/local/man
+-ALL = sgpio
+-
+-all: $(ALL)
+-
+-sgpio.o: sgpio.c
+- gcc -g -Wall -c sgpio.c
+-
+-sgpio: sgpio.o
+- gcc -g sgpio.o -o sgpio
+-
+-clean:
+- rm -f sgpio.o sgpio
+-
+-install: $(ALL)
+- for i in $(ALL); do \
+- install $$i /sbin/$$i; \
+- done
+- install -d $(MANDIR)/man1
+- install -m 0644 *.1 $(MANDIR)/man1
+-
+-uninstall:
+- for i in $(ALL); do \
+- rm -f /sbin/$$i; \
+- done
+- for i in $(ALL:=.1); do \
+- rm -f $(MANDIR)/man1/$$i; \
+- done
++########################################################################
++# Copyright (C) 2007-2008, Intel Corp. All rights reserved.
++#
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU General Public License as published by the Free Software
++# Foundation; either version 2 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 General Public License
++# for more details.
++#
++# You should have received a copy of the GNU 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
++########################################################################
++
++
++# Intel SGPIO enclosure management utility
++#
++# Author: Eric R Hall <Eric.R.Hall@intel.com>
++
++
++MANDIR ?= /usr/local/man
++SBIN_DIR = /sbin
++INSTALL =/usr/bin/install -c
++ALL = sgpio
++CFLAGS = -g -Wall
++
++all: $(ALL)
++
++sgpio.o: sgpio.c
++ ${CC} $(CFLAGS) -c sgpio.c
++
++sgpio: sgpio.o
++ ${CC} -g sgpio.o -o sgpio
++
++clean:
++ rm -f sgpio.o sgpio
++
++install: $(ALL)
++ for i in $(ALL); do \
++ $(INSTALL) -D $$i $(SBIN_DIR)/$$i; \
++ done
++ $(INSTALL) -d $(MANDIR)/man1
++ $(INSTALL) -m 0644 *.1 $(MANDIR)/man1
++
++uninstall:
++ for i in $(ALL); do \
++ rm -f /sbin/$$i; \
++ done
++ for i in $(ALL:=.1); do \
++ rm -f $(MANDIR)/man1/$$i; \
++ done
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio_1.2.0.10.bb b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio_1.2.0.10.bb
new file mode 100644
index 000000000..63e8d36d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sgpio/sgpio_1.2.0.10.bb
@@ -0,0 +1,27 @@
+SUMMARY = "SGPIO captive backplane tool"
+HOMEPAGE = "http://sources.redhat.com/lvm2/wiki/DMRAID_Eventing"
+DESCRIPTION = "Intel SGPIO enclosure management utility"
+
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/${BPN}/${BPN}-1.2-0.10-src.tar.gz/a417bf68da4e9bd79a4664c11d7debd1/${BPN}-1.2-0.10-src.tar.gz \
+ file://Makefile-error-fix.patch \
+ file://0001-makefile-Add-LDFLAGS-to-linking-rule.patch \
+ "
+SRC_URI[md5sum] = "a417bf68da4e9bd79a4664c11d7debd1"
+SRC_URI[sha256sum] = "9bf8c42acaa247efd9321bdb1fc2390022f0c554d77fbbd4a7363d990fc0270b"
+
+S = "${WORKDIR}/${BPN}"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE_GPL;md5=393a5ca445f6965873eca0259a17f833"
+
+do_compile_prepend() {
+ oe_runmake clean
+}
+
+do_install() {
+ oe_runmake install \
+ INSTALL="/usr/bin/install -p" \
+ DESTDIR=${D} \
+ SBIN_DIR=${D}/${sbindir} \
+ MANDIR=${D}/${mandir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/initd.smartd b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/initd.smartd
new file mode 100755
index 000000000..54adcb406
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/initd.smartd
@@ -0,0 +1,112 @@
+#! /bin/sh
+
+# smartmontools init file for smartd
+# Copyright (C) 2002-8 Bruce Allen <smartmontools-support@lists.sourceforge.net>
+# $Id: smartd.initd.in 3360 2011-06-06 19:25:36Z chrfranke $
+
+# For RedHat and cousins:
+# chkconfig: - 60 60
+# description: Self Monitoring and Reporting Technology (SMART) Daemon
+# processname: smartd
+
+# For SuSE and cousins
+### BEGIN INIT INFO
+# Provides: smartd
+# Required-Start: $syslog $remote_fs
+# Should-Start: sendmail
+# Required-Stop: $syslog $remote_fs
+# Should-Stop: sendmail
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Monitors disk and tape health via S.M.A.R.T.
+# Description: Start S.M.A.R.T. disk and tape monitor.
+### END INIT INFO
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+# You should have received a copy of the GNU General Public License (for
+# example COPYING); if not, write to the Free Software Foundation, Inc., 675
+# Mass Ave, Cambridge, MA 02139, USA.
+# This code was originally developed as a Senior Thesis by Michael Cornwell
+# at the Concurrent Systems Laboratory (now part of the Storage Systems
+# Research Center), Jack Baskin School of Engineering, University of
+# California, Santa Cruz. http://ssrc.soe.ucsc.edu/.
+
+# Uncomment the line below to pass options to smartd on startup.
+# Note that distribution specific configuration files like
+# /etc/{default,sysconfig}/smartmontools might override these
+#smartd_opts="--interval=1800"
+
+SMARTD_BIN=/usr/sbin/smartd
+SMARTDPID=/var/run/smartd.pid
+[ -x $SMARTD_BIN ] || exit 0
+RET=0
+
+# source configuration file
+[ -r /etc/default/rcS ] && . /etc/default/rcS
+[ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
+
+smartd_opts="--pidfile $SMARTDPID $smartd_opts"
+
+case "$1" in
+ start)
+ if [ "$start_smartd" != "yes" ]; then
+ [ "$VERBOSE" != "no" ] && echo "Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools"
+ exit 0
+ fi
+ echo -n "Starting S.M.A.R.T. daemon: smartd"
+ if start-stop-daemon --start --quiet --pidfile $SMARTDPID \
+ --exec $SMARTD_BIN -- $smartd_opts; then
+ echo "."
+ else
+ echo " (failed)"
+ RET=1
+ fi
+ ;;
+ stop)
+ echo -n "Stopping S.M.A.R.T. daemon: smartd"
+ start-stop-daemon --stop --quiet --oknodo --pidfile $SMARTDPID
+ echo "."
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ force-reload)
+ $0 reload || $0 restart
+ ;;
+ reload)
+ echo -n "Reload S.M.A.R.T. daemon: smartd"
+ if start-stop-daemon --stop --quiet --signal 1 \
+ --pidfile $SMARTDPID; then
+ echo "."
+ else
+ echo " (failed)"
+ RET=1
+ fi
+ ;;
+ report)
+ echo -n "Checking SMART devices now"
+ if start-stop-daemon --stop --quiet --signal 10 \
+ --pidfile $SMARTDPID; then
+ echo "."
+ else
+ echo " (failed)"
+ RET=1
+ fi
+ ;;
+ status)
+ if pidof $SMARTD_BIN >/dev/null; then
+ echo "$SMARTD_BIN is running."
+ else
+ echo "$SMARTD_BIN is not running."
+ RET=1
+ fi
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload|reload|report|status}"
+ exit 1
+esac
+exit $RET
diff --git a/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartd.service b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartd.service
new file mode 100644
index 000000000..f3db946c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Self Monitoring and Reporting Technology (SMART) Daemon
+After=syslog.target
+
+[Service]
+EnvironmentFile=-@SYSCONFDIR@/smartmontools
+ExecStart=@SBINDIR@/smartd -n $smart_opts
+ExecReload=@BASE_BINDIR@/kill -HUP $MAINPID
+StandardOutput=syslog
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartmontools.default b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartmontools.default
new file mode 100644
index 000000000..602e00beb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/smartmontools/files/smartmontools.default
@@ -0,0 +1,6 @@
+# uncomment to start smartd on system startup for SysV init script
+# For systemd service file, use `systemctl enable smartd'.
+#start_smartd=yes
+
+# uncomment to pass additional options to smartd on startup
+#smartd_opts="--interval=1800"
diff --git a/meta-openembedded/meta-oe/recipes-extended/smartmontools/smartmontools_6.6.bb b/meta-openembedded/meta-oe/recipes-extended/smartmontools/smartmontools_6.6.bb
new file mode 100644
index 000000000..1a1767e11
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/smartmontools/smartmontools_6.6.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Control and monitor storage systems using S.M.A.R.T"
+DESCRIPTION = \
+"The smartmontools package contains two utility programs (smartctl \
+and smartd) to control and monitor storage systems using the Self-\
+Monitoring, Analysis and Reporting Technology System (SMART) built \
+into most modern ATA and SCSI hard disks. In many cases, these \
+utilities will provide advanced warning of disk degradation and failure."
+
+HOMEPAGE = "http://smartmontools.sourceforge.net/"
+SECTION = "console/utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/smartmontools/smartmontools-${PV}.tar.gz \
+ file://initd.smartd \
+ file://smartmontools.default \
+ file://smartd.service \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'libcap-ng selinux', d)}"
+PACKAGECONFIG[libcap-ng] = "--with-libcap-ng=yes,--with-libcap-ng=no,libcap-ng"
+PACKAGECONFIG[selinux] = "--with-selinux=yes,--with-selinux=no,libselinux"
+
+SRC_URI[md5sum] = "9ae2c6e7131cd2813edcc65cbe5f223f"
+SRC_URI[sha256sum] = "51f43d0fb064fccaf823bbe68cf0d317d0895ff895aa353b3339a3b316a53054"
+
+inherit autotools update-rc.d systemd
+
+SYSTEMD_SERVICE_${PN} = "smartd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install_append () {
+ #install the init.d/smartd
+ install -d ${D}${sysconfdir}/init.d
+ install -p -m 0755 ${WORKDIR}/initd.smartd ${D}${sysconfdir}/init.d/smartd
+ install -d ${D}${sysconfdir}/default
+ install -p -m 0644 ${WORKDIR}/smartmontools.default ${D}${sysconfdir}/default/smartmontools
+
+ #install systemd service file
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/smartd.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_unitdir}/system/smartd.service
+}
+
+INITSCRIPT_NAME = "smartd"
+INITSCRIPT_PARAMS = "start 60 2 3 4 5 . stop 60 0 1 6 ."
+
+RDEPENDS_${PN} += "mailx"
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb
new file mode 100644
index 000000000..3c019eb7c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb
@@ -0,0 +1,12 @@
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=72d977d697c3c05830fdff00a7448931"
+SRCREV = "d1248b0f22ea8dc3b9d84a61bd35a83309bdb4b4"
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://github.com/hartkopp/can-isotp.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+inherit module
+
+EXTRA_OEMAKE += "KERNELDIR=${STAGING_KERNEL_DIR}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
new file mode 100644
index 000000000..a2d62c366
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Linux CAN network development utilities"
+DESCRIPTION = "Linux CAN network development"
+LICENSE = "GPLv2 & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://include/linux/can.h;endline=43;md5=390a2c9a3c5e3595a069ac1436553ee7"
+
+DEPENDS = "libsocketcan"
+
+SRC_URI = "git://github.com/linux-can/${BPN}.git;protocol=git;branch=master"
+SRCREV = "4c8fb05cb4d6ddcd67299008db54af423f86fd05"
+
+PV = "0.0+gitr${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils/0001-canutils-candump-Add-error-frame-s-handling.patch b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils/0001-canutils-candump-Add-error-frame-s-handling.patch
new file mode 100644
index 000000000..fcc38e061
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils/0001-canutils-candump-Add-error-frame-s-handling.patch
@@ -0,0 +1,94 @@
+From bab595e38295dcafcfc17a011d3d51f2df1618e6 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Tue, 10 Jan 2012 18:55:11 +0530
+Subject: [PATCH] canutils: candump: Add error frame's handling
+
+This patch adds the error handling capability to candump utility
+by adding error flags for displaying all kind of error frames
+like tx_timeout, lost arbitration, controller problems, buserrors,
+bus warnings etc.
+
+Usage of candump for error frame display on console:
+candump [<can-interface>] [Options]
+Ex: candump can0 --error
+
+This patch is created on top of canutils-4.0.6 tag from
+http://git.pengutronix.de/?p=tools/canutils.git
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+---
+Upstream-Status: Backport
+
+ src/candump.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/src/candump.c b/src/candump.c
+index 259d442..c16425b 100644
+--- a/src/candump.c
++++ b/src/candump.c
+@@ -20,6 +20,7 @@
+
+ #include <linux/can.h>
+ #include <linux/can/raw.h>
++#include <linux/can/error.h>
+
+ extern int optind, opterr, optopt;
+
+@@ -40,6 +41,7 @@ static void print_usage(char *prg)
+ " -p, --protocol=PROTO\t" "CAN protocol (default CAN_RAW = %d)\n"
+ " --filter=id:mask[:id:mask]...\n"
+ "\t\t\t" "apply filter\n"
++ " -e, --error\t\t" "dump error frames along with data frames\n"
+ " -h, --help\t\t" "this help\n"
+ " -o <filename>\t\t" "output into filename\n"
+ " -d\t\t\t" "daemonize\n"
+@@ -86,6 +88,11 @@ int main(int argc, char **argv)
+ int nbytes, i;
+ int opt, optdaemon = 0;
+ uint32_t id, mask;
++ int error = 0;
++ can_err_mask_t err_mask = (CAN_ERR_TX_TIMEOUT | CAN_ERR_LOSTARB |
++ CAN_ERR_CRTL | CAN_ERR_PROT |
++ CAN_ERR_TRX | CAN_ERR_ACK | CAN_ERR_BUSOFF |
++ CAN_ERR_BUSERROR);
+
+ signal(SIGPIPE, SIG_IGN);
+
+@@ -95,6 +102,7 @@ int main(int argc, char **argv)
+ { "protocol", required_argument, 0, 'p' },
+ { "type", required_argument, 0, 't' },
+ { "filter", required_argument, 0, FILTER_OPTION },
++ { "error", no_argument, 0, 'e' },
+ { "version", no_argument, 0, VERSION_OPTION},
+ { 0, 0, 0, 0},
+ };
+@@ -121,6 +129,10 @@ int main(int argc, char **argv)
+ proto = strtoul(optarg, NULL, 0);
+ break;
+
++ case 'e':
++ error = 1;
++ break;
++
+ case 'o':
+ optout = optarg;
+ break;
+@@ -186,6 +198,14 @@ int main(int argc, char **argv)
+ }
+ }
+
++ if (error) {
++ if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_ERR_FILTER, &err_mask,
++ sizeof(err_mask)) != 0) {
++ perror("setsockopt");
++ exit(1);
++ }
++ }
++
+ if (optdaemon)
+ daemon(1, 0);
+ else {
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb
new file mode 100644
index 000000000..e1508af85
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb
@@ -0,0 +1,20 @@
+SUMMARY = "canutils (PTX flavour)"
+HOMEPAGE = "http://www.pengutronix.de"
+SECTION = "console/network"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libsocketcan"
+
+SRCREV = "299dff7f5322bf0348dcdd60071958ebedf5f09d"
+SRC_URI = "git://git.pengutronix.de/git/tools/canutils.git;protocol=git \
+ file://0001-canutils-candump-Add-error-frame-s-handling.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+# Busybox ip doesn't support can interface configuration, use the real thing
+RDEPENDS_${PN} += "iproute2"
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/libsocketcan_0.0.10.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/libsocketcan_0.0.10.bb
new file mode 100644
index 000000000..60ca58016
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/libsocketcan_0.0.10.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Control basic functions in socketcan from userspace"
+HOMEPAGE = "http://www.pengutronix.de"
+SECTION = "libs/network"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://src/libsocketcan.c;beginline=3;endline=17;md5=97e38adced4385d8fba1ae2437cedee1"
+
+SRCREV = "51f1610160a1707f026f8c2d714a6f7aa3ca232b"
+
+SRC_URI = "git://git.pengutronix.de/git/tools/libsocketcan.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch
new file mode 100644
index 000000000..7d3f8a19d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch
@@ -0,0 +1,50 @@
+From 290703a5d21f34ea5ec23efc815a9f4df241e7e8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 23 Oct 2015 00:33:32 -0700
+Subject: [PATCH] Fix build with musl, backtrace() APIs are glibc specific
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ userspace/libsinsp/utils.cpp | 4 +++-
+ userspace/libsinsp/utils.h | 2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/userspace/libsinsp/utils.cpp b/userspace/libsinsp/utils.cpp
+index 8f23f9c..c496a57 100644
+--- a/userspace/libsinsp/utils.cpp
++++ b/userspace/libsinsp/utils.cpp
+@@ -21,7 +21,9 @@ along with sysdig. If not, see <http://www.gnu.org/licenses/>.
+ #include <limits.h>
+ #include <stdlib.h>
+ #include <sys/time.h>
++#ifdef __GLIBC__
+ #include <execinfo.h>
++#endif
+ #include <unistd.h>
+ #include <sys/time.h>
+ #include <netdb.h>
+@@ -741,7 +743,7 @@ uint64_t sinsp_utils::get_current_time_ns()
+ return tv.tv_sec * (uint64_t) 1000000000 + tv.tv_usec * 1000;
+ }
+
+-#ifndef _WIN32
++#if defined(_WIN32) && defined(__GLIBC__)
+ void sinsp_utils::bt(void)
+ {
+ static const char start[] = "BACKTRACE ------------";
+diff --git a/userspace/libsinsp/utils.h b/userspace/libsinsp/utils.h
+index 600d00b..4ab4650 100644
+--- a/userspace/libsinsp/utils.h
++++ b/userspace/libsinsp/utils.h
+@@ -79,7 +79,7 @@ public:
+
+ static uint64_t get_current_time_ns();
+
+-#ifndef _WIN32
++#if not defined(_WIN32) && defined(__GLIBC__)
+ //
+ // Print the call stack
+ //
+--
+2.6.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch
new file mode 100644
index 000000000..8fec0ca59
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch
@@ -0,0 +1,108 @@
+From c2782a6ca968190e221c25b0890600ba8cd43798 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 23 Oct 2015 00:23:15 -0700
+Subject: [PATCH] libsinsp: Port to build with lua >= 5.2
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ userspace/libsinsp/chisel.cpp | 40 +++++++++++++++++++++++++++++-----------
+ 1 file changed, 29 insertions(+), 11 deletions(-)
+
+diff --git a/userspace/libsinsp/chisel.cpp b/userspace/libsinsp/chisel.cpp
+index 3cfbd8d..2db9348 100644
+--- a/userspace/libsinsp/chisel.cpp
++++ b/userspace/libsinsp/chisel.cpp
+@@ -94,7 +94,7 @@ void lua_stackdump(lua_State *L)
+ // Lua callbacks
+ ///////////////////////////////////////////////////////////////////////////////
+ #ifdef HAS_LUA_CHISELS
+-const static struct luaL_reg ll_sysdig [] =
++const static struct luaL_Reg ll_sysdig [] =
+ {
+ {"set_filter", &lua_cbacks::set_global_filter},
+ {"set_snaplen", &lua_cbacks::set_snaplen},
+@@ -120,7 +120,7 @@ const static struct luaL_reg ll_sysdig [] =
+ {NULL,NULL}
+ };
+
+-const static struct luaL_reg ll_chisel [] =
++const static struct luaL_Reg ll_chisel [] =
+ {
+ {"request_field", &lua_cbacks::request_field},
+ {"set_filter", &lua_cbacks::set_filter},
+@@ -131,7 +131,7 @@ const static struct luaL_reg ll_chisel [] =
+ {NULL,NULL}
+ };
+
+-const static struct luaL_reg ll_evt [] =
++const static struct luaL_Reg ll_evt [] =
+ {
+ {"field", &lua_cbacks::field},
+ {"get_num", &lua_cbacks::get_num},
+@@ -853,10 +853,28 @@ bool sinsp_chisel::parse_view_info(lua_State *ls, OUT chisel_desc* cd)
+
+
+ #ifdef HAS_LUA_CHISELS
++static void chisel_lua_registerlib(lua_State *L, const char *libname,
++ const luaL_Reg *l, int ind)
++{
++#if LUA_VERSION_NUM >= 502
++ if (libname)
++ {
++ lua_newtable(L);
++ luaL_setfuncs(L, l, ind);
++ lua_pushvalue(L, -1);
++ lua_setglobal(L, libname);
++ }
++ else
++ luaL_setfuncs(L, l, ind);
++#else
++ luaL_register(L, libname, l);
++#endif
++}
++
+ // Initializes a lua chisel
+ bool sinsp_chisel::init_lua_chisel(chisel_desc &cd, string const &fpath)
+ {
+- lua_State* ls = lua_open();
++ lua_State* ls = luaL_newstate();
+ if(ls == NULL)
+ {
+ return false;
+@@ -867,9 +885,9 @@ bool sinsp_chisel::init_lua_chisel(chisel_desc &cd, string const &fpath)
+ //
+ // Load our own lua libs
+ //
+- luaL_openlib(ls, "sysdig", ll_sysdig, 0);
+- luaL_openlib(ls, "chisel", ll_chisel, 0);
+- luaL_openlib(ls, "evt", ll_evt, 0);
++ chisel_lua_registerlib(ls, "sysdig", ll_sysdig, 0);
++ chisel_lua_registerlib(ls, "chisel", ll_chisel, 0);
++ chisel_lua_registerlib(ls, "evt", ll_evt, 0);
+
+ //
+ // Add our chisel paths to package.path
+@@ -1111,16 +1129,16 @@ void sinsp_chisel::load(string cmdstr)
+ //
+ // Open the script
+ //
+- m_ls = lua_open();
++ m_ls = luaL_newstate();
+
+ luaL_openlibs(m_ls);
+
+ //
+ // Load our own lua libs
+ //
+- luaL_openlib(m_ls, "sysdig", ll_sysdig, 0);
+- luaL_openlib(m_ls, "chisel", ll_chisel, 0);
+- luaL_openlib(m_ls, "evt", ll_evt, 0);
++ chisel_lua_registerlib(m_ls, "sysdig", ll_sysdig, 0);
++ chisel_lua_registerlib(m_ls, "chisel", ll_chisel, 0);
++ chisel_lua_registerlib(m_ls, "evt", ll_evt, 0);
+
+ //
+ // Add our chisel paths to package.path
+--
+2.6.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb
new file mode 100644
index 000000000..4f58281f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "A New System Troubleshooting Tool Built for the Way You Work"
+DESCRIPTION = "Sysdig is open source, system-level exploration: capture \
+system state and activity from a running Linux instance, then save, \
+filter and analyze."
+HOMEPAGE = "http://www.sysdig.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit cmake pkgconfig
+
+OECMAKE_GENERATOR = "Unix Makefiles"
+
+DEPENDS = "luajit zlib ncurses"
+RDEPENDS_${PN} = "bash"
+
+SRC_URI = "git://github.com/draios/sysdig.git;branch=master \
+ file://0001-libsinsp-Port-to-build-with-lua-5.2.patch \
+ file://0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch \
+ "
+SRCREV = "85d16f33a82a17f87ccdbc088749271c71d87013"
+PV = "0.1.102+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+DIR_ETC="/etc"
+EXTRA_OECMAKE = ' -DUSE_BUNDLED_LUAJIT="OFF" \
+ -DUSE_BUNDLED_ZLIB="OFF" \
+ -DBUILD_DRIVER="OFF" \
+ -DUSE_BUNDLED_NCURSES="OFF" \
+ -DDIR_ETC="${DIR_ETC}" \
+ '
+
+FILES_${PN} += " \
+ ${DIR_ETC}/* \
+ ${datadir}/zsh/* \
+ ${prefix}/src/* \
+"
+
+# luajit not supported on Aarch64
+COMPATIBLE_HOST = "^(?!aarch64).*"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/configure.patch b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/configure.patch
new file mode 100644
index 000000000..976e0380e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/configure.patch
@@ -0,0 +1,141 @@
+From 81c1ba940415595584a837ab1078c64855072f0c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 21 Nov 2011 12:00:54 +0100
+Subject: [PATCH] t1lib: add 5.1.2
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+---
+ configure.in | 95 ++++++++++++++++++++++++------------------------------------
+ 1 file changed, 38 insertions(+), 57 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index eade4c0..e649ea9 100644
+--- a/configure.in
++++ b/configure.in
+@@ -74,9 +74,9 @@ T1LIB_PATCHLEVEL=builtin(eval, MACRO_T1LIB_LT_REVISION)
+ T1LIB_VERSIONSTRING=\"MACRO_T1LIB_IDENTIFIER\"
+
+
+-dnl We use this file by Andreas Zeller to check for libXaw
+-builtin(include, ac-tools/ice_find_athena.m4)
+-builtin(include, ac-tools/aclocal.m4)
++#dnl We use this file by Andreas Zeller to check for libXaw
++#builtin(include, ac-tools/ice_find_athena.m4)
++#builtin(include, ac-tools/aclocal.m4)
+
+ dnl We want these before the checks, so the checks can modify their values.
+ test -z "$LDLIBS" && LDLIBS=-lm AC_SUBST(LDLIBS)
+@@ -162,6 +162,7 @@ fi
+
+ dnl **** Check for underscore on external symbols ****
+
++AH_TEMPLATE([NEED_UNDERSCORE_PREFIX], [Define if external symbols need an underscore prefix])
+ AC_CACHE_CHECK("whether external symbols need an underscore prefix",
+ ac_cv_c_extern_prefix,
+ [saved_libs=$LIBS
+@@ -179,68 +180,48 @@ then
+ AC_DEFINE(NEED_UNDERSCORE_PREFIX)
+ fi
+
+-dnl **** Check which ANSI integer type is 16 bit
+-
+-AC_CACHE_CHECK( "which ANSI integer type is 16 bit", ac_16bit_type,
+- AC_TRY_RUN([
+-int main(void) {
+- if (sizeof(short)==2)
+- return(0);
+- else if (sizeof(int)==2)
+- return(1);
+- else
+- return(2);
+-}], ac_16bit_type="short", ac_16bit_type="int", ac_16bit_type=))
+-if test "$ac_16bit_type" = "short"
+-then
+- T1_AA_TYPE16="-DT1_AA_TYPE16=short"
+- T1_INT16="short"
+-else
+- T1_AA_TYPE16="-DT1_AA_TYPE16=int"
+- T1_INT16="int"
++dnl **** Check which ANSI integer type is 16 bit
++T1_AA_TYPE16=""
++for type in short int; do
++ if test x"`eval echo \\$ac_cv_sizeof_$type`" = "x2"; then
++ T1_AA_TYPE16="-DT1_AA_TYPE16=$type"
++ T1_INT16="$type"
++ break
++ fi
++done
++
++if test x"$T1_AA_TYPE16" = "x"; then
++ AC_MSG_ERROR("Unable to determine which integer type is 16 bit.")
+ fi
+
+-
+ dnl **** Check which ANSI integer type is 32 bit
+-
+-AC_CACHE_CHECK( "which ANSI integer type is 32 bit", ac_32bit_type,
+- AC_TRY_RUN([
+-int main(void) {
+- if (sizeof(int)==4)
+- return(0);
+- else if (sizeof(long)==4)
+- return(1);
+- else
+- return(2);
+-}], ac_32bit_type="int", ac_32bit_type="long", ac_32bit_type=))
+-if test "$ac_32bit_type" = "int"
+-then
+- T1_AA_TYPE32="-DT1_AA_TYPE32=int"
+- T1_INT32="int"
+-else
+- T1_AA_TYPE32="-DT1_AA_TYPE32=long"
+- T1_INT32="long"
++T1_AA_TYPE32=""
++for type in int long; do
++ if test x"`eval echo \\$ac_cv_sizeof_$type`" = "x4"; then
++ T1_AA_TYPE32="-DT1_AA_TYPE32=$type"
++ T1_INT32="$type"
++ break
++ fi
++done
++
++if test x"$T1_AA_TYPE32" = "x"; then
++ AC_MSG_ERROR("Unable to determine which integer type is 32 bit.")
+ fi
+
+-
+ dnl **** Check which ANSI integer type is 64 bit
+-
+-AC_CACHE_CHECK( "which ANSI integer type is 64 bit", ac_64bit_type,
+- AC_TRY_RUN([
+-int main(void) {
+- if (sizeof(long)==8)
+- return(0);
+- else
+- return(1);
+-}], ac_64bit_type="long", ac_64bit_type="<none>"))
+-if test "$ac_64bit_type" = "long"
+-then
+- T1_AA_TYPE64="-DT1_AA_TYPE64=long"
+-else
+- T1_AA_TYPE64=
++T1_AA_TYPE64=""
++for type in long long_long; do
++ if test x"`eval echo \\$ac_cv_sizeof_$type`" = "x8"; then
++ AC_MSG_WARN("$type is 64 bit")
++ T1_AA_TYPE64="-DT1_AA_TYPE64=\"`echo $type|tr '_' ' '`\""
++ break
++ fi
++done
++
++if test x"$T1_AA_TYPE64" = "x"; then
++ AC_MSG_ERROR("Unable to determine which integer type is 64 bit.")
+ fi
+
+-
+ CFLAGS="${CFLAGS} -DT1LIB_IDENT=\"\\\"${T1LIB_IDENTIFIER}\\\"\" -DGLOBAL_CONFIG_DIR=\"\\\"${T1LIB_DATA_DIR}\\\"\""
+
+ dnl **** Check for functions and header files ****
diff --git a/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/format_security.patch b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/format_security.patch
new file mode 100644
index 000000000..bc2476bfc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/format_security.patch
@@ -0,0 +1,58 @@
+From cea83003de3ffebde92becd1e599fe3b28f0a7c4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 6 Mar 2017 23:13:36 -0800
+Subject: [PATCH] t1lib: Fix printf format string errors
+
+Fix printf formats to use format qualifiers
+fixes
+
+error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+---
+ lib/t1lib/t1subset.c | 2 +-
+ lib/type1/objects.c | 2 +-
+ lib/type1/objects.h | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/t1lib/t1subset.c b/lib/t1lib/t1subset.c
+index da427b2..e76974f 100644
+--- a/lib/t1lib/t1subset.c
++++ b/lib/t1lib/t1subset.c
+@@ -759,7 +759,7 @@ char *T1_SubsetFont( int FontID,
+ tr_len);
+ T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
+ T1LOG_DEBUG);
+- l+=sprintf( &(trailerbuf[l]), linebuf); /* contains the PostScript trailer */
++ l+=sprintf( &(trailerbuf[l]), "%s", linebuf); /* contains the PostScript trailer */
+ }
+
+ /* compute size of output file */
+diff --git a/lib/type1/objects.c b/lib/type1/objects.c
+index c413a0f..f828e6a 100644
+--- a/lib/type1/objects.c
++++ b/lib/type1/objects.c
+@@ -957,7 +957,7 @@ struct xobject *TypeErr(name, obj, expect, ret) /* non-ANSI avoids overly strict
+
+ sprintf(typemsg, "Wrong object type in %s; expected %s, found %s.\n",
+ name, TypeFmt(expect), TypeFmt(obj->type));
+- IfTrace0(TRUE,typemsg);
++ IfTrace1(TRUE, "%s", typemsg);
+
+ ObjectPostMortem(obj);
+
+diff --git a/lib/type1/objects.h b/lib/type1/objects.h
+index 13cbae7..3a1d337 100644
+--- a/lib/type1/objects.h
++++ b/lib/type1/objects.h
+@@ -214,7 +214,7 @@ struct xobject {
+ /*SHARED*/
+ /* NDW: personally, I want to see status and error messages! */
+ #define IfTrace0(condition,model) \
+- {if (condition) printf(model);}
++ {if (condition) fputs(model,stdout);}
+ #define IfTrace1(condition,model,arg0) \
+ {if (condition) printf(model,arg0);}
+ #define IfTrace2(condition,model,arg0,arg1) \
diff --git a/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/libtool.patch b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/libtool.patch
new file mode 100644
index 000000000..da54f87ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib-5.1.2/libtool.patch
@@ -0,0 +1,144 @@
+From bab41f5e1fc1fc809da1371e6a0222e0eb21e5f0 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 21 Nov 2011 12:00:54 +0100
+Subject: [PATCH] t1lib: add 5.1.2
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+---
+ Makefile.in | 5 +++--
+ examples/Makefile.in | 5 +++--
+ lib/Makefile.in | 6 ++++--
+ lib/t1lib/Makefile.in | 6 ++++--
+ lib/type1/Makefile.in | 6 ++++--
+ type1afm/Makefile.in | 6 ++++--
+ xglyph/Makefile.in | 6 ++++--
+ 7 files changed, 26 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 29c3468..396c020 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -18,7 +18,8 @@
+ # Last modified: 2005-05-01
+ #
+
+-SHELL = /bin/sh
++SHELL = @SHELL@
++LIBTOOL = @LIBTOOL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+@@ -149,7 +150,7 @@ distclean: clean
+ $(RM) examples/Makefile
+ $(RM) xglyph/Makefile
+ $(RM) doc/Makefile
+- $(RM) libtool
++ $(RM) $(LIBTOOL)
+
+
+ # The following two targets are for building and cleaning the python-
+diff --git a/examples/Makefile.in b/examples/Makefile.in
+index b301db5..7a6a514 100644
+--- a/examples/Makefile.in
++++ b/examples/Makefile.in
+@@ -14,9 +14,10 @@
+ # Last modified: 2001-04-01
+ #
+
++top_builddir = @top_builddir@
+
+-LIBTOOL = ../libtool
+-SHELL = /bin/sh
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+diff --git a/lib/Makefile.in b/lib/Makefile.in
+index 89e5e86..6e0f960 100644
+--- a/lib/Makefile.in
++++ b/lib/Makefile.in
+@@ -15,8 +15,10 @@
+ #
+ # Contributions by H.Kakugawa to use libtool!
+
+-LIBTOOL = ../libtool
+-SHELL = /bin/sh
++top_builddir = @top_builddir@
++
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+diff --git a/lib/t1lib/Makefile.in b/lib/t1lib/Makefile.in
+index a6c2478..32434b3 100644
+--- a/lib/t1lib/Makefile.in
++++ b/lib/t1lib/Makefile.in
+@@ -14,8 +14,10 @@
+ #
+ # Modified by H.Kakugawa to use libtool
+
+-LIBTOOL = ../../libtool
+-SHELL = /bin/sh
++top_builddir = @top_builddir@
++
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+diff --git a/lib/type1/Makefile.in b/lib/type1/Makefile.in
+index 241f124..42efa94 100644
+--- a/lib/type1/Makefile.in
++++ b/lib/type1/Makefile.in
+@@ -14,8 +14,10 @@
+ #
+ # Modified by H.Kakugawa to use libtool
+
+-LIBTOOL = ../../libtool
+-SHELL = /bin/sh
++top_builddir = @top_builddir@
++
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+diff --git a/type1afm/Makefile.in b/type1afm/Makefile.in
+index 61611e1..9b51406 100644
+--- a/type1afm/Makefile.in
++++ b/type1afm/Makefile.in
+@@ -15,8 +15,10 @@
+ #
+ # Modified by H.Kakugawa to use libtool
+
+-LIBTOOL = ../libtool
+-SHELL = /bin/sh
++top_builddir = @top_builddir@
++
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
+diff --git a/xglyph/Makefile.in b/xglyph/Makefile.in
+index 8da9b63..741334c 100644
+--- a/xglyph/Makefile.in
++++ b/xglyph/Makefile.in
+@@ -15,8 +15,10 @@
+ #
+ # Modified by H.Kakugawa to use libtool
+
+-LIBTOOL = ../libtool
+-SHELL = /bin/sh
++top_builddir = @top_builddir@
++
++LIBTOOL = @LIBTOOL@
++SHELL = @SHELL@
+ CC = @CC@
+ CPP = @CPP@
+ CFLAGS = @CFLAGS@
diff --git a/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib_5.1.2.bb b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib_5.1.2.bb
new file mode 100644
index 000000000..826dbda85
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/t1lib/t1lib_5.1.2.bb
@@ -0,0 +1,29 @@
+SUMMARY = "A Type1 Font Rastering Library"
+SECTION = "libs"
+DEPENDS = "virtual/libx11 libxaw"
+
+LICENSE = "LGPLv2 & GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8ca43cbc842c2336e835926c2166c28b \
+ file://LGPL;md5=6e29c688d912da12b66b73e32b03d812 \
+"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/t/t1lib/t1lib_${PV}.orig.tar.gz \
+ file://configure.patch \
+ file://libtool.patch \
+ file://format_security.patch"
+SRC_URI[md5sum] = "a5629b56b93134377718009df1435f3c"
+SRC_URI[sha256sum] = "821328b5054f7890a0d0cd2f52825270705df3641dbd476d58d17e56ed957b59"
+
+inherit autotools-brokensep distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# Fix GNU_HASH problem
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+EXTRA_OECONF = "--with-x --without-athena"
+EXTRA_OEMAKE = "without_doc"
+
+FILES_${PN} += " ${datadir}/t1lib/t1lib.config"
+FILES_${PN}-doc = "${datadir}/t1lib/doc/t1lib_doc.pdf"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-include-sys-select.h-for-FD_-definitions.patch b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-include-sys-select.h-for-FD_-definitions.patch
new file mode 100644
index 000000000..6c8ba9074
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-include-sys-select.h-for-FD_-definitions.patch
@@ -0,0 +1,25 @@
+From e291d720a7d9576063717969dde82c33bac7eecf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 11 Apr 2017 14:19:21 -0700
+Subject: [PATCH 1/2] include sys/select.h for FD_* definitions
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ demos/inventory_sim/inventory_sim.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/demos/inventory_sim/inventory_sim.c b/demos/inventory_sim/inventory_sim.c
+index fadf27b..22c33d1 100644
+--- a/demos/inventory_sim/inventory_sim.c
++++ b/demos/inventory_sim/inventory_sim.c
+@@ -132,6 +132,7 @@ Examples
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
++#include <sys/select.h>
+ #include <netinet/in.h>
+ #include <linux/tipc.h>
+
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-multicast_blast-tipcc-Fix-struct-type-for-TIPC_GROUP.patch b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-multicast_blast-tipcc-Fix-struct-type-for-TIPC_GROUP.patch
new file mode 100644
index 000000000..e49528505
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0001-multicast_blast-tipcc-Fix-struct-type-for-TIPC_GROUP.patch
@@ -0,0 +1,33 @@
+From 1ce892749e4f53bd0aeaa4c3ce45f80178799411 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 3 Mar 2018 17:52:51 -0800
+Subject: [PATCH] multicast_blast/tipcc: Fix struct type for TIPC_GROUP_JOIN
+
+Kernel defines it as tipc_group_req and not tipc_mreq
+this code was not excercised with older kernels so we
+never ran into the compiler failures since TIPC_GROUP_JOIN
+is only defined in kernel starting 4.15
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ multicast_blast/tipcc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/multicast_blast/tipcc.c b/multicast_blast/tipcc.c
+index 90644d3..911c759 100755
+--- a/multicast_blast/tipcc.c
++++ b/multicast_blast/tipcc.c
+@@ -213,7 +213,7 @@ int tipc_accept(int sd, struct tipc_addr *src)
+ int tipc_join(int sd, struct tipc_addr *member)
+ {
+ #ifdef TIPC_GROUP_JOIN
+- struct tipc_mreq mreq = {
++ struct tipc_group_req mreq = {
+ .type = member->type,
+ .instance = member->instance,
+ .scope = domain2scope(member->domain)
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0002-replace-non-standard-uint-with-unsigned-int.patch b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0002-replace-non-standard-uint-with-unsigned-int.patch
new file mode 100644
index 000000000..03e711e9a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils/0002-replace-non-standard-uint-with-unsigned-int.patch
@@ -0,0 +1,211 @@
+From 3d091efa09478d0330be686184ae4793764504e7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 11 Apr 2017 14:22:23 -0700
+Subject: [PATCH 2/2] replace non-standard uint with unsigned int
+
+make it portable on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ demos/benchmark/client_tipc.c | 34 +++++++++++++++++-----------------
+ demos/benchmark/common_tipc.h | 2 +-
+ demos/benchmark/server_tipc.c | 10 +++++-----
+ demos/inventory_sim/inventory_sim.c | 12 ++++++------
+ 4 files changed, 29 insertions(+), 29 deletions(-)
+
+diff --git a/demos/benchmark/client_tipc.c b/demos/benchmark/client_tipc.c
+index 5d889ee..d913e42 100644
+--- a/demos/benchmark/client_tipc.c
++++ b/demos/benchmark/client_tipc.c
+@@ -65,7 +65,7 @@ static const struct sockaddr_tipc master_clnt_addr = {
+
+ static int master_clnt_sd;
+ static int master_srv_sd;
+-static uint client_id;
++static unsigned int client_id;
+ static unsigned char *buf = NULL;
+ static int non_blk = 0;
+ static int select_ip(struct srv_info *sinfo, char *name);
+@@ -79,7 +79,7 @@ struct master_client_cmd {
+ __u32 bounce;
+ };
+
+-static void master_to_client(uint cmd, uint msglen, uint msgcnt, uint bounce)
++static void master_to_client(unsigned int cmd, unsigned int msglen, unsigned int msgcnt, unsigned int bounce)
+ {
+ struct master_client_cmd c;
+
+@@ -93,7 +93,7 @@ static void master_to_client(uint cmd, uint msglen, uint msgcnt, uint bounce)
+ die("Unable to send cmd %u to clients\n", cmd);
+ }
+
+-static void client_from_master(uint *cmd, uint *msglen, uint *msgcnt, uint *bounce)
++static void client_from_master(unsigned int *cmd, unsigned int *msglen, unsigned int *msgcnt, unsigned int *bounce)
+ {
+ struct master_client_cmd c;
+
+@@ -114,7 +114,7 @@ struct client_master_cmd {
+ __u32 cmd;
+ };
+
+-static void client_to_master(uint cmd)
++static void client_to_master(unsigned int cmd)
+ {
+ struct client_master_cmd c;
+
+@@ -125,7 +125,7 @@ static void client_to_master(uint cmd)
+ die("Client: Unable to send msg to master\n");
+ }
+
+-static void master_from_client(uint *cmd)
++static void master_from_client(unsigned int *cmd)
+ {
+ struct client_master_cmd c;
+
+@@ -137,7 +137,7 @@ static void master_from_client(uint *cmd)
+ *cmd = ntohl(c.cmd);
+ }
+
+-static void master_to_srv(uint cmd, uint msglen, uint msgcnt, uint echo)
++static void master_to_srv(unsigned int cmd, unsigned int msglen, unsigned int msgcnt, unsigned int echo)
+ {
+ struct master_srv_cmd c;
+
+@@ -151,7 +151,7 @@ static void master_to_srv(uint cmd, uint msglen, uint msgcnt, uint echo)
+ die("Unable to send cmd %u to servers\n", cmd);
+ }
+
+-static void master_from_srv(uint *cmd, struct srv_info *sinfo, __u32 *tipc_addr)
++static void master_from_srv(unsigned int *cmd, struct srv_info *sinfo, __u32 *tipc_addr)
+ {
+ struct srv_to_master_cmd c;
+
+@@ -290,7 +290,7 @@ static void client_main(unsigned int clnt_id, ushort tcp_port, int tcp_addr)
+ {
+ int peer_sd, efd = 0;
+ int imp = clnt_id % 4;
+- uint cmd, msglen, msgcnt, echo;
++ unsigned int cmd, msglen, msgcnt, echo;
+ struct epoll_event event, revents;
+ struct sockaddr_in tcp_dest;
+ int rc;
+@@ -400,22 +400,22 @@ static void client_main(unsigned int clnt_id, ushort tcp_port, int tcp_addr)
+ int main(int argc, char *argv[], char *dummy[])
+ {
+ int c;
+- uint cmd;
+- uint latency_transf = DEFAULT_LAT_MSGS;
+- uint thruput_transf = DEFAULT_THRU_MSGS;
+- uint req_clients = DEFAULT_CLIENTS;
+- uint first_msglen = DEFAULT_MSGLEN;
+- uint last_msglen = TIPC_MAX_USER_MSG_SIZE;
++ unsigned int cmd;
++ unsigned int latency_transf = DEFAULT_LAT_MSGS;
++ unsigned int thruput_transf = DEFAULT_THRU_MSGS;
++ unsigned int req_clients = DEFAULT_CLIENTS;
++ unsigned int first_msglen = DEFAULT_MSGLEN;
++ unsigned int last_msglen = TIPC_MAX_USER_MSG_SIZE;
+ unsigned long long msglen;
+ unsigned long long num_clients;
+ struct timeval start_time;
+ unsigned long long elapsed;
+ unsigned long long msgcnt;
+ unsigned long long iter;
+- uint clnt_id;
+- uint conn_typ = TIPC_CONN;
++ unsigned int clnt_id;
++ unsigned int conn_typ = TIPC_CONN;
+ ushort tcp_port = 0;
+- uint tcp_addr = 0;
++ unsigned int tcp_addr = 0;
+ struct srv_info sinfo;
+ __u32 peer_tipc_addr;
+ char ifname[16] = {0,};
+diff --git a/demos/benchmark/common_tipc.h b/demos/benchmark/common_tipc.h
+index 1765ba1..47947e0 100644
+--- a/demos/benchmark/common_tipc.h
++++ b/demos/benchmark/common_tipc.h
+@@ -256,7 +256,7 @@ static void get_ip_list(struct srv_info *sinfo, char *ifname)
+ }
+ }
+
+-static uint own_node(void)
++static unsigned int own_node(void)
+ {
+ struct sockaddr_tipc addr;
+ socklen_t sz = sizeof(addr);
+diff --git a/demos/benchmark/server_tipc.c b/demos/benchmark/server_tipc.c
+index 9d0e2be..3cd82b7 100644
+--- a/demos/benchmark/server_tipc.c
++++ b/demos/benchmark/server_tipc.c
+@@ -45,7 +45,7 @@ static int wait_for_connection(int listener_sd);
+ static void echo_messages(int peer_sd, int master_sd, int srv_id);
+ static __u32 own_node_addr;
+
+-static void srv_to_master(uint cmd, struct srv_info *sinfo)
++static void srv_to_master(unsigned int cmd, struct srv_info *sinfo)
+ {
+ struct srv_to_master_cmd c;
+
+@@ -62,7 +62,7 @@ static void srv_to_master(uint cmd, struct srv_info *sinfo)
+ die("Server: unable to send info to master\n");
+ }
+
+-static void srv_from_master(uint *cmd, uint* msglen, uint *msgcnt, uint *echo)
++static void srv_from_master(unsigned int *cmd, unsigned int* msglen, unsigned int *msgcnt, unsigned int *echo)
+ {
+ struct master_srv_cmd c;
+
+@@ -84,8 +84,8 @@ int main(int argc, char *argv[], char *dummy[])
+ {
+ ushort tcp_port = 4711;
+ struct srv_info sinfo;
+- uint cmd;
+- uint max_msglen;
++ unsigned int cmd;
++ unsigned int max_msglen;
+ struct sockaddr_in srv_addr;
+ int lstn_sd, peer_sd;
+ int srv_id = 0, srv_cnt = 0;;
+@@ -221,7 +221,7 @@ static int wait_for_connection(int lstn_sd)
+
+ static void echo_messages(int peer_sd, int master_sd, int srv_id)
+ {
+- uint cmd, msglen, msgcnt, echo, rcvd = 0;
++ unsigned int cmd, msglen, msgcnt, echo, rcvd = 0;
+
+ do {
+ /* Get msg length and number to expect, and ack: */
+diff --git a/demos/inventory_sim/inventory_sim.c b/demos/inventory_sim/inventory_sim.c
+index 22c33d1..9bf5443 100644
+--- a/demos/inventory_sim/inventory_sim.c
++++ b/demos/inventory_sim/inventory_sim.c
+@@ -940,9 +940,9 @@ int simItem(int itemID, int lagTime, int speed)
+ char outMsg[MSG_SIZE_MAX];
+ char *marker;
+ int msgSize;
+- uint zone;
+- uint cluster;
+- uint node;
++ unsigned int zone;
++ unsigned int cluster;
++ unsigned int node;
+ char itemName[NAME_SIZE];
+ int haveItem;
+ int res;
+@@ -1134,9 +1134,9 @@ int simCust(int itemID, int lagTime, int waitTime, int speed, int taskID)
+ char msg[MSG_SIZE_MAX];
+ char *marker;
+ int msgSize;
+- uint zone;
+- uint cluster;
+- uint node;
++ unsigned int zone;
++ unsigned int cluster;
++ unsigned int node;
+ char custName[NAME_SIZE];
+ int transactionID;
+ int needItem;
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils_git.bb b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils_git.bb
new file mode 100644
index 000000000..54ed043f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tipcutils/tipcutils_git.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Transparent Inter-Process Communication protocol"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://tipclog/tipc.h;endline=35;md5=985b6ea8735818511d276c1b466cce98"
+
+SRC_URI = "git://git.code.sf.net/p/tipc/tipcutils \
+ file://0001-include-sys-select.h-for-FD_-definitions.patch \
+ file://0002-replace-non-standard-uint-with-unsigned-int.patch \
+ file://0001-multicast_blast-tipcc-Fix-struct-type-for-TIPC_GROUP.patch \
+ "
+SRCREV = "7ab2211b87414ba240b0b2e4af219c1057c9cf9a"
+PV = "2.2.0+git${SRCPV}"
+
+DEPENDS="virtual/kernel"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+inherit autotools pkgconfig
+
+DEPENDS += "libdaemon"
+
+RDEPENDS_${PN} = "iproute2-tipc"
+
+S = "${WORKDIR}/git"
+
+do_configure_prepend() {
+ ( cd ${S}; ${S}/bootstrap )
+}
+
+do_install_append() {
+ demos="benchmark hello_world topology_subscr_demo connection_demo \
+ multicast_demo stream_demo"
+ for i in $demos;do
+ install -d ${D}/opt/tipcutils/demos/$i
+ install ${B}/demos/$i/client_tipc ${D}/opt/tipcutils/demos/$i/
+ install ${B}/demos/$i/server_tipc ${D}/opt/tipcutils/demos/$i/
+ done
+ install -d ${D}/opt/tipcutils/demos/inventory_sim
+ install ${B}/demos/inventory_sim/inventory_sim ${D}/opt/tipcutils/demos/inventory_sim/
+
+ install -d ${D}/opt/tipcutils/ptts
+ install ${B}/ptts/tipcTS ${D}/opt/tipcutils/ptts/
+ install ${B}/ptts/tipcTC ${D}/opt/tipcutils/ptts/
+
+ install -d ${D}${sysconfdir}
+ cp -R --no-dereference --preserve=mode,links -v ${S}/scripts/etc/* ${D}${sysconfdir}/
+ chown -R root:root ${D}${sysconfdir}
+}
+
+PACKAGES += "${PN}-demos"
+FILES_${PN}-dbg += "/opt/tipcutils/demos/*/.debug /opt/tipcutils/ptts/.debug"
+FILES_${PN}-demos = "/opt/tipcutils/*"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/tiptop/tiptop_2.3.1.bb b/meta-openembedded/meta-oe/recipes-extended/tiptop/tiptop_2.3.1.bb
new file mode 100644
index 000000000..0a00a366e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tiptop/tiptop_2.3.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Hardware performance monitoring counters"
+HOMEPAGE = "http://tiptop.gforge.inria.fr/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "ncurses libxml2"
+
+SRC_URI = "http://tiptop.gforge.inria.fr/releases/${BP}.tar.gz"
+SRC_URI[md5sum] = "46ca0fdf0236f02dd2b96d347626d2a2"
+SRC_URI[sha256sum] = "51c4449c95bba34f16b429729c2f58431490665d8093efaa8643b2e1d1084182"
+
+inherit autotools-brokensep
+EXTRA_OECONF = "CFLAGS="$CFLAGS -I${STAGING_INCDIR}/libxml2""
+COMPATIBLE_HOST = "(i.86|x86_64|arm|powerpc).*-linux"
+
+do_configure_prepend () {
+ # Two bugs in configure.ac when cross-compiling.
+ # 1. The path of libxml2. Specify it in EXTRA_OECONF.
+ # 2. hw's value on other platforms. Replace it if the target is
+ # not i*86/x86_64.
+ if ( echo "${TARGET_ARCH}" | grep -q -e 'i.86' -e 'x86_64' ); then
+ sed -i 's= -I/usr/include/libxml2==' ${S}/configure.ac
+ else
+ sed -i 's/hw=`uname -m`/hw="unknown"/' ${S}/configure.ac
+ sed -i 's= -I/usr/include/libxml2==' ${S}/configure.ac
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb
new file mode 100644
index 000000000..fba5156f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Terminal multiplexer"
+HOMEPAGE = "http://tmux.sourceforge.net"
+SECTION = "console/utils"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://tmux.c;beginline=3;endline=17;md5=f256b76d52e7b4d02bf19144bdaca107"
+
+DEPENDS = "ncurses libevent"
+
+SRC_URI = "https://github.com/tmux/tmux/releases/download/${PV}/tmux-${PV}.tar.gz"
+SRC_URI[md5sum] = "d541ff392249f94c4f3635793556f827"
+SRC_URI[sha256sum] = "b17cd170a94d7b58c0698752e1f4f263ab6dc47425230df7e53a6435cc7cd7e8"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[utempter] = "ac_cv_header_utempter_h=yes,ac_cv_header_utempter_h=no,libutempter,"
+
+do_configure_prepend() {
+ # The 'compat' directory is needed for output during the build but it's
+ # not automatically created when building outside the source directory.
+ mkdir ${B}/compat
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/0001-include-required-system-header-files-for-fd_set-and-.patch b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/0001-include-required-system-header-files-for-fd_set-and-.patch
new file mode 100644
index 000000000..38e945d64
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/0001-include-required-system-header-files-for-fd_set-and-.patch
@@ -0,0 +1,41 @@
+From a8d85949a068ee6cd9a2f923cd039047993f239e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 3 Apr 2017 17:11:32 -0700
+Subject: [PATCH] include required system header files for fd_set and makedev
+
+fd_set comes from sys/select.h
+makedev macro is defined in sys/sysmacros.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ uml_net/ethertap.c | 1 +
+ uml_net/host.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/uml_net/ethertap.c b/uml_net/ethertap.c
+index ddd41f2..57f7119 100644
+--- a/uml_net/ethertap.c
++++ b/uml_net/ethertap.c
+@@ -11,6 +11,7 @@
+ #include <sys/signal.h>
+ #include <sys/socket.h>
+ #include <sys/stat.h>
++#include <sys/select.h>
+ #include <sys/ioctl.h>
+ #include <net/if.h>
+ #include "host.h"
+diff --git a/uml_net/host.c b/uml_net/host.c
+index 65c20df..fc04cd4 100644
+--- a/uml_net/host.c
++++ b/uml_net/host.c
+@@ -10,6 +10,7 @@
+ #include <ctype.h>
+ #include <sys/wait.h>
+ #include <sys/stat.h>
++#include <sys/sysmacros.h>
+ #include "output.h"
+ #include "host.h"
+
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/fix-ldflags.patch b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/fix-ldflags.patch
new file mode 100644
index 000000000..f4a175cdf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/fix-ldflags.patch
@@ -0,0 +1,104 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- tools/mconsole/Makefile~fix-ldflags 2003-02-08 05:10:08.000000000 +0100
++++ tools/mconsole/Makefile 2004-04-01 15:37:37.000000000 +0200
+@@ -7,7 +7,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS) -lreadline -lncurses
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS) -lreadline -lncurses
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/jailtest/Makefile tools/jailtest/Makefile
+--- tools.orig/jailtest/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/jailtest/Makefile 2017-04-03 16:00:04.857449005 +0200
+@@ -7,7 +7,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/moo/Makefile tools/moo/Makefile
+--- tools.orig/moo/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/moo/Makefile 2017-04-03 15:59:56.466449432 +0200
+@@ -10,10 +10,10 @@
+ all : $(BIN)
+
+ uml_moo : $(uml_moo_OBJS)
+- $(CC) $(CFLAGS) -o $@ $($@_OBJS)
++ $(CC) $(CFLAGS) -o $@ $($@_OBJS) $(LDFLAGS)
+
+ uml_mkcow : $(uml_mkcow_OBJS)
+- $(CC) $(CFLAGS) -o $@ $($@_OBJS)
++ $(CC) $(CFLAGS) -o $@ $($@_OBJS) $(LDFLAGS)
+
+ $(uml_moo_OBJS) $(uml_mkcow_OBJS) : cow.h cow_sys.h
+
+diff -uNr tools.orig/port-helper/Makefile tools/port-helper/Makefile
+--- tools.orig/port-helper/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/port-helper/Makefile 2017-04-03 15:59:41.251450208 +0200
+@@ -7,7 +7,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/tunctl/Makefile tools/tunctl/Makefile
+--- tools.orig/tunctl/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/tunctl/Makefile 2017-04-03 16:00:01.091449197 +0200
+@@ -7,7 +7,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/uml_net/Makefile tools/uml_net/Makefile
+--- tools.orig/uml_net/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/uml_net/Makefile 2017-04-03 16:00:12.449448618 +0200
+@@ -14,7 +14,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/uml_router/Makefile tools/uml_router/Makefile
+--- tools.orig/uml_router/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/uml_router/Makefile 2017-04-03 16:00:46.796446867 +0200
+@@ -13,7 +13,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
+diff -uNr tools.orig/watchdog/Makefile tools/watchdog/Makefile
+--- tools.orig/watchdog/Makefile 2017-04-03 15:56:02.068461380 +0200
++++ tools/watchdog/Makefile 2017-04-03 15:59:45.216450006 +0200
+@@ -7,7 +7,7 @@
+ all : $(BIN)
+
+ $(BIN) : $(OBJS)
+- $(CC) $(CFLAGS) -o $(BIN) $(OBJS)
++ $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(LDFLAGS)
+
+ clean :
+ rm -f $(BIN) $(OBJS) *~
diff --git a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/unstrip.patch b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/unstrip.patch
new file mode 100644
index 000000000..868001dbd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities-20040406/unstrip.patch
@@ -0,0 +1,84 @@
+Dont strip during install let the packaging handle it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: tools/jailtest/Makefile
+===================================================================
+--- tools.orig/jailtest/Makefile 2003-02-07 20:10:27.000000000 -0800
++++ tools/jailtest/Makefile 2012-09-05 12:13:56.061615854 -0700
+@@ -14,4 +14,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/mconsole/Makefile
+===================================================================
+--- tools.orig/mconsole/Makefile 2012-09-05 12:05:09.869607043 -0700
++++ tools/mconsole/Makefile 2012-09-05 12:14:07.725607469 -0700
+@@ -14,4 +14,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/moo/Makefile
+===================================================================
+--- tools.orig/moo/Makefile 2003-06-26 09:27:00.000000000 -0700
++++ tools/moo/Makefile 2012-09-05 12:14:20.981604580 -0700
+@@ -22,4 +22,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/port-helper/Makefile
+===================================================================
+--- tools.orig/port-helper/Makefile 2003-02-07 20:05:31.000000000 -0800
++++ tools/port-helper/Makefile 2012-09-05 12:14:39.429609678 -0700
+@@ -14,4 +14,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(LIB_DIR)
+- install -s $(BIN) $(DESTDIR)$(LIB_DIR)
++ install $(BIN) $(DESTDIR)$(LIB_DIR)
+Index: tools/tunctl/Makefile
+===================================================================
+--- tools.orig/tunctl/Makefile 2003-02-07 20:05:04.000000000 -0800
++++ tools/tunctl/Makefile 2012-09-05 12:14:49.985606470 -0700
+@@ -14,4 +14,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/uml_net/Makefile
+===================================================================
+--- tools.orig/uml_net/Makefile 2003-02-07 20:04:55.000000000 -0800
++++ tools/uml_net/Makefile 2012-09-05 12:15:00.961607290 -0700
+@@ -21,4 +21,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s -m 04755 $(BIN) $(DESTDIR)$(BIN_DIR)
++ install -m 04755 $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/uml_router/Makefile
+===================================================================
+--- tools.orig/uml_router/Makefile 2003-02-07 20:04:39.000000000 -0800
++++ tools/uml_router/Makefile 2012-09-05 12:15:10.649607571 -0700
+@@ -20,4 +20,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
+Index: tools/watchdog/Makefile
+===================================================================
+--- tools.orig/watchdog/Makefile 2003-02-07 20:04:25.000000000 -0800
++++ tools/watchdog/Makefile 2012-09-05 12:15:35.561612203 -0700
+@@ -14,4 +14,4 @@
+
+ install : $(BIN)
+ install -d $(DESTDIR)$(BIN_DIR)
+- install -s $(BIN) $(DESTDIR)$(BIN_DIR)
++ install $(BIN) $(DESTDIR)$(BIN_DIR)
diff --git a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb
new file mode 100644
index 000000000..ed19d1e41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb
@@ -0,0 +1,27 @@
+SECTION = "console/utils"
+SUMMARY = "Utilities for User-Mode-Linux"
+LICENSE = "GPL-2.0"
+DEPENDS = "zlib ncurses readline"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+SRC_URI = "http://downloads.sourceforge.net/project/user-mode-linux/tools/1/uml_utilities_${PV}.tar.bz2 \
+ file://fix-ldflags.patch \
+ file://unstrip.patch \
+ file://0001-include-required-system-header-files-for-fd_set-and-.patch \
+ "
+SRC_URI[md5sum] = "2c1ccd9efacbfb39e42d482b89b2550a"
+SRC_URI[sha256sum] = "4f179b1db021ef15ac7e9b2eed57c525db127a754c574f591c367460cded9f41"
+
+PR = "r1"
+
+S = "${WORKDIR}/tools"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+FILES_${PN} += "${exec_prefix}${nonarch_base_libdir}"
+FILES_${PN}-dbg += "${exec_prefix}${nonarch_base_libdir}/uml/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb b/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb
new file mode 100644
index 000000000..d742a5e46
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb
@@ -0,0 +1,50 @@
+SUMMARY = "Sensor/Actuator repository for Mraa"
+HOMEPAGE = "https://github.com/intel-iot-devkit/upm"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=66493d54e65bfc12c7983ff2e884f37f"
+
+DEPENDS = "libjpeg-turbo mraa"
+
+SRCREV = "cc7fec9ae0228add9011bf1c2cd5e0ca2ba0d4f0"
+PV = "1.6.0-git${SRCPV}"
+
+SRC_URI = " \
+ git://github.com/intel-iot-devkit/${BPN}.git;protocol=http \
+"
+
+S = "${WORKDIR}/git"
+
+# Depends on mraa which only supports x86 and ARM for now
+COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64.*|arm.*)-linux"
+
+inherit distutils3-base cmake
+
+
+# override this in local.conf to get needed bindings.
+# BINDINGS_pn-upm="python"
+# will result in only the python bindings being built/packaged.
+# Note: 'nodejs' is disabled by default because the bindings
+# generation currently fails with nodejs (>v7.x).
+BINDINGS ??= "python"
+
+# nodejs isn't available for armv4/armv5 architectures
+BINDINGS_armv4 ??= "python"
+BINDINGS_armv5 ??= "python"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGES', 'node-${PN}', 'nodejs', '', d)} \
+ ${@bb.utils.contains('PACKAGES', '${PYTHON_PN}-${PN}', 'python', '', d)}"
+
+PACKAGECONFIG[python] = "-DBUILDSWIGPYTHON=ON, -DBUILDSWIGPYTHON=OFF, swig-native ${PYTHON_PN},"
+PACKAGECONFIG[nodejs] = "-DBUILDSWIGNODE=ON, -DBUILDSWIGNODE=OFF, swig-native nodejs-native,"
+
+FILES_${PYTHON_PN}-${PN} = "${PYTHON_SITEPACKAGES_DIR}"
+RDEPENDS_${PYTHON_PN}-${PN} += "${PYTHON_PN}"
+
+FILES_node-${PN} = "${prefix}/lib/node_modules/"
+RDEPENDS_node-${PN} += "nodejs"
+
+### Include desired language bindings ###
+PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'nodejs', 'node-${PN}', '', d)}"
+PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'python', '${PYTHON_PN}-${PN}', '', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/disable_vlockrc.patch b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/disable_vlockrc.patch
new file mode 100644
index 000000000..2412bb8de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/disable_vlockrc.patch
@@ -0,0 +1,47 @@
+From f71cc920528c3496b0118964ebbcf5440cda4ed1 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 16 Aug 2017 13:37:40 +0800
+Subject: [PATCH] vlock: add new recipe
+
+Upstream-Status: Inappropriate [configuration]
+
+written by: Jeff Polk <jeff.polk@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ man/vlock.1 | 5 -----
+ src/vlock.sh | 5 -----
+ 2 files changed, 10 deletions(-)
+
+diff --git a/man/vlock.1 b/man/vlock.1
+index 0d29b49..01cb944 100644
+--- a/man/vlock.1
++++ b/man/vlock.1
+@@ -111,11 +111,6 @@ enter your password at the password prompt. If this variable is unset or set
+ to an invalid value or 0 no timeout is used. \fBWarning\fR: If this value is
+ too low, you may not be able to unlock your session.
+ .PP
+-.SH FILES
+-.B ~/.vlockrc
+-.IP
+-This file is read by \fBvlock\fR on startup if it exists. All the variables
+-mentioned above can be set here.
+ .SH SECURITY
+ See the SECURITY file in the \fBvlock\fR distribution for more information.
+ .PP
+diff --git a/src/vlock.sh b/src/vlock.sh
+index 75f1369..f572776 100644
+--- a/src/vlock.sh
++++ b/src/vlock.sh
+@@ -35,11 +35,6 @@ This TTY is now locked.
+
+ ${VLOCK_ENTER_PROMPT}"
+
+-# Read user settings.
+-if [ -r "${HOME}/.vlockrc" ] ; then
+- . "${HOME}/.vlockrc"
+-fi
+-
+ # "Compile" time variables.
+ VLOCK_MAIN="%PREFIX%/sbin/vlock-main"
+ VLOCK_VERSION="%VLOCK_VERSION%"
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock-no_tally.patch b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock-no_tally.patch
new file mode 100644
index 000000000..3a344b236
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock-no_tally.patch
@@ -0,0 +1,120 @@
+From 17e5c8d32abc214aea408f0837be41e88bce7eb2 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 16 Aug 2017 13:37:40 +0800
+Subject: [PATCH] vlock: add new recipe
+
+Upstream-Status: Pending
+
+written by: Jeff Polk <jeff.polk@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ Makefile | 4 ++++
+ configure | 9 +++++++++
+ src/vlock-main.c | 8 ++++++++
+ 3 files changed, 21 insertions(+)
+
+diff --git a/Makefile b/Makefile
+index 4eeb42a..834cd2c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -126,6 +126,10 @@ ifeq ($(AUTH_METHOD),shadow)
+ vlock-main : override LDLIBS += $(CRYPT_LIB)
+ endif
+
++ifneq ($(ENABLE_FAIL_COUNT),yes)
++vlock-main.o : override CFLAGS += -DNO_FAIL_COUNT
++endif
++
+ ifeq ($(ENABLE_PLUGINS),yes)
+ vlock-main: plugins.o plugin.o module.o process.o script.o tsort.o list.o
+ # -rdynamic is needed so that the all plugin can access the symbols from console_switch.o
+diff --git a/configure b/configure
+index d5d84d6..1303598 100755
+--- a/configure
++++ b/configure
+@@ -44,6 +44,7 @@ Optional Features:
+ --enable-shadow enable shadow authentication [disabled]
+ --enable-root-password enable unlogging with root password [enabled]
+ --enable-debug enable debugging
++ --enable-fail-count enable failed login attempt summary [enabled]
+
+ Additional configuration:
+ --with-scripts=SCRIPTS enable the named scripts []
+@@ -78,6 +79,9 @@ enable_feature() {
+ root-password)
+ ENABLE_ROOT_PASSWORD="$2"
+ ;;
++ fail-count)
++ ENABLE_FAIL_COUNT="$2"
++ ;;
+ pam|shadow)
+ if [ "$2" = "yes" ] ; then
+ if [ -n "$auth_method" ] && [ "$auth_method" != "$1" ] ; then
+@@ -228,6 +232,7 @@ set_defaults() {
+ AUTH_METHOD="pam"
+ ENABLE_ROOT_PASSWORD="yes"
+ ENABLE_PLUGINS="yes"
++ ENABLE_FAIL_COUNT="yes"
+ SCRIPTS=""
+
+ VLOCK_GROUP="vlock"
+@@ -353,6 +358,10 @@ MODULES = ${MODULES}
+ # which scripts should be installed
+ SCRIPTS = ${SCRIPTS}
+
++# display a summary of failed authentication attempts after successfully
++# unlocking?
++ENABLE_FAIL_COUNT = ${ENABLE_FAIL_COUNT}
++
+ # root's group
+ ROOT_GROUP = ${ROOT_GROUP}
+
+diff --git a/src/vlock-main.c b/src/vlock-main.c
+index 008f6f0..108ce8b 100644
+--- a/src/vlock-main.c
++++ b/src/vlock-main.c
+@@ -112,7 +112,9 @@ static void restore_terminal(void)
+ (void) tcsetattr(STDIN_FILENO, TCSANOW, &old_term);
+ }
+
++#ifdef ENABLE_FAIL_COUNT
+ static int auth_tries;
++#endif /* ENABLE_FAIL_COUNT */
+
+ static void auth_loop(const char *username)
+ {
+@@ -182,7 +184,9 @@ static void auth_loop(const char *username)
+ }
+ #endif
+
++#ifdef ENABLE_FAIL_COUNT
+ auth_tries++;
++#endif /* ENABLE_FAIL_COUNT */
+ }
+
+ /* Free timeouts memory. */
+@@ -190,11 +194,13 @@ static void auth_loop(const char *username)
+ free(prompt_timeout);
+ }
+
++#ifdef ENABLE_FAIL_COUNT
+ void display_auth_tries(void)
+ {
+ if (auth_tries > 0)
+ fprintf(stderr, "%d failed authentication %s.\n", auth_tries, auth_tries > 1 ? "tries" : "try");
+ }
++#endif /* ENABLE_FAIL_COUNT */
+
+ #ifdef USE_PLUGINS
+ static void call_end_hook(void)
+@@ -217,7 +223,9 @@ int main(int argc, char *const argv[])
+ if (username == NULL)
+ fatal_perror("vlock: could not get username");
+
++#ifdef ENABLE_FAIL_COUNT
+ ensure_atexit(display_auth_tries);
++#endif /* ENABLE_FAIL_COUNT */
+
+ #ifdef USE_PLUGINS
+ for (int i = 1; i < argc; i++)
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam
new file mode 100644
index 000000000..a919682b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam
@@ -0,0 +1,3 @@
+# Use the default auth and account policies for vlock
+auth include common-auth
+account include common-account
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam_tally2_reset.patch b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam_tally2_reset.patch
new file mode 100644
index 000000000..460b29249
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock-2.2.3/vlock_pam_tally2_reset.patch
@@ -0,0 +1,28 @@
+From fcec4e7fe899f8c0077b3004eeccb7292a945a67 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 16 Aug 2017 13:37:40 +0800
+Subject: [PATCH] vlock: add new recipe
+
+Upstream-Status: Pending
+
+written by: Jeff Polk <jeff.polk@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ src/auth-pam.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/auth-pam.c b/src/auth-pam.c
+index 5cf93f6..c5cc67a 100644
+--- a/src/auth-pam.c
++++ b/src/auth-pam.c
+@@ -148,6 +148,9 @@ bool auth(const char *user, struct timespec *timeout)
+
+ if (pam_status != PAM_SUCCESS) {
+ fprintf(stderr, "vlock: %s\n", pam_strerror(pamh, pam_status));
++ } else {
++ pam_status = pam_acct_mgmt(pamh, 0);
++ if (pam_status == PAM_SUCCESS) pam_setcred(pamh, PAM_REINITIALIZE_CRED);
+ }
+
+ end:
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb
new file mode 100644
index 000000000..259d3a5e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Virtual Console lock program"
+DESCRIPTION = "Sometimes a malicious local user could cause more problems \
+ than a sophisticated remote one. vlock is a program that locks one or more \
+ sessions on the Linux console to prevent attackers from gaining physical \
+ access to the machine. \
+ "
+SECTION = "utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a17cb0a873d252440acfdf9b3d0e7fbf"
+
+SRC_URI = "${GENTOO_MIRROR}/${BP}.tar.gz \
+ file://disable_vlockrc.patch \
+ file://vlock_pam_tally2_reset.patch \
+ file://vlock-no_tally.patch \
+ file://vlock_pam \
+ "
+
+SRC_URI[md5sum] = "378175c7692a8f288e65fd4dbf8a38eb"
+SRC_URI[sha256sum] = "85aa5aed1ae49351378a0bd527a013078f0f969372a63164b1944174ae1a5e39"
+
+inherit autotools-brokensep update-alternatives
+
+# authentification method: either pam or shadow
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', 'shadow', d)}"
+PACKAGECONFIG[pam] = "--enable-pam,,libpam,"
+PACKAGECONFIG[shadow] = "--enable-shadow,,shadow,"
+
+CFLAGS += "-Wall -W -pedantic -std=gnu99"
+
+do_configure () {
+ # The configure tries to use 'getent' to get the group
+ # info from the host, which should be avoided.
+ sed -i 's/\(ROOT_GROUP=\).*/\1"root"/' ${CONFIGURE_SCRIPT}
+
+ ${CONFIGURE_SCRIPT} \
+ VLOCK_GROUP=root \
+ ROOT_GROUP=root \
+ CC="${CC}" \
+ CFLAGS="${CFLAGS}" \
+ LDFLAGS="${LDFLAGS}" \
+ --prefix=${prefix} \
+ --libdir=${libdir} \
+ --mandir=${mandir} \
+ --with-modules="all.so new.so nosysrq.so ttyblank.so vesablank.so" \
+ --disable-root-password --enable-debug --disable-fail-count \
+ ${PACKAGECONFIG_CONFARGS}
+}
+
+do_install_append () {
+ if [ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', '', d)} = yes ]; then
+ install -d -m 0755 ${D}/${sysconfdir}/pam.d
+ install -m 0644 ${WORKDIR}/vlock_pam ${D}${sysconfdir}/pam.d/vlock
+ fi
+}
+
+ALTERNATIVE_${PN} = "vlock"
+ALTERNATIVE_PRIORITY = "60"
+ALTERNATIVE_LINK_NAME[vlock] = "${bindir}/vlock"
diff --git a/meta-openembedded/meta-oe/recipes-extended/volume_key/files/0001-explicitly-support-python3-by-pkg-config.patch b/meta-openembedded/meta-oe/recipes-extended/volume_key/files/0001-explicitly-support-python3-by-pkg-config.patch
new file mode 100644
index 000000000..03edb1390
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/volume_key/files/0001-explicitly-support-python3-by-pkg-config.patch
@@ -0,0 +1,56 @@
+From 18415c0b4c6e50ed9b99dfdae8d210590d0ab72e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 28 Apr 2017 04:50:30 -0400
+Subject: [PATCH] explicitly support python3 by pkg-config
+
+The PYTHON_CPPFLAGS and -lpython$(PYTHON_VERSION) is hardcoded,
+use pkg-config to replace
+
+Upstream-Status: Inappropriate [wr-installer specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.am | 5 ++---
+ configure.ac | 2 ++
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 4569bbf..7a8daf4 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -20,7 +20,6 @@ ACLOCAL_AMFLAGS = -I m4
+ AM_CPPFLAGS = $(blkid_CFLAGS) $(glib_CFLAGS) $(GPGME_CFLAGS) \
+ $(libcryptsetup_CFLAGS) $(nss_CFLAGS)
+ LOCALEDIR_CPPFLAGS = -DLOCALEDIR='"$(localedir)"'
+-PYTHON_CPPFLAGS = -I/usr/include/python$(PYTHON_VERSION)
+
+ ## Targets
+ SUBDIRS = po
+@@ -63,9 +62,9 @@ lib_libvolume_key_la_LIBADD = $(blkid_LIBS) $(glib_LIBS) $(GPGME_LIBS) \
+ $(LTLIBINTL) $(libcryptsetup_LIBS) $(nss_LIBS)
+
+ python__volume_key_la_SOURCES = python/volume_key_wrap.c
+-python__volume_key_la_CPPFLAGS = $(AM_CPPFLAGS) $(PYTHON_CPPFLAGS)
++python__volume_key_la_CPPFLAGS = $(AM_CPPFLAGS) $(python3_CFLAGS)
+ python__volume_key_la_LDFLAGS = -module -avoid-version $(glib_LIBS)
+-python__volume_key_la_LIBADD = lib/libvolume_key.la -lpython$(PYTHON_VERSION) \
++python__volume_key_la_LIBADD = lib/libvolume_key.la $(python3_LIBS) \
+ $(glib_LIBS) $(nss_LIBS)
+
+ src_volume_key_SOURCES = src/volume_key.c
+diff --git a/configure.ac b/configure.ac
+index ff35dd0..0928a6c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -27,6 +27,8 @@ AM_INIT_AUTOMAKE([no-dist-gzip dist-xz no-define subdir-objects -Wall])
+ AC_PROG_CC
+ AM_PROG_CC_C_O
+ LT_INIT([disable-static])
++
++PKG_CHECK_MODULES(python3, [python3])
+ AM_PATH_PYTHON
+
+ dnl Not gpg2, it cannot receive passphrases from gpgme
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/volume_key/volume-key_0.3.9.bb b/meta-openembedded/meta-oe/recipes-extended/volume_key/volume-key_0.3.9.bb
new file mode 100644
index 000000000..febf3f256
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/volume_key/volume-key_0.3.9.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "The volume_key project provides a libvolume_key, a library for manipulating \
+storage volume encryption keys and storing them separately from volumes, and an \
+associated command-line tool, named volume_key."
+LICENSE = "GPLv2"
+SECTION = "devel/lib"
+
+HOMEPAGE = "https://pagure.io/volume_key"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "https://releases.pagure.org/volume_key/volume_key-${PV}.tar.xz \
+ file://0001-explicitly-support-python3-by-pkg-config.patch \
+"
+SRC_URI[md5sum] = "a2d14931177c660e1f3ebbcf5f47d8e2"
+SRC_URI[sha256sum] = "450a54fe9bf56acec6850c1e71371d3e4913c9ca1ef0cdc3a517b4b6910412a6"
+
+SRCNAME = "volume_key"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit autotools python3native gettext
+
+DEPENDS += " \
+ util-linux \
+ glib-2.0 \
+ cryptsetup \
+ nss \
+ gpgme \
+"
+
+RDEPENDS_python3-${PN} += "${PN}"
+
+PACKAGES += "python3-${PN}"
+FILES_python3-${PN} = "${PYTHON_SITEPACKAGES_DIR}/*"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/wipe/files/makefile-add-ldflags.patch b/meta-openembedded/meta-oe/recipes-extended/wipe/files/makefile-add-ldflags.patch
new file mode 100644
index 000000000..fac1b31dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/wipe/files/makefile-add-ldflags.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 9e74cdf..cad8109 100644
+--- a/Makefile
++++ b/Makefile
+@@ -151,7 +151,7 @@ generic :
+ $(MAKE) $(TARGETS) "CC=$(CC_GENERIC)" "CCO=$(CCO_GENERIC)" "CCOC=$(CCOC_GENERIC)"
+
+ wipe : $(OBJECTS)
+- $(CC) $(CCO) $(OBJECTS) -o wipe
++ $(CC) $(CCO) $(LDFLAGS) $(OBJECTS) -o wipe
+
+ wipe.o : wipe.c random.h misc.h version.h
+ $(CC) $(CCO) $(CCOC) wipe.c -o wipe.o
diff --git a/meta-openembedded/meta-oe/recipes-extended/wipe/files/support-cross-compile-for-linux.patch b/meta-openembedded/meta-oe/recipes-extended/wipe/files/support-cross-compile-for-linux.patch
new file mode 100644
index 000000000..fb3aee806
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/wipe/files/support-cross-compile-for-linux.patch
@@ -0,0 +1,36 @@
+From 35f14bd5aba2ed6cee258e11eab42c408afc04d0 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 4 Nov 2015 02:29:05 -0500
+Subject: [PATCH] Makefile: support cross compile for linux
+
+Upstream-Status: Pending
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 17d9758..9e74cdf 100644
+--- a/Makefile
++++ b/Makefile
+@@ -41,7 +41,7 @@
+ # Linux 2.0.x
+ #
+
+-CC_LINUX=gcc
++CC_LINUX=$(CC)
+ CCO_LINUX=-Wall -DHAVE_DEV_URANDOM -DHAVE_OSYNC -DHAVE_STRCASECMP -DHAVE_RANDOM -DWEAK_RC6 -DSYNC_WAITS_FOR_SYNC -DFIND_DEVICE_SIZE_BY_BLKGETSIZE -DSIXTYFOUR -D__USE_LARGEFILE -D_FILE_OFFSET_BITS=64
+ # default should be to turn off debugging and to turn on optimization.
+ #CCO_LINUX+=-O9 -pipe -fomit-frame-pointer -finline-functions -funroll-loops -fstrength-reduce
+@@ -185,6 +185,7 @@ clean :
+ rm -f wipe $(OBJECTS) wipe.tr-asc.1 version.h
+
+ install:
+- install -m755 -o root -g root wipe $(DESTDIR)/usr/bin
++ [ -e $(DESTDIR)$(bindir) ] || mkdir -p $(DESTDIR)$(bindir)
++ install -m755 -o root -g root wipe $(DESTDIR)$(bindir)
+
+ .PHONY: always clean install
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/wipe/wipe_git.bb b/meta-openembedded/meta-oe/recipes-extended/wipe/wipe_git.bb
new file mode 100644
index 000000000..9a8101621
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/wipe/wipe_git.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A UNIX tool for secure deletion"
+DESCRIPTION = "Wipe is a little command for securely erasing files from \
+magnetic media. It compiles under various unix platforms, \
+including Linux 2. * , (Open, Net, Free)BSD, aix 4.1, SunOS \
+5.5.1, Solaris 2.6. wipe is released under the GPL. Pre-compiled \
+packages are available on most Linux distributions. \
+Under Debian, the package name is wipe"
+HOMEPAGE = "http://lambda-diode.com/software/wipe/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://GPL;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "git://github.com/berke/wipe.git;branch=master \
+ file://support-cross-compile-for-linux.patch \
+ file://makefile-add-ldflags.patch \
+"
+SRCREV = "d9c100c9cd0b1cbbe4359e4d6c9a035d11e7597c"
+PV = "0.23+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "linux"
+
+do_install() {
+ make install DESTDIR=${D}
+}
+
+do_configure[noexec] = "1"
diff --git a/meta-openembedded/meta-oe/recipes-extended/zlog/zlog/0001-event.c-Cast-pthread_t-to-unsigned-long-instead-of-u.patch b/meta-openembedded/meta-oe/recipes-extended/zlog/zlog/0001-event.c-Cast-pthread_t-to-unsigned-long-instead-of-u.patch
new file mode 100644
index 000000000..71a989103
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/zlog/zlog/0001-event.c-Cast-pthread_t-to-unsigned-long-instead-of-u.patch
@@ -0,0 +1,32 @@
+From b97f62fdf3b78eb5cfcb3a1b12c6fd62f735717b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 09:29:33 -0700
+Subject: [PATCH] event.c: Cast pthread_t to unsigned long instead of unsigned
+ int
+
+On 64bit machines it ends up in errors
+
+event.c:85:67: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
+ a_event->tid_hex_str_len = sprintf(a_event->tid_hex_str, "0x%x", (unsigned int)a_event->tid);
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/event.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/event.c b/src/event.c
+index 8f988b5..c632c33 100644
+--- a/src/event.c
++++ b/src/event.c
+@@ -82,7 +82,7 @@ zlog_event_t *zlog_event_new(int time_cache_count)
+ a_event->tid = pthread_self();
+
+ a_event->tid_str_len = sprintf(a_event->tid_str, "%lu", (unsigned long)a_event->tid);
+- a_event->tid_hex_str_len = sprintf(a_event->tid_hex_str, "0x%x", (unsigned int)a_event->tid);
++ a_event->tid_hex_str_len = sprintf(a_event->tid_hex_str, "0x%lu", (unsigned long)a_event->tid);
+
+ //zlog_event_profile(a_event, ZC_DEBUG);
+ return a_event;
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/zlog/zlog_git.bb b/meta-openembedded/meta-oe/recipes-extended/zlog/zlog_git.bb
new file mode 100644
index 000000000..86e6d30e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/zlog/zlog_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Zlog is a pure C logging library"
+HOMEPAGE = "https://github.com/HardySimpson/zlog"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+PV = "1.2.12+git${SRCPV}"
+
+SRCREV = "13904dab2878aa2654d0c20fb8600a3dc5f2dd68"
+SRC_URI = "git://github.com/HardySimpson/zlog \
+ file://0001-event.c-Cast-pthread_t-to-unsigned-long-instead-of-u.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE = "CC='${CC}' LD='${LD}'"
+
+do_install() {
+ oe_runmake install PREFIX=${D}${exec_prefix} INSTALL=install
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/zram/zram/init b/meta-openembedded/meta-oe/recipes-extended/zram/zram/init
new file mode 100644
index 000000000..a2c9c2123
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/zram/zram/init
@@ -0,0 +1,85 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: zram
+# Required-Start:
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)
+# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram
+# Included as part of antix-goodies package by anticapitalista <antiX@operamail.com>
+# This script was written by tradetaxfree and is found at http://crunchbanglinux.org/forums/topic/15344/zram-a-good-idea/
+# Copy this script (as root) from /usr/local/bin to /etc/init.d and then #update-rc.d zram defaults
+# After booting verify the module is loaded with: lsmod | grep zram
+### END INIT INFO
+set -e
+
+start() {
+ # get the number of CPUs
+ num_cpus=$(grep -c processor /proc/cpuinfo)
+ # if something goes wrong, assume we have 1
+ [ "$num_cpus" != 0 ] || num_cpus=1
+
+ # set decremented number of CPUs
+ last_cpu=$((num_cpus - 1))
+
+ #default Factor % = 90 change this value here or create /etc/default/zram
+ FACTOR=90
+ #& put the above single line in /etc/default/zram with the value you want
+ [ -f /etc/default/zram ] && . /etc/default/zram || true
+ factor=$FACTOR # percentage
+
+ # get the amount of memory in the machine
+ memtotal=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ')
+ mem_by_cpu=$(($memtotal/$num_cpus*$factor/100*1024))
+
+ # load dependency modules
+ modprobe zram num_devices=$num_cpus
+ echo "zram devices probed successfully"
+
+ # initialize the devices
+ for i in $(seq 0 $last_cpu); do
+ echo 1 > /sys/block/zram$i/reset
+ echo $mem_by_cpu > /sys/block/zram$i/disksize
+ # Creating swap filesystems
+ mkswap /dev/zram$i
+ # Switch the swaps on
+ swapon -p 100 /dev/zram$i
+ done
+}
+
+stop() {
+ # get the number of CPUs
+ num_cpus=$(grep -c processor /proc/cpuinfo)
+
+ # set decremented number of CPUs
+ last_cpu=$((num_cpus - 1))
+
+ # Switching off swap
+ for i in $(seq 0 $last_cpu); do
+ if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then
+ swapoff /dev/zram$i
+ sleep 1
+ fi
+ done
+ sleep 1
+ rmmod zram
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ sleep 3
+ start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ RETVAL=1
+esac
+exit $RETVAL
diff --git a/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service b/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service
new file mode 100644
index 000000000..4a19367d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Enable zram compressed in-memory swap.
+After=multi-user.target
+
+[Service]
+RemainAfterExit=yes
+ExecStart=/usr/bin/zram-load.sh --load
+ExecStop=/usr/bin/zram-load.sh --unload
+Type=oneshot
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-extended/zram/zram_0.1.bb b/meta-openembedded/meta-oe/recipes-extended/zram/zram_0.1.bb
new file mode 100644
index 000000000..dfd75e71c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/zram/zram_0.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Linux zram compressed in-memory swap"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit update-rc.d systemd
+
+RDEPENDS_${PN} = "util-linux-swaponoff kmod"
+RRECOMMENDS_${PN} = "kernel-module-zram"
+
+PR = "r3"
+
+SRC_URI = " \
+ file://init \
+ file://zram.service \
+"
+
+do_install () {
+ # Sysvinit
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/zram
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/zram.service ${D}${systemd_unitdir}/system
+}
+
+FILES_${PN} = "${sysconfdir}"
+INITSCRIPT_NAME = "zram"
+INITSCRIPT_PARAMS = "start 05 2 3 4 5 . stop 22 0 1 6 ."
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "zram.service"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.24.2.bb b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.24.2.bb
new file mode 100644
index 000000000..307774b37
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.24.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "C++ bindings for the atk"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://COPYING.tools;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "atk glibmm"
+
+inherit distro_features_check gnome autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "d53b60b0f1be597e86070954a49cf0c3"
+SRC_URI[archive.sha256sum] = "ff95385759e2af23828d4056356f25376cfabc41e690ac1df055371537e458bd"
+
+EXTRA_OECONF = " --disable-documentation "
+
+FILES_${PN}-dev += "${libdir}/*/include ${libdir}/*/proc/m4"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
new file mode 100644
index 000000000..d87416454
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Common macros for building GNOME applications"
+HOMEPAGE = "http://www.gnome.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SECTION = "x11/gnome"
+inherit gnomebase allarch
+
+SRC_URI[archive.md5sum] = "933258d9c23e218eb6eec9cc1951b053"
+SRC_URI[archive.sha256sum] = "22569e370ae755e04527b76328befc4c73b62bfd4a572499fde116b8318af8cf"
+
+EXTRA_AUTORECONF = ""
+DEPENDS = ""
+
+# Default to enable autoconf-archive to avoid conflicts
+PACKAGECONFIG ??= "autoconf-archive"
+PACKAGECONFIG[autoconf-archive] = "--with-autoconf-archive, --without-autoconf-archive, autoconf-archive"
+
+FILES_${PN} += "${datadir}/aclocal"
+FILES_${PN}-dev = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/files/gnome-doc-utils.m4 b/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/files/gnome-doc-utils.m4
new file mode 100644
index 000000000..f8d160a9e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/files/gnome-doc-utils.m4
@@ -0,0 +1,61 @@
+dnl Do not call GNOME_DOC_DEFINES directly. It is split out from
+dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself.
+AC_DEFUN([GNOME_DOC_DEFINES],
+[
+AC_ARG_WITH([help-dir],
+ AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),,
+ [with_help_dir='${datadir}/gnome/help'])
+HELP_DIR="$with_help_dir"
+AC_SUBST(HELP_DIR)
+
+AC_ARG_WITH([omf-dir],
+ AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),,
+ [with_omf_dir='${datadir}/omf'])
+OMF_DIR="$with_omf_dir"
+AC_SUBST(OMF_DIR)
+
+AC_ARG_WITH([help-formats],
+ AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),,
+ [with_help_formats=''])
+DOC_USER_FORMATS="$with_help_formats"
+AC_SUBST(DOC_USER_FORMATS)
+
+AC_ARG_ENABLE([scrollkeeper],
+ [AC_HELP_STRING([--disable-scrollkeeper],
+ [do not make updates to the scrollkeeper database])],,
+ enable_scrollkeeper=yes)
+AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"])
+
+dnl disable scrollkeeper automatically for distcheck
+DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
+AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
+
+AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"])
+])
+
+# GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+#
+AC_DEFUN([GNOME_DOC_INIT],
+[AC_REQUIRE([AC_PROG_LN_S])dnl
+
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+ AM_DEFAULT_VERBOSITY=1
+fi
+AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1])
+
+AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required])
+PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required],
+ [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no])
+
+if test "$gdu_cv_have_gdu" = "yes"; then
+ AC_MSG_RESULT([yes])
+ ifelse([$2],,[:],[$2])
+else
+ AC_MSG_RESULT([no])
+ ifelse([$3],,[:],[$3])
+fi
+
+GNOME_DOC_DEFINES
+])
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/gnome-doc-utils-stub_1.0.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/gnome-doc-utils-stub_1.0.bb
new file mode 100644
index 000000000..d6da51b0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-doc-utils-stub/gnome-doc-utils-stub_1.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Stub implementation of gnome-doc-utils"
+DESCRIPTION = "This recipe provides m4 macros from gnome-doc-utils project, so \
+that dependent recipes can build. Gnome-doc-utils itself is no longer packaged because \
+it requires libxml2 and python 2 at the same time, which can no longer be satisfied. "
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
+ file://${COREBASE}/meta/files/common-licenses/LGPL-2.1;md5=1a6d268fd218675ffea8be556788b780"
+SRC_URI = "file://gnome-doc-utils.m4"
+
+PROVIDES = "gnome-doc-utils"
+
+do_install_append() {
+ install -d ${D}${datadir}/aclocal/
+ install ${WORKDIR}/gnome-doc-utils.m4 ${D}${datadir}/aclocal/
+}
+
+FILES_${PN} += "${datadir}"
+
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/files/0001-do-not-build-demos.patch b/meta-openembedded/meta-oe/recipes-gnome/gtk+/files/0001-do-not-build-demos.patch
new file mode 100644
index 000000000..176e97998
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/files/0001-do-not-build-demos.patch
@@ -0,0 +1,51 @@
+From 6914eccee34376f9067b0ee9f17039fe182125e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Sat, 31 Mar 2018 22:29:16 +0200
+Subject: [PATCH] do not build demos
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+They are not installed anyway and add libepoxy dependency
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ Makefile.am | 3 ++-
+ configure.ac | 3 ---
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 984b6a7..6c754a6 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -28,7 +28,8 @@ doc_subdirs = docs
+ else
+ doc_subdirs =
+ endif
+-SUBDIRS = tools $(src_subdirs) gdk/gdkmm gtk/gtkmm tests demos $(doc_subdirs)
++
++SUBDIRS = tools $(src_subdirs) gdk/gdkmm gtk/gtkmm tests $(doc_subdirs)
+
+ gdkmm_includedir = $(includedir)/$(GDKMM_MODULE_NAME)
+ gdkmm_include_HEADERS = gdk/gdkmm.h
+diff --git a/configure.ac b/configure.ac
+index e5e82dc..c1c7658 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -109,11 +109,8 @@ AS_IF([test "x$gtkmm_enable_api_atkmm" != xno],
+ [GTKMM_MODULES="atkmm-1.6 >= 2.24.2 $GTKMM_MODULES"])
+ AC_SUBST([GTKMM_MODULES])
+
+-AC_SUBST([GTKMM_DEMOS_EXTRA_MODULES], ['epoxy >= 1.2'])
+-
+ PKG_CHECK_MODULES([GDKMM], [$GDKMM_MODULES])
+ PKG_CHECK_MODULES([GTKMM], [$GTKMM_MODULES])
+-PKG_CHECK_MODULES([GTKMM_DEMOS_EXTRA], [$GTKMM_DEMOS_EXTRA_MODULES])
+
+ MM_PKG_CONFIG_SUBST([GTHREAD_CFLAGS], [--cflags-only-other gthread-2.0])
+ MM_PKG_CONFIG_SUBST([GTHREAD_LIBS], [--libs gthread-2.0])
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.22.2.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.22.2.bb
new file mode 100644
index 000000000..96b54dd2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.22.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "C++ bindings for the GTK+ toolkit V3"
+HOMEPAGE = "http://www.gtkmm.org/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://COPYING.tools;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "atkmm pangomm glibmm gtk+3 cairomm"
+
+BPN = "gtkmm"
+
+inherit gnomebase distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "883e9046768b3a5afc8e365988823e77"
+SRC_URI[archive.sha256sum] = "91afd98a31519536f5f397c2d79696e3d53143b80b75778521ca7b48cb280090"
+SRC_URI += "file://0001-do-not-build-demos.patch"
+
+EXTRA_OECONF = " --disable-documentation "
+
+FILES_${PN}-dev += "${libdir}/*/include ${libdir}/*/proc/m4"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
new file mode 100644
index 000000000..b780d09bc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
@@ -0,0 +1,20 @@
+SUMMARY = "C++ bindings for the GTK+ toolkit"
+HOMEPAGE = "http://www.gtkmm.org/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
+ file://COPYING.tools;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "atkmm pangomm glibmm gtk+ cairomm"
+
+inherit gnomebase distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "6c59ae8bbff48fad9132f23af347acf1"
+SRC_URI[archive.sha256sum] = "0680a53b7bf90b4e4bf444d1d89e6df41c777e0bacc96e9c09fc4dd2f5fe6b72"
+
+EXTRA_OECONF = " --disable-documentation "
+
+FILES_${PN}-dev += "${libdir}/*/include ${libdir}/*/proc/m4"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
new file mode 100644
index 000000000..206c430da
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Virtual terminal emulator GTK+ widget library"
+BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
+LICENSE = "LGPLv2.0"
+DEPENDS = " glib-2.0 gtk+ intltool-native gnome-common-native ncurses"
+RDEPENDS_libvte = "vte-termcap"
+
+# help gnomebase get the SRC_URI correct
+GNOMEBN = "vte"
+S = "${WORKDIR}/vte-${PV}"
+
+inherit gnome gtk-doc distro_features_check upstream-version-is-even gobject-introspection
+ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
+
+EXTRA_OECONF = "--disable-python"
+
+PACKAGES =+ "libvte9 vte9-termcap"
+FILES_libvte9 = "${libdir}/*.so.* ${libexecdir}/gnome-pty-helper"
+FILES_vte9-termcap = "${datadir}/vte/termcap-0.0"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/cve-2012-2738.patch b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/cve-2012-2738.patch
new file mode 100644
index 000000000..9b9980397
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/cve-2012-2738.patch
@@ -0,0 +1,136 @@
+Upstream-Status: Backport
+CVE: CVE-2012-2738
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From e524b0b3bd8fad844ffa73927c199545b892cdbd Mon Sep 17 00:00:00 2001
+From: Christian Persch <chpe@gnome.org>
+Date: Sat, 19 May 2012 19:36:09 +0200
+Subject: [PATCH 1/2] emulation: Limit integer arguments to 65535
+
+To guard against malicious sequences containing excessively big numbers,
+limit all parsed numbers to 16 bit range. Doing this here in the parsing
+routine is a catch-all guard; this doesn't preclude enforcing
+more stringent limits in the handlers themselves.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=676090
+---
+ src/table.c | 2 +-
+ src/vteseq.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/table.c b/src/table.c
+index 140e8c8..85cf631 100644
+--- a/src/table.c
++++ b/src/table.c
+@@ -550,7 +550,7 @@ _vte_table_extract_numbers(GValueArray **array,
+ if (G_UNLIKELY (*array == NULL)) {
+ *array = g_value_array_new(1);
+ }
+- g_value_set_long(&value, total);
++ g_value_set_long(&value, CLAMP (total, 0, G_MAXUSHORT));
+ g_value_array_append(*array, &value);
+ } while (i++ < arginfo->length);
+ g_value_unset(&value);
+diff --git a/src/vteseq.c b/src/vteseq.c
+index 7ef4c8c..10991db 100644
+--- a/src/vteseq.c
++++ b/src/vteseq.c
+@@ -557,7 +557,7 @@ vte_sequence_handler_multiple(VteTerminal *terminal,
+ GValueArray *params,
+ VteTerminalSequenceHandler handler)
+ {
+- vte_sequence_handler_multiple_limited(terminal, params, handler, G_MAXLONG);
++ vte_sequence_handler_multiple_limited(terminal, params, handler, G_MAXUSHORT);
+ }
+
+ static void
+--
+2.4.9 (Apple Git-60)
+
+
+From cf1ad453a8def873c49cf6d88162593402f32bb2 Mon Sep 17 00:00:00 2001
+From: Christian Persch <chpe@gnome.org>
+Date: Sat, 19 May 2012 20:04:12 +0200
+Subject: [PATCH 2/2] emulation: Limit repetitions
+
+Don't allow malicious sequences to cause excessive repetitions.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=676090
+---
+ src/vteseq.c | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+diff --git a/src/vteseq.c b/src/vteseq.c
+index 10991db..209522f 100644
+--- a/src/vteseq.c
++++ b/src/vteseq.c
+@@ -1392,7 +1392,7 @@ vte_sequence_handler_dc (VteTerminal *terminal, GValueArray *params)
+ static void
+ vte_sequence_handler_DC (VteTerminal *terminal, GValueArray *params)
+ {
+- vte_sequence_handler_multiple(terminal, params, vte_sequence_handler_dc);
++ vte_sequence_handler_multiple_r(terminal, params, vte_sequence_handler_dc);
+ }
+
+ /* Delete a line at the current cursor position. */
+@@ -1785,7 +1785,7 @@ vte_sequence_handler_reverse_index (VteTerminal *terminal, GValueArray *params)
+ static void
+ vte_sequence_handler_RI (VteTerminal *terminal, GValueArray *params)
+ {
+- vte_sequence_handler_multiple(terminal, params, vte_sequence_handler_nd);
++ vte_sequence_handler_multiple_r(terminal, params, vte_sequence_handler_nd);
+ }
+
+ /* Save cursor (position). */
+@@ -2777,8 +2777,7 @@ vte_sequence_handler_insert_lines (VteTerminal *terminal, GValueArray *params)
+ {
+ GValue *value;
+ VteScreen *screen;
+- long param, end, row;
+- int i;
++ long param, end, row, i, limit;
+ screen = terminal->pvt->screen;
+ /* The default is one. */
+ param = 1;
+@@ -2796,7 +2795,13 @@ vte_sequence_handler_insert_lines (VteTerminal *terminal, GValueArray *params)
+ } else {
+ end = screen->insert_delta + terminal->row_count - 1;
+ }
+- /* Insert the new lines at the cursor. */
++
++ /* Only allow to insert as many lines as there are between this row
++ * and the end of the scrolling region. See bug #676090.
++ */
++ limit = end - row + 1;
++ param = MIN (param, limit);
++
+ for (i = 0; i < param; i++) {
+ /* Clear a line off the end of the region and add one to the
+ * top of the region. */
+@@ -2817,8 +2822,7 @@ vte_sequence_handler_delete_lines (VteTerminal *terminal, GValueArray *params)
+ {
+ GValue *value;
+ VteScreen *screen;
+- long param, end, row;
+- int i;
++ long param, end, row, i, limit;
+
+ screen = terminal->pvt->screen;
+ /* The default is one. */
+@@ -2837,6 +2841,13 @@ vte_sequence_handler_delete_lines (VteTerminal *terminal, GValueArray *params)
+ } else {
+ end = screen->insert_delta + terminal->row_count - 1;
+ }
++
++ /* Only allow to delete as many lines as there are between this row
++ * and the end of the scrolling region. See bug #676090.
++ */
++ limit = end - row + 1;
++ param = MIN (param, limit);
++
+ /* Clear them from below the current cursor. */
+ for (i = 0; i < param; i++) {
+ /* Insert a line at the end of the region and remove one from
+--
+2.4.9 (Apple Git-60)
+
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/obsolete_automake_macros.patch b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/obsolete_automake_macros.patch
new file mode 100644
index 000000000..6763d3754
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9/obsolete_automake_macros.patch
@@ -0,0 +1,14 @@
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=691545]
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+diff -Nurd vte-0.28.2/gnome-pty-helper/configure.in vte-0.28.2/gnome-pty-helper/configure.in
+--- vte-0.28.2/gnome-pty-helper/configure.in 2010-07-15 20:08:44.000000000 +0300
++++ vte-0.28.2/gnome-pty-helper/configure.in 2013-01-11 14:50:34.971027440 +0200
+@@ -8,7 +8,6 @@
+ AC_ISC_POSIX
+ AC_PROG_CC
+ AC_STDC_HEADERS
+-AM_PROG_CC_STDC
+
+ if test -z "$enable_maintainer_mode"; then
+ enable_maintainer_mode=yes
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
new file mode 100644
index 000000000..72bc9ec39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
@@ -0,0 +1,12 @@
+require vte9.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+
+SRC_URI += "file://obsolete_automake_macros.patch \
+ file://cve-2012-2738.patch \
+ "
+
+CFLAGS += "-D_GNU_SOURCE"
+
+SRC_URI[archive.md5sum] = "497f26e457308649e6ece32b3bb142ff"
+SRC_URI[archive.sha256sum] = "86cf0b81aa023fa93ed415653d51c96767f20b2d7334c893caba71e42654b0ae"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.28.bb b/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.28.bb
new file mode 100644
index 000000000..9d8c90fdb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.28.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Babl is a dynamic, any to any, pixel format conversion library"
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6"
+
+inherit gnomebase
+
+SRC_URI = "http://ftp.gimp.org/pub/${BPN}/0.1/${BP}.tar.bz2"
+SRC_URI[md5sum] = "cc53d8474a43aafb7cdaccea56cfde44"
+SRC_URI[sha256sum] = "63f3ed23e72a857a0e6df53d9d968a325024177b01edbe314a0c98b499eb8603"
+
+FILES_${PN} += "${libdir}/babl-*/*.so"
+FILES_${PN}-dev += "${libdir}/babl-*/*.la"
+FILES_${PN}-dbg += "${libdir}/babl-*/.debug/"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.12.0.bb b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.12.0.bb
new file mode 100644
index 000000000..d49a509a0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.12.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "C++ bindings for Cairo graphics library"
+
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9"
+
+inherit gnomebase
+
+DEPENDS = "cairo libsigc++-2.0"
+
+SRC_URI[archive.md5sum] = "c62b476b61bd0abf7e9851f417d73291"
+SRC_URI[archive.sha256sum] = "a54ada8394a86182525c0762e6f50db6b9212a2109280d13ec6a0b29bfd1afe6"
+
+FILES_${PN}-doc += "${datadir}/devhelp"
+FILES_${PN}-dev += "${libdir}/cairomm-*/"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash/0001-configure.ac-Do-not-demand-linker-hash-style.patch b/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash/0001-configure.ac-Do-not-demand-linker-hash-style.patch
new file mode 100644
index 000000000..87e8637ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash/0001-configure.ac-Do-not-demand-linker-hash-style.patch
@@ -0,0 +1,28 @@
+From 65e8e3c9c69f41778b6308c2f8f3262c82c6f3e1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Jun 2017 13:57:53 -0700
+Subject: [PATCH] configure.ac: Do not demand linker hash-style
+
+This helps fixing on architectures e.g. mips where gnu hash
+is not supported
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index e1dba23..7bcc039 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -65,7 +65,6 @@ CC_CHECK_CFLAGS_APPEND([ \
+ -ffunction-sections \
+ -fdata-sections \
+ -Wl,-O1 \
+- -Wl,--hash-style=gnu \
+ -Wl,--as-needed \
+ -Wl,--gc-sections])
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash_git.bb b/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash_git.bb
new file mode 100644
index 000000000..32f081592
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Simple bootsplash for systemd systems"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+# Really, no depends besides a C library
+
+PV = "0.3"
+PR = "r1"
+
+SRCREV = "ef2e1a390e768e21e6a6268977580ee129a96633"
+SRC_URI = "git://github.com/lucasdemarchi/dietsplash.git \
+ file://0001-configure.ac-Do-not-demand-linker-hash-style.patch \
+ "
+
+inherit autotools
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = " --with-systemdsystemunitdir=${systemd_unitdir}/system \
+ --disable-staticimages"
+
+FILES_${PN} += "${systemd_unitdir}/system/"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples/configure.in-Fix-string-argument-syntax.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples/configure.in-Fix-string-argument-syntax.patch
new file mode 100644
index 000000000..0717ea6f8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples/configure.in-Fix-string-argument-syntax.patch
@@ -0,0 +1,28 @@
+From 88077ed156a714f32bb408f422278d61611ffd41 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Sat, 26 Jul 2014 16:57:46 -0300
+Subject: [PATCH] configure.in: Fix string argument syntax
+
+Upstream-Status: Submitted
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index bfe1b82..e939bbd 100644
+--- a/configure.in
++++ b/configure.in
+@@ -65,7 +65,7 @@ fi)
+
+ DIRECTFB_REQUIRED_VERSION=1.4.14
+
+-PKG_CHECK_MODULES(DIRECTFB, directfb >= $DIRECTFB_REQUIRED_VERSION,[ WATER=`$PKG_CONFIG --variable=water directfb` ],
++PKG_CHECK_MODULES([DIRECTFB], directfb >= $DIRECTFB_REQUIRED_VERSION,[ WATER=`$PKG_CONFIG --variable=water directfb` ],
+ AC_MSG_ERROR([$DIRECTFB_PKG_ERRORS
+ *** DirectFB $DIRECTFB_REQUIRED_VERSION or newer is required. The latest version
+ *** of DirectFB is available from http://www.directfb.org/.]))
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples_1.7.0.bb b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples_1.7.0.bb
new file mode 100644
index 000000000..7907c5c0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb-examples_1.7.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Example DirectFB applications"
+DESCRIPTION = "The DirectFB-examples package contains a set of simple DirectFB \
+ applications that can be used to test and demonstrate various DirectFB \
+ features"
+DEPENDS = "directfb"
+SECTION = "libs"
+LICENSE = "MIT"
+
+SRC_URI = " \
+ http://downloads.yoctoproject.org/mirror/sources/DirectFB-examples-${PV}.tar.gz \
+ file://configure.in-Fix-string-argument-syntax.patch \
+ "
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=ecf6fd2b19915afc4da56043926ca18f"
+
+S = "${WORKDIR}/DirectFB-examples-${PV}"
+
+inherit autotools pkgconfig
+
+SRC_URI[md5sum] = "8b60c867af295481c32a8c7fc5802307"
+SRC_URI[sha256sum] = "9a2104cc4da8123c8371813551b66b943198979f745cbebc034bb5e10844122a"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb.inc b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb.inc
new file mode 100644
index 000000000..bd66a2820
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb.inc
@@ -0,0 +1,85 @@
+SUMMARY = "Graphics abstraction library for the Linux Framebuffer Device"
+DESCRIPTION = "DirectFB is a thin library that provides developers \
+with hardware graphics acceleration, input device handling and \
+abstraction, an integrated windowing system with support for \
+translucent windows and multiple display layers on top of the \
+Linux framebuffer device."
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589"
+
+HOMEPAGE = "http://directfb.org"
+DEPENDS = "jpeg libpng freetype zlib sysfsutils"
+
+SRC_URI = "http://downloads.yoctoproject.org/mirror/sources/DirectFB-${PV}.tar.gz \
+ file://configurefix.patch \
+ file://fusion.patch \
+ file://bashism.patch \
+ file://0001-gfx-direct-Aboid-usng-VLAs-and-printf-formats.patch \
+ file://compar_fn_t.patch \
+ file://union-sigval.patch \
+ file://use-PTHREAD_MUTEX_RECURSIVE.patch \
+ file://fix-client-gfx_state-initialisation.patch \
+ "
+
+S = "${WORKDIR}/DirectFB-${PV}"
+
+LDFLAGS_append = " -lm"
+
+# Workaround for linking issues seen with armv7a + gold
+LDFLAGS_append_arm = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+
+BINCONFIG = "${bindir}/directfb-config"
+
+inherit autotools binconfig-disabled pkgconfig
+
+PACKAGECONFIG ??= "linuxinput"
+PACKAGECONFIG[jpeg2000] = "--enable-jpeg2000,--disable-jpeg2000,jasper"
+PACKAGECONFIG[drmkms] = "--enable-drmkms,--disable-drmkms,libdrm"
+PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff"
+PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp"
+PACKAGECONFIG[tslib] = "--with-inputdrivers=tslib,,tslib"
+PACKAGECONFIG[linuxinput] = "--with-inputdrivers=linuxinput,,"
+PACKAGECONFIG[noinput] = "--with-inputdrivers=none,,"
+PACKAGECONFIG[mesa] = "--enable-mesa,--disable-mesa,virtual/mesa,"
+PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,xserver-xorg,"
+
+EXTRA_OECONF = "\
+ --with-gfxdrivers=none \
+ --enable-freetype=yes \
+ --enable-zlib \
+ --disable-imlib2 \
+ --disable-sdl \
+ --disable-vnc \
+ --disable-x11vdpau \
+ --disable-xine-vdpau \
+"
+
+#Once -fno-omit-frame-pointer option of gcc is added into TARGET_CLFAGS as default
+#this will cause directfb build failure on x86 arch, so filter out it.
+TARGET_CFLAGS_remove_x86 = "-fno-omit-frame-pointer"
+
+#PACKAGES_DYNAMIC += "^directfb-inputdrivers-.*"
+#
+#python populate_packages_prepend () {
+# inputdrivers_libdir = d.expand('${libdir}/directfb-${RV}/inputdrivers')
+# do_split_packages(d, inputdrivers_libdir, '*.so$', 'directfb-inputdrivers-%s', 'Directfb plugin for %s')
+#}
+
+# NOTE: monolithic packaging for now, should improve that eventually
+
+FILES_${PN}-dev += "\
+ ${bindir}/directfb-config \
+ ${libdir}/directfb-${RV}/systems/*.la \
+ ${libdir}/directfb-${RV}/inputdrivers/*.la \
+ ${libdir}/directfb-${RV}/interfaces/*/*.la \
+ ${libdir}/directfb-${RV}/wm/*.la \
+"
+
+FILES_${PN} += "\
+ ${libdir}/directfb-${RV}/systems/*.so \
+ ${libdir}/directfb-${RV}/inputdrivers/*.so \
+ ${libdir}/directfb-${RV}/interfaces/*/*.so \
+ ${libdir}/directfb-${RV}/wm/*.so \
+ ${datadir}/directfb-${PV} \
+"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/0001-gfx-direct-Aboid-usng-VLAs-and-printf-formats.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/0001-gfx-direct-Aboid-usng-VLAs-and-printf-formats.patch
new file mode 100644
index 000000000..76e0f7530
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/0001-gfx-direct-Aboid-usng-VLAs-and-printf-formats.patch
@@ -0,0 +1,61 @@
+From f43ef44806ffb8e3b35d99070dde9b6cc1714d3d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Sep 2015 21:32:20 +0000
+Subject: [PATCH] gfx,direct: Aboid usng VLAs and printf formats
+
+VLAs are flagged by clang when using non-POD types, therefore replace
+the usage with alloca which is exact same allocation on stack
+
+ __attribute__((__format__ (__printf__))) is not portable as used here
+ therefore disable the check for clang here, we lose no functionality
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ lib/direct/util.h | 2 +-
+ src/gfx/util.cpp | 8 ++++----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/lib/direct/util.h b/lib/direct/util.h
+index 72941e9..8e7fa4a 100644
+--- a/lib/direct/util.h
++++ b/lib/direct/util.h
+@@ -98,7 +98,7 @@
+ #define D_CONST_FUNC
+ #endif
+
+-#if __GNUC__ >= 3
++#if __GNUC__ >= 3 && !defined __clang__
+ #define D_FORMAT_PRINTF(n) __attribute__((__format__ (__printf__, n, n+1)))
+ #define D_FORMAT_VPRINTF(n) __attribute__((__format__ (__printf__, n, 0)))
+ #else
+diff --git a/src/gfx/util.cpp b/src/gfx/util.cpp
+index 40032bc..d1015d4 100644
+--- a/src/gfx/util.cpp
++++ b/src/gfx/util.cpp
+@@ -294,8 +294,8 @@ dfb_gfx_copy_regions_stereo( CoreSurface *source,
+ {
+ unsigned int i, n = 0;
+ DFBRectangle rect = { 0, 0, source->config.size.w, source->config.size.h };
+- DFBRectangle rects[num];
+- DFBPoint points[num];
++ DFBRectangle *rects = (DFBRectangle*)alloca( sizeof(struct DFBRectangle) * num);
++ DFBPoint *points = (DFBPoint*)alloca( sizeof(struct DFBPoint) * num);
+
+ for (i=0; i<num; i++) {
+ DFB_REGION_ASSERT( &regions[i] );
+@@ -351,8 +351,8 @@ dfb_gfx_copy_regions_client( CoreSurface *source,
+ {
+ unsigned int i, n = 0;
+ DFBRectangle rect = { 0, 0, source->config.size.w, source->config.size.h };
+- DFBRectangle rects[num];
+- DFBPoint points[num];
++ DFBRectangle *rects = (DFBRectangle*)alloca( sizeof(struct DFBRectangle) * num);
++ DFBPoint *points = (DFBPoint*)alloca( sizeof(struct DFBPoint) * num);
+ CoreGraphicsStateClient *client = _client ? _client : &StateClient::Get()->client;
+ CardState *state = client->state;
+ CardState backup;
+--
+2.5.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/bashism.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/bashism.patch
new file mode 100644
index 000000000..2ef4e9385
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/bashism.patch
@@ -0,0 +1,18 @@
+${x//y/} is a bash syntax. Replace with something dash compatible
+
+RP 2015/5/3
+Upstream-Status: Pending
+
+Index: DirectFB-1.7.7/configure.in
+===================================================================
+--- DirectFB-1.7.7.orig/configure.in
++++ DirectFB-1.7.7/configure.in
+@@ -2696,7 +2696,7 @@ AM_CONDITIONAL(BUILD_TOOLS, test "$with_
+ AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = "yes")
+
+ CFLAGS="$CFLAGS $DFB_INTERNAL_CFLAGS"
+-CXXFLAGS="$CXXFLAGS ${CFLAGS//-Werror-implicit-function-declaration/}"
++CXXFLAGS="$CXXFLAGS $(printf '%s\n' "$CFLAGS" | sed 's/-Werror-implicit-function-declaration//g')"
+ DFB_LDFLAGS="$LDFLAGS $ZLIB_LIBS"
+
+ CFLAGS="$CFLAGS $CFLAGS_STD"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/compar_fn_t.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/compar_fn_t.patch
new file mode 100644
index 000000000..ee4d900ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/compar_fn_t.patch
@@ -0,0 +1,62 @@
+test for __compar_fn_t and if not defined by libc then define it
+help make directfb compile with musl
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: DirectFB-1.7.7/configure.in
+===================================================================
+--- DirectFB-1.7.7.orig/configure.in
++++ DirectFB-1.7.7/configure.in
+@@ -112,6 +112,17 @@ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(long long)
+ AC_CHECK_FUNCS(fork)
+
++AC_CACHE_CHECK([for compar_fn_t in stdlib.h],ccache_cv_COMPAR_FN_T, [
++ AC_TRY_COMPILE(
++ [#include <stdlib.h>],
++ [void test_fn(void) { qsort(NULL, 0, 0, (__compar_fn_t)NULL); }],
++ ccache_cv_COMPAR_FN_T=yes,
++ ccache_cv_COMPAR_FN_T=no)])
++if test x"$ccache_cv_COMPAR_FN_T" = x"yes"; then
++ AC_DEFINE(HAVE_COMPAR_FN_T, 1,
++ Define to 1 if you have the `__compar_fn_t' typedef.)
++fi
++
+ AC_PATH_PROGS(PERL, perl5 perl)
+
+ AC_PATH_PROG(MAN2HTML, man2html, no)
+Index: DirectFB-1.7.7/inputdrivers/lirc/lirc.c
+===================================================================
+--- DirectFB-1.7.7.orig/inputdrivers/lirc/lirc.c
++++ DirectFB-1.7.7/inputdrivers/lirc/lirc.c
+@@ -59,6 +59,11 @@
+
+ #include <core/input_driver.h>
+
++#if HAVE_COMPAR_FN_T
++#define COMPAR_FN_T __compar_fn_t
++#else
++typedef int (*COMPAR_FN_T)(const void *, const void *);
++#endif
+
+ DFB_INPUT_DRIVER( lirc )
+
+@@ -97,7 +102,7 @@ static DFBInputDeviceKeySymbol lirc_pars
+ qsort ( keynames,
+ D_ARRAY_SIZE( keynames ),
+ sizeof(keynames[0]),
+- (__compar_fn_t) keynames_sort_compare );
++ (COMPAR_FN_T) keynames_sort_compare );
+ keynames_sorted = true;
+ }
+
+@@ -124,7 +129,7 @@ static DFBInputDeviceKeySymbol lirc_pars
+ symbol_name = bsearch( name, keynames,
+ D_ARRAY_SIZE( keynames ),
+ sizeof(keynames[0]),
+- (__compar_fn_t) keynames_compare );
++ (COMPAR_FN_T) keynames_compare );
+ if (symbol_name)
+ return symbol_name->symbol;
+ break;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/configurefix.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/configurefix.patch
new file mode 100644
index 000000000..681154752
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/configurefix.patch
@@ -0,0 +1,60 @@
+Libtool needs these set correctly else we end up with pointless rpaths
+such as the QA warnings:
+
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfblayer contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbmaster contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/mkdgifft contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbdump contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbinput contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbfx contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/pack ages-split/directfb/usr/bin/dfbscreen contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/mkdgiff contains probably-redundant RPATH /usr/libWARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbinspector contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/mkdfiff contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbinfo contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbpenmount contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/bin/dfbg contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/libfusion-1.4.so.6 contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/libdirectfb-1.4.so.6.0.9 contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/libdirectfb-1.4.so.6 contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/libfusion-1.4.so.6.0.9 contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/systems/libdirectfb_fbdev.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/systems/libdirectfb_devmem.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/systems/libdirectfb_dummy.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBVideoProvider/libidirectfbvideoprovider_v4l.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBVideoProvider/libidirectfbvideoprovider_gif.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/ICoreResourceManager/libicoreresourcemanager_test.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_jpeg.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_png.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_dfiff.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_gif.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBFont/libidirectfbfont_ft2.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/interfaces/IDirectFBFont/libidirectfbfont_dgiff.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/wm/libdirectfbwm_default.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_zytronic.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_penmount.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_linux_input.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_serialmouse.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_mutouch.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_tslib.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_joystick.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_sonypi.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_lirc.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_wm97xx_ts.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_ps2mouse.so contains probably-redundant RPATH /usr/lib
+WARNING: QA Issue: directfb: /work/i586-poky-linux/directfb-1.4.15-r1/packages-split/directfb/usr/lib/directfb-1.4-6/inputdrivers/libdirectfb_keyboard.so contains probably-redundant RPATH /usr/lib
+
+Upstream-Status: Pending
+
+RP 2012/03/16
+
+Index: DirectFB-1.4.15/configure.in
+===================================================================
+--- DirectFB-1.4.15.orig/configure.in 2012-03-16 13:32:23.692402879 +0000
++++ DirectFB-1.4.15/configure.in 2012-03-16 13:33:22.312400960 +0000
+@@ -97,13 +97,6 @@
+ AC_CHECK_SIZEOF(long long)
+ AC_CHECK_FUNCS(fork)
+
+-
+-## Work around libstuhl during cross build...
+-if test "$host" != "$build"; then
+- sys_lib_dlsearch_path_spec=""
+- sys_lib_search_path_spec=""
+-fi
+-
+ AC_PATH_PROGS(PERL, perl5 perl)
+
+ AC_PATH_PROG(MAN2HTML, man2html, no)
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fix-client-gfx_state-initialisation.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fix-client-gfx_state-initialisation.patch
new file mode 100644
index 000000000..57a9b0dc7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fix-client-gfx_state-initialisation.patch
@@ -0,0 +1,38 @@
+From 8e53c0b9cedb62b82e2b7680d793d433b647ae20 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Mon, 13 Jun 2016 13:32:44 -0700
+Subject: [PATCH] fix client->gfx_state initialisation
+
+Shortly before the DirectFB 1.7.7 release, an optimisation was added
+to CoreGraphicsStateClient_Init() to avoid creating an extended
+Graphics State object if it will not later be required:
+
+ 4d422fb Client: Create extended Graphics State object when needed for later usage
+
+Unfortunately the client->gfx_state variable used to track the
+extended Graphics State object is not initialised, which can lead to
+crashes etc due to creation of the Graphics State object erroneously
+being skipped.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ src/core/CoreGraphicsStateClient.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/core/CoreGraphicsStateClient.cpp b/src/core/CoreGraphicsStateClient.cpp
+index 5d46f0e..5007755 100644
+--- a/src/core/CoreGraphicsStateClient.cpp
++++ b/src/core/CoreGraphicsStateClient.cpp
+@@ -364,6 +364,7 @@ CoreGraphicsStateClient_Init( CoreGraphicsStateClient *client,
+ client->renderer = NULL;
+ client->requestor = NULL;
+ client->throttle = NULL;
++ client->gfx_state = NULL;
+
+ if (dfb_config->task_manager) {
+ if (dfb_config->call_nodirect) {
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fusion.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fusion.patch
new file mode 100644
index 000000000..1f81a6796
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/fusion.patch
@@ -0,0 +1,36 @@
+directfb: Fix for hangs in direct_test, fusion_skirmish on exit
+
+Upstream-Status: Pending
+Signed-off-by: Lauren Post <lauren.post@freescale.com>
+
+--- a/lib/fusion/fusion.c 2013-01-18 22:57:11.000000000 +0800
++++ b/lib/fusion/fusion.c 2013-07-04 10:42:56.502699119 +0800
+@@ -2853,9 +2853,14 @@
+ direct_mutex_lock( &world->event_dispatcher_mutex );
+
+ while (1) {
+- if (!world->event_dispatcher_buffers)
++ if (!world->event_dispatcher_buffers){
+ direct_waitqueue_wait( &world->event_dispatcher_cond, &world->event_dispatcher_mutex );
+-
++ if (world->dispatch_stop) {
++ D_DEBUG_AT( Fusion_Main_Dispatch, " -> IGNORING (dispatch_stop!)\n" );
++ direct_mutex_unlock( &world->event_dispatcher_mutex );
++ return NULL;
++ }
++ }
+ buf = (FusionEventDispatcherBuffer *)world->event_dispatcher_buffers;
+ D_MAGIC_ASSERT( buf, FusionEventDispatcherBuffer );
+
+@@ -2872,6 +2877,11 @@
+ //D_INFO("waiting...\n");
+ D_ASSERT( buf->read_pos == buf->write_pos );
+ direct_waitqueue_wait( &world->event_dispatcher_cond, &world->event_dispatcher_mutex );
++ if (world->dispatch_stop) {
++ D_DEBUG_AT( Fusion_Main_Dispatch, " -> IGNORING (dispatch_stop!)\n" );
++ direct_mutex_unlock( &world->event_dispatcher_mutex );
++ return NULL;
++ }
+ }
+
+ buf = (FusionEventDispatcherBuffer *)world->event_dispatcher_buffers;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/union-sigval.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/union-sigval.patch
new file mode 100644
index 000000000..29f45c797
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/union-sigval.patch
@@ -0,0 +1,19 @@
+This patch is taken from gentoo musl overlay
+sigval_t is glibc only construct, we use a union of sigval
+which pretty much is same effect as sigval_t
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+diff -Naur DirectFB-1.7.6.orig/lib/direct/os/linux/glibc/system.c DirectFB-1.7.6/lib/direct/os/linux/glibc/system.c
+--- DirectFB-1.7.6.orig/lib/direct/os/linux/glibc/system.c 2014-07-15 02:54:58.000000000 -0400
++++ DirectFB-1.7.6/lib/direct/os/linux/glibc/system.c 2015-07-18 16:55:35.077989166 -0400
+@@ -111,7 +111,7 @@
+ void
+ direct_trap( const char *domain, int sig )
+ {
+- sigval_t val;
++ union sigval val;
+
+ if (direct_config->delay_trap_ms) {
+ D_LOG( Direct_Trap, VERBOSE, "NOT RAISING signal %d from %s, waiting for %dms... attach gdb --pid=%d\n", sig, domain, direct_config->delay_trap_ms, getpid() );
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/use-PTHREAD_MUTEX_RECURSIVE.patch b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/use-PTHREAD_MUTEX_RECURSIVE.patch
new file mode 100644
index 000000000..ac48f68db
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb/use-PTHREAD_MUTEX_RECURSIVE.patch
@@ -0,0 +1,116 @@
+Remove use of DIRECT_RECURSIVE_MUTEX_INITIALIZER its not portable
+use portable way to initialize recursive mutex using pthread_once() and direct_recursive_mutex_init()
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
+===================================================================
+--- DirectFB-1.7.7.orig/lib/direct/os/linux/glibc/mutex.h
++++ DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
+@@ -46,7 +46,6 @@ struct __D_DirectMutex {
+ /**********************************************************************************************************************/
+
+ #define DIRECT_MUTEX_INITIALIZER(name) { PTHREAD_MUTEX_INITIALIZER }
+-#define DIRECT_RECURSIVE_MUTEX_INITIALIZER(name) { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP }
+
+ #endif
+
+Index: DirectFB-1.7.7/lib/direct/trace.c
+===================================================================
+--- DirectFB-1.7.7.orig/lib/direct/trace.c
++++ DirectFB-1.7.7/lib/direct/trace.c
+@@ -89,8 +89,15 @@ struct __D_DirectTraceBuffer {
+ /**************************************************************************************************/
+
+ static DirectLink *buffers;
+-static DirectMutex buffers_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(buffers_lock);
+
++static pthread_once_t buffers_lock_init_once = PTHREAD_ONCE_INIT;
++static DirectMutex buffers_lock;
++
++static void
++buffers_lock_init( void )
++{
++ direct_recursive_mutex_init(&buffers_lock);
++}
+ /**************************************************************************************************/
+
+ __dfb_no_instrument_function__
+@@ -113,6 +120,7 @@ get_trace_buffer( void )
+
+ D_MAGIC_SET( buffer, DirectTraceBuffer );
+
++ pthread_once(&buffers_lock_init_once, buffers_lock_init);
+ direct_mutex_lock( &buffers_lock );
+ direct_list_append( &buffers, &buffer->link );
+ direct_mutex_unlock( &buffers_lock );
+@@ -138,8 +146,14 @@ typedef struct {
+ } SymbolTable;
+
+ static DirectLink *tables = NULL;
+-static DirectMutex tables_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(tables_lock);
++static pthread_once_t tables_lock_init_once = PTHREAD_ONCE_INIT;
++static DirectMutex tables_lock;
+
++static void
++tables_lock_init( void )
++{
++ direct_recursive_mutex_init(&tabless_lock);
++}
+
+ __dfb_no_instrument_function__
+ static void
+@@ -370,6 +384,7 @@ direct_trace_lookup_symbol( const char *
+ Symbol *symbol;
+ SymbolTable *table;
+
++ pthread_once(&tables_lock_init_once, tables_lock_init);
+ direct_mutex_lock( &tables_lock );
+
+ table = find_table( filename );
+@@ -514,6 +529,7 @@ direct_trace_print_stacks()
+ DirectTraceBuffer *b;
+ DirectTraceBuffer *buffer = get_trace_buffer();
+
++ pthread_once(&buffers_lock_init_once, buffers_lock_init);
+ direct_mutex_lock( &buffers_lock );
+
+ if (buffer && buffer->level)
+@@ -611,6 +627,7 @@ direct_trace_free_buffer( DirectTraceBuf
+ D_MAGIC_ASSERT( buffer, DirectTraceBuffer );
+
+ if (buffer->thread) {
++ pthread_once(&buffers_lock_init_once, buffers_lock_init);
+ direct_mutex_lock( &buffers_lock );
+ direct_list_remove( &buffers, &buffer->link );
+ direct_mutex_unlock( &buffers_lock );
+Index: DirectFB-1.7.7/src/directfb.c
+===================================================================
+--- DirectFB-1.7.7.orig/src/directfb.c
++++ DirectFB-1.7.7/src/directfb.c
+@@ -99,6 +99,15 @@ const unsigned int directfb_micro_versio
+ const unsigned int directfb_binary_age = DIRECTFB_BINARY_AGE;
+ const unsigned int directfb_interface_age = DIRECTFB_INTERFACE_AGE;
+
++static pthread_once_t lock_init_once = PTHREAD_ONCE_INIT;
++static DirectMutex lock;
++
++static void
++lock_init( void )
++{
++ direct_recursive_mutex_init(&lock);
++}
++
+ const char *
+ DirectFBCheckVersion( unsigned int required_major,
+ unsigned int required_minor,
+@@ -215,8 +224,7 @@ DirectFBCreate( IDirectFB **interface_pt
+ if (dfb_config->remote.host)
+ return CreateRemote( dfb_config->remote.host, dfb_config->remote.port, interface_ptr );
+
+- static DirectMutex lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(lock);
+-
++ pthread_once(&lock_init_once, lock_init);
+ direct_mutex_lock( &lock );
+
+ if (!dfb_config->no_singleton && idirectfb_singleton) {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb_1.7.7.bb b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb_1.7.7.bb
new file mode 100644
index 000000000..c6c070eda
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/directfb/directfb_1.7.7.bb
@@ -0,0 +1,8 @@
+require directfb.inc
+
+RV = "1.7-7"
+
+LEAD_SONAME = "libdirectfb-1.7.so.0"
+
+SRC_URI[md5sum] = "152cf1863b1a3a28aa1370e9053440bf"
+SRC_URI[sha256sum] = "b785c638dc31b8fe3a7c81be1475c89b2255ab3d67b777c747d3fbc52f8027a3"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
new file mode 100644
index 000000000..46d4dbde4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
@@ -0,0 +1,26 @@
+From 80179c297abb9de2829bd02356257241dd414d70 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Mon, 18 Dec 2017 16:25:54 +0900
+Subject: [PATCH] Do not set PYTHON_INSTALL_DIR by running python.
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7c66b39..1489ef6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -19,7 +19,7 @@ else(NOT SPHINX_EXECUTABLE-NOTFOUND)
+ message(STATUS "Could NOT find sphinx-build.")
+ endif(NOT SPHINX_EXECUTABLE-NOTFOUND)
+
+-execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(), end='')" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++#execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(), end='')" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
+ string(REGEX REPLACE "\n$" "" ${PYTHON_INSTALL_DIR} "${PYTHON_INSTALL_DIR}")
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; sys.stdout.write('%s.%s' % (sys.version_info.major, sys.version_info.minor))" OUTPUT_VARIABLE PYTHON_MAJOR_DOT_MINOR_VERSION)
+ message(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch
new file mode 100644
index 000000000..75b6b8fd9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch
@@ -0,0 +1,25 @@
+From 15d0afcfa4868b7b072b3434bac0064617d61f99 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Tue, 19 Dec 2017 14:53:14 +0900
+Subject: [PATCH] Run python scripts using env
+
+Otherwise the build tools hardcode the python path into them.
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ bin/dnfdragora | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bin/dnfdragora b/bin/dnfdragora
+index b8e0550..cd80f7f 100755
+--- a/bin/dnfdragora
++++ b/bin/dnfdragora
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python3
++#!/usr/bin/env python3
+ # vim: set et ts=4 sw=4:
+ # Copyright 2016-2017 Angelo Naselli <anaselli@linux.it>
+ #
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch
new file mode 100644
index 000000000..90ce1d0ac
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch
@@ -0,0 +1,31 @@
+From 56d9b838b3475729d7ed9c6c156d72c28943c2b6 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Tue, 19 Dec 2017 11:15:29 +0900
+Subject: [PATCH] To fix error when do_package
+
+QA Issue: nativesdk-dnfdragora: Files/directories were installed but not shipped in any package:
+ /etc
+ /etc/dnfdragora
+ /etc/dnfdragora/dnfdragora.yaml
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7c66b39..a5659f7 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -52,7 +52,7 @@ endif(ENABLE_COMPS)
+ set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
+ set(CMAKE_INSTALL_DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share")
+ set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
+-set(CMAKE_INSTALL_FULL_SYSCONFDIR "/etc")
++set(CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/../etc")
+
+ # Configure files
+ configure_file(${CMAKE_SOURCE_DIR}/etc/dnfdragora.yaml.in ${CMAKE_BINARY_DIR}/etc/dnfdragora.yaml @ONLY)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch
new file mode 100644
index 000000000..88bb63416
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch
@@ -0,0 +1,25 @@
+From 2e6a0db24be373a5b7741dc5a0d322a28389fbf0 Mon Sep 17 00:00:00 2001
+From: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+Date: Thu, 23 Nov 2017 16:35:44 +0900
+Subject: [PATCH] disable build manpages.
+
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7c66b39..fc32750 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -65,7 +65,6 @@ endif(GETTEXT_FOUND)
+
+ # Build and install the man-pages
+ if(NOT SPHINX_EXECUTABLE-NOTFOUND)
+- add_subdirectory(man)
+ endif(NOT SPHINX_EXECUTABLE-NOTFOUND)
+
+ # Installing application code
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb
new file mode 100644
index 000000000..9cd1efb8e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb
@@ -0,0 +1,30 @@
+SUMMARY = "dnfdragora is a DNF frontend, based on rpmdragora from Mageia (originally rpmdrake) Perl code."
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504 \
+ "
+
+SRC_URI = "git://github.com/manatools/dnfdragora.git \
+ file://0001-disable-build-manpages.patch \
+ file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+ file://0001-To-fix-error-when-do_package.patch \
+ file://0001-Run-python-scripts-using-env.patch \
+ "
+
+PV = "1.0.1+git${SRCPV}"
+SRCREV = "4fef4ce889b8e4fa03191d414f63bfd50796152a"
+
+S = "${WORKDIR}/git"
+
+inherit cmake gettext pkgconfig python3-dir python3native distutils3-base
+
+DEPENDS += "dnf python3 "
+#DEPENDS_class-nativesdk += "nativesdk-python3"
+
+RDEPENDS_${PN}_class-target = " python3-core libyui libyui-ncurses "
+
+# manpages generation requires http://www.sphinx-doc.org/
+EXTRA_OECMAKE = " -DWITH_MAN=OFF -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
+
+BBCLASSEXTEND = "nativesdk"
+
+FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR}/ ${datadir}/ ${bindir}/ ${sysconfdir}/dnfdragora "
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb b/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb
new file mode 100644
index 000000000..e12bc094d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb
@@ -0,0 +1,16 @@
+SUMMARY = "FBGrab is a framebuffer screenshot program"
+HOMEPAGE = "http://fbgrab.monells.se/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a"
+SECTION = "console/utils"
+DEPENDS = "libpng zlib"
+SRC_URI = "http://fbgrab.monells.se/${BP}.tar.gz"
+
+inherit autotools-brokensep
+
+SRC_URI[md5sum] = "7d8c24081c681dfbba21f2934c1ac656"
+SRC_URI[sha256sum] = "5fab478cbf8731fbacefaa76236a8f8b38ccff920c53b3a8253bc35509fba8ed"
+
+do_configure_prepend() {
+ sed -i 's|$(DESTDIR)/usr/man/|$(DESTDIR)${mandir}/|g' ${S}/Makefile
+}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.10.bb b/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.10.bb
new file mode 100644
index 000000000..0bf48ace6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.10.bb
@@ -0,0 +1,73 @@
+SUMMARY = "Framebuffer image and doc viewer tools"
+DESCRIPTION = "The fbida project contains a few applications for viewing and editing images, \
+ with the main focus being photos."
+HOMEPAGE = "http://linux.bytesex.org/fbida/"
+AUTHOR = "Gerd Hoffmann"
+SECTION = "utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+DEPENDS = "virtual/libiconv jpeg fontconfig freetype libexif"
+
+SRC_URI = "https://www.kraxel.org/releases/fbida/fbida-${PV}.tar.gz \
+ file://0001-Avoid-using-host-path.patch \
+ file://fix-preprocessor.patch \
+ file://support-jpeg-turbo.patch \
+ file://use-jpeg-turbo.patch \
+ "
+SRC_URI[md5sum] = "09460b964b58c2e39b665498eca29018"
+SRC_URI[sha256sum] = "7a5a3aac61b40a6a2bbf716d270a46e2f8e8d5c97e314e927d41398a4d0b6cb6"
+
+B = "${WORKDIR}/build"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE = "STRIP= 'srcdir=${S}' -f ${S}/GNUmakefile"
+
+PACKAGECONFIG ??= "gif png curl"
+PACKAGECONFIG[curl] = ",,curl"
+PACKAGECONFIG[gif] = ",,giflib"
+PACKAGECONFIG[png] = ",,libpng"
+PACKAGECONFIG[tiff] = ",,tiff"
+PACKAGECONFIG[motif] = ",,libx11 libxext libxpm libxt openmotif"
+PACKAGECONFIG[webp] = ",,libwebp"
+PACKAGECONFIG[lirc] = ",,lirc"
+
+do_compile() {
+ sed -i -e 's# fbgs# \$(srcdir)/fbgs#; s#-Ijpeg#-I\$(srcdir)/jpeg#; s# jpeg/# \$(srcdir)/jpeg/#' ${S}/GNUmakefile
+ sed -i -e 's:/sbin/ldconfig:echo x:' ${S}/mk/Autoconf.mk
+ sed -i -e 's: cpp: ${CPP}:' ${S}/GNUmakefile
+
+ # Be sure to respect preferences (force to "no")
+ # Also avoid issues when ${BUILD_ARCH} == ${HOST_ARCH}
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'curl', d)}" ]; then
+ sed -i -e '/^HAVE_LIBCURL/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'gif', d)}" ]; then
+ sed -i -e '/^HAVE_LIBGIF/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'png', d)}" ]; then
+ sed -i -e '/^HAVE_LIBPNG/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'tiff', d)}" ]; then
+ sed -i -e '/^HAVE_LIBTIFF/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'motif', d)}" ]; then
+ sed -i -e '/^HAVE_MOTIF/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'webp', d)}" ]; then
+ sed -i -e '/^HAVE_LIBWEBP/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+ if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'lirc', d)}" ]; then
+ sed -i -e '/^HAVE_LIBLIRC/s/:=.*$/:= no/' ${S}/GNUmakefile
+ fi
+
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+RDEPENDS_${PN} = "ttf-dejavu-sans-mono bash"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/files/0001-Avoid-using-host-path.patch b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/0001-Avoid-using-host-path.patch
new file mode 100644
index 000000000..cdf2c25d3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/0001-Avoid-using-host-path.patch
@@ -0,0 +1,34 @@
+From 8d8fa9f22d9f6a95523bac63ac3af724faf5ff92 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Fri, 7 Apr 2017 23:26:09 +0200
+Subject: [PATCH] Avoid using host-path
+
+Remove the explicit reference to /usr/local/* , this is completely
+bogus and causes trouble during cross-compilation.
+
+Signed-off-by: Marek Vasut <marex@denx.de>
+Upstream-Status: Inappropriate [upstream requires this]
+---
+ mk/Variables.mk | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/mk/Variables.mk b/mk/Variables.mk
+index 99f787c..3ffd87a 100644
+--- a/mk/Variables.mk
++++ b/mk/Variables.mk
+@@ -42,12 +42,6 @@ CFLAGS += -Wall -Wmissing-prototypes -Wstrict-prototypes \
+ -Wpointer-arith -Wunused
+ CXXFLAGS += -Wall -Wpointer-arith -Wunused
+
+-# add /usr/local to the search path if something is in there ...
+-ifneq ($(wildcard /usr/local/include/*.h),)
+- CFLAGS += -I/usr/local/include
+- LDFLAGS += -L/usr/local/$(LIB)
+-endif
+-
+ # fixup include path for $(srcdir) != "."
+ ifneq ($(srcdir),.)
+ CFLAGS += -I. -I$(srcdir)
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/files/fix-preprocessor.patch b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/fix-preprocessor.patch
new file mode 100644
index 000000000..909a0a6c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/fix-preprocessor.patch
@@ -0,0 +1,14 @@
+Index: fbida-2.13/GNUmakefile
+===================================================================
+--- fbida-2.13.orig/GNUmakefile
++++ fbida-2.13/GNUmakefile
+@@ -53,8 +53,7 @@ include $(srcdir)/mk/Autoconf.mk
+
+ ac_jpeg_ver = $(shell \
+ $(call ac_init,for libjpeg version);\
+- $(call ac_s_cmd,echo JPEG_LIB_VERSION \
+- | cpp -include jpeglib.h | tail -n 1);\
++ $(call ac_s_cmd,cpp -include jpeglib.h -dM -E -x c /dev/null | grep 'define JPEG_LIB_VERSION' | cut -f 3 -d' ');\
+ $(call ac_fini))
+
+ define make-config
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/files/support-jpeg-turbo.patch b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/support-jpeg-turbo.patch
new file mode 100644
index 000000000..05cd74da9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/support-jpeg-turbo.patch
@@ -0,0 +1,1854 @@
+Add patch by Ondrej Sury to migrate to libjpeg-turbo (Closes: #763263)
+
+Index: fbida-2.10/jpeg/62/jpegcomp.h
+===================================================================
+--- /dev/null
++++ fbida-2.10/jpeg/62/jpegcomp.h
+@@ -0,0 +1,30 @@
++/*
++ * jpegcomp.h
++ *
++ * Copyright (C) 2010, D. R. Commander
++ * For conditions of distribution and use, see the accompanying README file.
++ *
++ * JPEG compatibility macros
++ * These declarations are considered internal to the JPEG library; most
++ * applications using the library shouldn't need to include this file.
++ */
++
++#if JPEG_LIB_VERSION >= 70
++#define _DCT_scaled_size DCT_h_scaled_size
++#define _DCT_h_scaled_size DCT_h_scaled_size
++#define _DCT_v_scaled_size DCT_v_scaled_size
++#define _min_DCT_scaled_size min_DCT_h_scaled_size
++#define _min_DCT_h_scaled_size min_DCT_h_scaled_size
++#define _min_DCT_v_scaled_size min_DCT_v_scaled_size
++#define _jpeg_width jpeg_width
++#define _jpeg_height jpeg_height
++#else
++#define _DCT_scaled_size DCT_scaled_size
++#define _DCT_h_scaled_size DCT_scaled_size
++#define _DCT_v_scaled_size DCT_scaled_size
++#define _min_DCT_scaled_size min_DCT_scaled_size
++#define _min_DCT_h_scaled_size min_DCT_scaled_size
++#define _min_DCT_v_scaled_size min_DCT_scaled_size
++#define _jpeg_width image_width
++#define _jpeg_height image_height
++#endif
+Index: fbida-2.10/jpeg/62/transupp.c
+===================================================================
+--- fbida-2.10.orig/jpeg/62/transupp.c
++++ fbida-2.10/jpeg/62/transupp.c
+@@ -1,8 +1,10 @@
+ /*
+ * transupp.c
+ *
+- * Copyright (C) 1997, Thomas G. Lane.
+- * This file is part of the Independent JPEG Group's software.
++ * This file was part of the Independent JPEG Group's software:
++ * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
++ * libjpeg-turbo Modifications:
++ * Copyright (C) 2010, D. R. Commander.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file contains image transformation routines and other utility code
+@@ -20,6 +22,17 @@
+ #include "jinclude.h"
+ #include "jpeglib.h"
+ #include "transupp.h" /* My own external interface */
++#include "jpegcomp.h"
++#include <ctype.h> /* to declare isdigit() */
++
++
++#if JPEG_LIB_VERSION >= 70
++#define dstinfo_min_DCT_h_scaled_size dstinfo->min_DCT_h_scaled_size
++#define dstinfo_min_DCT_v_scaled_size dstinfo->min_DCT_v_scaled_size
++#else
++#define dstinfo_min_DCT_h_scaled_size DCTSIZE
++#define dstinfo_min_DCT_v_scaled_size DCTSIZE
++#endif
+
+
+ #if TRANSFORMS_SUPPORTED
+@@ -28,7 +41,8 @@
+ * Lossless image transformation routines. These routines work on DCT
+ * coefficient arrays and thus do not require any lossy decompression
+ * or recompression of the image.
+- * Thanks to Guido Vollbeding for the initial design and code of this feature.
++ * Thanks to Guido Vollbeding for the initial design and code of this feature,
++ * and to Ben Jackson for introducing the cropping feature.
+ *
+ * Horizontal flipping is done in-place, using a single top-to-bottom
+ * pass through the virtual source array. It will thus be much the
+@@ -42,6 +56,13 @@
+ * arrays for most of the transforms. That could result in much thrashing
+ * if the image is larger than main memory.
+ *
++ * If cropping or trimming is involved, the destination arrays may be smaller
++ * than the source arrays. Note it is not possible to do horizontal flip
++ * in-place when a nonzero Y crop offset is specified, since we'd have to move
++ * data from one block row to another but the virtual array manager doesn't
++ * guarantee we can touch more than one row at a time. So in that case,
++ * we have to use a separate destination array.
++ *
+ * Some notes about the operating environment of the individual transform
+ * routines:
+ * 1. Both the source and destination virtual arrays are allocated from the
+@@ -54,20 +75,65 @@
+ * and we may as well take that as the effective iMCU size.
+ * 4. When "trim" is in effect, the destination's dimensions will be the
+ * trimmed values but the source's will be untrimmed.
+- * 5. All the routines assume that the source and destination buffers are
++ * 5. When "crop" is in effect, the destination's dimensions will be the
++ * cropped values but the source's will be uncropped. Each transform
++ * routine is responsible for picking up source data starting at the
++ * correct X and Y offset for the crop region. (The X and Y offsets
++ * passed to the transform routines are measured in iMCU blocks of the
++ * destination.)
++ * 6. All the routines assume that the source and destination buffers are
+ * padded out to a full iMCU boundary. This is true, although for the
+ * source buffer it is an undocumented property of jdcoefct.c.
+- * Notes 2,3,4 boil down to this: generally we should use the destination's
+- * dimensions and ignore the source's.
+ */
+
+
+ LOCAL(void)
+-do_flip_h (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
+- jvirt_barray_ptr *src_coef_arrays)
+-/* Horizontal flip; done in-place, so no separate dest array is required */
++do_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
++ jvirt_barray_ptr *src_coef_arrays,
++ jvirt_barray_ptr *dst_coef_arrays)
++/* Crop. This is only used when no rotate/flip is requested with the crop. */
++{
++ JDIMENSION dst_blk_y, x_crop_blocks, y_crop_blocks;
++ int ci, offset_y;
++ JBLOCKARRAY src_buffer, dst_buffer;
++ jpeg_component_info *compptr;
++
++ /* We simply have to copy the right amount of data (the destination's
++ * image size) starting at the given X and Y offsets in the source.
++ */
++ for (ci = 0; ci < dstinfo->num_components; ci++) {
++ compptr = dstinfo->comp_info + ci;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
++ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
++ dst_blk_y += compptr->v_samp_factor) {
++ dst_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
++ (JDIMENSION) compptr->v_samp_factor, TRUE);
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_y + y_crop_blocks,
++ (JDIMENSION) compptr->v_samp_factor, FALSE);
++ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
++ jcopy_block_row(src_buffer[offset_y] + x_crop_blocks,
++ dst_buffer[offset_y],
++ compptr->width_in_blocks);
++ }
++ }
++ }
++}
++
++
++LOCAL(void)
++do_flip_h_no_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset,
++ jvirt_barray_ptr *src_coef_arrays)
++/* Horizontal flip; done in-place, so no separate dest array is required.
++ * NB: this only works when y_crop_offset is zero.
++ */
+ {
+- JDIMENSION MCU_cols, comp_width, blk_x, blk_y;
++ JDIMENSION MCU_cols, comp_width, blk_x, blk_y, x_crop_blocks;
+ int ci, k, offset_y;
+ JBLOCKARRAY buffer;
+ JCOEFPTR ptr1, ptr2;
+@@ -79,17 +145,20 @@ do_flip_h (j_decompress_ptr srcinfo, j_c
+ * mirroring by changing the signs of odd-numbered columns.
+ * Partial iMCUs at the right edge are left untouched.
+ */
+- MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
++ MCU_cols = srcinfo->output_width /
++ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_width = MCU_cols * compptr->h_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
+ for (blk_y = 0; blk_y < compptr->height_in_blocks;
+ blk_y += compptr->v_samp_factor) {
+ buffer = (*srcinfo->mem->access_virt_barray)
+ ((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y,
+ (JDIMENSION) compptr->v_samp_factor, TRUE);
+ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
++ /* Do the mirroring */
+ for (blk_x = 0; blk_x * 2 < comp_width; blk_x++) {
+ ptr1 = buffer[offset_y][blk_x];
+ ptr2 = buffer[offset_y][comp_width - blk_x - 1];
+@@ -105,6 +174,80 @@ do_flip_h (j_decompress_ptr srcinfo, j_c
+ *ptr2++ = -temp1;
+ }
+ }
++ if (x_crop_blocks > 0) {
++ /* Now left-justify the portion of the data to be kept.
++ * We can't use a single jcopy_block_row() call because that routine
++ * depends on memcpy(), whose behavior is unspecified for overlapping
++ * source and destination areas. Sigh.
++ */
++ for (blk_x = 0; blk_x < compptr->width_in_blocks; blk_x++) {
++ jcopy_block_row(buffer[offset_y] + blk_x + x_crop_blocks,
++ buffer[offset_y] + blk_x,
++ (JDIMENSION) 1);
++ }
++ }
++ }
++ }
++ }
++}
++
++
++LOCAL(void)
++do_flip_h (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
++ jvirt_barray_ptr *src_coef_arrays,
++ jvirt_barray_ptr *dst_coef_arrays)
++/* Horizontal flip in general cropping case */
++{
++ JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
++ int ci, k, offset_y;
++ JBLOCKARRAY src_buffer, dst_buffer;
++ JBLOCKROW src_row_ptr, dst_row_ptr;
++ JCOEFPTR src_ptr, dst_ptr;
++ jpeg_component_info *compptr;
++
++ /* Here we must output into a separate array because we can't touch
++ * different rows of a single virtual array simultaneously. Otherwise,
++ * this is essentially the same as the routine above.
++ */
++ MCU_cols = srcinfo->output_width /
++ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
++
++ for (ci = 0; ci < dstinfo->num_components; ci++) {
++ compptr = dstinfo->comp_info + ci;
++ comp_width = MCU_cols * compptr->h_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
++ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
++ dst_blk_y += compptr->v_samp_factor) {
++ dst_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
++ (JDIMENSION) compptr->v_samp_factor, TRUE);
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_y + y_crop_blocks,
++ (JDIMENSION) compptr->v_samp_factor, FALSE);
++ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
++ dst_row_ptr = dst_buffer[offset_y];
++ src_row_ptr = src_buffer[offset_y];
++ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
++ if (x_crop_blocks + dst_blk_x < comp_width) {
++ /* Do the mirrorable blocks */
++ dst_ptr = dst_row_ptr[dst_blk_x];
++ src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1];
++ /* this unrolled loop doesn't need to know which row it's on... */
++ for (k = 0; k < DCTSIZE2; k += 2) {
++ *dst_ptr++ = *src_ptr++; /* copy even column */
++ *dst_ptr++ = - *src_ptr++; /* copy odd column with sign change */
++ }
++ } else {
++ /* Copy last partial block(s) verbatim */
++ jcopy_block_row(src_row_ptr + dst_blk_x + x_crop_blocks,
++ dst_row_ptr + dst_blk_x,
++ (JDIMENSION) 1);
++ }
++ }
+ }
+ }
+ }
+@@ -113,11 +256,13 @@ do_flip_h (j_decompress_ptr srcinfo, j_c
+
+ LOCAL(void)
+ do_flip_v (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* Vertical flip */
+ {
+ JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JBLOCKROW src_row_ptr, dst_row_ptr;
+@@ -131,33 +276,39 @@ do_flip_v (j_decompress_ptr srcinfo, j_c
+ * of odd-numbered rows.
+ * Partial iMCUs at the bottom edge are copied verbatim.
+ */
+- MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
++ MCU_rows = srcinfo->output_height /
++ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_height = MCU_rows * compptr->v_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+ ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
+ (JDIMENSION) compptr->v_samp_factor, TRUE);
+- if (dst_blk_y < comp_height) {
++ if (y_crop_blocks + dst_blk_y < comp_height) {
+ /* Row is within the mirrorable area. */
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
+- comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor,
++ comp_height - y_crop_blocks - dst_blk_y -
++ (JDIMENSION) compptr->v_samp_factor,
+ (JDIMENSION) compptr->v_samp_factor, FALSE);
+ } else {
+ /* Bottom-edge blocks will be copied verbatim. */
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y,
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_y + y_crop_blocks,
+ (JDIMENSION) compptr->v_samp_factor, FALSE);
+ }
+ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
+- if (dst_blk_y < comp_height) {
++ if (y_crop_blocks + dst_blk_y < comp_height) {
+ /* Row is within the mirrorable area. */
+ dst_row_ptr = dst_buffer[offset_y];
+ src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1];
++ src_row_ptr += x_crop_blocks;
+ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
+ dst_blk_x++) {
+ dst_ptr = dst_row_ptr[dst_blk_x];
+@@ -173,7 +324,8 @@ do_flip_v (j_decompress_ptr srcinfo, j_c
+ }
+ } else {
+ /* Just copy row verbatim. */
+- jcopy_block_row(src_buffer[offset_y], dst_buffer[offset_y],
++ jcopy_block_row(src_buffer[offset_y] + x_crop_blocks,
++ dst_buffer[offset_y],
+ compptr->width_in_blocks);
+ }
+ }
+@@ -184,11 +336,12 @@ do_flip_v (j_decompress_ptr srcinfo, j_c
+
+ LOCAL(void)
+ do_transpose (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* Transpose source into destination */
+ {
+- JDIMENSION dst_blk_x, dst_blk_y;
++ JDIMENSION dst_blk_x, dst_blk_y, x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_x, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JCOEFPTR src_ptr, dst_ptr;
+@@ -201,6 +354,8 @@ do_transpose (j_decompress_ptr srcinfo,
+ */
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+@@ -210,11 +365,12 @@ do_transpose (j_decompress_ptr srcinfo,
+ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
+ dst_blk_x += compptr->h_samp_factor) {
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_x + x_crop_blocks,
+ (JDIMENSION) compptr->h_samp_factor, FALSE);
+ for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
+- src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
+ dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ src_ptr = src_buffer[offset_x][dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++)
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -228,6 +384,7 @@ do_transpose (j_decompress_ptr srcinfo,
+
+ LOCAL(void)
+ do_rot_90 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* 90 degree rotation is equivalent to
+@@ -237,6 +394,7 @@ do_rot_90 (j_decompress_ptr srcinfo, j_c
+ */
+ {
+ JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_x, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JCOEFPTR src_ptr, dst_ptr;
+@@ -246,11 +404,14 @@ do_rot_90 (j_decompress_ptr srcinfo, j_c
+ * at the (output) right edge properly. They just get transposed and
+ * not mirrored.
+ */
+- MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
++ MCU_cols = srcinfo->output_height /
++ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_width = MCU_cols * compptr->h_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+@@ -259,15 +420,26 @@ do_rot_90 (j_decompress_ptr srcinfo, j_c
+ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
+ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
+ dst_blk_x += compptr->h_samp_factor) {
+- src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
+- (JDIMENSION) compptr->h_samp_factor, FALSE);
++ if (x_crop_blocks + dst_blk_x < comp_width) {
++ /* Block is within the mirrorable area. */
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ comp_width - x_crop_blocks - dst_blk_x -
++ (JDIMENSION) compptr->h_samp_factor,
++ (JDIMENSION) compptr->h_samp_factor, FALSE);
++ } else {
++ /* Edge blocks are transposed but not mirrored. */
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_x + x_crop_blocks,
++ (JDIMENSION) compptr->h_samp_factor, FALSE);
++ }
+ for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
+- src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
+- if (dst_blk_x < comp_width) {
++ dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ if (x_crop_blocks + dst_blk_x < comp_width) {
+ /* Block is within the mirrorable area. */
+- dst_ptr = dst_buffer[offset_y]
+- [comp_width - dst_blk_x - offset_x - 1];
++ src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1]
++ [dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++) {
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -277,7 +449,8 @@ do_rot_90 (j_decompress_ptr srcinfo, j_c
+ }
+ } else {
+ /* Edge blocks are transposed but not mirrored. */
+- dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ src_ptr = src_buffer[offset_x]
++ [dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++)
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -292,6 +465,7 @@ do_rot_90 (j_decompress_ptr srcinfo, j_c
+
+ LOCAL(void)
+ do_rot_270 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* 270 degree rotation is equivalent to
+@@ -301,6 +475,7 @@ do_rot_270 (j_decompress_ptr srcinfo, j_
+ */
+ {
+ JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_x, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JCOEFPTR src_ptr, dst_ptr;
+@@ -310,11 +485,14 @@ do_rot_270 (j_decompress_ptr srcinfo, j_
+ * at the (output) bottom edge properly. They just get transposed and
+ * not mirrored.
+ */
+- MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
++ MCU_rows = srcinfo->output_width /
++ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_height = MCU_rows * compptr->v_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+@@ -324,14 +502,15 @@ do_rot_270 (j_decompress_ptr srcinfo, j_
+ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
+ dst_blk_x += compptr->h_samp_factor) {
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_x + x_crop_blocks,
+ (JDIMENSION) compptr->h_samp_factor, FALSE);
+ for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
+ dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
+- if (dst_blk_y < comp_height) {
++ if (y_crop_blocks + dst_blk_y < comp_height) {
+ /* Block is within the mirrorable area. */
+ src_ptr = src_buffer[offset_x]
+- [comp_height - dst_blk_y - offset_y - 1];
++ [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1];
+ for (i = 0; i < DCTSIZE; i++) {
+ for (j = 0; j < DCTSIZE; j++) {
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -341,7 +520,8 @@ do_rot_270 (j_decompress_ptr srcinfo, j_
+ }
+ } else {
+ /* Edge blocks are transposed but not mirrored. */
+- src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
++ src_ptr = src_buffer[offset_x]
++ [dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++)
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -356,6 +536,7 @@ do_rot_270 (j_decompress_ptr srcinfo, j_
+
+ LOCAL(void)
+ do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* 180 degree rotation is equivalent to
+@@ -365,89 +546,95 @@ do_rot_180 (j_decompress_ptr srcinfo, j_
+ */
+ {
+ JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JBLOCKROW src_row_ptr, dst_row_ptr;
+ JCOEFPTR src_ptr, dst_ptr;
+ jpeg_component_info *compptr;
+
+- MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
+- MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
++ MCU_cols = srcinfo->output_width /
++ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
++ MCU_rows = srcinfo->output_height /
++ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_width = MCU_cols * compptr->h_samp_factor;
+ comp_height = MCU_rows * compptr->v_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+ ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
+ (JDIMENSION) compptr->v_samp_factor, TRUE);
+- if (dst_blk_y < comp_height) {
++ if (y_crop_blocks + dst_blk_y < comp_height) {
+ /* Row is within the vertically mirrorable area. */
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
+- comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor,
++ comp_height - y_crop_blocks - dst_blk_y -
++ (JDIMENSION) compptr->v_samp_factor,
+ (JDIMENSION) compptr->v_samp_factor, FALSE);
+ } else {
+ /* Bottom-edge rows are only mirrored horizontally. */
+ src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y,
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_y + y_crop_blocks,
+ (JDIMENSION) compptr->v_samp_factor, FALSE);
+ }
+ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
+- if (dst_blk_y < comp_height) {
++ dst_row_ptr = dst_buffer[offset_y];
++ if (y_crop_blocks + dst_blk_y < comp_height) {
+ /* Row is within the mirrorable area. */
+- dst_row_ptr = dst_buffer[offset_y];
+ src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1];
+- /* Process the blocks that can be mirrored both ways. */
+- for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) {
++ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
+ dst_ptr = dst_row_ptr[dst_blk_x];
+- src_ptr = src_row_ptr[comp_width - dst_blk_x - 1];
+- for (i = 0; i < DCTSIZE; i += 2) {
+- /* For even row, negate every odd column. */
+- for (j = 0; j < DCTSIZE; j += 2) {
+- *dst_ptr++ = *src_ptr++;
+- *dst_ptr++ = - *src_ptr++;
++ if (x_crop_blocks + dst_blk_x < comp_width) {
++ /* Process the blocks that can be mirrored both ways. */
++ src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1];
++ for (i = 0; i < DCTSIZE; i += 2) {
++ /* For even row, negate every odd column. */
++ for (j = 0; j < DCTSIZE; j += 2) {
++ *dst_ptr++ = *src_ptr++;
++ *dst_ptr++ = - *src_ptr++;
++ }
++ /* For odd row, negate every even column. */
++ for (j = 0; j < DCTSIZE; j += 2) {
++ *dst_ptr++ = - *src_ptr++;
++ *dst_ptr++ = *src_ptr++;
++ }
+ }
+- /* For odd row, negate every even column. */
+- for (j = 0; j < DCTSIZE; j += 2) {
+- *dst_ptr++ = - *src_ptr++;
+- *dst_ptr++ = *src_ptr++;
++ } else {
++ /* Any remaining right-edge blocks are only mirrored vertically. */
++ src_ptr = src_row_ptr[x_crop_blocks + dst_blk_x];
++ for (i = 0; i < DCTSIZE; i += 2) {
++ for (j = 0; j < DCTSIZE; j++)
++ *dst_ptr++ = *src_ptr++;
++ for (j = 0; j < DCTSIZE; j++)
++ *dst_ptr++ = - *src_ptr++;
+ }
+ }
+ }
+- /* Any remaining right-edge blocks are only mirrored vertically. */
+- for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
+- dst_ptr = dst_row_ptr[dst_blk_x];
+- src_ptr = src_row_ptr[dst_blk_x];
+- for (i = 0; i < DCTSIZE; i += 2) {
+- for (j = 0; j < DCTSIZE; j++)
+- *dst_ptr++ = *src_ptr++;
+- for (j = 0; j < DCTSIZE; j++)
+- *dst_ptr++ = - *src_ptr++;
+- }
+- }
+ } else {
+ /* Remaining rows are just mirrored horizontally. */
+- dst_row_ptr = dst_buffer[offset_y];
+ src_row_ptr = src_buffer[offset_y];
+- /* Process the blocks that can be mirrored. */
+- for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) {
+- dst_ptr = dst_row_ptr[dst_blk_x];
+- src_ptr = src_row_ptr[comp_width - dst_blk_x - 1];
+- for (i = 0; i < DCTSIZE2; i += 2) {
+- *dst_ptr++ = *src_ptr++;
+- *dst_ptr++ = - *src_ptr++;
++ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
++ if (x_crop_blocks + dst_blk_x < comp_width) {
++ /* Process the blocks that can be mirrored. */
++ dst_ptr = dst_row_ptr[dst_blk_x];
++ src_ptr = src_row_ptr[comp_width - x_crop_blocks - dst_blk_x - 1];
++ for (i = 0; i < DCTSIZE2; i += 2) {
++ *dst_ptr++ = *src_ptr++;
++ *dst_ptr++ = - *src_ptr++;
++ }
++ } else {
++ /* Any remaining right-edge blocks are only copied. */
++ jcopy_block_row(src_row_ptr + dst_blk_x + x_crop_blocks,
++ dst_row_ptr + dst_blk_x,
++ (JDIMENSION) 1);
+ }
+ }
+- /* Any remaining right-edge blocks are only copied. */
+- for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
+- dst_ptr = dst_row_ptr[dst_blk_x];
+- src_ptr = src_row_ptr[dst_blk_x];
+- for (i = 0; i < DCTSIZE2; i++)
+- *dst_ptr++ = *src_ptr++;
+- }
+ }
+ }
+ }
+@@ -457,6 +644,7 @@ do_rot_180 (j_decompress_ptr srcinfo, j_
+
+ LOCAL(void)
+ do_transverse (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
++ JDIMENSION x_crop_offset, JDIMENSION y_crop_offset,
+ jvirt_barray_ptr *src_coef_arrays,
+ jvirt_barray_ptr *dst_coef_arrays)
+ /* Transverse transpose is equivalent to
+@@ -470,18 +658,23 @@ do_transverse (j_decompress_ptr srcinfo,
+ */
+ {
+ JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y;
++ JDIMENSION x_crop_blocks, y_crop_blocks;
+ int ci, i, j, offset_x, offset_y;
+ JBLOCKARRAY src_buffer, dst_buffer;
+ JCOEFPTR src_ptr, dst_ptr;
+ jpeg_component_info *compptr;
+
+- MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
+- MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
++ MCU_cols = srcinfo->output_height /
++ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
++ MCU_rows = srcinfo->output_width /
++ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
+
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+ compptr = dstinfo->comp_info + ci;
+ comp_width = MCU_cols * compptr->h_samp_factor;
+ comp_height = MCU_rows * compptr->v_samp_factor;
++ x_crop_blocks = x_crop_offset * compptr->h_samp_factor;
++ y_crop_blocks = y_crop_offset * compptr->v_samp_factor;
+ for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
+ dst_blk_y += compptr->v_samp_factor) {
+ dst_buffer = (*srcinfo->mem->access_virt_barray)
+@@ -490,17 +683,26 @@ do_transverse (j_decompress_ptr srcinfo,
+ for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
+ for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
+ dst_blk_x += compptr->h_samp_factor) {
+- src_buffer = (*srcinfo->mem->access_virt_barray)
+- ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
+- (JDIMENSION) compptr->h_samp_factor, FALSE);
++ if (x_crop_blocks + dst_blk_x < comp_width) {
++ /* Block is within the mirrorable area. */
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ comp_width - x_crop_blocks - dst_blk_x -
++ (JDIMENSION) compptr->h_samp_factor,
++ (JDIMENSION) compptr->h_samp_factor, FALSE);
++ } else {
++ src_buffer = (*srcinfo->mem->access_virt_barray)
++ ((j_common_ptr) srcinfo, src_coef_arrays[ci],
++ dst_blk_x + x_crop_blocks,
++ (JDIMENSION) compptr->h_samp_factor, FALSE);
++ }
+ for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
+- if (dst_blk_y < comp_height) {
+- src_ptr = src_buffer[offset_x]
+- [comp_height - dst_blk_y - offset_y - 1];
+- if (dst_blk_x < comp_width) {
++ dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ if (y_crop_blocks + dst_blk_y < comp_height) {
++ if (x_crop_blocks + dst_blk_x < comp_width) {
+ /* Block is within the mirrorable area. */
+- dst_ptr = dst_buffer[offset_y]
+- [comp_width - dst_blk_x - offset_x - 1];
++ src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1]
++ [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1];
+ for (i = 0; i < DCTSIZE; i++) {
+ for (j = 0; j < DCTSIZE; j++) {
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -516,7 +718,8 @@ do_transverse (j_decompress_ptr srcinfo,
+ }
+ } else {
+ /* Right-edge blocks are mirrored in y only */
+- dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ src_ptr = src_buffer[offset_x]
++ [comp_height - y_crop_blocks - dst_blk_y - offset_y - 1];
+ for (i = 0; i < DCTSIZE; i++) {
+ for (j = 0; j < DCTSIZE; j++) {
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -526,11 +729,10 @@ do_transverse (j_decompress_ptr srcinfo,
+ }
+ }
+ } else {
+- src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
+- if (dst_blk_x < comp_width) {
++ if (x_crop_blocks + dst_blk_x < comp_width) {
+ /* Bottom-edge blocks are mirrored in x only */
+- dst_ptr = dst_buffer[offset_y]
+- [comp_width - dst_blk_x - offset_x - 1];
++ src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1]
++ [dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++) {
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -540,7 +742,8 @@ do_transverse (j_decompress_ptr srcinfo,
+ }
+ } else {
+ /* At lower right corner, just transpose, no mirroring */
+- dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
++ src_ptr = src_buffer[offset_x]
++ [dst_blk_y + offset_y + y_crop_blocks];
+ for (i = 0; i < DCTSIZE; i++)
+ for (j = 0; j < DCTSIZE; j++)
+ dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
+@@ -554,83 +757,372 @@ do_transverse (j_decompress_ptr srcinfo,
+ }
+
+
++/* Parse an unsigned integer: subroutine for jtransform_parse_crop_spec.
++ * Returns TRUE if valid integer found, FALSE if not.
++ * *strptr is advanced over the digit string, and *result is set to its value.
++ */
++
++LOCAL(boolean)
++jt_read_integer (const char ** strptr, JDIMENSION * result)
++{
++ const char * ptr = *strptr;
++ JDIMENSION val = 0;
++
++ for (; isdigit(*ptr); ptr++) {
++ val = val * 10 + (JDIMENSION) (*ptr - '0');
++ }
++ *result = val;
++ if (ptr == *strptr)
++ return FALSE; /* oops, no digits */
++ *strptr = ptr;
++ return TRUE;
++}
++
++
++/* Parse a crop specification (written in X11 geometry style).
++ * The routine returns TRUE if the spec string is valid, FALSE if not.
++ *
++ * The crop spec string should have the format
++ * <width>[f]x<height>[f]{+-}<xoffset>{+-}<yoffset>
++ * where width, height, xoffset, and yoffset are unsigned integers.
++ * Each of the elements can be omitted to indicate a default value.
++ * (A weakness of this style is that it is not possible to omit xoffset
++ * while specifying yoffset, since they look alike.)
++ *
++ * This code is loosely based on XParseGeometry from the X11 distribution.
++ */
++
++GLOBAL(boolean)
++jtransform_parse_crop_spec (jpeg_transform_info *info, const char *spec)
++{
++ info->crop = FALSE;
++ info->crop_width_set = JCROP_UNSET;
++ info->crop_height_set = JCROP_UNSET;
++ info->crop_xoffset_set = JCROP_UNSET;
++ info->crop_yoffset_set = JCROP_UNSET;
++
++ if (isdigit(*spec)) {
++ /* fetch width */
++ if (! jt_read_integer(&spec, &info->crop_width))
++ return FALSE;
++ if (*spec == 'f' || *spec == 'F') {
++ spec++;
++ info->crop_width_set = JCROP_FORCE;
++ } else
++ info->crop_width_set = JCROP_POS;
++ }
++ if (*spec == 'x' || *spec == 'X') {
++ /* fetch height */
++ spec++;
++ if (! jt_read_integer(&spec, &info->crop_height))
++ return FALSE;
++ if (*spec == 'f' || *spec == 'F') {
++ spec++;
++ info->crop_height_set = JCROP_FORCE;
++ } else
++ info->crop_height_set = JCROP_POS;
++ }
++ if (*spec == '+' || *spec == '-') {
++ /* fetch xoffset */
++ info->crop_xoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS;
++ spec++;
++ if (! jt_read_integer(&spec, &info->crop_xoffset))
++ return FALSE;
++ }
++ if (*spec == '+' || *spec == '-') {
++ /* fetch yoffset */
++ info->crop_yoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS;
++ spec++;
++ if (! jt_read_integer(&spec, &info->crop_yoffset))
++ return FALSE;
++ }
++ /* We had better have gotten to the end of the string. */
++ if (*spec != '\0')
++ return FALSE;
++ info->crop = TRUE;
++ return TRUE;
++}
++
++
++/* Trim off any partial iMCUs on the indicated destination edge */
++
++LOCAL(void)
++trim_right_edge (jpeg_transform_info *info, JDIMENSION full_width)
++{
++ JDIMENSION MCU_cols;
++
++ MCU_cols = info->output_width / info->iMCU_sample_width;
++ if (MCU_cols > 0 && info->x_crop_offset + MCU_cols ==
++ full_width / info->iMCU_sample_width)
++ info->output_width = MCU_cols * info->iMCU_sample_width;
++}
++
++LOCAL(void)
++trim_bottom_edge (jpeg_transform_info *info, JDIMENSION full_height)
++{
++ JDIMENSION MCU_rows;
++
++ MCU_rows = info->output_height / info->iMCU_sample_height;
++ if (MCU_rows > 0 && info->y_crop_offset + MCU_rows ==
++ full_height / info->iMCU_sample_height)
++ info->output_height = MCU_rows * info->iMCU_sample_height;
++}
++
++
+ /* Request any required workspace.
+ *
++ * This routine figures out the size that the output image will be
++ * (which implies that all the transform parameters must be set before
++ * it is called).
++ *
+ * We allocate the workspace virtual arrays from the source decompression
+ * object, so that all the arrays (both the original data and the workspace)
+ * will be taken into account while making memory management decisions.
+ * Hence, this routine must be called after jpeg_read_header (which reads
+ * the image dimensions) and before jpeg_read_coefficients (which realizes
+ * the source's virtual arrays).
++ *
++ * This function returns FALSE right away if -perfect is given
++ * and transformation is not perfect. Otherwise returns TRUE.
+ */
+
+-GLOBAL(void)
++GLOBAL(boolean)
+ jtransform_request_workspace (j_decompress_ptr srcinfo,
+ jpeg_transform_info *info)
+ {
+- jvirt_barray_ptr *coef_arrays = NULL;
++ jvirt_barray_ptr *coef_arrays;
++ boolean need_workspace, transpose_it;
+ jpeg_component_info *compptr;
+- int ci;
++ JDIMENSION xoffset, yoffset;
++ JDIMENSION width_in_iMCUs, height_in_iMCUs;
++ JDIMENSION width_in_blocks, height_in_blocks;
++ int ci, h_samp_factor, v_samp_factor;
+
++ /* Determine number of components in output image */
+ if (info->force_grayscale &&
+ srcinfo->jpeg_color_space == JCS_YCbCr &&
+- srcinfo->num_components == 3) {
++ srcinfo->num_components == 3)
+ /* We'll only process the first component */
+ info->num_components = 1;
+- } else {
++ else
+ /* Process all the components */
+ info->num_components = srcinfo->num_components;
++
++ /* Compute output image dimensions and related values. */
++#if JPEG_LIB_VERSION >= 80
++ jpeg_core_output_dimensions(srcinfo);
++#else
++ srcinfo->output_width = srcinfo->image_width;
++ srcinfo->output_height = srcinfo->image_height;
++#endif
++
++ /* Return right away if -perfect is given and transformation is not perfect.
++ */
++ if (info->perfect) {
++ if (info->num_components == 1) {
++ if (!jtransform_perfect_transform(srcinfo->output_width,
++ srcinfo->output_height,
++ srcinfo->_min_DCT_h_scaled_size,
++ srcinfo->_min_DCT_v_scaled_size,
++ info->transform))
++ return FALSE;
++ } else {
++ if (!jtransform_perfect_transform(srcinfo->output_width,
++ srcinfo->output_height,
++ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size,
++ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size,
++ info->transform))
++ return FALSE;
++ }
++ }
++
++ /* If there is only one output component, force the iMCU size to be 1;
++ * else use the source iMCU size. (This allows us to do the right thing
++ * when reducing color to grayscale, and also provides a handy way of
++ * cleaning up "funny" grayscale images whose sampling factors are not 1x1.)
++ */
++ switch (info->transform) {
++ case JXFORM_TRANSPOSE:
++ case JXFORM_TRANSVERSE:
++ case JXFORM_ROT_90:
++ case JXFORM_ROT_270:
++ info->output_width = srcinfo->output_height;
++ info->output_height = srcinfo->output_width;
++ if (info->num_components == 1) {
++ info->iMCU_sample_width = srcinfo->_min_DCT_v_scaled_size;
++ info->iMCU_sample_height = srcinfo->_min_DCT_h_scaled_size;
++ } else {
++ info->iMCU_sample_width =
++ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size;
++ info->iMCU_sample_height =
++ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size;
++ }
++ break;
++ default:
++ info->output_width = srcinfo->output_width;
++ info->output_height = srcinfo->output_height;
++ if (info->num_components == 1) {
++ info->iMCU_sample_width = srcinfo->_min_DCT_h_scaled_size;
++ info->iMCU_sample_height = srcinfo->_min_DCT_v_scaled_size;
++ } else {
++ info->iMCU_sample_width =
++ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size;
++ info->iMCU_sample_height =
++ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size;
++ }
++ break;
+ }
+
++ /* If cropping has been requested, compute the crop area's position and
++ * dimensions, ensuring that its upper left corner falls at an iMCU boundary.
++ */
++ if (info->crop) {
++ /* Insert default values for unset crop parameters */
++ if (info->crop_xoffset_set == JCROP_UNSET)
++ info->crop_xoffset = 0; /* default to +0 */
++ if (info->crop_yoffset_set == JCROP_UNSET)
++ info->crop_yoffset = 0; /* default to +0 */
++ if (info->crop_xoffset >= info->output_width ||
++ info->crop_yoffset >= info->output_height)
++ ERREXIT(srcinfo, JERR_BAD_CROP_SPEC);
++ if (info->crop_width_set == JCROP_UNSET)
++ info->crop_width = info->output_width - info->crop_xoffset;
++ if (info->crop_height_set == JCROP_UNSET)
++ info->crop_height = info->output_height - info->crop_yoffset;
++ /* Ensure parameters are valid */
++ if (info->crop_width <= 0 || info->crop_width > info->output_width ||
++ info->crop_height <= 0 || info->crop_height > info->output_height ||
++ info->crop_xoffset > info->output_width - info->crop_width ||
++ info->crop_yoffset > info->output_height - info->crop_height)
++ ERREXIT(srcinfo, JERR_BAD_CROP_SPEC);
++ /* Convert negative crop offsets into regular offsets */
++ if (info->crop_xoffset_set == JCROP_NEG)
++ xoffset = info->output_width - info->crop_width - info->crop_xoffset;
++ else
++ xoffset = info->crop_xoffset;
++ if (info->crop_yoffset_set == JCROP_NEG)
++ yoffset = info->output_height - info->crop_height - info->crop_yoffset;
++ else
++ yoffset = info->crop_yoffset;
++ /* Now adjust so that upper left corner falls at an iMCU boundary */
++ if (info->crop_width_set == JCROP_FORCE)
++ info->output_width = info->crop_width;
++ else
++ info->output_width =
++ info->crop_width + (xoffset % info->iMCU_sample_width);
++ if (info->crop_height_set == JCROP_FORCE)
++ info->output_height = info->crop_height;
++ else
++ info->output_height =
++ info->crop_height + (yoffset % info->iMCU_sample_height);
++ /* Save x/y offsets measured in iMCUs */
++ info->x_crop_offset = xoffset / info->iMCU_sample_width;
++ info->y_crop_offset = yoffset / info->iMCU_sample_height;
++ } else {
++ info->x_crop_offset = 0;
++ info->y_crop_offset = 0;
++ }
++
++ /* Figure out whether we need workspace arrays,
++ * and if so whether they are transposed relative to the source.
++ */
++ need_workspace = FALSE;
++ transpose_it = FALSE;
+ switch (info->transform) {
+ case JXFORM_NONE:
++ if (info->x_crop_offset != 0 || info->y_crop_offset != 0)
++ need_workspace = TRUE;
++ /* No workspace needed if neither cropping nor transforming */
++ break;
+ case JXFORM_FLIP_H:
+- /* Don't need a workspace array */
++ if (info->trim)
++ trim_right_edge(info, srcinfo->output_width);
++ if (info->y_crop_offset != 0 || info->slow_hflip)
++ need_workspace = TRUE;
++ /* do_flip_h_no_crop doesn't need a workspace array */
+ break;
+ case JXFORM_FLIP_V:
+- case JXFORM_ROT_180:
+- /* Need workspace arrays having same dimensions as source image.
+- * Note that we allocate arrays padded out to the next iMCU boundary,
+- * so that transform routines need not worry about missing edge blocks.
+- */
+- coef_arrays = (jvirt_barray_ptr *)
+- (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE,
+- SIZEOF(jvirt_barray_ptr) * info->num_components);
+- for (ci = 0; ci < info->num_components; ci++) {
+- compptr = srcinfo->comp_info + ci;
+- coef_arrays[ci] = (*srcinfo->mem->request_virt_barray)
+- ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE,
+- (JDIMENSION) jround_up((long) compptr->width_in_blocks,
+- (long) compptr->h_samp_factor),
+- (JDIMENSION) jround_up((long) compptr->height_in_blocks,
+- (long) compptr->v_samp_factor),
+- (JDIMENSION) compptr->v_samp_factor);
+- }
++ if (info->trim)
++ trim_bottom_edge(info, srcinfo->output_height);
++ /* Need workspace arrays having same dimensions as source image. */
++ need_workspace = TRUE;
+ break;
+ case JXFORM_TRANSPOSE:
++ /* transpose does NOT have to trim anything */
++ /* Need workspace arrays having transposed dimensions. */
++ need_workspace = TRUE;
++ transpose_it = TRUE;
++ break;
+ case JXFORM_TRANSVERSE:
++ if (info->trim) {
++ trim_right_edge(info, srcinfo->output_height);
++ trim_bottom_edge(info, srcinfo->output_width);
++ }
++ /* Need workspace arrays having transposed dimensions. */
++ need_workspace = TRUE;
++ transpose_it = TRUE;
++ break;
+ case JXFORM_ROT_90:
++ if (info->trim)
++ trim_right_edge(info, srcinfo->output_height);
++ /* Need workspace arrays having transposed dimensions. */
++ need_workspace = TRUE;
++ transpose_it = TRUE;
++ break;
++ case JXFORM_ROT_180:
++ if (info->trim) {
++ trim_right_edge(info, srcinfo->output_width);
++ trim_bottom_edge(info, srcinfo->output_height);
++ }
++ /* Need workspace arrays having same dimensions as source image. */
++ need_workspace = TRUE;
++ break;
+ case JXFORM_ROT_270:
+- /* Need workspace arrays having transposed dimensions.
+- * Note that we allocate arrays padded out to the next iMCU boundary,
+- * so that transform routines need not worry about missing edge blocks.
+- */
++ if (info->trim)
++ trim_bottom_edge(info, srcinfo->output_width);
++ /* Need workspace arrays having transposed dimensions. */
++ need_workspace = TRUE;
++ transpose_it = TRUE;
++ break;
++ }
++
++ /* Allocate workspace if needed.
++ * Note that we allocate arrays padded out to the next iMCU boundary,
++ * so that transform routines need not worry about missing edge blocks.
++ */
++ if (need_workspace) {
+ coef_arrays = (jvirt_barray_ptr *)
+ (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE,
+- SIZEOF(jvirt_barray_ptr) * info->num_components);
++ SIZEOF(jvirt_barray_ptr) * info->num_components);
++ width_in_iMCUs = (JDIMENSION)
++ jdiv_round_up((long) info->output_width,
++ (long) info->iMCU_sample_width);
++ height_in_iMCUs = (JDIMENSION)
++ jdiv_round_up((long) info->output_height,
++ (long) info->iMCU_sample_height);
+ for (ci = 0; ci < info->num_components; ci++) {
+ compptr = srcinfo->comp_info + ci;
++ if (info->num_components == 1) {
++ /* we're going to force samp factors to 1x1 in this case */
++ h_samp_factor = v_samp_factor = 1;
++ } else if (transpose_it) {
++ h_samp_factor = compptr->v_samp_factor;
++ v_samp_factor = compptr->h_samp_factor;
++ } else {
++ h_samp_factor = compptr->h_samp_factor;
++ v_samp_factor = compptr->v_samp_factor;
++ }
++ width_in_blocks = width_in_iMCUs * h_samp_factor;
++ height_in_blocks = height_in_iMCUs * v_samp_factor;
+ coef_arrays[ci] = (*srcinfo->mem->request_virt_barray)
+ ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE,
+- (JDIMENSION) jround_up((long) compptr->height_in_blocks,
+- (long) compptr->v_samp_factor),
+- (JDIMENSION) jround_up((long) compptr->width_in_blocks,
+- (long) compptr->h_samp_factor),
+- (JDIMENSION) compptr->h_samp_factor);
++ width_in_blocks, height_in_blocks, (JDIMENSION) v_samp_factor);
+ }
+- break;
+- }
+- info->workspace_coef_arrays = coef_arrays;
++ info->workspace_coef_arrays = coef_arrays;
++ } else
++ info->workspace_coef_arrays = NULL;
++
++ return TRUE;
+ }
+
+
+@@ -642,13 +1134,18 @@ transpose_critical_parameters (j_compres
+ int tblno, i, j, ci, itemp;
+ jpeg_component_info *compptr;
+ JQUANT_TBL *qtblptr;
+- JDIMENSION dtemp;
++ JDIMENSION jtemp;
+ UINT16 qtemp;
+
+- /* Transpose basic image dimensions */
+- dtemp = dstinfo->image_width;
++ /* Transpose image dimensions */
++ jtemp = dstinfo->image_width;
+ dstinfo->image_width = dstinfo->image_height;
+- dstinfo->image_height = dtemp;
++ dstinfo->image_height = jtemp;
++#if JPEG_LIB_VERSION >= 70
++ itemp = dstinfo->min_DCT_h_scaled_size;
++ dstinfo->min_DCT_h_scaled_size = dstinfo->min_DCT_v_scaled_size;
++ dstinfo->min_DCT_v_scaled_size = itemp;
++#endif
+
+ /* Transpose sampling factors */
+ for (ci = 0; ci < dstinfo->num_components; ci++) {
+@@ -674,47 +1171,162 @@ transpose_critical_parameters (j_compres
+ }
+
+
+-/* Trim off any partial iMCUs on the indicated destination edge */
++/* Adjust Exif image parameters.
++ *
++ * We try to adjust the Tags ExifImageWidth and ExifImageHeight if possible.
++ */
+
++#if JPEG_LIB_VERSION >= 70
+ LOCAL(void)
+-trim_right_edge (j_compress_ptr dstinfo)
++adjust_exif_parameters (JOCTET FAR * data, unsigned int length,
++ JDIMENSION new_width, JDIMENSION new_height)
+ {
+- int ci, max_h_samp_factor;
+- JDIMENSION MCU_cols;
++ boolean is_motorola; /* Flag for byte order */
++ unsigned int number_of_tags, tagnum;
++ unsigned int firstoffset, offset;
++ JDIMENSION new_value;
++
++ if (length < 12) return; /* Length of an IFD entry */
++
++ /* Discover byte order */
++ if (GETJOCTET(data[0]) == 0x49 && GETJOCTET(data[1]) == 0x49)
++ is_motorola = FALSE;
++ else if (GETJOCTET(data[0]) == 0x4D && GETJOCTET(data[1]) == 0x4D)
++ is_motorola = TRUE;
++ else
++ return;
++
++ /* Check Tag Mark */
++ if (is_motorola) {
++ if (GETJOCTET(data[2]) != 0) return;
++ if (GETJOCTET(data[3]) != 0x2A) return;
++ } else {
++ if (GETJOCTET(data[3]) != 0) return;
++ if (GETJOCTET(data[2]) != 0x2A) return;
++ }
+
+- /* We have to compute max_h_samp_factor ourselves,
+- * because it hasn't been set yet in the destination
+- * (and we don't want to use the source's value).
+- */
+- max_h_samp_factor = 1;
+- for (ci = 0; ci < dstinfo->num_components; ci++) {
+- int h_samp_factor = dstinfo->comp_info[ci].h_samp_factor;
+- max_h_samp_factor = MAX(max_h_samp_factor, h_samp_factor);
++ /* Get first IFD offset (offset to IFD0) */
++ if (is_motorola) {
++ if (GETJOCTET(data[4]) != 0) return;
++ if (GETJOCTET(data[5]) != 0) return;
++ firstoffset = GETJOCTET(data[6]);
++ firstoffset <<= 8;
++ firstoffset += GETJOCTET(data[7]);
++ } else {
++ if (GETJOCTET(data[7]) != 0) return;
++ if (GETJOCTET(data[6]) != 0) return;
++ firstoffset = GETJOCTET(data[5]);
++ firstoffset <<= 8;
++ firstoffset += GETJOCTET(data[4]);
+ }
+- MCU_cols = dstinfo->image_width / (max_h_samp_factor * DCTSIZE);
+- if (MCU_cols > 0) /* can't trim to 0 pixels */
+- dstinfo->image_width = MCU_cols * (max_h_samp_factor * DCTSIZE);
+-}
++ if (firstoffset > length - 2) return; /* check end of data segment */
+
+-LOCAL(void)
+-trim_bottom_edge (j_compress_ptr dstinfo)
+-{
+- int ci, max_v_samp_factor;
+- JDIMENSION MCU_rows;
++ /* Get the number of directory entries contained in this IFD */
++ if (is_motorola) {
++ number_of_tags = GETJOCTET(data[firstoffset]);
++ number_of_tags <<= 8;
++ number_of_tags += GETJOCTET(data[firstoffset+1]);
++ } else {
++ number_of_tags = GETJOCTET(data[firstoffset+1]);
++ number_of_tags <<= 8;
++ number_of_tags += GETJOCTET(data[firstoffset]);
++ }
++ if (number_of_tags == 0) return;
++ firstoffset += 2;
+
+- /* We have to compute max_v_samp_factor ourselves,
+- * because it hasn't been set yet in the destination
+- * (and we don't want to use the source's value).
+- */
+- max_v_samp_factor = 1;
+- for (ci = 0; ci < dstinfo->num_components; ci++) {
+- int v_samp_factor = dstinfo->comp_info[ci].v_samp_factor;
+- max_v_samp_factor = MAX(max_v_samp_factor, v_samp_factor);
++ /* Search for ExifSubIFD offset Tag in IFD0 */
++ for (;;) {
++ if (firstoffset > length - 12) return; /* check end of data segment */
++ /* Get Tag number */
++ if (is_motorola) {
++ tagnum = GETJOCTET(data[firstoffset]);
++ tagnum <<= 8;
++ tagnum += GETJOCTET(data[firstoffset+1]);
++ } else {
++ tagnum = GETJOCTET(data[firstoffset+1]);
++ tagnum <<= 8;
++ tagnum += GETJOCTET(data[firstoffset]);
++ }
++ if (tagnum == 0x8769) break; /* found ExifSubIFD offset Tag */
++ if (--number_of_tags == 0) return;
++ firstoffset += 12;
++ }
++
++ /* Get the ExifSubIFD offset */
++ if (is_motorola) {
++ if (GETJOCTET(data[firstoffset+8]) != 0) return;
++ if (GETJOCTET(data[firstoffset+9]) != 0) return;
++ offset = GETJOCTET(data[firstoffset+10]);
++ offset <<= 8;
++ offset += GETJOCTET(data[firstoffset+11]);
++ } else {
++ if (GETJOCTET(data[firstoffset+11]) != 0) return;
++ if (GETJOCTET(data[firstoffset+10]) != 0) return;
++ offset = GETJOCTET(data[firstoffset+9]);
++ offset <<= 8;
++ offset += GETJOCTET(data[firstoffset+8]);
++ }
++ if (offset > length - 2) return; /* check end of data segment */
++
++ /* Get the number of directory entries contained in this SubIFD */
++ if (is_motorola) {
++ number_of_tags = GETJOCTET(data[offset]);
++ number_of_tags <<= 8;
++ number_of_tags += GETJOCTET(data[offset+1]);
++ } else {
++ number_of_tags = GETJOCTET(data[offset+1]);
++ number_of_tags <<= 8;
++ number_of_tags += GETJOCTET(data[offset]);
+ }
+- MCU_rows = dstinfo->image_height / (max_v_samp_factor * DCTSIZE);
+- if (MCU_rows > 0) /* can't trim to 0 pixels */
+- dstinfo->image_height = MCU_rows * (max_v_samp_factor * DCTSIZE);
++ if (number_of_tags < 2) return;
++ offset += 2;
++
++ /* Search for ExifImageWidth and ExifImageHeight Tags in this SubIFD */
++ do {
++ if (offset > length - 12) return; /* check end of data segment */
++ /* Get Tag number */
++ if (is_motorola) {
++ tagnum = GETJOCTET(data[offset]);
++ tagnum <<= 8;
++ tagnum += GETJOCTET(data[offset+1]);
++ } else {
++ tagnum = GETJOCTET(data[offset+1]);
++ tagnum <<= 8;
++ tagnum += GETJOCTET(data[offset]);
++ }
++ if (tagnum == 0xA002 || tagnum == 0xA003) {
++ if (tagnum == 0xA002)
++ new_value = new_width; /* ExifImageWidth Tag */
++ else
++ new_value = new_height; /* ExifImageHeight Tag */
++ if (is_motorola) {
++ data[offset+2] = 0; /* Format = unsigned long (4 octets) */
++ data[offset+3] = 4;
++ data[offset+4] = 0; /* Number Of Components = 1 */
++ data[offset+5] = 0;
++ data[offset+6] = 0;
++ data[offset+7] = 1;
++ data[offset+8] = 0;
++ data[offset+9] = 0;
++ data[offset+10] = (JOCTET)((new_value >> 8) & 0xFF);
++ data[offset+11] = (JOCTET)(new_value & 0xFF);
++ } else {
++ data[offset+2] = 4; /* Format = unsigned long (4 octets) */
++ data[offset+3] = 0;
++ data[offset+4] = 1; /* Number Of Components = 1 */
++ data[offset+5] = 0;
++ data[offset+6] = 0;
++ data[offset+7] = 0;
++ data[offset+8] = (JOCTET)(new_value & 0xFF);
++ data[offset+9] = (JOCTET)((new_value >> 8) & 0xFF);
++ data[offset+10] = 0;
++ data[offset+11] = 0;
++ }
++ }
++ offset += 12;
++ } while (--number_of_tags);
+ }
++#endif
+
+
+ /* Adjust output image parameters as needed.
+@@ -736,18 +1348,22 @@ jtransform_adjust_parameters (j_decompre
+ {
+ /* If force-to-grayscale is requested, adjust destination parameters */
+ if (info->force_grayscale) {
+- /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed
+- * properly. Among other things, the target h_samp_factor & v_samp_factor
+- * will get set to 1, which typically won't match the source.
+- * In fact we do this even if the source is already grayscale; that
+- * provides an easy way of coercing a grayscale JPEG with funny sampling
+- * factors to the customary 1,1. (Some decoders fail on other factors.)
++ /* First, ensure we have YCbCr or grayscale data, and that the source's
++ * Y channel is full resolution. (No reasonable person would make Y
++ * be less than full resolution, so actually coping with that case
++ * isn't worth extra code space. But we check it to avoid crashing.)
+ */
+- if ((dstinfo->jpeg_color_space == JCS_YCbCr &&
+- dstinfo->num_components == 3) ||
+- (dstinfo->jpeg_color_space == JCS_GRAYSCALE &&
+- dstinfo->num_components == 1)) {
+- /* We have to preserve the source's quantization table number. */
++ if (((dstinfo->jpeg_color_space == JCS_YCbCr &&
++ dstinfo->num_components == 3) ||
++ (dstinfo->jpeg_color_space == JCS_GRAYSCALE &&
++ dstinfo->num_components == 1)) &&
++ srcinfo->comp_info[0].h_samp_factor == srcinfo->max_h_samp_factor &&
++ srcinfo->comp_info[0].v_samp_factor == srcinfo->max_v_samp_factor) {
++ /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed
++ * properly. Among other things, it sets the target h_samp_factor &
++ * v_samp_factor to 1, which typically won't match the source.
++ * We have to preserve the source's quantization table number, however.
++ */
+ int sv_quant_tbl_no = dstinfo->comp_info[0].quant_tbl_no;
+ jpeg_set_colorspace(dstinfo, JCS_GRAYSCALE);
+ dstinfo->comp_info[0].quant_tbl_no = sv_quant_tbl_no;
+@@ -755,50 +1371,66 @@ jtransform_adjust_parameters (j_decompre
+ /* Sorry, can't do it */
+ ERREXIT(dstinfo, JERR_CONVERSION_NOTIMPL);
+ }
++ } else if (info->num_components == 1) {
++ /* For a single-component source, we force the destination sampling factors
++ * to 1x1, with or without force_grayscale. This is useful because some
++ * decoders choke on grayscale images with other sampling factors.
++ */
++ dstinfo->comp_info[0].h_samp_factor = 1;
++ dstinfo->comp_info[0].v_samp_factor = 1;
+ }
+
+- /* Correct the destination's image dimensions etc if necessary */
++ /* Correct the destination's image dimensions as necessary
++ * for rotate/flip, resize, and crop operations.
++ */
++#if JPEG_LIB_VERSION >= 70
++ dstinfo->jpeg_width = info->output_width;
++ dstinfo->jpeg_height = info->output_height;
++#endif
++
++ /* Transpose destination image parameters */
+ switch (info->transform) {
+- case JXFORM_NONE:
+- /* Nothing to do */
+- break;
+- case JXFORM_FLIP_H:
+- if (info->trim)
+- trim_right_edge(dstinfo);
+- break;
+- case JXFORM_FLIP_V:
+- if (info->trim)
+- trim_bottom_edge(dstinfo);
+- break;
+ case JXFORM_TRANSPOSE:
+- transpose_critical_parameters(dstinfo);
+- /* transpose does NOT have to trim anything */
+- break;
+ case JXFORM_TRANSVERSE:
+- transpose_critical_parameters(dstinfo);
+- if (info->trim) {
+- trim_right_edge(dstinfo);
+- trim_bottom_edge(dstinfo);
+- }
+- break;
+ case JXFORM_ROT_90:
+- transpose_critical_parameters(dstinfo);
+- if (info->trim)
+- trim_right_edge(dstinfo);
+- break;
+- case JXFORM_ROT_180:
+- if (info->trim) {
+- trim_right_edge(dstinfo);
+- trim_bottom_edge(dstinfo);
+- }
+- break;
+ case JXFORM_ROT_270:
++#if JPEG_LIB_VERSION < 70
++ dstinfo->image_width = info->output_height;
++ dstinfo->image_height = info->output_width;
++#endif
+ transpose_critical_parameters(dstinfo);
+- if (info->trim)
+- trim_bottom_edge(dstinfo);
++ break;
++ default:
++#if JPEG_LIB_VERSION < 70
++ dstinfo->image_width = info->output_width;
++ dstinfo->image_height = info->output_height;
++#endif
+ break;
+ }
+
++ /* Adjust Exif properties */
++ if (srcinfo->marker_list != NULL &&
++ srcinfo->marker_list->marker == JPEG_APP0+1 &&
++ srcinfo->marker_list->data_length >= 6 &&
++ GETJOCTET(srcinfo->marker_list->data[0]) == 0x45 &&
++ GETJOCTET(srcinfo->marker_list->data[1]) == 0x78 &&
++ GETJOCTET(srcinfo->marker_list->data[2]) == 0x69 &&
++ GETJOCTET(srcinfo->marker_list->data[3]) == 0x66 &&
++ GETJOCTET(srcinfo->marker_list->data[4]) == 0 &&
++ GETJOCTET(srcinfo->marker_list->data[5]) == 0) {
++ /* Suppress output of JFIF marker */
++ dstinfo->write_JFIF_header = FALSE;
++#if JPEG_LIB_VERSION >= 70
++ /* Adjust Exif image parameters */
++ if (dstinfo->jpeg_width != srcinfo->image_width ||
++ dstinfo->jpeg_height != srcinfo->image_height)
++ /* Align data segment to start of TIFF structure for parsing */
++ adjust_exif_parameters(srcinfo->marker_list->data + 6,
++ srcinfo->marker_list->data_length - 6,
++ dstinfo->jpeg_width, dstinfo->jpeg_height);
++#endif
++ }
++
+ /* Return the appropriate output data set */
+ if (info->workspace_coef_arrays != NULL)
+ return info->workspace_coef_arrays;
+@@ -816,40 +1448,110 @@ jtransform_adjust_parameters (j_decompre
+ */
+
+ GLOBAL(void)
+-jtransform_execute_transformation (j_decompress_ptr srcinfo,
+- j_compress_ptr dstinfo,
+- jvirt_barray_ptr *src_coef_arrays,
+- jpeg_transform_info *info)
++jtransform_execute_transform (j_decompress_ptr srcinfo,
++ j_compress_ptr dstinfo,
++ jvirt_barray_ptr *src_coef_arrays,
++ jpeg_transform_info *info)
+ {
+ jvirt_barray_ptr *dst_coef_arrays = info->workspace_coef_arrays;
+
++ /* Note: conditions tested here should match those in switch statement
++ * in jtransform_request_workspace()
++ */
+ switch (info->transform) {
+ case JXFORM_NONE:
++ if (info->x_crop_offset != 0 || info->y_crop_offset != 0)
++ do_crop(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_FLIP_H:
+- do_flip_h(srcinfo, dstinfo, src_coef_arrays);
++ if (info->y_crop_offset != 0 || info->slow_hflip)
++ do_flip_h(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
++ else
++ do_flip_h_no_crop(srcinfo, dstinfo, info->x_crop_offset,
++ src_coef_arrays);
+ break;
+ case JXFORM_FLIP_V:
+- do_flip_v(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_flip_v(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_TRANSPOSE:
+- do_transpose(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_transpose(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_TRANSVERSE:
+- do_transverse(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_transverse(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_ROT_90:
+- do_rot_90(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_rot_90(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_ROT_180:
+- do_rot_180(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_rot_180(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ case JXFORM_ROT_270:
+- do_rot_270(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
++ do_rot_270(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
++ src_coef_arrays, dst_coef_arrays);
+ break;
+ }
+ }
+
++/* jtransform_perfect_transform
++ *
++ * Determine whether lossless transformation is perfectly
++ * possible for a specified image and transformation.
++ *
++ * Inputs:
++ * image_width, image_height: source image dimensions.
++ * MCU_width, MCU_height: pixel dimensions of MCU.
++ * transform: transformation identifier.
++ * Parameter sources from initialized jpeg_struct
++ * (after reading source header):
++ * image_width = cinfo.image_width
++ * image_height = cinfo.image_height
++ * MCU_width = cinfo.max_h_samp_factor * cinfo.block_size
++ * MCU_height = cinfo.max_v_samp_factor * cinfo.block_size
++ * Result:
++ * TRUE = perfect transformation possible
++ * FALSE = perfect transformation not possible
++ * (may use custom action then)
++ */
++
++GLOBAL(boolean)
++jtransform_perfect_transform(JDIMENSION image_width, JDIMENSION image_height,
++ int MCU_width, int MCU_height,
++ JXFORM_CODE transform)
++{
++ boolean result = TRUE; /* initialize TRUE */
++
++ switch (transform) {
++ case JXFORM_FLIP_H:
++ case JXFORM_ROT_270:
++ if (image_width % (JDIMENSION) MCU_width)
++ result = FALSE;
++ break;
++ case JXFORM_FLIP_V:
++ case JXFORM_ROT_90:
++ if (image_height % (JDIMENSION) MCU_height)
++ result = FALSE;
++ break;
++ case JXFORM_TRANSVERSE:
++ case JXFORM_ROT_180:
++ if (image_width % (JDIMENSION) MCU_width)
++ result = FALSE;
++ if (image_height % (JDIMENSION) MCU_height)
++ result = FALSE;
++ break;
++ default:
++ break;
++ }
++
++ return result;
++}
++
+ #endif /* TRANSFORMS_SUPPORTED */
+
+
+Index: fbida-2.10/jpeg/62/transupp.h
+===================================================================
+--- fbida-2.10.orig/jpeg/62/transupp.h
++++ fbida-2.10/jpeg/62/transupp.h
+@@ -1,7 +1,7 @@
+ /*
+ * transupp.h
+ *
+- * Copyright (C) 1997, Thomas G. Lane.
++ * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+@@ -22,32 +22,6 @@
+ #define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */
+ #endif
+
+-/* Short forms of external names for systems with brain-damaged linkers. */
+-
+-#ifdef NEED_SHORT_EXTERNAL_NAMES
+-#define jtransform_request_workspace jTrRequest
+-#define jtransform_adjust_parameters jTrAdjust
+-#define jtransform_execute_transformation jTrExec
+-#define jcopy_markers_setup jCMrkSetup
+-#define jcopy_markers_execute jCMrkExec
+-#endif /* NEED_SHORT_EXTERNAL_NAMES */
+-
+-
+-/*
+- * Codes for supported types of image transformations.
+- */
+-
+-typedef enum {
+- JXFORM_NONE, /* no transformation */
+- JXFORM_FLIP_H, /* horizontal flip */
+- JXFORM_FLIP_V, /* vertical flip */
+- JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */
+- JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */
+- JXFORM_ROT_90, /* 90-degree clockwise rotation */
+- JXFORM_ROT_180, /* 180-degree rotation */
+- JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */
+-} JXFORM_CODE;
+-
+ /*
+ * Although rotating and flipping data expressed as DCT coefficients is not
+ * hard, there is an asymmetry in the JPEG format specification for images
+@@ -75,6 +49,25 @@ typedef enum {
+ * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim
+ * followed by -rot 180 -trim trims both edges.)
+ *
++ * We also offer a lossless-crop option, which discards data outside a given
++ * image region but losslessly preserves what is inside. Like the rotate and
++ * flip transforms, lossless crop is restricted by the JPEG format: the upper
++ * left corner of the selected region must fall on an iMCU boundary. If this
++ * does not hold for the given crop parameters, we silently move the upper left
++ * corner up and/or left to make it so, simultaneously increasing the region
++ * dimensions to keep the lower right crop corner unchanged. (Thus, the
++ * output image covers at least the requested region, but may cover more.)
++ * The adjustment of the region dimensions may be optionally disabled.
++ *
++ * We also provide a lossless-resize option, which is kind of a lossless-crop
++ * operation in the DCT coefficient block domain - it discards higher-order
++ * coefficients and losslessly preserves lower-order coefficients of a
++ * sub-block.
++ *
++ * Rotate/flip transform, resize, and crop can be requested together in a
++ * single invocation. The crop is applied last --- that is, the crop region
++ * is specified in terms of the destination image after transform/resize.
++ *
+ * We also offer a "force to grayscale" option, which simply discards the
+ * chrominance channels of a YCbCr image. This is lossless in the sense that
+ * the luminance channel is preserved exactly. It's not the same kind of
+@@ -83,22 +76,100 @@ typedef enum {
+ * be aware of the option to know how many components to work on.
+ */
+
++
++/* Short forms of external names for systems with brain-damaged linkers. */
++
++#ifdef NEED_SHORT_EXTERNAL_NAMES
++#define jtransform_parse_crop_spec jTrParCrop
++#define jtransform_request_workspace jTrRequest
++#define jtransform_adjust_parameters jTrAdjust
++#define jtransform_execute_transform jTrExec
++#define jtransform_perfect_transform jTrPerfect
++#define jcopy_markers_setup jCMrkSetup
++#define jcopy_markers_execute jCMrkExec
++#endif /* NEED_SHORT_EXTERNAL_NAMES */
++
++
++/*
++ * Codes for supported types of image transformations.
++ */
++
++typedef enum {
++ JXFORM_NONE, /* no transformation */
++ JXFORM_FLIP_H, /* horizontal flip */
++ JXFORM_FLIP_V, /* vertical flip */
++ JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */
++ JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */
++ JXFORM_ROT_90, /* 90-degree clockwise rotation */
++ JXFORM_ROT_180, /* 180-degree rotation */
++ JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */
++} JXFORM_CODE;
++
++/*
++ * Codes for crop parameters, which can individually be unspecified,
++ * positive or negative for xoffset or yoffset,
++ * positive or forced for width or height.
++ */
++
++typedef enum {
++ JCROP_UNSET,
++ JCROP_POS,
++ JCROP_NEG,
++ JCROP_FORCE
++} JCROP_CODE;
++
++/*
++ * Transform parameters struct.
++ * NB: application must not change any elements of this struct after
++ * calling jtransform_request_workspace.
++ */
++
+ typedef struct {
+ /* Options: set by caller */
+ JXFORM_CODE transform; /* image transform operator */
++ boolean perfect; /* if TRUE, fail if partial MCUs are requested */
+ boolean trim; /* if TRUE, trim partial MCUs as needed */
+ boolean force_grayscale; /* if TRUE, convert color image to grayscale */
++ boolean crop; /* if TRUE, crop source image */
++ boolean slow_hflip; /* For best performance, the JXFORM_FLIP_H transform
++ normally modifies the source coefficients in place.
++ Setting this to TRUE will instead use a slower,
++ double-buffered algorithm, which leaves the source
++ coefficients in tact (necessary if other transformed
++ images must be generated from the same set of
++ coefficients. */
++
++ /* Crop parameters: application need not set these unless crop is TRUE.
++ * These can be filled in by jtransform_parse_crop_spec().
++ */
++ JDIMENSION crop_width; /* Width of selected region */
++ JCROP_CODE crop_width_set; /* (forced disables adjustment) */
++ JDIMENSION crop_height; /* Height of selected region */
++ JCROP_CODE crop_height_set; /* (forced disables adjustment) */
++ JDIMENSION crop_xoffset; /* X offset of selected region */
++ JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */
++ JDIMENSION crop_yoffset; /* Y offset of selected region */
++ JCROP_CODE crop_yoffset_set; /* (negative measures from bottom edge) */
+
+ /* Internal workspace: caller should not touch these */
+ int num_components; /* # of components in workspace */
+ jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */
++ JDIMENSION output_width; /* cropped destination dimensions */
++ JDIMENSION output_height;
++ JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */
++ JDIMENSION y_crop_offset;
++ int iMCU_sample_width; /* destination iMCU size */
++ int iMCU_sample_height;
+ } jpeg_transform_info;
+
+
+ #if TRANSFORMS_SUPPORTED
+
++/* Parse a crop specification (written in X11 geometry style) */
++EXTERN(boolean) jtransform_parse_crop_spec
++ JPP((jpeg_transform_info *info, const char *spec));
+ /* Request any required workspace */
+-EXTERN(void) jtransform_request_workspace
++EXTERN(boolean) jtransform_request_workspace
+ JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info));
+ /* Adjust output image parameters */
+ EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters
+@@ -106,10 +177,24 @@ EXTERN(jvirt_barray_ptr *) jtransform_ad
+ jvirt_barray_ptr *src_coef_arrays,
+ jpeg_transform_info *info));
+ /* Execute the actual transformation, if any */
+-EXTERN(void) jtransform_execute_transformation
++EXTERN(void) jtransform_execute_transform
+ JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
+ jvirt_barray_ptr *src_coef_arrays,
+ jpeg_transform_info *info));
++/* Determine whether lossless transformation is perfectly
++ * possible for a specified image and transformation.
++ */
++EXTERN(boolean) jtransform_perfect_transform
++ JPP((JDIMENSION image_width, JDIMENSION image_height,
++ int MCU_width, int MCU_height,
++ JXFORM_CODE transform));
++
++/* jtransform_execute_transform used to be called
++ * jtransform_execute_transformation, but some compilers complain about
++ * routine names that long. This macro is here to avoid breaking any
++ * old source code that uses the original name...
++ */
++#define jtransform_execute_transformation jtransform_execute_transform
+
+ #endif /* TRANSFORMS_SUPPORTED */
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/files/use-jpeg-turbo.patch b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/use-jpeg-turbo.patch
new file mode 100644
index 000000000..99639554c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/files/use-jpeg-turbo.patch
@@ -0,0 +1,13 @@
+Index: fbida-2.10/GNUmakefile
+===================================================================
+--- fbida-2.10.orig/GNUmakefile
++++ fbida-2.10/GNUmakefile
+@@ -51,7 +51,7 @@ HAVE_LIBSANE := $(call ac_lib,sane_init,
+ HAVE_LIBCURL := $(call ac_lib,curl_easy_init,curl)
+ HAVE_LIBLIRC := $(call ac_lib,lirc_init,lirc_client)
+ HAVE_MOTIF := $(call ac_lib,XmStringGenerate,Xm,-L/usr/X11R6/$(LIB) -lXpm -lXt -lXext -lX11)
+-JPEG_VER := $(call ac_jpeg_ver)
++JPEG_VER := 62
+ endef
+
+ # transposing
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20170731.bb b/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20170731.bb
new file mode 100644
index 000000000..481fedf98
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20170731.bb
@@ -0,0 +1,60 @@
+SUMMARY = "A font editor"
+HOMEPAGE = "http://fontforge.github.io/en-US/"
+LICENSE = "BSD-3-Clause & GPLv3"
+LIC_FILES_CHKSUM = " \
+ file://COPYING.gplv3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://LICENSE;md5=3f922b42ed0033fa0fd4cd3268f6429c \
+"
+
+DEPENDS = "glib-2.0 pango giflib tiff libxml2 jpeg python libtool uthash gnulib gettext-native"
+DEPENDS_append_class-target = " libxi"
+
+inherit autotools pkgconfig pythonnative distro_features_check gettext
+
+REQUIRED_DISTRO_FEATURES_append_class-target = " x11"
+
+SRC_URI = "git://github.com/${BPN}/${BPN}.git"
+# tag 20170731
+SRCREV = "b9149c13e8f9464fc21473f1f676b36a2130775d"
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF_append_class-native = " with_x=no"
+
+do_configure_prepend() {
+ # uthash sources are expected in uthash/src
+ currdir=`pwd`
+ cd ${S}
+
+ mkdir -p uthash/src
+ cp ${STAGING_INCDIR}/ut*.h uthash/src
+
+ # avoid bootstrap cloning gnulib on every configure
+ cat >.gitmodules <<EOF
+[submodule "gnulib"]
+ path = gnulib
+ url = git://git.sv.gnu.org/gnulib
+EOF
+ cp -rf ${STAGING_DATADIR}/gnulib ${S}
+
+ # --force to avoid errors on reconfigure e.g if recipes changed we depend on
+ # | bootstrap: running: libtoolize --quiet
+ # | libtoolize: error: 'libltdl/COPYING.LIB' exists: use '--force' to overwrite
+ # | ...
+ ./bootstrap --force
+
+ cd $currdir
+}
+
+PACKAGES =+ "${PN}-python-dbg ${PN}-python"
+
+FILES_${PN} += " \
+ ${datadir}/mime \
+ ${datadir}/icons \
+"
+
+FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR} ${datadir}/${PN}/python"
+FILES_${PN}-python-dbg = "${PYTHON_SITEPACKAGES_DIR}/.debug"
+RDEPENDS_${PN}-python = "python"
+
+# for e.g kde's oxygen-fonts
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb
new file mode 100644
index 000000000..d54fafc8d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "FreeGLUT is a free-software/open-source alternative to the OpenGL \
+ Utility Toolkit (GLUT) library"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=89c0b58a3e01ce3d8254c9f59e78adfb"
+
+SRC_URI = "https://sourceforge.net/projects/${BPN}/files/${BPN}/${PV}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "90c3ca4dd9d51cf32276bc5344ec9754"
+SRC_URI[sha256sum] = "2a43be8515b01ea82bcfa17d29ae0d40bd128342f0930cd1f375f1ff999f76a2"
+
+inherit cmake distro_features_check
+
+# depends on virtual/libx11, virtual/libgl
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+PROVIDES += "mesa-glut"
+
+DEPENDS = "virtual/libx11 libxmu libxi virtual/libgl libglu libxrandr"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0001-Fix-compilation-for-disabled-gnome.patch b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0001-Fix-compilation-for-disabled-gnome.patch
new file mode 100644
index 000000000..5a7647455
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0001-Fix-compilation-for-disabled-gnome.patch
@@ -0,0 +1,69 @@
+From 60c17eb49121bf2aa485acd30750b2fc6c8eb61f Mon Sep 17 00:00:00 2001
+From: Jarmo Jaakkola <jarmo.jaakkola@vincit.fi>
+Date: Mon, 19 Jun 2017 16:41:36 +0300
+Subject: [PATCH] Fix compilation for Helix.
+
+Gnome support, including GNOME_INIT_HOOK, has been removed, but it was
+still being called.
+
+COMPAT_OLD_KEYSYMDEF is a check for a legacy system, which our system
+most definitely is not. It is accomplished by trying to execute
+a program, which does not work when cross compiling.
+
+The fvwm(1) man page is created from Docbook XML which is set for
+a Windows code page that is not available when compiling. Easiest is
+to just not create the man page as those are not needed on the monitor.
+
+Upstream-Status: inappropriate [OE specific]
+Signed-off-by: Jarmo Jaakkola <jarmo.jaakkola@vincit.fi>
+Signed-off-by: Riku Hämäläinen <riku.hamalainen@ge.com>
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
+---
+ configure.ac | 20 ++++----------------
+ doc/fvwm/Makefile.am | 2 +-
+ 3 files changed, 7 insertions(+), 17 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 48ce264..fab7b44 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1413,23 +1413,7 @@ else
+ problem_gdkimlib=": Failed on gdk-imlib, see config.log"
+ fi
+
+-GNOME_INIT_HOOK
+-
+-# Unfortunately we have 2 gnome supports: WM hints and gnome libs.
+-# The $with_gnomehints below refers to the first, not GNOME_INIT_HOOK.
+-if test ! x"$enable_gnome_hints" = xno; then
+- with_gnomehints=yes
+- problem_gnomehints=""
+-else
+- with_gnomehints=no
+- problem_gnomehints=": Explicitly disabled"
+-fi
+-
+ # Define some compatibility macros needed for config.h.
+-mg_DEFINE_IF_NOT([#include <X11/keysym.h>],
+- [defined XK_Page_Up && defined XK_Page_Down],
+- [COMPAT_OLD_KEYSYMDEF], [$X_CFLAGS],
+- [Old AIX systems (3.2.5) don't define some common keysyms.])
+ AH_VERBATIM([_COMPAT_OLD_KEYSYMDEF],
+ [#ifdef COMPAT_OLD_KEYSYMDEF
+ # define XK_Page_Up XK_Prior
+diff --git a/doc/fvwm/Makefile.am b/doc/fvwm/Makefile.am
+index cddb102..ff00149 100755
+--- a/doc/fvwm/Makefile.am
++++ b/doc/fvwm/Makefile.am
+@@ -10,7 +10,7 @@ XSL_PROFILE = $(srcdir)/../docbook-xsl/profiling/profile.xsl
+ HTML_FILES = fvwm.man.html
+ XML_FILES = @DOC_SECTIONS_XML_PATH@
+ EXTRA_DIST = @DOC_SECTIONS_XML@ $(man_MANS) sections
+-man_MANS = fvwm.1
++man_MANS =
+
+ if FVWM_BUILD_HTMLDOC
+ doc_DATA = $(HTML_FILES)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0002-Avoid-absolute-symlinks.patch b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0002-Avoid-absolute-symlinks.patch
new file mode 100644
index 000000000..756cc86e8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm/0002-Avoid-absolute-symlinks.patch
@@ -0,0 +1,27 @@
+From: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
+Date: Tue, 29 Auf 2017 16:08:42 +0200
+Subject: [PATCH] Avoid absolute symlinks
+
+Avoid usage of absolute symlinks, which breaks yocto builds
+since pyro.
+
+Upstream-Status: Pending
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
+
+diff --git a/default-config/Makefile.am b/default-config/Makefile.am
+index 5e16d095a137..5404145a742c 100644
+--- a/default-config/Makefile.am
++++ b/default-config/Makefile.am
+@@ -17,9 +17,9 @@ EXTRA_DIST = images \
+
+ install-data-hook:
+ cp -r $(srcdir)/images $(inst_location)
+- ln -sf $(inst_location)/FvwmScript-DateTime $(inst_location)/..
+- ln -sf $(inst_location)/FvwmScript-ConfirmQuit $(inst_location)/..
+- ln -sf $(inst_location)/FvwmScript-ConfirmCopyConfig $(inst_location)/..
++ ln -sf default-config/FvwmScript-DateTime $(inst_location)/..
++ ln -sf default-config/FvwmScript-ConfirmQuit $(inst_location)/..
++ ln -sf default-config/FvwmScript-ConfirmCopyConfig $(inst_location)/..
+
+ uninstall-hook:
+ rm -fr $(DESTDIR)/$(configdir)
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.7.bb b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.7.bb
new file mode 100644
index 000000000..cb851bfd9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.7.bb
@@ -0,0 +1,114 @@
+SUMMARY = "F Virtual Window Manager "
+HOMEPAGE = "http://www.fvwm.org/"
+SECTION = "x11/wm"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=363fbcfb59124689af72c914560eaf6e"
+
+DEPENDS = " \
+ bison-native \
+ flex-native \
+ freetype-native \
+ gettext-native \
+ libxslt-native \
+ fontconfig \
+ libice \
+ libpng \
+ librsvg \
+ libsm \
+ libxau \
+ libxcb \
+ libxcursor \
+ libxdmcp \
+ libxext \
+ libxfixes \
+ libxft \
+ libxinerama \
+ libxml2 \
+ libxrender \
+ libxt \
+ virtual/libx11 \
+ xrandr \
+ zlib \
+"
+
+PV = "2.6.7+git${SRCPV}"
+
+SRC_URI = " \
+ git://github.com/fvwmorg/fvwm.git;protocol=https \
+ file://0001-Fix-compilation-for-disabled-gnome.patch \
+ file://0002-Avoid-absolute-symlinks.patch \
+"
+
+SRCREV = "597a4e296da4f21e71a17facab297e016a3a80a8"
+
+S = "${WORKDIR}/git"
+
+inherit autotools gettext update-alternatives pkgconfig pythonnative perlnative distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+ALTERNATIVE_${PN} = "x-window-manager"
+ALTERNATIVE_TARGET[x-window-manager] = "${bindir}/fvwm"
+ALTERNATIVE_PRIORITY[x-window-manager] = "20"
+
+EXTRA_OECONF = " \
+ --disable-bidi \
+ --disable-fontconfigtest \
+ --disable-freetypetest \
+ --disable-htmldoc \
+ --disable-imlibtest \
+ --disable-mandoc \
+ --disable-nls \
+ --disable-perllib \
+ --disable-rsvg \
+ --disable-shape \
+ --disable-sm \
+ --disable-xfttest \
+ --with-imlib-exec-prefix=/nonexistent \
+ --with-imlib-prefix=/nonexistent \
+ --without-ncurses-library \
+ --without-readline-library \
+ --without-rplay-library \
+ --without-stroke-library \
+ --without-termcap-library \
+ --without-xpm-library \
+ ac_cv_func_mkstemp=no \
+ has_safety_mkstemp=yes \
+"
+
+# show the exact commands in the log file
+EXTRA_OEMAKE = " \
+ V=1 \
+"
+
+do_install_append() {
+ install -d -m 0755 ${D}/${sysconfdir}/xdg/fvwm
+ # You can install the config file here
+
+ install -d -m 0755 ${D}/${datadir}/fvwm
+ touch ${D}/${datadir}/fvwm/ConfigFvwmDefaults
+}
+
+# the only needed packages (note: locale packages are automatically generated
+# as well)
+PACKAGES = " \
+ ${PN} \
+ ${PN}-dbg \
+"
+
+# minimal set of binaries
+FILES_${PN} = " \
+ ${bindir}/fvwm \
+ ${bindir}/fvwm-root \
+ ${datadir}/fvwm/ConfigFvwmDefaults \
+"
+
+RDEPENDS_${PN} = " \
+ xuser-account \
+"
+
+# by default a lot of stuff is installed and it's not easy to control what to
+# install, so install everything, but skip the check
+INSANE_SKIP_${PN} = " \
+ installed-vs-shipped \
+"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch
new file mode 100644
index 000000000..d145b625f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch
@@ -0,0 +1,21 @@
+Index: gegl-0.2.0/configure.ac
+===================================================================
+--- gegl-0.2.0.orig/configure.ac 2012-04-02 21:56:49.000000000 +0000
++++ gegl-0.2.0/configure.ac 2014-07-17 21:34:15.312546602 +0000
+@@ -765,15 +765,7 @@
+
+ have_sdl="no"
+ if test "x$with_sdl" != "xno"; then
+- AC_PATH_PROG(SDL_CONFIG, sdl-config, no)
+- if test "$SDL_CONFIG" = "no"; then
+- have_sdl="no (SDL library not found)"
+- AC_MSG_RESULT([*** Check for SDL library failed.])
+- else
+- have_sdl="yes"
+- SDL_CFLAGS=`$SDL_CONFIG --cflags`
+- SDL_LIBS=`$SDL_CONFIG --libs`
+- fi
++ PKG_CHECK_MODULES([SDL], [sdl], [have_sdl="yes"], [have_sdl="no (SDL library not found)"])
+ fi
+
+ AM_CONDITIONAL(HAVE_SDL, test "$have_sdl" = "yes")
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb
new file mode 100644
index 000000000..0053c0c68
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb
@@ -0,0 +1,34 @@
+SUMMARY = "GEGL (Generic Graphics Library) is a graph based image processing framework"
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+DEPENDS = "babl librsvg glib-2.0 gtk+ pango cairo expat zlib libpng jpeg virtual/libsdl json-glib intltool-native"
+
+EXTRA_OECONF = "--disable-docs"
+
+inherit distro_features_check gnomebase vala gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[jasper] = "--with-jasper,--without-jasper,jasper"
+PACKAGECONFIG[avformat] = "--with-libavformat,--without-libavformat,libav"
+PACKAGECONFIG[lcms] = "--with-lcms,--without-lcms,lcms"
+PACKAGECONFIG[tiff] = "--with-libtiff,--without-libtiff,tiff"
+PACKAGECONFIG[webp] = "--with-webp,--without-webp,webp"
+
+SRC_URI = "http://ftp.gimp.org/pub/${BPN}/0.3/${BP}.tar.bz2 \
+ file://pkgconfig.patch "
+SRC_URI[md5sum] = "6e5c6f229261478dc436a38c84405b2a"
+SRC_URI[sha256sum] = "d7858ef26ede136d14e3de188a9e9c0de7707061a9fb96d7d615fab4958491fb"
+
+LDFLAGS += "-lm"
+
+# There are a couple of non-symlink .so files installed into libdir, which need to go into main package
+FILES_${PN}_append = " ${libdir}/gegl-0.3/*.so ${libdir}/gegl-0.3/*.json ${libdir}/libgegl-npd-0.3.so ${libdir}/libgegl-sc-0.3.so"
+FILES_${PN}-dev_append = " ${libdir}/gegl-0.3/*.la ${libdir}/libgegl-0.3.so"
+FILES_${PN}-dev_remove = "${libdir}/lib*.so"
+
+# Fails to build with thumb-1 (qemuarm)
+# gegl-0.2.0/operations/common/matting-global.c: In function 'matting_process':
+# gegl-0.2.0/operations/common/matting-global.c:463:1: internal compiler error: in patch_jump_insn, at cfgrtl.c:1275
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch
new file mode 100644
index 000000000..fecd0121c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch
@@ -0,0 +1,38 @@
+From 72ad76841d87e857428693d812a961935284ac62 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Thu, 12 Feb 2015 15:57:47 +0100
+Subject: [PATCH] configure-ac: do not check for freetype-config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+freetype-config is not allowed in our environment - see also binconfig-disabled
+
+Upstream-Status: inappropriate [OE specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 26812b6..abec714 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -647,13 +647,6 @@ if test "x$fontconfig_ok" = xno; then
+ fi
+
+
+-AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
+-if test "x$FREETYPE_CONFIG" != "xno" ; then
+- AC_MSG_CHECKING([for freetype libraries])
+- FREETYPE_LIBS=`$FREETYPE_CONFIG --libs`
+- AC_MSG_RESULT($FREETYPE_LIBS)
+-fi
+-AC_SUBST(FREETYPE_LIBS)
+
+
+ ##########################################
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch
new file mode 100644
index 000000000..7da78e205
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch
@@ -0,0 +1,34 @@
+From e1c8f4b8323e3965271a93529eab5774c1a7083c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Jun 2017 10:32:14 -0700
+Subject: [PATCH 3/3] Fix use of gegl API
+
+newer version of gegl does not define GEGL_IS_PARAM_SPEC_MULTILINE
+
+| core/libappcore.a(gimpparamspecs-duplicate.o): In function `gimp_param_spec_duplicate':
+| /usr/src/debug/gimp/2.8.22-r0/gimp-2.8.22/app/core/../../../../../../../../../workspace/sources/gimp/app/core/gimpparamspecs-duplicate.c:70: undefined reference to `GEGL_IS_PARAM_SPEC_MULTILINE'
+| collect2: error: ld returned 1 exit status
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ app/core/gimpparamspecs-duplicate.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/app/core/gimpparamspecs-duplicate.c b/app/core/gimpparamspecs-duplicate.c
+index c0b7426..2efaf23 100644
+--- a/app/core/gimpparamspecs-duplicate.c
++++ b/app/core/gimpparamspecs-duplicate.c
+@@ -67,7 +67,7 @@ gimp_param_spec_duplicate (GParamSpec *pspec)
+ spec->default_value,
+ pspec->flags);
+
+- if (GEGL_IS_PARAM_SPEC_MULTILINE (pspec))
++ if (gegl_param_spec_get_property_key(pspec, "multiline"))
+ {
+ g_param_spec_set_qdata (new, multiline_quark,
+ GINT_TO_POINTER (TRUE));
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch
new file mode 100644
index 000000000..b71bf329e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch
@@ -0,0 +1,53 @@
+Bump acceptable versions of babl and gegl.
+
+Patch is taken from debian:
+https://packages.debian.org/stretch/gimp
+
+Upstream-Status: Inappropriate [OE specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+diff --git a/app/sanity.c b/app/sanity.c
+index febddfb..85fea55 100644
+--- a/app/sanity.c
++++ b/app/sanity.c
+@@ -351,7 +351,7 @@ sanity_check_babl (void)
+
+ #define BABL_REQUIRED_MAJOR 0
+ #define BABL_REQUIRED_MINOR 1
+-#define BABL_REQUIRED_MICRO 10
++#define BABL_REQUIRED_MICRO 12
+
+ babl_get_version (&babl_major_version,
+ &babl_minor_version,
+@@ -388,7 +388,7 @@ sanity_check_gegl (void)
+ gint gegl_micro_version;
+
+ #define GEGL_REQUIRED_MAJOR 0
+-#define GEGL_REQUIRED_MINOR 2
++#define GEGL_REQUIRED_MINOR 3
+ #define GEGL_REQUIRED_MICRO 0
+
+ gegl_get_version (&gegl_major_version,
+diff --git a/configure.ac b/configure.ac
+index 26812b6..4252fe9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -40,8 +40,8 @@ m4_define([gimp_stable],
+ m4_define([gimp_full_name], [GNU Image Manipulation Program])
+
+ # required versions of other packages
+-m4_define([babl_required_version], [0.1.10])
+-m4_define([gegl_required_version], [0.2.0])
++m4_define([babl_required_version], [0.1.12])
++m4_define([gegl_required_version], [0.3.0])
+ m4_define([glib_required_version], [2.30.2])
+ m4_define([atk_required_version], [2.2.0])
+ m4_define([gtk_required_version], [2.24.10])
+@@ -519,7 +519,7 @@ AC_SUBST(ISO_CODES_LOCALEDIR)
+ ###############################
+
+ PKG_CHECK_MODULES(BABL, babl >= babl_required_version)
+-PKG_CHECK_MODULES(GEGL, gegl-0.2 >= gegl_required_version)
++PKG_CHECK_MODULES(GEGL, gegl-0.3 >= gegl_required_version)
+ PKG_CHECK_MODULES(ATK, atk >= atk_required_version)
+
+ AM_PATH_GLIB_2_0(glib_required_version, :,
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb
new file mode 100644
index 000000000..943986e77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb
@@ -0,0 +1,51 @@
+SUMMARY = "The GIMP is the GNU Image Manipulation Program"
+HOMEPAGE = "http://www.gimp.org"
+SECTION = "x11/graphics"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = " \
+ gdk-pixbuf-native \
+ intltool-native \
+ libxslt-native \
+ gtk+ \
+ babl \
+ gegl \
+ jpeg \
+ libpng \
+ libexif \
+ tiff \
+ lcms \
+ poppler \
+ jasper \
+ bzip2 \
+ libgudev \
+ libmng \
+"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxmu libxpm', '', d)}"
+
+inherit distro_features_check gnome gtk-doc
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://ftp.gimp.org/pub/gimp/v2.8/gimp-${PV}.tar.bz2 \
+ file://0001-configure-ac-do-not-check-for-freetype-config.patch \
+ file://bump_Babl-GEGL_versions.patch \
+ file://0003-Fix-use-of-gegl-API.patch \
+ "
+SRC_URI[md5sum] = "7e4fd7a53b1d3c32dff642ab1a94b44d"
+SRC_URI[sha256sum] = "9187a35cc52b110d78124d7b27b68a68ade14a794c2721314bac6134d2a5638a"
+
+EXTRA_OECONF = "--disable-python \
+ --without-webkit \
+ --without-wmf"
+
+do_configure_append() {
+ find ${B} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+ find ${B} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
+}
+
+CFLAGS += "-fPIC"
+
+FILES_${PN}-dbg += "${libdir}/gimp/2.0/*/.debug"
+FILES_${PN} += "${datadir}/appdata"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/files/0001-Make-GLM_ENABLE_EXPERIMENTAL-a-configurable-option.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/files/0001-Make-GLM_ENABLE_EXPERIMENTAL-a-configurable-option.patch
new file mode 100644
index 000000000..d69c5af3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/files/0001-Make-GLM_ENABLE_EXPERIMENTAL-a-configurable-option.patch
@@ -0,0 +1,860 @@
+From 99a9676a0193f6291d7202d7af72e24580abe565 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 16 Mar 2018 13:55:29 +0100
+Subject: [PATCH 1/2] Make GLM_ENABLE_EXPERIMENTAL a configurable option
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It seems that erroring out if GLM_ENABLE_EXPERIMENTAL is not set turns into
+packagers nightmare: There are packages around expecting glx headers. E.g
+libgltf [1] fails during configure checking for usable headers AND during
+compile. Paticularly fixing configure for those packages is time-consuming:
+The only way (correct me if I am wrong) is creating a patch adding
+
+AC_DEFINE([GLM_ENABLE_EXPERIMENTAL], [1], [glm needs this for gtx headers])
+
+By adding a configure option 'GLM_ENABLE_EXPERIMENTAL', the decision to use
+glm/glx is done at one (and the right) place.
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
+[1] https://gerrit.libreoffice.org/gitweb?p=libgltf.git
+
+Uptream-Status: Submitted [2]
+
+[2] https://github.com/g-truc/glm/pull/741
+---
+ CMakeLists.txt | 6 ++++++
+ glm/CMakeLists.txt | 2 ++
+ glm/experimental.hpp.in | 1 +
+ glm/ext.hpp | 1 +
+ glm/gtx/associated_min_max.hpp | 1 +
+ glm/gtx/bit.hpp | 1 +
+ glm/gtx/closest_point.hpp | 1 +
+ glm/gtx/color_space.hpp | 1 +
+ glm/gtx/color_space_YCoCg.hpp | 1 +
+ glm/gtx/common.hpp | 1 +
+ glm/gtx/compatibility.hpp | 1 +
+ glm/gtx/component_wise.hpp | 1 +
+ glm/gtx/dual_quaternion.hpp | 1 +
+ glm/gtx/euler_angles.hpp | 1 +
+ glm/gtx/extend.hpp | 1 +
+ glm/gtx/extended_min_max.hpp | 1 +
+ glm/gtx/fast_exponential.hpp | 1 +
+ glm/gtx/fast_square_root.hpp | 1 +
+ glm/gtx/fast_trigonometry.hpp | 1 +
+ glm/gtx/gradient_paint.hpp | 1 +
+ glm/gtx/handed_coordinate_space.hpp | 1 +
+ glm/gtx/hash.hpp | 1 +
+ glm/gtx/integer.hpp | 1 +
+ glm/gtx/intersect.hpp | 1 +
+ glm/gtx/io.hpp | 1 +
+ glm/gtx/log_base.hpp | 1 +
+ glm/gtx/matrix_cross_product.hpp | 1 +
+ glm/gtx/matrix_decompose.hpp | 1 +
+ glm/gtx/matrix_factorisation.hpp | 1 +
+ glm/gtx/matrix_interpolation.hpp | 1 +
+ glm/gtx/matrix_major_storage.hpp | 1 +
+ glm/gtx/matrix_operation.hpp | 1 +
+ glm/gtx/matrix_query.hpp | 1 +
+ glm/gtx/matrix_transform_2d.hpp | 1 +
+ glm/gtx/mixed_product.hpp | 1 +
+ glm/gtx/norm.hpp | 1 +
+ glm/gtx/normal.hpp | 1 +
+ glm/gtx/normalize_dot.hpp | 1 +
+ glm/gtx/number_precision.hpp | 1 +
+ glm/gtx/optimum_pow.hpp | 1 +
+ glm/gtx/orthonormalize.hpp | 1 +
+ glm/gtx/perpendicular.hpp | 1 +
+ glm/gtx/polar_coordinates.hpp | 1 +
+ glm/gtx/projection.hpp | 1 +
+ glm/gtx/quaternion.hpp | 1 +
+ glm/gtx/range.hpp | 1 +
+ glm/gtx/raw_data.hpp | 1 +
+ glm/gtx/rotate_normalized_axis.hpp | 1 +
+ glm/gtx/rotate_vector.hpp | 1 +
+ glm/gtx/scalar_multiplication.hpp | 1 +
+ glm/gtx/scalar_relational.hpp | 1 +
+ glm/gtx/spline.hpp | 1 +
+ glm/gtx/std_based_type.hpp | 1 +
+ glm/gtx/string_cast.hpp | 1 +
+ glm/gtx/texture.hpp | 1 +
+ glm/gtx/transform.hpp | 1 +
+ glm/gtx/transform2.hpp | 1 +
+ glm/gtx/type_aligned.hpp | 1 +
+ glm/gtx/type_trait.hpp | 1 +
+ glm/gtx/vec_swizzle.hpp | 1 +
+ glm/gtx/vector_angle.hpp | 1 +
+ glm/gtx/vector_query.hpp | 1 +
+ glm/gtx/wrap.hpp | 1 +
+ 63 files changed, 69 insertions(+)
+ create mode 100644 glm/experimental.hpp.in
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e5159b0f..bd4dd654 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -82,6 +82,11 @@ option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
+ option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
+ option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
+
++option(GLM_ENABLE_EXPERIMENTAL "Enable experimental GLM_GTX" OFF)
++configure_file(glm/experimental.hpp.in experimental.hpp @ONLY)
++include_directories(${CMAKE_BINARY_DIR}/glm)
++include_directories(${CMAKE_BINARY_DIR})
++
+ if(GLM_TEST_FORCE_PURE)
+ add_definitions(-DGLM_FORCE_PURE)
+
+@@ -167,6 +172,7 @@ option(GLM_INSTALL_ENABLE "GLM install" ON)
+ set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
+ if (GLM_INSTALL_ENABLE)
+ install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/experimental.hpp" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glm)
+ endif()
+
+ write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
+diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt
+index df9c9ee5..dc5db4bc 100644
+--- a/glm/CMakeLists.txt
++++ b/glm/CMakeLists.txt
+@@ -43,6 +43,8 @@ source_group("SIMD Files" FILES ${SIMD_INLINE})
+ source_group("SIMD Files" FILES ${SIMD_HEADER})
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
++# make out-of tree builds find experimental.hpp
++include_directories(${CMAKE_BINARY_DIR}/glm)
+
+ if(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
+ if(GLM_STATIC_LIBRARY_ENABLE)
+diff --git a/glm/experimental.hpp.in b/glm/experimental.hpp.in
+new file mode 100644
+index 00000000..bfab5138
+--- /dev/null
++++ b/glm/experimental.hpp.in
+@@ -0,0 +1 @@
++#cmakedefine GLM_ENABLE_EXPERIMENTAL
+diff --git a/glm/ext.hpp b/glm/ext.hpp
+index d085bfd5..a2948447 100644
+--- a/glm/ext.hpp
++++ b/glm/ext.hpp
+@@ -39,6 +39,7 @@
+ # include "./gtc/type_aligned.hpp"
+ #endif
+
++#include "experimental.hpp"
+ #ifdef GLM_ENABLE_EXPERIMENTAL
+ #include "./gtx/associated_min_max.hpp"
+ #include "./gtx/bit.hpp"
+diff --git a/glm/gtx/associated_min_max.hpp b/glm/gtx/associated_min_max.hpp
+index 0c9935f3..d00c2bc4 100644
+--- a/glm/gtx/associated_min_max.hpp
++++ b/glm/gtx/associated_min_max.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/bit.hpp b/glm/gtx/bit.hpp
+index 1447fa00..31957083 100644
+--- a/glm/gtx/bit.hpp
++++ b/glm/gtx/bit.hpp
+@@ -15,6 +15,7 @@
+ // Dependencies
+ #include "../gtc/bitfield.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/closest_point.hpp b/glm/gtx/closest_point.hpp
+index 6859bb96..ebd9fe5a 100644
+--- a/glm/gtx/closest_point.hpp
++++ b/glm/gtx/closest_point.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/color_space.hpp b/glm/gtx/color_space.hpp
+index d1e655c3..51416819 100644
+--- a/glm/gtx/color_space.hpp
++++ b/glm/gtx/color_space.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/color_space_YCoCg.hpp b/glm/gtx/color_space_YCoCg.hpp
+index e82cbd8b..7ae71041 100644
+--- a/glm/gtx/color_space_YCoCg.hpp
++++ b/glm/gtx/color_space_YCoCg.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/common.hpp b/glm/gtx/common.hpp
+index 8081bff7..57a68a8d 100644
+--- a/glm/gtx/common.hpp
++++ b/glm/gtx/common.hpp
+@@ -18,6 +18,7 @@
+ #include "../vec4.hpp"
+ #include "../gtc/vec1.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/compatibility.hpp b/glm/gtx/compatibility.hpp
+index e5b60399..9876669c 100644
+--- a/glm/gtx/compatibility.hpp
++++ b/glm/gtx/compatibility.hpp
+@@ -16,6 +16,7 @@
+ #include "../glm.hpp"
+ #include "../gtc/quaternion.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/component_wise.hpp b/glm/gtx/component_wise.hpp
+index 39bab5d5..4fe0e4e2 100644
+--- a/glm/gtx/component_wise.hpp
++++ b/glm/gtx/component_wise.hpp
+@@ -18,6 +18,7 @@
+ #include "../detail/setup.hpp"
+ #include "../detail/qualifier.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp
+index c4343e9d..d59fb459 100644
+--- a/glm/gtx/dual_quaternion.hpp
++++ b/glm/gtx/dual_quaternion.hpp
+@@ -20,6 +20,7 @@
+ #include "../gtc/constants.hpp"
+ #include "../gtc/quaternion.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/euler_angles.hpp b/glm/gtx/euler_angles.hpp
+index e66e9281..ad5988c1 100644
+--- a/glm/gtx/euler_angles.hpp
++++ b/glm/gtx/euler_angles.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/extend.hpp b/glm/gtx/extend.hpp
+index eda4e470..cde6db63 100644
+--- a/glm/gtx/extend.hpp
++++ b/glm/gtx/extend.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/extended_min_max.hpp b/glm/gtx/extended_min_max.hpp
+index 3e767b0c..0bcffcc6 100644
+--- a/glm/gtx/extended_min_max.hpp
++++ b/glm/gtx/extended_min_max.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/fast_exponential.hpp b/glm/gtx/fast_exponential.hpp
+index 2d4918e7..e6d11f0a 100644
+--- a/glm/gtx/fast_exponential.hpp
++++ b/glm/gtx/fast_exponential.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/fast_square_root.hpp b/glm/gtx/fast_square_root.hpp
+index 1e1ec3cf..f758aeef 100644
+--- a/glm/gtx/fast_square_root.hpp
++++ b/glm/gtx/fast_square_root.hpp
+@@ -19,6 +19,7 @@
+ #include "../exponential.hpp"
+ #include "../geometric.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/fast_trigonometry.hpp b/glm/gtx/fast_trigonometry.hpp
+index 739065fb..f1332958 100644
+--- a/glm/gtx/fast_trigonometry.hpp
++++ b/glm/gtx/fast_trigonometry.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../gtc/constants.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/gradient_paint.hpp b/glm/gtx/gradient_paint.hpp
+index 2713cec0..d4703991 100644
+--- a/glm/gtx/gradient_paint.hpp
++++ b/glm/gtx/gradient_paint.hpp
+@@ -17,6 +17,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/optimum_pow.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/handed_coordinate_space.hpp b/glm/gtx/handed_coordinate_space.hpp
+index 1d0d4104..3a52ddcf 100644
+--- a/glm/gtx/handed_coordinate_space.hpp
++++ b/glm/gtx/handed_coordinate_space.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/hash.hpp b/glm/gtx/hash.hpp
+index fe8a3efd..92bfc9b2 100644
+--- a/glm/gtx/hash.hpp
++++ b/glm/gtx/hash.hpp
+@@ -12,6 +12,7 @@
+
+ #pragma once
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/integer.hpp b/glm/gtx/integer.hpp
+index 96637a13..5d1a16c6 100644
+--- a/glm/gtx/integer.hpp
++++ b/glm/gtx/integer.hpp
+@@ -16,6 +16,7 @@
+ #include "../glm.hpp"
+ #include "../gtc/integer.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/intersect.hpp b/glm/gtx/intersect.hpp
+index 61e2226a..4895ba93 100644
+--- a/glm/gtx/intersect.hpp
++++ b/glm/gtx/intersect.hpp
+@@ -21,6 +21,7 @@
+ #include "../gtx/closest_point.hpp"
+ #include "../gtx/vector_query.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/io.hpp b/glm/gtx/io.hpp
+index 49a1ec11..ae39cd60 100644
+--- a/glm/gtx/io.hpp
++++ b/glm/gtx/io.hpp
+@@ -23,6 +23,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/quaternion.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/log_base.hpp b/glm/gtx/log_base.hpp
+index e873e356..45b8d53c 100644
+--- a/glm/gtx/log_base.hpp
++++ b/glm/gtx/log_base.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_cross_product.hpp b/glm/gtx/matrix_cross_product.hpp
+index 967743b8..52d6c173 100644
+--- a/glm/gtx/matrix_cross_product.hpp
++++ b/glm/gtx/matrix_cross_product.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_decompose.hpp b/glm/gtx/matrix_decompose.hpp
+index b7ec0e83..6793fee2 100644
+--- a/glm/gtx/matrix_decompose.hpp
++++ b/glm/gtx/matrix_decompose.hpp
+@@ -20,6 +20,7 @@
+ #include "../gtc/quaternion.hpp"
+ #include "../gtc/matrix_transform.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_factorisation.hpp b/glm/gtx/matrix_factorisation.hpp
+index e30a7746..79c293be 100644
+--- a/glm/gtx/matrix_factorisation.hpp
++++ b/glm/gtx/matrix_factorisation.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_interpolation.hpp b/glm/gtx/matrix_interpolation.hpp
+index 89c4596c..799983bb 100644
+--- a/glm/gtx/matrix_interpolation.hpp
++++ b/glm/gtx/matrix_interpolation.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_major_storage.hpp b/glm/gtx/matrix_major_storage.hpp
+index 7f264a59..e68467cd 100644
+--- a/glm/gtx/matrix_major_storage.hpp
++++ b/glm/gtx/matrix_major_storage.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_operation.hpp b/glm/gtx/matrix_operation.hpp
+index bce938bb..1e85bb5e 100644
+--- a/glm/gtx/matrix_operation.hpp
++++ b/glm/gtx/matrix_operation.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_query.hpp b/glm/gtx/matrix_query.hpp
+index 5df5f52f..eec1eec0 100644
+--- a/glm/gtx/matrix_query.hpp
++++ b/glm/gtx/matrix_query.hpp
+@@ -18,6 +18,7 @@
+ #include "../gtx/vector_query.hpp"
+ #include <limits>
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/matrix_transform_2d.hpp b/glm/gtx/matrix_transform_2d.hpp
+index 239ab9f4..3ca8d2f2 100644
+--- a/glm/gtx/matrix_transform_2d.hpp
++++ b/glm/gtx/matrix_transform_2d.hpp
+@@ -17,6 +17,7 @@
+ #include "../mat3x3.hpp"
+ #include "../vec2.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/mixed_product.hpp b/glm/gtx/mixed_product.hpp
+index 58562aab..5c7460d5 100644
+--- a/glm/gtx/mixed_product.hpp
++++ b/glm/gtx/mixed_product.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/norm.hpp b/glm/gtx/norm.hpp
+index 46474e07..3cf2c3ea 100644
+--- a/glm/gtx/norm.hpp
++++ b/glm/gtx/norm.hpp
+@@ -17,6 +17,7 @@
+ #include "../geometric.hpp"
+ #include "../gtx/quaternion.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/normal.hpp b/glm/gtx/normal.hpp
+index 15cec9c2..7bb4c096 100644
+--- a/glm/gtx/normal.hpp
++++ b/glm/gtx/normal.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/normalize_dot.hpp b/glm/gtx/normalize_dot.hpp
+index 86048e70..c6604da4 100644
+--- a/glm/gtx/normalize_dot.hpp
++++ b/glm/gtx/normalize_dot.hpp
+@@ -16,6 +16,7 @@
+ // Dependency:
+ #include "../gtx/fast_square_root.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/number_precision.hpp b/glm/gtx/number_precision.hpp
+index 3732a56c..b48845f7 100644
+--- a/glm/gtx/number_precision.hpp
++++ b/glm/gtx/number_precision.hpp
+@@ -18,6 +18,7 @@
+ #include "../glm.hpp"
+ #include "../gtc/type_precision.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/optimum_pow.hpp b/glm/gtx/optimum_pow.hpp
+index eb09f1c3..94a6bbb2 100644
+--- a/glm/gtx/optimum_pow.hpp
++++ b/glm/gtx/optimum_pow.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/orthonormalize.hpp b/glm/gtx/orthonormalize.hpp
+index 2a684ee4..4ff47e53 100644
+--- a/glm/gtx/orthonormalize.hpp
++++ b/glm/gtx/orthonormalize.hpp
+@@ -18,6 +18,7 @@
+ #include "../mat3x3.hpp"
+ #include "../geometric.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/perpendicular.hpp b/glm/gtx/perpendicular.hpp
+index 35601ac7..17251ebe 100644
+--- a/glm/gtx/perpendicular.hpp
++++ b/glm/gtx/perpendicular.hpp
+@@ -17,6 +17,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/projection.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/polar_coordinates.hpp b/glm/gtx/polar_coordinates.hpp
+index b8421db4..5125215d 100644
+--- a/glm/gtx/polar_coordinates.hpp
++++ b/glm/gtx/polar_coordinates.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/projection.hpp b/glm/gtx/projection.hpp
+index 9a24abf9..4d5bf76f 100644
+--- a/glm/gtx/projection.hpp
++++ b/glm/gtx/projection.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../geometric.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/quaternion.hpp b/glm/gtx/quaternion.hpp
+index c3d99a5c..808ba0fd 100644
+--- a/glm/gtx/quaternion.hpp
++++ b/glm/gtx/quaternion.hpp
+@@ -19,6 +19,7 @@
+ #include "../gtc/quaternion.hpp"
+ #include "../gtx/norm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/range.hpp b/glm/gtx/range.hpp
+index e0ef46af..03c797c3 100644
+--- a/glm/gtx/range.hpp
++++ b/glm/gtx/range.hpp
+@@ -15,6 +15,7 @@
+ // Dependencies
+ #include "../detail/setup.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/raw_data.hpp b/glm/gtx/raw_data.hpp
+index fb34c8cb..0084fec6 100644
+--- a/glm/gtx/raw_data.hpp
++++ b/glm/gtx/raw_data.hpp
+@@ -16,6 +16,7 @@
+ #include "../detail/setup.hpp"
+ #include "../detail/type_int.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/rotate_normalized_axis.hpp b/glm/gtx/rotate_normalized_axis.hpp
+index eee90d6e..82612928 100644
+--- a/glm/gtx/rotate_normalized_axis.hpp
++++ b/glm/gtx/rotate_normalized_axis.hpp
+@@ -19,6 +19,7 @@
+ #include "../gtc/epsilon.hpp"
+ #include "../gtc/quaternion.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/rotate_vector.hpp b/glm/gtx/rotate_vector.hpp
+index c8ace89e..e954b041 100644
+--- a/glm/gtx/rotate_vector.hpp
++++ b/glm/gtx/rotate_vector.hpp
+@@ -17,6 +17,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/transform.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/scalar_multiplication.hpp b/glm/gtx/scalar_multiplication.hpp
+index b73edf67..22baa52a 100644
+--- a/glm/gtx/scalar_multiplication.hpp
++++ b/glm/gtx/scalar_multiplication.hpp
+@@ -16,6 +16,7 @@
+
+ #include "../detail/setup.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/scalar_relational.hpp b/glm/gtx/scalar_relational.hpp
+index 7fc8c1cc..f21f3b2b 100644
+--- a/glm/gtx/scalar_relational.hpp
++++ b/glm/gtx/scalar_relational.hpp
+@@ -15,6 +15,7 @@
+ // Dependency:
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/spline.hpp b/glm/gtx/spline.hpp
+index f96d7e07..76359cfd 100644
+--- a/glm/gtx/spline.hpp
++++ b/glm/gtx/spline.hpp
+@@ -16,6 +16,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/optimum_pow.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/std_based_type.hpp b/glm/gtx/std_based_type.hpp
+index 55a2f074..92532b9e 100644
+--- a/glm/gtx/std_based_type.hpp
++++ b/glm/gtx/std_based_type.hpp
+@@ -17,6 +17,7 @@
+ #include "../glm.hpp"
+ #include <cstdlib>
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/string_cast.hpp b/glm/gtx/string_cast.hpp
+index 4b4e280f..dfcd5085 100644
+--- a/glm/gtx/string_cast.hpp
++++ b/glm/gtx/string_cast.hpp
+@@ -24,6 +24,7 @@
+ #include <string>
+ #include <cmath>
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/texture.hpp b/glm/gtx/texture.hpp
+index 312bf398..7af185f6 100644
+--- a/glm/gtx/texture.hpp
++++ b/glm/gtx/texture.hpp
+@@ -17,6 +17,7 @@
+ #include "../gtc/integer.hpp"
+ #include "../gtx/component_wise.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/transform.hpp b/glm/gtx/transform.hpp
+index d23b99ce..5a5d9619 100644
+--- a/glm/gtx/transform.hpp
++++ b/glm/gtx/transform.hpp
+@@ -19,6 +19,7 @@
+ #include "../glm.hpp"
+ #include "../gtc/matrix_transform.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/transform2.hpp b/glm/gtx/transform2.hpp
+index 85f5bea4..5d7c83fc 100644
+--- a/glm/gtx/transform2.hpp
++++ b/glm/gtx/transform2.hpp
+@@ -17,6 +17,7 @@
+ #include "../glm.hpp"
+ #include "../gtx/transform.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/type_aligned.hpp b/glm/gtx/type_aligned.hpp
+index 6ff9f276..6ad92fad 100644
+--- a/glm/gtx/type_aligned.hpp
++++ b/glm/gtx/type_aligned.hpp
+@@ -18,6 +18,7 @@
+ // Dependency:
+ #include "../gtc/type_precision.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/type_trait.hpp b/glm/gtx/type_trait.hpp
+index 637bbd19..65519cab 100644
+--- a/glm/gtx/type_trait.hpp
++++ b/glm/gtx/type_trait.hpp
+@@ -12,6 +12,7 @@
+
+ #pragma once
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/vec_swizzle.hpp b/glm/gtx/vec_swizzle.hpp
+index daebac38..13d523dc 100644
+--- a/glm/gtx/vec_swizzle.hpp
++++ b/glm/gtx/vec_swizzle.hpp
+@@ -14,6 +14,7 @@
+
+ #include "../glm.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/vector_angle.hpp b/glm/gtx/vector_angle.hpp
+index 401a47eb..98c9d110 100644
+--- a/glm/gtx/vector_angle.hpp
++++ b/glm/gtx/vector_angle.hpp
+@@ -20,6 +20,7 @@
+ #include "../gtx/quaternion.hpp"
+ #include "../gtx/rotate_vector.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/vector_query.hpp b/glm/gtx/vector_query.hpp
+index 6560eaa5..5ab1ffda 100644
+--- a/glm/gtx/vector_query.hpp
++++ b/glm/gtx/vector_query.hpp
+@@ -17,6 +17,7 @@
+ #include <cfloat>
+ #include <limits>
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+diff --git a/glm/gtx/wrap.hpp b/glm/gtx/wrap.hpp
+index 2c4b55df..5bf26a33 100644
+--- a/glm/gtx/wrap.hpp
++++ b/glm/gtx/wrap.hpp
+@@ -16,6 +16,7 @@
+ #include "../glm.hpp"
+ #include "../gtc/vec1.hpp"
+
++#include "../experimental.hpp"
+ #ifndef GLM_ENABLE_EXPERIMENTAL
+ # error "GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
+ #endif
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/files/0002-glm-install-headers-only.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/files/0002-glm-install-headers-only.patch
new file mode 100644
index 000000000..1be3318cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/files/0002-glm-install-headers-only.patch
@@ -0,0 +1,46 @@
+From 7fdd36d7496238e03e43fcc32839f75588116c5d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 16 Mar 2018 15:44:48 +0100
+Subject: [PATCH 2/2] glm: install headers only
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Plausibility check in root source path
+
+$ find glm -type f ! -name '*.hpp' ! -name '*.h' ! -name '*.inl'
+glm/detail/glm.cpp
+glm/detail/dummy.cpp
+glm/experimental.hpp.in
+glm/CMakeLists.txt
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
+Uptream-Status: Submitted [1]
+
+[1] https://github.com/g-truc/glm/pull/741
+---
+ CMakeLists.txt | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bd4dd654..113dd735 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -171,7 +171,12 @@ option(GLM_INSTALL_ENABLE "GLM install" ON)
+
+ set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
+ if (GLM_INSTALL_ENABLE)
+- install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++ install(DIRECTORY glm
++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
++ FILES_MATCHING
++ PATTERN "*.h"
++ PATTERN "*.hpp"
++ PATTERN "*.inl")
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/experimental.hpp" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glm)
+ endif()
+
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9-a2.bb b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9-a2.bb
new file mode 100644
index 000000000..4e2ee2378
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9-a2.bb
@@ -0,0 +1,28 @@
+SUMMARY = "OpenGL Mathematics Library"
+DESCRIPTION = "OpenGL Mathematics (GLM) is a header only C++ \
+mathematics library for graphics software based on the OpenGL \
+Shading Language (GLSL) specifications."
+HOMEPAGE = "https://glm.g-truc.net"
+BUGTRACKER = "https://github.com/g-truc/glm/issues"
+
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://readme.md;beginline=21;endline=22;md5=3075b5727d36f29edccf97b93e72b790"
+
+SRC_URI = " \
+ git://github.com/g-truc/glm;branch=master \
+ file://0001-Make-GLM_ENABLE_EXPERIMENTAL-a-configurable-option.patch \
+ file://0002-glm-install-headers-only.patch \
+"
+SRCREV = "fcbedf5058ef8613dd02aac62ef00d55dcfeadd7"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DGLM_ENABLE_EXPERIMENTAL=ON"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+RDEPENDS_${PN}-dev = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch
new file mode 100644
index 000000000..7800fdd57
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch
@@ -0,0 +1,26 @@
+From 60b6d5c95ca3632e02031ac04fb5486dd209011c Mon Sep 17 00:00:00 2001
+From: Andreas Baak <andreas.baak@gmail.com>
+Date: Sun, 12 Jul 2015 01:02:15 -0700
+Subject: [PATCH] configure.ac remove AM_PO_SUBDIRS
+
+This is done twice together with oe autotools.bbclass.
+
+---
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index bb5b795..93fbaf2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -64,7 +64,6 @@ GP_GETTEXT_HACK([],[Lutz Müller and others],[${MAIL_GPHOTO_TRANSLATION}])
+ ALL_LINGUAS="az cs da de en_GB es eu fi fr hu id is it ja nl pa pl pt_BR ro ru rw sk sr sv uk vi zh_CN zh_TW"
+ AM_GNU_GETTEXT_VERSION([0.14.1])
+ AM_GNU_GETTEXT([external])
+-AM_PO_SUBDIRS()
+ AM_ICONV()
+ GP_GETTEXT_FLAGS()
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0002-Look-for-popt-with-GP_CHECK_LIBRARY-function.patch b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0002-Look-for-popt-with-GP_CHECK_LIBRARY-function.patch
new file mode 100644
index 000000000..e6c7dd667
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2/0002-Look-for-popt-with-GP_CHECK_LIBRARY-function.patch
@@ -0,0 +1,32 @@
+From 884d4c9bbd2dc147d614a5fabc25dbea7a71cd48 Mon Sep 17 00:00:00 2001
+From: Andreas Baak <andreas.baak@gmail.com>
+Date: Sun, 12 Jul 2015 02:13:58 -0700
+Subject: [PATCH] Look for popt with GP_CHECK_LIBRARY function
+
+The previously used proprietary function GP_CHECK_POPT
+defined in /.m4m/gp-check-opt.m4 is not ready for cross
+compilation since it looks for the library and headers
+in the host system. Yocto reports the following error:
+"QA Issue: gphoto2: The compile log indicates that host
+include and/or library paths were used."
+Using the GP_CHECK_LIBRARY function fixes this problem
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 93fbaf2..6d661f0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -285,7 +285,7 @@ GP_CONFIG_MSG([Text preview support],[$aa_msg])
+ dnl ---------------------------------------------------------------------------
+ dnl popt.h: Simplifies handling of command-line options enormously.
+ dnl ---------------------------------------------------------------------------
+-GP_CHECK_POPT([mandatory])
++GP_CHECK_LIBRARY([POPT], [popt], [], [popt.h], [], [], [mandatory])
+
+
+ dnl ---------------------------------------------------------------------------
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2_2.5.14.bb b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2_2.5.14.bb
new file mode 100644
index 000000000..75ad7f4f0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/gphoto2_2.5.14.bb
@@ -0,0 +1,22 @@
+SUMMARY = "gphoto2 - a command-line frontend to libgphoto2"
+HOMEPAGE = "http://www.gphoto.com/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+DEPENDS = "libgphoto2 popt readline"
+RDEPENDS_gphoto2 = "libgphoto2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/gphoto2-${PV}.tar.bz2;name=gphoto2 \
+ file://0001-configure.ac-remove-AM_PO_SUBDIRS.patch \
+ file://0002-Look-for-popt-with-GP_CHECK_LIBRARY-function.patch \
+"
+
+SRC_URI[gphoto2.md5sum] = "6c6a21b5e879330cdd71ef92dce36399"
+SRC_URI[gphoto2.sha256sum] = "9302d02fb472d4936988382b7277ccdc4edaf7ede56c490278912ffd0627699c"
+
+inherit autotools pkgconfig gettext
+
+EXTRA_OECONF += "--with-jpeg-prefix=${STAGING_INCDIR} \
+ --without-cdk \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch
new file mode 100644
index 000000000..8093676ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/0001-configure.ac-remove-AM_PO_SUBDIRS.patch
@@ -0,0 +1,48 @@
+From 31a5d2f7db18737aef08c34e8707b4f69f7e5156 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 21 Oct 2012 17:59:20 +0200
+Subject: [PATCH] configure.ac: remove AM_PO_SUBDIRS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+together with oe autotools.bbclass this is done twice and causes:
+
+| autoreconf: running: aclocal --system-acdir=/home/Superandy/tmp/oe-core-eglibc/work/armv7a-vfp-neon-angstrom-linux-gnueabi/libgphoto2-2.4.11-r2/libgphoto2-2.4.11/aclocal-copy/ --automake-acdir=/home/Superandy/tmp/oe-core-eglibc/sysroots/x86_64-linux/usr/share/aclocal-1.12 -I /home/Superandy/tmp/oe-core-eglibc/work/armv7a-vfp-neon-angstrom-linux-gnueabi/libgphoto2-2.4.11-r2/libgphoto2-2.4.11/auto-m4/ -I /home/Superandy/tmp/oe-core-eglibc/work/armv7a-vfp-neon-angstrom-linux-gnueabi/libgphoto2-2.4.11-r2/libgphoto2-2.4.11/m4m/ -I /home/Superandy/tmp/oe-core-eglibc/work/armv7a-vfp-neon-angstrom-linux-gnueabi/libgphoto2-2.4.11-r2/libgphoto2-2.4.11/auto-m4/ -I /home/Superandy/tmp/oe-core-eglibc/work/armv7a-vfp-neon-angstrom-linux-gnueabi/libgphoto2-2.4.11-r2/libgphoto2-2.4.11/m4m/ --force -I auto-m4 -I m4m
+| configure.ac:230: error: `po-directories' is already registered with AC_CONFIG_COMMANDS.
+
+Upstream-Status: Inapropriate [configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 1 -
+ libgphoto2_port/configure.ac | 1 -
+ 2 files changed, 0 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2f8e1b8..2e90acf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -209,7 +209,6 @@ ALL_LINGUAS="cs da de es eu fr hu it ja nl pl ru sv uk vi zh_CN"
+ GP_GETTEXT_HACK([${PACKAGE}-${LIBGPHOTO2_CURRENT_MIN}],[The gPhoto Team],[${MAIL_GPHOTO_TRANSLATION}])
+ AM_GNU_GETTEXT_VERSION([0.14.1])
+ AM_GNU_GETTEXT([external])
+-AM_PO_SUBDIRS()
+ AM_ICONV()
+ GP_GETTEXT_FLAGS()
+
+diff --git a/libgphoto2_port/configure.ac b/libgphoto2_port/configure.ac
+index 0b66d58..df47357 100644
+--- a/libgphoto2_port/configure.ac
++++ b/libgphoto2_port/configure.ac
+@@ -124,7 +124,6 @@ GP_GETTEXT_HACK([${PACKAGE}-${LIBGPHOTO2_PORT_CURRENT_MIN}],[Lutz Mueller and ot
+ ALL_LINGUAS="cs da de es eu fi fr it ja nl pl pt_BR ru sk sr sv uk vi zh_CN zh_TW"
+ AM_GNU_GETTEXT_VERSION([0.14.1])
+ AM_GNU_GETTEXT([external])
+-AM_PO_SUBDIRS()
+ AM_ICONV()
+ GP_GETTEXT_FLAGS()
+
+--
+1.7.4.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2-device.fdi b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2-device.fdi
new file mode 100644
index 000000000..3977064fe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2-device.fdi
@@ -0,0 +1,9533 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
+<!-- This file was generated by libgphoto2 print-camera-list - - fdi-device -->
+<!--+
+ | Created from this library:
+ | libgphoto2 2.5.8 all camlibs, gcc, ltdl, no EXIF
+ | libgphoto2_port 0.12.0 gcc, ltdl, no USB, serial without locking
+ +-->
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.subsystem" string="usb">
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13251">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13252">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13891">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13628">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13869">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13702">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13128">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13129">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13130">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13272">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13180">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13181">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13259">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13093">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13121">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13124">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13125">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13193">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13194">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13176">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13588">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13736">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13892">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="14117">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13833">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13427">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13663">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13911">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13226">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13796">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1282">
+ <match key="usb_device.product_id" int="13853">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5845">
+ <match key="usb_device.product_id" int="32774">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5845">
+ <match key="usb_device.product_id" int="32773">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1725">
+ <match key="usb_device.product_id" int="1027">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1725">
+ <match key="usb_device.product_id" int="1028">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20555">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2250">
+ <match key="usb_device.product_id" int="273">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20555">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="360">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="40974">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="61443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="36941">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7099">
+ <match key="usb_device.product_id" int="359">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="2048">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="7">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="8">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="10">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="12">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="18">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="11">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="13">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="5">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6473">
+ <match key="usb_device.product_id" int="242">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="548">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4762">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4779">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4752">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4754">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4756">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4759">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4768">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4776">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4753">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4755">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1452">
+ <match key="usb_device.product_id" int="4761">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="20488">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="20489">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="16386">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5416">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5417">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5433">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5432">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5305">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5448">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4618">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4893">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4620">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4865">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4867">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4881">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4897">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="12787">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4913">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4915">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="12841">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4871">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4951">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4945">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4873">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4875">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4883">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4885">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4917">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4877">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4879">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4889">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5359">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5480">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5481">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5311">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5400">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5384">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5385">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5293">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5274">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5227">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5214">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="5208">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="12715">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4615">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4929">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4891">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3705">
+ <match key="usb_device.product_id" int="4616">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37180">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="23055">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19680">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19681">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="20815">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="30579">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21519">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21535">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21775">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21760">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19664">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19665">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21023">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21007">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19648">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19649">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21600">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21608">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21504">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21520">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21521">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21606">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="30578">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21766">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21857">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="20992">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="20993">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21008">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21009">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21012">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21024">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21025">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21040">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21041">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19968">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19969">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19983">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19999">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19712">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19713">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19584">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19585">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19600">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19601">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19616">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="19617">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="22047">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="24322">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="22543">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="22559">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21632">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21633">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="30593">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21648">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2821">
+ <match key="usb_device.product_id" int="21649">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36945">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8320">
+ <match key="usb_device.product_id" int="6">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8320">
+ <match key="usb_device.product_id" int="5">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1189">
+ <match key="usb_device.product_id" int="12291">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7493">
+ <match key="usb_device.product_id" int="17821">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10823">
+ <match key="usb_device.product_id" int="32528">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10823">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10823">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12359">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12738">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12733">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12774">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12787">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12904">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12480">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12365">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12791">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12390">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12479">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12405">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12474">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12558">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12468">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12543">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12572">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12542">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12623">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12530">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12622">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12566">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12676">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12569">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12660">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12598">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12660">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12565">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12740">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12619">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12639">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12659">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12691">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12737">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12443">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12443">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12484">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12470">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12532">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12370">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12389">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12400">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12401">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12529">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12526">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12394">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12424">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12423">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12453">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12667">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12912">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12419">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12476">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12823">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12927">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12522">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12615">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12752">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12825">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12523">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12524">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12420">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12441">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12563">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12527">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12526">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12526">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12560">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12614">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12613">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12751">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12699">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12778">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12545">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12546">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12697">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12858">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12824">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12821">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12859">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12880">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12914">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12883">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12698">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12911">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12356">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12384">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12420">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12441">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12560">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12420">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12441">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12526">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12560">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12613">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12751">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12861">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12953">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12751">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12613">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12430">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12865">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12969">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12837">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12774">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12691">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12358">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12363">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12484">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12438">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12412">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12410">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12448">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12438">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12430">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12417">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12416">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12457">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12429">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12418">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12415">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12416">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12438">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12457">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12549">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12430">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12367">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12385">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12686">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12739">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12862">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12900">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12366">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12386">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12689">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12734">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12842">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12874">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12873">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12913">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12898">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12377">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12406">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12786">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12472">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12785">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12897">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12376">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12471">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12867">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12537">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12559">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12536">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12629">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12617">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12666">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12735">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12783">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12482">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12481">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12582">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12571">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12624">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12621">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12620">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12663">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12662">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12404">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12541">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12540">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12602">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12601">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12635">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12403">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12567">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12600">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12637">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12469">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12442">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12838">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12863">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12473">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12475">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12732">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12936">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12937">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12360">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12851">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12687">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12767">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12888">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12373">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12398">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12399">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12421">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12467">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12581">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12634">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12443">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12361">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12444">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12353">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12854">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12357">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12369">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12891">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12917">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12528">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12355">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12389">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12400">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12401">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12570">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12375">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12364">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12390">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12374">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12405">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12474">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12396">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12397">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12616">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12407">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12468">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12466">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12465">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12538">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12818">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12443">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12623">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12470">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12676">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12740">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12788">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12484">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12480">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12599">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12529">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12543">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12530">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12572">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12542">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12569">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12622">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12661">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12738">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12660">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12619">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12694">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12565">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12774">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12737">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12691">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12685">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12638">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12690">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12768">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12817">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12852">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12890">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12918">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12772">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12736">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12790">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12844">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12840">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12869">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12868">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12895">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12856">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12892">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12919">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12955">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12368">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12380">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12778">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12823">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12859">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1193">
+ <match key="usb_device.product_id" int="12408">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1999">
+ <match key="usb_device.product_id" int="4169">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1999">
+ <match key="usb_device.product_id" int="4162">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1999">
+ <match key="usb_device.product_id" int="4173">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1999">
+ <match key="usb_device.product_id" int="4172">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1999">
+ <match key="usb_device.product_id" int="4474">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="49664">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1207">
+ <match key="usb_device.product_id" int="34985">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="4098">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="32769">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="548">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7796">
+ <match key="usb_device.product_id" int="25874">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7763">
+ <match key="usb_device.product_id" int="5">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1000">
+ <match key="usb_device.product_id" int="8578">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1000">
+ <match key="usb_device.product_id" int="8576">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2386">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="1809">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="1873">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2321">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2369">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2049">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2161">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2193">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2145">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2177">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2337">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2305">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="1793">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="1889">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3617">
+ <match key="usb_device.product_id" int="2353">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16406">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16391">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16394">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16403">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16675">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16727">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16688">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16700">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16691">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16737">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16695">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16701">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16689">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16720">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16728">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16722">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16671">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16723">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16702">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16721">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16738">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16745">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16680">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4204">
+ <match key="usb_device.product_id" int="12821">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2125">
+ <match key="usb_device.product_id" int="3">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3428">
+ <match key="usb_device.product_id" int="4129">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1000">
+ <match key="usb_device.product_id" int="8496">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32768">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16690">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="16687">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16700">
+ <match key="usb_device.product_id" int="45323">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16700">
+ <match key="usb_device.product_id" int="45338">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16700">
+ <match key="usb_device.product_id" int="45339">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16700">
+ <match key="usb_device.product_id" int="17664">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7994">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1498">
+ <match key="usb_device.product_id" int="4120">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4483">
+ <match key="usb_device.product_id" int="1">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1498">
+ <match key="usb_device.product_id" int="4128">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2726">
+ <match key="usb_device.product_id" int="24609">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36944">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36946">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4310">
+ <match key="usb_device.product_id" int="8704">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1208">
+ <match key="usb_device.product_id" int="1027">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1208">
+ <match key="usb_device.product_id" int="1026">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10608">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10608">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6018">
+ <match key="usb_device.product_id" int="16385">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1747">
+ <match key="usb_device.product_id" int="8634">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3530">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3530">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="330">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="466">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="454">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="467">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="539">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="403">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="480">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="448">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="484">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="411">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="449">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="453">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="468">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="486">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="506">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="526">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="557">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="625">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="592">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="477">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="475">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="495">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="512">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="488">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="521">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="576">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="637">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="613">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="664">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="452">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="471">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="447">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="322">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="399">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="668">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="563">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="622">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="611">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="678">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="648">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="472">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="513">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="525">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="510">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="693">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1227">
+ <match key="usb_device.product_id" int="451">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1221">
+ <match key="usb_device.product_id" int="4416">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1221">
+ <match key="usb_device.product_id" int="4923">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2334">
+ <match key="usb_device.product_id" int="9605">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1112">
+ <match key="usb_device.product_id" int="28677">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1037">
+ <match key="usb_device.product_id" int="34908">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1044">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1044">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="7">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="6">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20033">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20034">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="19983">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="19712">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="11522">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="29706">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="53514">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="53513">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20193">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20194">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="45066">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="28840">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20005">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20006">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="1459">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="28930">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6353">
+ <match key="usb_device.product_id" int="20197">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="9842">
+ <match key="usb_device.product_id" int="17">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="32796">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4866">
+ <match key="usb_device.product_id" int="4118">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4866">
+ <match key="usb_device.product_id" int="4119">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="32285">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="23837">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="23581">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4251">
+ <match key="usb_device.product_id" int="37126">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4251">
+ <match key="usb_device.product_id" int="37129">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4251">
+ <match key="usb_device.product_id" int="37125">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="25858">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="25090">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="31746">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="32002">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="25346">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="26114">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="29698">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="30722">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="29186">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="28162">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="30978">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="27906">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="25346">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="16642">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="26626">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="28930">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="27394">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="25602">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="30210">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="26370">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="27650">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="27138">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="16898">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="30466">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="32258">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="17154">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="16642">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="17410">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="17666">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="16642">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="24578">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="61443">
+ <match key="usb_device.product_id" int="24578">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="35586">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="35842">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="29954">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="31490">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="29442">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="31234">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="32770">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="33026">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="33282">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="39682">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="33794">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="34050">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="38402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="38658">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="34562">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1008">
+ <match key="usb_device.product_id" int="34818">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="26716">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="26720">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3782">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3773">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3583">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3219">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3240">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3582">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3556">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1533">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3541">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3633">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3634">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3573">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1966">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3546">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3985">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3940">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3939">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3975">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3935">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3936">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3562">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3538">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1994">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3877">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1562">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="4020">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="4021">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1995">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="2009">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3308">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3576">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3577">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3578">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3579">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3580">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3581">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="2008">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="8210">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="1547">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="3533">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="61642">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="2977">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2996">
+ <match key="usb_device.product_id" int="2978">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4817">
+ <match key="usb_device.product_id" int="4226">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4817">
+ <match key="usb_device.product_id" int="13839">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4817">
+ <match key="usb_device.product_id" int="13855">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4817">
+ <match key="usb_device.product_id" int="4177">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4817">
+ <match key="usb_device.product_id" int="4178">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37203">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1161">
+ <match key="usb_device.product_id" int="49189">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6655">
+ <match key="usb_device.product_id" int="771">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6655">
+ <match key="usb_device.product_id" int="777">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6655">
+ <match key="usb_device.product_id" int="775">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32903">
+ <match key="usb_device.product_id" int="2655">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32903">
+ <match key="usb_device.product_id" int="2581">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32903">
+ <match key="usb_device.product_id" int="2582">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32902">
+ <match key="usb_device.product_id" int="1584">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32903">
+ <match key="usb_device.product_id" int="2654">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="32903">
+ <match key="usb_device.product_id" int="2555">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4394">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4390">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4417">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4418">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4434">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4455">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4433">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="8449">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="8453">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="8450">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4102">
+ <match key="usb_device.product_id" int="12292">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4104">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4386">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4102">
+ <match key="usb_device.product_id" int="16386">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4102">
+ <match key="usb_device.product_id" int="16387">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4423">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4371">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4384">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4375">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4373">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4372">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4376">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4377">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4435">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4404">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4162">
+ <match key="usb_device.product_id" int="4419">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7784">
+ <match key="usb_device.product_id" int="4098">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4374">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="16642">
+ <match key="usb_device.product_id" int="4402">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2848">
+ <match key="usb_device.product_id" int="56814">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1924">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="13056">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1498">
+ <match key="usb_device.product_id" int="4102">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="0">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10545">
+ <match key="usb_device.product_id" int="2561">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10545">
+ <match key="usb_device.product_id" int="2565">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1265">
+ <match key="usb_device.product_id" int="24837">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2126">
+ <match key="usb_device.product_id" int="1">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2856">
+ <match key="usb_device.product_id" int="4108">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8759">
+ <match key="usb_device.product_id" int="53512">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8759">
+ <match key="usb_device.product_id" int="53513">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8759">
+ <match key="usb_device.product_id" int="45320">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1559">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1547">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1406">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1418">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1420">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1421">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1417">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1450">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1434">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1442">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1463">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1466">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1447">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1455">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1454">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1475">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1449">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1478">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1436">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1376">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1376">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1333">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1382">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1382">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1396">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1393">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1412">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1401">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1400">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1400">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1403">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1414">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1404">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="288">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="289">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="272">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="273">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="304">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="274">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="306">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="352">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="305">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1317">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1280">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1296">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1328">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="368">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1365">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1398">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1360">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1392">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1394">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1397">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1405">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1407">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1399">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="768">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1344">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1384">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1385">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1381">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1383">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1486">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1536">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1439">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1473">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1453">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1413">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1024">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1426">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1427">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1422">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1423">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1425">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1440">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1452">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1451">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1464">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1437">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1438">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1415">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1459">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1460">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1408">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1416">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1027">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1461">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1429">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1487">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1485">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1034">
+ <match key="usb_device.product_id" int="1472">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1224">
+ <match key="usb_device.product_id" int="1826">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="1">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="25">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="9">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="7">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="24">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4907">
+ <match key="usb_device.product_id" int="34">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7994">
+ <match key="usb_device.product_id" int="4102">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1154">
+ <match key="usb_device.product_id" int="2425">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1154">
+ <match key="usb_device.product_id" int="2064">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1154">
+ <match key="usb_device.product_id" int="1393">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1154">
+ <match key="usb_device.product_id" int="1434">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36945">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9077">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6808">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30519">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30507">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29848">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30140">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30142">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30018">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30077">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30440">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29706">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30851">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30133">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30554">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29900">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29847">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29862">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29944">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30488">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29724">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30450">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30698">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30463">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="30641">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25073">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25081">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25215">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25198">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24859">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24719">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24882">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25406">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25145">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25149">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25116">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25125">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24986">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1086">
+ <match key="usb_device.product_id" int="28736">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1086">
+ <match key="usb_device.product_id" int="28849">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25372">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="25189">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24592">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4100">
+ <match key="usb_device.product_id" int="24581">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5073">
+ <match key="usb_device.product_id" int="28674">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1133">
+ <match key="usb_device.product_id" int="2304">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1133">
+ <match key="usb_device.product_id" int="2384">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="13056">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20555">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1647">
+ <match key="usb_device.product_id" int="33900">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3725">
+ <match key="usb_device.product_id" int="80">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1032">
+ <match key="usb_device.product_id" int="45066">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6127">
+ <match key="usb_device.product_id" int="29827">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8709">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16642">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1647">
+ <match key="usb_device.product_id" int="34128">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1647">
+ <match key="usb_device.product_id" int="34184">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1032">
+ <match key="usb_device.product_id" int="45065">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4721">
+ <match key="usb_device.product_id" int="8210">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8222">
+ <match key="usb_device.product_id" int="17067">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10821">
+ <match key="usb_device.product_id" int="8200">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10821">
+ <match key="usb_device.product_id" int="3074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4310">
+ <match key="usb_device.product_id" int="8960">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3504">
+ <match key="usb_device.product_id" int="21874">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1600">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1570">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1260">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1808">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1598">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="61642">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="201">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1118">
+ <match key="usb_device.product_id" int="1601">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32776">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2125">
+ <match key="usb_device.product_id" int="3">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="24778">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28808">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="25807">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11826">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11827">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11879">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11941">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11944">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11880">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="16854">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="16858">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17063">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17279">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17267">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="18449">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="16860">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28874">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11894">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11906">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11908">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11874">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11875">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11878">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="25619">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="25781">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="25782">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11856">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="11857">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="25621">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="10853">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28835">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28840">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28841">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17169">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17158">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="16847">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28941">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="28942">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8888">
+ <match key="usb_device.product_id" int="17250">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="49664">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="41808">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="49696">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="50208">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1375">
+ <match key="usb_device.product_id" int="50464">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2726">
+ <match key="usb_device.product_id" int="38401">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1033">
+ <match key="usb_device.product_id" int="806">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1033">
+ <match key="usb_device.product_id" int="1074">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1033">
+ <match key="usb_device.product_id" int="578">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1026">
+ <match key="usb_device.product_id" int="22120">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="770">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="279">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="290">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="291">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="265">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="277">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="289">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="273">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="285">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="301">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="516">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="267">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="304">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="305">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="297">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="275">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="518">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="281">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="302">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="269">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="309">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="313">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="311">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="287">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="259">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="295">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="274">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="401">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="258">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="550">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="392">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="520">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="779">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="777">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="382">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="351">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="389">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="789">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="792">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="791">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="804">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="835">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="773">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="402">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="320">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="381">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="322">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="545">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="524">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="361">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="388">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="347">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="547">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="355">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="552">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="785">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="367">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="383">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="395">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="549">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="553">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="363">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="364">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="371">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="823">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="838">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="334">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="353">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="375">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="376">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="801">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="813">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="831">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="795">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="800">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="820">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="810">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="324">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="809">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="349">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="544">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="334">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="369">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="542">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="540">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="343">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="543">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="546">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="390">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="403">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="843">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1028">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1036">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1032">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1052">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1034">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1026">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1040">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1046">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1050">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1060">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1061">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1063">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1068">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1075">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1062">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1056">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1067">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1044">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1048">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1077">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1059">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1065">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1071">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1073">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1054">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1069">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1030">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1058">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1064">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1038">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1072">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1079">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1042">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1066">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1070">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1078">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1057">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1538">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1539">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1541">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1545">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1542">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1537">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1200">
+ <match key="usb_device.product_id" int="1540">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="548">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="705">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="101">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="95">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1122">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="494">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="521">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1214">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="738">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1210">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="108">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="234">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1150">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="553">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1204">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="340">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="341">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="345">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="46">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="152">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="141">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="60">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="663">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1491">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1426">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="961">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="973">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="463">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="815">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="377">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="229">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="820">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="821">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="228">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="417">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="545">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1788">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1638">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1633">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1316">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1160">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1233">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1249">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="121">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="390">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="766">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="770">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1265">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="10">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="116">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="146">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1306">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1157">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1144">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1253">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1263">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="110">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="978">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="57">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="501">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="619">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="500">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="628">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1057">
+ <match key="usb_device.product_id" int="1768">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5891">
+ <match key="usb_device.product_id" int="1">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5891">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="28841">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="46080">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="52999">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="52994">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="28928">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2389">
+ <match key="usb_device.product_id" int="28930">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7763">
+ <match key="usb_device.product_id" int="6">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="272">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="303">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="303">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="278">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="275">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="303">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="276">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="278">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1972">
+ <match key="usb_device.product_id" int="278">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8921">
+ <match key="usb_device.product_id" int="10085">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8921">
+ <match key="usb_device.product_id" int="10100">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8921">
+ <match key="usb_device.product_id" int="10099">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="9076">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="8517">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1242">
+ <match key="usb_device.product_id" int="8536">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4204">
+ <match key="usb_device.product_id" int="61443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7501">
+ <match key="usb_device.product_id" int="20534">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7501">
+ <match key="usb_device.product_id" int="20533">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7501">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="9723">
+ <match key="usb_device.product_id" int="357">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2583">
+ <match key="usb_device.product_id" int="13">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2583">
+ <match key="usb_device.product_id" int="247">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2726">
+ <match key="usb_device.product_id" int="38658">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8316">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8377">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8504">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="357">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8311">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8334">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8196">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="2135">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="2126">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8194">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="335">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8309">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8315">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8375">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8421">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="333">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="332">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="491">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="331">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="6411">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8592">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="32257">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="385">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="356">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="8226">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1137">
+ <match key="usb_device.product_id" int="370">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2276">
+ <match key="usb_device.product_id" int="322">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2276">
+ <match key="usb_device.product_id" int="328">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1924">
+ <match key="usb_device.product_id" int="10376">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1350">
+ <match key="usb_device.product_id" int="8245">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1350">
+ <match key="usb_device.product_id" int="3503">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10724">
+ <match key="usb_device.product_id" int="4611">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10724">
+ <match key="usb_device.product_id" int="4355">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1924">
+ <match key="usb_device.product_id" int="21248">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="65535">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="34816">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="61443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="553">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="12694">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="26468">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="26469">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="36921">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1478">
+ <match key="usb_device.product_id" int="36901">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3530">
+ <match key="usb_device.product_id" int="4">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1924">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="4704">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="4712">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8715">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8707">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8708">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8712">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8716">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="805">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8724">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="813">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8717">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8722">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="811">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8723">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8726">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="815">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8727">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8730">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="272">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8706">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="829">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8717">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4042">
+ <match key="usb_device.product_id" int="32775">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8719">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8719">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37181">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37181">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37181">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32771">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32771">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32771">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26726">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26407">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26720">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26716">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26743">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26450">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26799">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="57868">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26649">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="1188">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20255">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26420">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26178">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="5132">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="4996">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26698">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26467">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26377">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26793">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="26370">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20526">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20509">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20514">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20527">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20516">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="23055">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20531">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="1033">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20567">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20609">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20570">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20760">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20611">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20762">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20757">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20765">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20784">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20773">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20751">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20782">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20625">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20619">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20618">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20551">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20607">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20564">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20605">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20627">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20769">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20791">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1256">
+ <match key="usb_device.product_id" int="20540">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29712">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29776">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29778">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29746">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29748">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29924">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29904">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29824">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29728">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29730">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29792">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29888">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29890">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29920">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29697">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29696">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29744">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1921">
+ <match key="usb_device.product_id" int="29872">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1140">
+ <match key="usb_device.product_id" int="560">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="35073">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="35081">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="35089">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2125">
+ <match key="usb_device.product_id" int="4097">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="851">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="8718">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1482">
+ <match key="usb_device.product_id" int="807">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1245">
+ <match key="usb_device.product_id" int="38497">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1245">
+ <match key="usb_device.product_id" int="38602">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1161">
+ <match key="usb_device.product_id" int="49189">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1647">
+ <match key="usb_device.product_id" int="40976">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3191">
+ <match key="usb_device.product_id" int="4113">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3191">
+ <match key="usb_device.product_id" int="4117">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3191">
+ <match key="usb_device.product_id" int="4098">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3191">
+ <match key="usb_device.product_id" int="4112">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3428">
+ <match key="usb_device.product_id" int="4097">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3191">
+ <match key="usb_device.product_id" int="4097">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6390">
+ <match key="usb_device.product_id" int="258">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6390">
+ <match key="usb_device.product_id" int="272">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="13056">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7132">
+ <match key="usb_device.product_id" int="64191">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3530">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3783">
+ <match key="usb_device.product_id" int="4104">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1870">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1990">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2391">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2279">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2382">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2231">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2387">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2381">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2388">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2274">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="4756">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="704">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="743">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1347">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1567">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1774">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1169">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="2221">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1323">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1322">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1867">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="662">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="662">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="835">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="760">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1340">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20853">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="41333">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="45429">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="370">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20850">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16754">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="390">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20870">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16774">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="361">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20841">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16745">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="373">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16757">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="374">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16758">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="375">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20855">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16759">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="41335">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="45431">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="376">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20856">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16760">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="386">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20866">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16770">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="371">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20851">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16755">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="41331">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="45427">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1839">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1656">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="860">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="805">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="859">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1028">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="878">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="984">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1214">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1434">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1673">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1020">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1227">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="901">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1021">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1446">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="806">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1022">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="807">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="910">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="858">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="908">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1228">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1448">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="904">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1211">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="919">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="920">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="78">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1191">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="801">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1187">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1641">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1846">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1847">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1396">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1653">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20854">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="41334">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="45430">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="385">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20865">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16769">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1233">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1459">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1356">
+ <match key="usb_device.product_id" int="1460">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="369">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="368">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20848">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16752">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="384">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20864">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16768">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20849">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16753">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="382">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20862">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16766">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="41342">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="45438">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="365">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="408">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20888">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="419">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20899">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16803">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="396">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20876">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16780">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="444">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20924">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="444">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="459">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20939">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16843">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="392">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20872">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16776">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="402">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20882">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16786">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="411">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20891">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16795">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="427">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20907">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16811">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="426">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20906">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16810">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="405">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20885">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16789">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="397">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="404">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20877">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20884">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16781">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16788">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="403">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20883">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16787">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="438">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="406">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="412">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20918">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20886">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20892">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16796">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="423">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16807">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20903">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="414">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20894">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16798">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="431">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20911">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16815">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20923">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16827">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="442">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20922">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16826">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="393">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20873">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16777">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="407">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20887">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="326">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20806">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="217">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="212">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="239">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="343">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20823">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16727">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="334">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="53572">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="324">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="57344">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="117">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20815">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="335">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="346">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20826">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="342">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20822">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="349">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20829">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="358">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20838">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="359">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20839">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="360">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20840">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="16744">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="353">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20833">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="251">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="307">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="314">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="4296">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="243">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="261">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="198">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="179">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="245">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="118">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="218">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="274">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4046">
+ <match key="usb_device.product_id" int="20845">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37181">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1105">
+ <match key="usb_device.product_id" int="53512">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5073">
+ <match key="usb_device.product_id" int="28695">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2726">
+ <match key="usb_device.product_id" int="12305">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="12341">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="1911">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="1908">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="1916">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="12314">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1691">
+ <match key="usb_device.product_id" int="12328">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2329">
+ <match key="usb_device.product_id" int="256">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="5008">
+ <match key="usb_device.product_id" int="21589">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4571">
+ <match key="usb_device.product_id" int="4096">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="2403">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="12">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="9">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="29">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="26">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="24">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="17">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="15">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="16">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="25">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="22">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="20">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4402">
+ <match key="usb_device.product_id" int="17207">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4402">
+ <match key="usb_device.product_id" int="17202">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4402">
+ <match key="usb_device.product_id" int="17205">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="4402">
+ <match key="usb_device.product_id" int="17204">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2352">
+ <match key="usb_device.product_id" int="28928">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="13056">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3478">
+ <match key="usb_device.product_id" int="16640">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7784">
+ <match key="usb_device.product_id" int="2">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1026">
+ <match key="usb_device.product_id" int="1553">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1647">
+ <match key="usb_device.product_id" int="33834">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2125">
+ <match key="usb_device.product_id" int="3">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1750">
+ <match key="usb_device.product_id" int="46">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1750">
+ <match key="usb_device.product_id" int="45">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2250">
+ <match key="usb_device.product_id" int="272">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1276">
+ <match key="usb_device.product_id" int="20554">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1943">
+ <match key="usb_device.product_id" int="32794">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1363">
+ <match key="usb_device.product_id" int="514">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3428">
+ <match key="usb_device.product_id" int="4097">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8711">
+ <match key="usb_device.product_id" int="1">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8711">
+ <match key="usb_device.product_id" int="17">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1032">
+ <match key="usb_device.product_id" int="14489">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="37152">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2425">
+ <match key="usb_device.product_id" int="551">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="270">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="2362">
+ <match key="usb_device.product_id" int="271">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32778">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1161">
+ <match key="usb_device.product_id" int="57617">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1161">
+ <match key="usb_device.product_id" int="49190">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1161">
+ <match key="usb_device.product_id" int="57408">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1329">
+ <match key="usb_device.product_id" int="8193">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="3141">
+ <match key="usb_device.product_id" int="32769">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7763">
+ <match key="usb_device.product_id" int="7">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="4968">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="4680">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="4672">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="61443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="36921">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="65352">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="872">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="864">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10007">
+ <match key="usb_device.product_id" int="1632">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="8711">
+ <match key="usb_device.product_id" int="6">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10518">
+ <match key="usb_device.product_id" int="37197">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10518">
+ <match key="usb_device.product_id" int="61443">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="7871">
+ <match key="usb_device.product_id" int="32553">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="1054">
+ <match key="usb_device.product_id" int="24576">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="10096">
+ <match key="usb_device.product_id" int="36956">
+ <append key="info.capabilities" type="strlist">camera</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="835">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="65486">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="580">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="581">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="774">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="775">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ <match key="usb_device.vendor_id" int="6610">
+ <match key="usb_device.product_id" int="899">
+ <append key="info.capabilities" type="strlist">portable_audio_player</append>
+ </match>
+ </match>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2.fdi b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2.fdi
new file mode 100644
index 000000000..00427e7d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/10-camera-libgphoto2.fdi
@@ -0,0 +1,19018 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
+<!-- This file was generated by libgphoto2 print-camera-list - - fdi -->
+<!--+
+ | Created from this library:
+ | libgphoto2 2.5.8 all camlibs, gcc, ltdl, no EXIF
+ | libgphoto2_port 0.12.0 gcc, ltdl, no USB, serial without locking
+ +-->
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.subsystem" string="usb">
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string"> JL2005B/C/D camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13251">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer E350 Liquid Gallant Duo (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13252">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer E350 Liquid Gallant Duo (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13891">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer E39</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13628">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia A1-810</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13869">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia A1-840FHD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13702">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia A3-A11</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13128">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A100 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13129">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A100 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13130">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A101 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13272">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A110</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13180">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A200 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13181">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A200 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13259">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A210</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13093">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A500 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13121">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A500 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13124">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A501 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13125">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A501 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13193">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A510 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13194">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A510 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13176">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Iconia TAB A700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13588">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid E2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13736">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid E3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13892">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer liquid e700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="14117">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid S56</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13833">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid X1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13427">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid Z120 MT65xx Android Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13663">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Liquid Z130 MT65xx Android Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13911">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer One 7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13226">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer S500 CloudMobile</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13796">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Z150</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1282">
+ <match key="usb.product_id" int="13853">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acer Z160</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5845">
+ <match key="usb.product_id" int="32774">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acromag Inc. XO Learning Tablet (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5845">
+ <match key="usb.product_id" int="32773">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Acromag Inc. XO Learning Tablet (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">AEG Snap 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1725">
+ <match key="usb.product_id" int="1027">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Agfa ePhoto CL18</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1725">
+ <match key="usb.product_id" int="1028">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Agfa ePhoto CL20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20555">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek 1.3 mega PocketCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek PalmCam Trio</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek Pencam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek PenCam Trio</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2250">
+ <match key="usb.product_id" int="273">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek PenCam VGA+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek Pencam without flash</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20555">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aiptek Smart Megacam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="360">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel 6030a</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel One Touch 997D (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel One Touch 997D (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="40974">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel OneTouch 5042D (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="61443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel OneTouch 6034R</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="36941">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel/Bouygues BS472</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7099">
+ <match key="usb.product_id" int="359">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Alcatel/TCT 6010D/TCL S950</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Amazing Spiderman</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="2048">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Fire Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="7">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="8">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="10">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="12">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID4)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="18">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID5)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="11">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID6)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="13">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire (ID7)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="5">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire 2G (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6473">
+ <match key="usb.product_id" int="242">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Amazon Kindle Fire HD6</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="548">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">American Idol Keychain Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4762">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPad (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4779">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPad Air</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4752">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4754">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone 3G (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4756">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone 3GS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4759">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone 4 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4768">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone 4S (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4776">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPhone 5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4753">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPod Touch (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4755">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPod Touch 2G (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1452">
+ <match key="usb.product_id" int="4761">
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Apple iPod Touch 3rd Gen (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="20488">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos (for Tesco) Hudl (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="20489">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos (for Tesco) Hudl (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="16386">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 G4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5416">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 G9 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5417">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 G9 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5433">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 G9 Turbo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5432">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 G9 Turbo 250 HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5305">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 Titanium</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5448">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 101 XS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4618">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 104 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4893">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 105 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4620">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 204 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4865">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 404 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4867">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 404CAM (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4881">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 405 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4897">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 405HDD (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="12787">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 45 Neon</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4913">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 5 (MTP mode 1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4915">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 5 (MTP mode 2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="12841">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 50 Diamond</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4871">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 504 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 50c</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4951">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 5H IT (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4945">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 5S IT (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4873">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 604 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4875">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 604WIFI (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4883">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 605 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4885">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 605F (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4917">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 7 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4877">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 704 mobile dvr</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4879">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 704TV (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4889">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 705 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5359">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 70b Titanium</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5480">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 70it2 (ID 1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5481">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 70it2 (ID 2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5311">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 80 Titanium</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5400">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 80G9</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5384">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 8o G9 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5385">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 8o G9 Turbo (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5293">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 97 Titanium</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5274">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos 97 Xenon</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5227">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos Arnova 10bG3 Tablet</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5214">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos Arnova 8c G3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="5208">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos Arnova Childpad</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="12715">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos C40</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4615">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos Gmini XS100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4929">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos SPOD (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4891">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos TV+ (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3705">
+ <match key="usb.product_id" int="4616">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Archos XS202 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus Bean Sprout</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-1500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-1510</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-1610</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-1620</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37180">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-1730</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC-2200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus DC1512e</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Argus QuickClix</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aries ATC-0017</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Aries Digital Keychain Camera, I</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="23055">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus A450CG (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19680">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Asus Fonepad Note 6 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19681">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Asus Fonepad Note 6 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="20815">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Fonepad</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="30579">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Fonepad 7 (FE375CXG)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21519">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Fonepad 7 LTE ME372CL (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21535">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Fonepad 7 LTE ME372CL (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21775">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus K00E (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21760">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus K010 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19664">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME301T MeMo Pad Smart 10 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19665">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME301T MeMo Pad Smart 10 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21023">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME302C MemoPad (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21007">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME302C MemoPad (MTP+?)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19648">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME302KL MeMo Pad FHD10 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19649">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ME302KL MeMo Pad FHD10 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21600">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo K00F (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21608">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo K00F (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21504">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo ME172V (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21520">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo ME173X (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21521">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo ME173X (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21606">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Memo Pad 8 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="30578">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus MemoPad 7 (ME572CL)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21766">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus MemoPad 7 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21857">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus MemoPad 8 ME181 CX (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="20992">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="20993">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21008">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone 2 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21009">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone 2 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21012">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone 2 (PTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21024">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone Infinity (2nd ID) (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21025">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone Infinity (2nd ID) (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21040">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone Infinity (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21041">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus PadFone Infinity (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19968">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus SL101 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19969">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus SL101 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19983">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF101 Eeepad Transformer (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19999">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF101 Eeepad Transformer (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19712">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF201 Transformer Prime (keyboard dock)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19713">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF201 Transformer Prime (tablet only)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19584">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF300 Transformer (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19585">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF300 Transformer (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19600">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF700 Transformer (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19601">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF700 Transformer (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19616">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF701T Transformer Pad (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="19617">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TF701T Transformer Pad (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="22047">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus TX201LA (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="24322">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus Zenfone 2 ZE550ML (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="22543">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 4 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="22559">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 4 A400CG (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21632">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 5 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21633">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 5 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="30593">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 5 A500KL (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21648">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 6 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2821">
+ <match key="usb.product_id" int="21649">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Asus ZenFone 6 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36945">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Barbie Camera (Digital Blue)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8320">
+ <match key="usb.product_id" int="6">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Barnes&amp;Noble Nook HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8320">
+ <match key="usb.product_id" int="5">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Barnes&amp;Noble Nook HD+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1189">
+ <match key="usb.product_id" int="12291">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Benq DC1300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7493">
+ <match key="usb.product_id" int="17821">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">BenQ F5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10823">
+ <match key="usb.product_id" int="32528">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">bq Aquarius E5-4G</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10823">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">bq Krillin (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10823">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">bq Krillin (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12359">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12738">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 100 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12733">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 110 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12774">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 120 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12787">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 130</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12904">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 255HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12480">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 30 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12365">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12791">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 300 HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12390">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12479">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 40 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12405">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 400 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12474">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 430 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12558">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12468">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12543">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 55 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12572">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12542">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 65 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12623">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 70 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12530">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12622">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 75 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12566">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 750 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12676">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 80 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12569">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 800 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12660">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 85 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12598">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 850 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 860 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12660">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 90 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12565">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 900Ti (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12740">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 95 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12619">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 950 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12639">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 960 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12659">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 970 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12691">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 980 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12737">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS 990 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12443">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12443">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS i (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12484">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS i5 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS II (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12470">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS IIs (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12532">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS iZ (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12370">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS v</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12389">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12400">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS v3 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12401">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS v3 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12529">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital IXUS Wireless (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12526">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital Rebel XT (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12394">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Digital unknown 3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12424">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Elura 50 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12423">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Elura 50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12453">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Elura 65 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12667">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1000D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12912">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 100D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12419">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 10D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12476">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 10D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12823">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1100D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12927">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1200D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12522">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1D Mark II (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12615">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1D Mark III (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12752">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1D Mark IV</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12825">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 1D X</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12523">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 20D (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12524">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 20D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12420">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 300D (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12441">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 300D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12563">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 30D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12527">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 350D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12526">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 350D (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12526">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 350D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12560">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 400D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12614">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 40D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12613">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 450D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12751">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 500D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12699">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 50D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12778">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 550D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12545">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 5D (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12546">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 5D (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12697">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 5D Mark II</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12858">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 5D Mark III</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12824">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 600D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12821">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 60D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12859">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 650D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12880">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 6D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12914">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 700D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12883">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 70D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12698">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 7D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12911">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS 7D MarkII</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12356">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS D30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12384">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS D60</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12420">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Digital Rebel (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12441">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Digital Rebel (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12560">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Digital Rebel XTi (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12420">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss Digital (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12441">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss Digital (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12526">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss Digital N (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12560">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss Digital X (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12613">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss X2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12751">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Kiss X3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12861">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS M</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12953">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS M3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12751">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Rebel T1i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12613">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon EOS Rebel XSi (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12430">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon FV M1 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12865">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXUS 125HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12969">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXUS 165</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12837">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXUS 310IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12774">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY 220 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12691">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY 3000 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12358">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY DIGITAL</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12363">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY DIGITAL 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12484">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY Digital L2 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY DV M</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12438">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon IXY DV M2 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12412">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MV630i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12410">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MV650i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12448">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MV750i (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12438">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX 10i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12430">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX 3i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12417">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX100i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12416">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX150i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12457">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX25i (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX2i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12429">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon MVX3i (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12418">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12415">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12416">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 20 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 200 MC</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12438">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 300 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12457">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 40 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12549">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura 600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12430">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Optura Xi (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12367">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12385">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12686">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A1000 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12739">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A1100 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12862">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A1300IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12900">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A1400</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12366">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12386">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12689">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2000 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12734">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2100 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12842">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12874">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2300IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12873">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2400IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12913">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12898">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A2600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12377">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12406">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12786">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A3000 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12472">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A310 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12785">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A3100 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12897">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A3500IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12376">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A40</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12471">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A400 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12867">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A4000IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12537">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A410 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12559">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A420 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12536">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A430 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12629">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A450 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12617">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A460 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12666">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A470</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12735">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A480</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12783">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot A495</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12482">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A510 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12481">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A520 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12582">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A530 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12571">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A540 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12624">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A550 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12621">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A560 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12620">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A570 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12663">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A580</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12662">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A590 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12404">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A60 (PTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12541">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A610 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12540">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A620 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12602">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A630 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12601">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A640 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12635">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A650IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12403">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A70 (PTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12567">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12600">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A710 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12637">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A720 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12469">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A75 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12442">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A80 (PTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12838">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12863">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A810</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12473">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A85 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12475">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot A95 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12732">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot D10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12936">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot Elph135</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12937">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot Elph340HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12360">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12851">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G1 X</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12687">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12767">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G11</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12888">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G15</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12373">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12398">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G3 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12399">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G3 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12421">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12467">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot G6 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12581">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G7 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12634">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot G9 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12443">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot IXY Digital L (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12361">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot Pro90 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12444">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S1 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12353">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12854">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12357">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S100 (2000)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12369">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S110 (2001)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12891">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S110 (PTP Mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12917">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S120</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12528">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S2 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12355">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12389">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12400">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S230 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12401">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S230 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12570">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S3 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12375">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12364">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12390">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12374">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S40</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12405">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S400 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12474">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S410 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12396">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S45 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12397">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S45 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12616">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S5 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12407">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12468">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12466">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot S60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12465">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot S70 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12538">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S80 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12818">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot S95</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12443">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD10 Digital ELPH (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12623">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD1000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12470">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD110 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12676">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot SD1100 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12740">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot SD1200 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12788">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD1300 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12484">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD20 (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12480">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12599">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD40 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12529">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD430 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12543">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD450 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12530">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12572">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12542">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD630 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12569">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12622">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD750 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12661">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD770 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12738">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD780 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12660">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot SD790 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12619">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD850 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12694">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD880 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12565">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD900 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12774">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD940 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12737">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD970 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12691">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SD990</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12685">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX10 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12638">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Powershot SX100 IS (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12690">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX110 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12768">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX120 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12817">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX130 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12852">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX150 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12890">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX160IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12918">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX170 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12772">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX20 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12736">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX200 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12790">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX210 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12844">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX220HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12840">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX230HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12869">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX240HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12868">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX260HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12895">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX280HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12856">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX40HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12892">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX500IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12919">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX510 HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12955">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot SX520 HS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12368">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot unknown 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12380">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon PowerShot unknown 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12778">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Rebel T2i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12823">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Rebel T3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12859">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon Rebel T4i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1193">
+ <match key="usb.product_id" int="12408">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Canon ZR70MC (normal mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1999">
+ <match key="usb.product_id" int="4169">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio EX-S770</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1999">
+ <match key="usb.product_id" int="4162">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio EX-Z120</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1999">
+ <match key="usb.product_id" int="4173">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio EX-Z65</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1999">
+ <match key="usb.product_id" int="4172">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio EX-Z700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1999">
+ <match key="usb.product_id" int="4474">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio EX-ZR700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="49664">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Casio LV 10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1207">
+ <match key="usb.product_id" int="34985">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Caterpillar Cat S50</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Che-ez Snap</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Che-Ez Snap SNAP-U</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Che-ez! Babe</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="4098">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Che-ez! Splash</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Che-ez! SPYZ</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="32769">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Clever CAM 360</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="548">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Cobra DC125</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Cobra Digital Camera DC150</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7796">
+ <match key="usb.product_id" int="25874">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Coby COBY MP705</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7763">
+ <match key="usb.product_id" int="5">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Conceptronic CMTD2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Concord Eye-Q Duo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Concord Eye-Q Easy</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Concord EyeQ 4330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1000">
+ <match key="usb.product_id" int="8578">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Concord EyeQMini_1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1000">
+ <match key="usb.product_id" int="8576">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Concord EyeQMini_2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">CoolCam CP086</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2386">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio 10 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="1809">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio 6 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="1873">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio 7 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2321">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio 9 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2369">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio C2 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2049">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio D2 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2161">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio D2+ DAB FW 4.x (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2193">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio D2+ DMB FW 1.x (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2145">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio D2+ FW 2.x (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2177">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio D2+ FW 3.x (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2337">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio J3 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2305">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio S9 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="1793">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio U3 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="1889">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio U5 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3617">
+ <match key="usb.product_id" int="2353">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Cowon iAudio X7 (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16406">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative CardCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16391">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative Go Mini</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16394">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative PC-CAM 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative PC-CAM350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative PC-CAM600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16403">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Creative PC-CAM750</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16675">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative Portable Media Center</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16727">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16688">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Micro (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16700">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN MicroPhoto</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16691">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN MicroPhoto (alternate version)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16737">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Mozaic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16695">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Sleek (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16701">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Sleek Photo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16689">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Touch (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16720">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN V</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16728">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN V 2GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16722">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN V Plus</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16671">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Vision</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16723">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Vision W</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16702">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Vision:M</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16721">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Vision:M (DVP-HD0004)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16738">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN X-Fi</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16745">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN X-Fi 3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16680">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Creative ZEN Xtra (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4204">
+ <match key="usb.product_id" int="12821">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Curitel Communications, Inc. Verizon Wireless Device</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2125">
+ <match key="usb.product_id" int="3">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">D-Link DSC 350+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3428">
+ <match key="usb.product_id" int="4129">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">D-Link DSC 350F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1000">
+ <match key="usb.product_id" int="8496">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">D-MAX DM3588</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DC-N130t</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DC-N130ta</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32768">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DC31VC</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16690">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell Dell Pocket DJ (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="16687">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell DJ (2nd generation)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16700">
+ <match key="usb.product_id" int="45323">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell Inc Dell Streak 7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16700">
+ <match key="usb.product_id" int="45338">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell Inc Dell Venue 7 inch</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16700">
+ <match key="usb.product_id" int="45339">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell Inc Dell Venue 7 inch (2nd ID)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16700">
+ <match key="usb.product_id" int="17664">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dell Inc DJ Itty</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Digigr8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7994">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">DigiLand DL701Q</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Digital camera, CD302N</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DIGITAL MID#0020509 (no-name camera)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1498">
+ <match key="usb.product_id" int="4120">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream Enigma1.3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'elegante</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'elite</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'espion</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4483">
+ <match key="usb.product_id" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'espion XS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1498">
+ <match key="usb.product_id" int="4128">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'espion xtra</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream l'esprit</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">DigitalDream la ronde</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2726">
+ <match key="usb.product_id" int="24609">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Disney MixMax</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36944">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Disney pix micro</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36946">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Disney pix micro 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4310">
+ <match key="usb.product_id" int="8704">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Dunlop MP3 player 1GB / EGOMAN MD223AFD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Elta Medi@ digi-cam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Emprex PCD3600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1208">
+ <match key="usb.product_id" int="1027">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Epson PhotoPC 3000z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1208">
+ <match key="usb.product_id" int="1026">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Epson PhotoPC 850z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10608">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Fly Evo Tech 4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10608">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Fly iq4415 era style 3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6018">
+ <match key="usb.product_id" int="16385">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Fly iq449</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1747">
+ <match key="usb.product_id" int="8634">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">FOMA D905i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3530">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji Axia Eyeplate</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3530">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji Axia Slimshot</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="330">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix A330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="466">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix A800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="454">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix A820</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="467">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix A920</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="539">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix AV-150</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="403">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix E900</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="480">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F100fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="448">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="484">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F200 EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="411">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="449">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F31fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="453">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F40fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="468">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F50fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="486">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F60fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="506">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F70 EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="526">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix F80EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="557">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix H20EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="625">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix HS30EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="592">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix JX370</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="477">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S1000fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="475">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S100fs</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="495">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S1500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="512">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S1800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="488">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S2000HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="521">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S2500HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="576">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S2950</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="637">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S2980</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="613">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S4300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="664">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S4850</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="452">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S5700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="471">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S5800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="447">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S6500fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="322">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S7000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="399">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix S9500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="668">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix SL1000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="563">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix T200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="622">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix X-S1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="611">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix X10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="678">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix X20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="648">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix XF1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="472">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix Z100fd</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="513">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix Z35</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="525">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji FinePix Z700EXR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="510">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji Fujifilm A220</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="693">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji Fujifilm X-E2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji IX-1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1227">
+ <match key="usb.product_id" int="451">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Fuji S5 Pro</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">FujiFilm @xia ix-100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1221">
+ <match key="usb.product_id" int="4416">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Fujitsu, Ltd F903iX HIGH-SPEED</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1221">
+ <match key="usb.product_id" int="4923">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Fujitsu, Ltd STYLISTIC M532</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2334">
+ <match key="usb.product_id" int="9605">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Garmin Monterra</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Gear to go</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Generic SoundVision Clarity2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1112">
+ <match key="usb.product_id" int="28677">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Genius Smart 300, version 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1037">
+ <match key="usb.product_id" int="34908">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Gensis GT-7305 </merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1044">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Gigabyte RCT6773W22 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1044">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Gigabyte RCT6773W22 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Global Point 3 in 1 Digital Fun Graffiti 00044</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Global Point Clipster</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Global Point Splash Mini (underwater camera)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="7">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Ainol Novo) Fire/Flame</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="6">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Allwinner) A31 SoC</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20033">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Asus) Nexus 7 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20034">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Asus) Nexus 7 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="19983">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Asus) TF101 Transformer</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="19712">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Asus) TF201 Transformer</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="11522">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Barnes &amp; Noble) Nook Color</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="29706">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Lenovo) Ideapad K1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="53514">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for LG Electronics) P990/Optimus</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="53513">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for LG Electronics) P990/Optimus (Cyanogen)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20193">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for LG Electronics/Samsung) Nexus 4/5/7/10 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20194">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for LG Electronics/Samsung) Nexus 4/5/7/10 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="45066">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Medion) MD99000 (P9514)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="28840">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Motorola) Xoom (MZ604)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20005">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Samsung) Nexus S (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20006">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Samsung) Nexus S (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="1459">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Sony) S1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="28930">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Inc (for Toshiba) Thrive 7/AT105</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6353">
+ <match key="usb.product_id" int="20197">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Google Nexus 5 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="9842">
+ <match key="usb.product_id" int="17">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">GoPro HERO3+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="32796">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">GrandTek ScopeCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">GTW Electronics</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4866">
+ <match key="usb.product_id" int="4118">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Haier Ibiza Rhapsody 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4866">
+ <match key="usb.product_id" int="4119">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Haier Ibiza Rhapsody 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Haimei Electronics HE-501A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Hawking DC120 Pocketcam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="32285">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Hewlett-Packard Slate 10 HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="23837">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Hewlett-Packard Slate 7 2800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="23581">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Hewlett-Packard Slate 7 4600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4251">
+ <match key="usb.product_id" int="37126">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Hisense E860 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4251">
+ <match key="usb.product_id" int="37129">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Hisense E860 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4251">
+ <match key="usb.product_id" int="37125">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HiSense Sero 7 Pro</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="25858">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 120 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="25090">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 215</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="31746">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 217 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="32002">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 317 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="25346">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 318 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="26114">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 320 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="29698">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 407 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="30722">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 417 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="29186">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 43x (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="28162">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 507 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="30978">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 517 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="27906">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 607 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="25346">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 612 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="16642">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 618</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="26626">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 620 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="28930">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 635 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="27394">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 707 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="25602">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 715 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="30210">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 717 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="26370">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 720 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="27650">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 733 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="27138">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 735 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="16898">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 812 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="30466">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 817 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="32258">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 818 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="17154">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 850 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="16642">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 912</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="17410">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 935 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="17666">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart 945 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="16642">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart C500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="24578">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart C500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="61443">
+ <match key="usb.product_id" int="24578">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart C500 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="35586">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart E327 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="35842">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart E427 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="29954">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M22 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="31490">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M23 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="29442">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M307 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="31234">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M415 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="32770">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M425 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="33026">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M525 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="33282">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M527 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="39682">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M547 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="33794">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M725 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="34050">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M727 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="38402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart M737 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="38658">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart R742 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="34562">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart R927 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1008">
+ <match key="usb.product_id" int="34818">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">HP PhotoSmart R967 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="26716">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC (for Hewlett-Packard) HP Touchpad (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="26720">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC (for Hewlett-Packard) HP Touchpad (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Android Device ID1 (Zopo, HD2, Bird...)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Android Device ID2 (Zopo, HD2...)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3782">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Desire 310 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3773">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Droid DNA (MTP+UMS)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3583">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Droid DNA (MTP+UMS+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3219">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC EVO 4G LTE/One V (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3240">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC EVO 4G LTE/One V (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3582">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Butterfly (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3556">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Butterfly X290d</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1533">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Desire 510 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3541">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Desire X</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3633">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Droid Incredible 4G LTE (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3634">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Droid Incredible 4G LTE (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3573">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC Evo 4G LTE (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1966">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (HTC6500LVW)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3546">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3985">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3940">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3939">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3975">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP+ADB+?)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3935">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP+ADB+CDC)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3936">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP+CDC)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3562">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One (MTP+UMS+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3538">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One 802w (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1994">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (HTC6525LVW)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3877">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1562">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="4020">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (MTP+ADB+UMS)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="4021">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (MTP+UMS)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1995">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One M8 (Verizon) (HTC6525LVW)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="2009">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One Remix (HTC6515LVW)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3308">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One S (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3576">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One S (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3577">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One S (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3578">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One X (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3579">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One X (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3580">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One X (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3581">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC One X (ID4)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="2008">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC HTC6515LVW/One Remix</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="8210">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Motorola Razr D1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="1547">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC One M8 Google Play Edition (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="3533">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC One Mini (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="61642">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Windows Phone 8s ID1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="2977">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Windows Phone 8X ID1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2996">
+ <match key="usb.product_id" int="2978">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">HTC Windows Phone 8X ID2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4817">
+ <match key="usb.product_id" int="4226">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Huawei Ascend P8 </merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4817">
+ <match key="usb.product_id" int="13839">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Huawei Mediapad (mode 0)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4817">
+ <match key="usb.product_id" int="13855">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Huawei Mediapad (mode 1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4817">
+ <match key="usb.product_id" int="4177">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Huawei MTP device (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4817">
+ <match key="usb.product_id" int="4178">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Huawei MTP device (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37203">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">iClick 5X</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">iConcepts digital camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1161">
+ <match key="usb.product_id" int="49189">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">InFocus M810</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">INNOVAGE Mini Digital, CD302N</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6655">
+ <match key="usb.product_id" int="771">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Insignia NS-DV45</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6655">
+ <match key="usb.product_id" int="777">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Insignia Pilot 4GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6655">
+ <match key="usb.product_id" int="775">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Insignia Sport Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32903">
+ <match key="usb.product_id" int="2655">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Intel Chuwi vi8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32903">
+ <match key="usb.product_id" int="2581">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Intel Foxconn iView i700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32903">
+ <match key="usb.product_id" int="2582">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Intel Noblex T7A21</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32902">
+ <match key="usb.product_id" int="1584">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Intel Pocket PC Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32903">
+ <match key="usb.product_id" int="2654">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Intel Telcast Air 3G</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="32903">
+ <match key="usb.product_id" int="2555">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Intel Xolo 900/AZ210A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">IOMagic MagicImage 400</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ION digital camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4394">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Clix</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4390">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Clix2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4417">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver E100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4418">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver E100 v2/Lplayer</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4434">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver E150</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4455">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver E30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4433">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver E50</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="8449">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver H10 20GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="8453">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver H10 5.6GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="8450">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver H10 5GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4102">
+ <match key="usb.product_id" int="12292">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver H300 Series MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4104">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver iFP-880</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4386">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver N12</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4102">
+ <match key="usb.product_id" int="16386">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Portable Media Center 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4102">
+ <match key="usb.product_id" int="16387">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Portable Media Center 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4423">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Spinn</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4371">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4384">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T10 2GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4375">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T10b</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4373">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4372">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T20 FM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4376">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T20b</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4377">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4435">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4404">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T60</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4162">
+ <match key="usb.product_id" int="4419">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver T7 Volcano</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7784">
+ <match key="usb.product_id" int="4098">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver Tolino Tab 7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4374">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver U10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="16642">
+ <match key="usb.product_id" int="4402">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">iRiver X20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2848">
+ <match key="usb.product_id" int="56814">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Isabella Her Prototype</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1924">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ixla DualCam 640</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jazwares Star Wars no. 15256</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jazz JDC9</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jazz JDK235</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="13056">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jenoptik JD-3300z3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jenoptik JD-4100z3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1498">
+ <match key="usb.product_id" int="4102">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jenoptik JD350 entrance</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="0">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jenoptik JD350 video</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Jenoptik JDC 350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10545">
+ <match key="usb.product_id" int="2561">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Jolla Sailfish (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10545">
+ <match key="usb.product_id" int="2565">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Jolla Sailfish (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1265">
+ <match key="usb.product_id" int="24837">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">JVC Alneo XA-HD500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2126">
+ <match key="usb.product_id" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">KBGear JamCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2856">
+ <match key="usb.product_id" int="4108">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kenwood Media Keg HD10GB7 Sport Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8759">
+ <match key="usb.product_id" int="53512">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kobo Arc (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8759">
+ <match key="usb.product_id" int="53513">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kobo Arc (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8759">
+ <match key="usb.product_id" int="45320">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kobo Arc 7 HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1559">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C1530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1547">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C183</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1406">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1418">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C310</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1420">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1421">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C340</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1417">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C360</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1450">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C433</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1434">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1442">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C533</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1463">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C613</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1466">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C633</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1447">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C643</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1455">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C653</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1454">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C743</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1475">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C813</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1449">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C875</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1478">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak C913</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1436">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CD33</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1376">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX4200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1376">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX4210</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1333">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX4230</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1382">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX4300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1382">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX4310</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1396">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX6200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX6230</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1393">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX6330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1412">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX6445</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1401">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7220</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1400">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1400">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7310</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1403">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7430</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1414">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7525</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1404">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak CX7530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC220</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="288">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC240</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="289">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC240 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="272">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC260</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="273">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC265</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="304">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC280</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="274">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC290</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="306">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC3400</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="352">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC4800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="305">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DC5000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1317">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX3215</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1280">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX3500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1296">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX3600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1328">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX3700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="368">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX3900</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1365">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX4330</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1398">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX4530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1360">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX4900</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1392">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX6340</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1394">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX6440</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1397">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX6490</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1405">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX7440</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1407">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX7590</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1399">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak DX7630</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="768">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak EZ200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1344">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak LS420</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1384">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak LS443</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1385">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak LS663</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1381">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak LS743</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1383">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak LS753</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1486">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M1063</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1536">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M531</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1439">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M753</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1473">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M863</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1453">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M883</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1413">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak M893 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1024">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak MC3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1426">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak P850</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1427">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak P880</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1422">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1423">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V550</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1425">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V570</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1440">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V603</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1452">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V610</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1451">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V705</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1464">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak V803</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1437">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z612</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1438">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z650</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1415">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1459">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z710</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1460">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z712 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1408">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z730</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1416">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z740</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1027">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z7590</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1461">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z812 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1429">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z8612 IS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1487">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z915</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1485">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak Z950</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1034">
+ <match key="usb.product_id" int="1472">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Kodak ZD710</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1224">
+ <match key="usb.product_id" int="1826">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica e-mini</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE A2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="25">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE A200 (PictBridge mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="9">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE X21 (PictBridge mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="7">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE Z2 (PictBridge mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="24">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE Z3 (PictBridge mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4907">
+ <match key="usb.product_id" int="34">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Konica-Minolta DiMAGE Z5 (PictBridge mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7994">
+ <match key="usb.product_id" int="4102">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kurio 7S</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1154">
+ <match key="usb.product_id" int="2425">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kyocera DuraForce</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1154">
+ <match key="usb.product_id" int="2064">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kyocera KYL22</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1154">
+ <match key="usb.product_id" int="1393">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kyocera Rise</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1154">
+ <match key="usb.product_id" int="1434">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Kyocera Torque Model E6715</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36945">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Lego Bionicle</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9077">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Leica D-LUX 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6808">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Leica M9</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30519">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo A3500-F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30507">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo A5500-F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29848">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo A820</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30140">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo IdeaPad A3000 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30142">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo IdeaPad A3000 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30018">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo IdeaTab A2109A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30077">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo IdeaTab S2210a</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30440">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo IdeaTab S5000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29706">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo K1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30851">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo K3 Note</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30133">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo K900 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30554">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo LifeTab E733X</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29900">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo Lifetab S9512</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo P70-A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29847">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo P700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29862">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo P780</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29944">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo S660</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30488">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo S930</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29724">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo ThinkPad Tablet</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30450">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo Toga Tablet B6000-F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30698">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo Vibe Z2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30463">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo Yoga Tablet 10 B8000-H</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="30641">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Lenovo Yoga Tablet 2 Pro</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25073">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. Android phone (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25081">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. Android phone (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25215">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. G3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25198">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. G3 (VS985)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24859">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. GR-500 Music Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24719">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. KC910 Renoir Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24882">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. KM900</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25406">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG G Flex 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25145">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG VS870</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25149">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG VS890</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25116">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG VS980</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25125">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG2 Optimus</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24986">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. LG8575</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1086">
+ <match key="usb.product_id" int="28736">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. T54</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1086">
+ <match key="usb.product_id" int="28849">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. UP3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25372">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. Various E and P models</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="25189">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. VK810</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24592">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">LG Electronics Inc. VX8550 V CAST Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4100">
+ <match key="usb.product_id" int="24581">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">LG T5100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Lifetec LT 5995</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5073">
+ <match key="usb.product_id" int="28674">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Logik LOG DAX MP3 and DAB Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1133">
+ <match key="usb.product_id" int="2304">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Logitech Clicksmart 310</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1133">
+ <match key="usb.product_id" int="2384">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Logitech Pocket Digital</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Maginon SX-410z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="13056">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Maginon SX330z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Magpix B350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20555">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Maxell Max Pocket</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1647">
+ <match key="usb.product_id" int="33900">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Maxfield G-Flash NG 1GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Media-Tech mt-406</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3725">
+ <match key="usb.product_id" int="80">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">MediaTek Inc MT5xx and MT6xx SoCs</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1032">
+ <match key="usb.product_id" int="45066">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Medion Lifetab P9514</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6127">
+ <match key="usb.product_id" int="29827">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Medion Lifetab P9516</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD 5319</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD 6000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8709">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD 6126</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16642">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD 9700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1647">
+ <match key="usb.product_id" int="34128">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD8333 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1647">
+ <match key="usb.product_id" int="34184">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD8333 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1032">
+ <match key="usb.product_id" int="45065">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Medion MD99000 (P9514)/Olivetti Olipad 110</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4721">
+ <match key="usb.product_id" int="8210">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Megafon Login+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8222">
+ <match key="usb.product_id" int="17067">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Megafon MFLogin3T</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10821">
+ <match key="usb.product_id" int="8200">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Meizu MX Phone (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10821">
+ <match key="usb.product_id" int="3074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Meizu MX Phone (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4310">
+ <match key="usb.product_id" int="8960">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Memorex or iRiver MMP 8585/8586 or iRiver E200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3504">
+ <match key="usb.product_id" int="21874">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Micro-Star International P610/Model MS-5557</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Micromaxx Digital Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1600">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft Kin 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1570">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft Windows MTP Simulator</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1260">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft Windows Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1808">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft Zune</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1598">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft Zune HD</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="61642">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft/HTC HTC 8S</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="201">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft/Intel Bandon Portable Media Center</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1118">
+ <match key="usb.product_id" int="1601">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Microsoft/Sharp/nVidia Kin TwoM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32776">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mini Shotz ms-350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2125">
+ <match key="usb.product_id" int="3">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Minton S-Cam F5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mitek CD10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mitek CD30P</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="24778">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola A1200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28808">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Atrix MB860 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="25807">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Atrix XT687 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11826">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Atrix/Razr HD (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11827">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Atrix/Razr HD (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11879">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Droid Maxx (XT1080)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11941">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Droid Turbo (XT1254)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11944">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Droid Turbo Verizon</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11880">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Droid Ultra</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="16854">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Droid X/MB525 (Defy)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="16858">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola DROID2 (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17063">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola DROID2 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17279">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola DROID4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17267">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola DROID4 (PTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="18449">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola IdeaPad K1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="16860">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Milestone / Verizon Droid</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28874">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Milestone X2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11894">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto G (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11906">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto G (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11908">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto G (XT1032)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11874">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto X (XT1053)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11875">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto X (XT1058)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11878">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Moto X (XT1080)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="25619">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola MTP Test Command Interface</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="25781">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Razr D1/D3/i (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="25782">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Razr D1/D3/i (MTP+?)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11856">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola RAZR M XT907 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="11857">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola RAZR M XT907 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="25621">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola RAZR2 V8/U9/Z6</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="10853">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola V3m/V750 verizon</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28835">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom (Factory test)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28840">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28841">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17169">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom 2 Media Edition</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17158">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom 2 Media Edition (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="16847">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola Xoom 2 Media Edition (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28941">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola XT890/907/Razr (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="28942">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola XT890/907/Razr (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8888">
+ <match key="usb.product_id" int="17250">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Motorola XT912/XT928</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="49664">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mustek gSmart 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="41808">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mustek gSmart 350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="49696">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mustek gSmart mini</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="50208">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mustek gSmart mini 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1375">
+ <match key="usb.product_id" int="50464">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Mustek gSmart mini 3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2726">
+ <match key="usb.product_id" int="38401">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">MyMusix PD-6070</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1033">
+ <match key="usb.product_id" int="806">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">NEC Casio C811</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1033">
+ <match key="usb.product_id" int="1074">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">NEC Casio CA-201L</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1033">
+ <match key="usb.product_id" int="578">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">NEC FOMA N01A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1026">
+ <match key="usb.product_id" int="22120">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nextar MA715A-8R</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nexxtech Mini Digital Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="770">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 2000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="279">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 2100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="290">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 2200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="291">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 2200v1.1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="265">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 2500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="277">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 3100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="289">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 3200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="273">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 3500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="285">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 3700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="301">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="516">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="267">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="304">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="305">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4600a (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="297">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 4800 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="275">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="518">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="281">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5400 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="302">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="269">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="309">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 5900 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="313">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 7600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="311">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 7900 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="287">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 8700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="259">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon CoolPix 880</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="295">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 8800 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="274">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 885 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="401">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix 9400 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="258">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon CoolPix 990</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="550">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix A (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="392">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix AW100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="520">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="779">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L10 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="777">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L11 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="382">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L110 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="351">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L12 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="389">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L120 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="789">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L16 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="792">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L19 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="791">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L20 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="804">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L23 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="835">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L27</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="773">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L4 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="402">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix L820 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="320">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="381">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="322">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="545">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P330 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="524">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P4 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="361">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="388">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="347">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P5000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="547">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P510 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="355">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P5100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="552">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P520 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="785">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="367">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P6000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="383">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P7000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="395">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P7100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="549">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P7700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="553">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P7800 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="363">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P80 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="364">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P80 v1.1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="371">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix P90 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="823">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S01</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="838">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S02</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="334">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="353">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="375">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S220 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="376">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S225 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="801">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S2500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="813">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S2600 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="831">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S2700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="795">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S3000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="800">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S3100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="820">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S3200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="810">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S3300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="324">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S4 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="809">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S4300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="349">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="544">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S5100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="334">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S6 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="369">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="542">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S6000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="540">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S620 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="343">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S7c (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="543">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S8000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="546">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S8200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="390">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S9100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="403">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S9500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="843">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix S9700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon Coolpix SQ (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1028">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon D2H SLR (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1036">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon D2Hs (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1032">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon D2X SLR (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1052">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon D3 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1034">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon D50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1026">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1040">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1046">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D2Xs (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1050">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1060">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1061">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D300s (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1063">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1068">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1075">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1062">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3s (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1056">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D3x (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1067">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1044">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D40 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1048">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D40x (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1077">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D4s</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1059">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D5000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1065">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D5100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1071">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D5200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1073">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D5300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1054">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1069">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D600</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D610</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1030">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D70 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1058">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D700 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1064">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D7000 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1038">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D70s (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1072">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D7100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1079">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D750</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1042">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D80 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1066">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D800</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1070">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D800E</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1078">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D810</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1057">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon DSC D90 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1538">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon J1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1539">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon J2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1541">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon J3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1545">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon J4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1542">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon S1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1537">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon V1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1200">
+ <match key="usb.product_id" int="1540">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nikon V2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">nisis Quickpix Qp3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="548">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">NogaNet TDC-15</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="705">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 2710</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="101">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 3109c Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="95">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 3110c Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1122">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 3250 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="494">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 3710</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="521">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5130 XpressMusic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1214">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5200 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="738">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5230</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1210">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5300 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="108">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5310 XpressMusic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="234">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5320 XpressMusic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1150">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5500 Sport Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="553">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1204">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5700 XpressMusic Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="340">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5800 XpressMusic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="341">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5800 XpressMusic v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="345">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 5800 XpressMusic v3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="46">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 6120c Classic Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="152">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 6210 Navigator</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="141">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 6220 Classic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="60">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 6500c Classic Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="663">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 6600i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1491">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia 808 PureView</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1426">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia C5-00</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="961">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia C7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="973">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia C7 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="463">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E52</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="815">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E6</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="377">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E63</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="229">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E66</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="820">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="821">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E7 (Ovi mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="228">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E71</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="417">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E71x</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="545">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia E72</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1788">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia Lumia (RM-975)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1638">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia Lumia 301</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1633">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia Lumia WP8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1316">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1160">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N73</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1233">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N73 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1249">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N75 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="121">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N78 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="390">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N79</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="766">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="770">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N8 (Ovi mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1265">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N80 Internet Edition (Media Player)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="10">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N81 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="116">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N82 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="146">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N85 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1306">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N9</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1157">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N91 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1144">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N93 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1253">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N93i Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1263">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N95 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="110">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N95 Mobile Phone 8GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="978">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N950</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="57">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N96 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="501">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N97</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="619">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N97 mini</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="500">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia N97-1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="628">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia X6</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1057">
+ <match key="usb.product_id" int="1768">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Nokia XL</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5891">
+ <match key="usb.product_id" int="1">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">NormSoft, Inc. Pocket Tunes</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5891">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">NormSoft, Inc. Pocket Tunes 4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="28841">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia CM9-Adam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="46080">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia Shield (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="52999">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia Shield (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="52994">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia Tegra Note</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="28928">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia Various tablets (ID1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2389">
+ <match key="usb.product_id" int="28930">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">nVidia Various tablets (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7763">
+ <match key="usb.product_id" int="6">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">O2 Sistemas ZoltarTV</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-2100UZ</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-3000Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-3030Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-310Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-350Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-5500Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus C-55Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus D-540Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus D-560Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="272">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus E series (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="303">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus E-M5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="303">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus E-PL5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="278">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus FE4000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus IR-300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="275">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus mju 500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="303">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus SP-720UZ</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus X-100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="276">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus X-250</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="278">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus X920</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1972">
+ <match key="usb.product_id" int="278">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Olympus X925</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8921">
+ <match key="usb.product_id" int="10085">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Oppo Find 7 (ID 1)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8921">
+ <match key="usb.product_id" int="10100">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Oppo Find 7 (ID 2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8921">
+ <match key="usb.product_id" int="10099">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Oppo X9006</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Oregon Scientific DShot II</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Oregon Scientific DShot III</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-FS62</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-FZ20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-FZ38</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-FZ45</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-FZ50</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-GF1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-LS2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-LS3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-LX7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-TZ15</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-TZ18</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="9076">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic DMC-TZ8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="8517">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic P905i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1242">
+ <match key="usb.product_id" int="8536">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Panasonic P906i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4204">
+ <match key="usb.product_id" int="61443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Pantech Crux</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7501">
+ <match key="usb.product_id" int="20534">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Pegatron Chagall</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7501">
+ <match key="usb.product_id" int="20533">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Pegatron Chagall (ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7501">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Pegatron Hudl 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pencam TEVION MD 9456</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="9723">
+ <match key="usb.product_id" int="357">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pentax K3 (PTP Mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2583">
+ <match key="usb.product_id" int="13">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pentax Optio 43WR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2583">
+ <match key="usb.product_id" int="247">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pentax Optio W90</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2726">
+ <match key="usb.product_id" int="38658">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Perception Digital, Ltd Gigaware GX400</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8316">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Aria</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8377">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Ariaz</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8504">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Ariaz/97</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="357">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Audio</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8311">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Muse</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8334">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA1VBE08KX/78</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8196">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA3345</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="2135">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA5145</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="2126">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA6014/SA6015/SA6024/SA6025/SA6044/SA6045</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8194">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA6125/SA6145/SA6185</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="335">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear SA9200</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8309">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear ViBE SA1VBE04</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8315">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear ViBE SA1VBE04/08</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8375">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear VIBE SA2VBE[08|16]K/02</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8421">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips GoGear Vibe/02</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="333">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips HDD085/00 or HDD082/17</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="332">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips HDD14XX,HDD1620 or HDD1630/17</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="491">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips HDD6320</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="331">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips HDD6320/00 or HDD6330/17</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="6411">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips i908</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Philips P44417B keychain camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8592">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips PI3900B2/58 </merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="32257">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips PSA235</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="385">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips PSA610</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="356">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips SA1115/55</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="8226">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips SA5285</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1137">
+ <match key="usb.product_id" int="370">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Philips Shoqbox</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Phoebe Smartcam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2276">
+ <match key="usb.product_id" int="322">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pioneer DVR-LX60D</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2276">
+ <match key="usb.product_id" int="328">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Pioneer XMP3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pixart Gemini Keychain Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pixie Princess Jelly-Soft</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">PockCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1924">
+ <match key="usb.product_id" int="10376">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Polaroid DC700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1350">
+ <match key="usb.product_id" int="8245">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Polaroid Freescape/MPU-433158</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1350">
+ <match key="usb.product_id" int="3503">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Polaroid PDC 2300Z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Praktica Slimpix</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Precision Mini Digital Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Precision Mini, Model HA513A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10724">
+ <match key="usb.product_id" int="4611">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Prestigio 5504 DUO </merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10724">
+ <match key="usb.product_id" int="4355">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Prestigio 5505 DUO </merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1924">
+ <match key="usb.product_id" int="21248">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Pretec dc530</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="65535">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">PureDigital Ritz Disposable</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="34816">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for Gigabyte) GSmart G1342</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="61443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for Highscreen) Omega Prime S</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="553">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for Nokia) 5530 Xpressmusic</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="12694">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for Nokia/Verizon) 6205 Balboa/Verizon Music Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="26468">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for OnePlus) One (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="26469">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for OnePlus) One (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="36921">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for PhiComm) C230w (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1478">
+ <match key="usb.product_id" int="36901">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Qualcomm (for Smartfren) Andromax U</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">QuickPix QP1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3530">
+ <match key="usb.product_id" int="4">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Radioshack Flatfoto</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1924">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">RCA CDS1005</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="4704">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Redmi 1S (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="4712">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Redmi HM 1S (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Request Ultra Slim</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8715">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Capilo RX</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8707">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio 300G</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8708">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio G3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8712">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio G4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8716">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio GX</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="805">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio GX (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8724">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio GX 8</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="813">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio GX 8 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8717">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8722">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R1v</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="811">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R1v (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8723">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8726">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="815">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R3 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8727">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8730">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="272">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio R5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8706">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio RR30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="829">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio RR750 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8717">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Ricoh Caplio RZ1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4042">
+ <match key="usb.product_id" int="32775">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">RIM BlackBerry Storm/9650</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8719">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Rollei dr5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8719">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Rollei dr5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37181">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar 23070 Crayola Digital Cam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37181">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar 28290 and 28292 Digital C</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37181">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar 92045 Spiderman</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar clipshot no. 1169x</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32771">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Digital Keychain 11199</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32771">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Digital no, 6637x</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32771">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Digital no, 67480</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Digital no. 56379 Spyshot</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Digital no. 77379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Dora the Explorer no. 88067</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Hello Kitty no. 94009</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Kidz Cam 86379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Kidz-Cam no. 88379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Micro Digital 2428x</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Nickelodeon iCarly no. 88061</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar no. 1638x CyberPix</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar no. 75379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar no. 81890</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar no. 91379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar no. 98379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Star Wars kit no. 92022</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sakar Sticker Wizard no. 59379</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26726">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Samsung EK-GC100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26407">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung F250 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26720">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Galaxy models (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26716">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Galaxy models (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26743">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Galaxy models Kies mode</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26450">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung GT-B2700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26799">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung GT-B2710/Xcover 271</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="57868">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung GT-S5230</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26649">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung GT-S8500</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="1188">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung I550W Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20255">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Jet S8000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26420">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Juke (SCH-U470)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26178">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung M7600 Beat/GT-S8300T/SGH-F490/S8300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="5132">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Samsung NX1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="4996">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Samsung NX1000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26698">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Samsung S5620</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26467">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung SAMSUNG Trance</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26377">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung U600 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26793">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung Vibrant SGH-T959/Captivate/Media player mode</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="26370">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung X830 Mobile Phone</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20526">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-820</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20509">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-920 (501d)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20514">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-920 (5022)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20527">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-925(-GS)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20516">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-925GS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="23055">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-999 Portable Media Center/SGH-A707/SGH-L760V/SGH-U900/Verizon Intensity/Fascinate</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20531">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YH-J70J</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="1033">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-900</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20567">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-F2J</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20609">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-K3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20570">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-K5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20760">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-M1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20611">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-P2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20762">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-P3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20757">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-Q1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20765">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-Q2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20784">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-Q3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20773">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-R0</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20751">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-R1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20782">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-R2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20625">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-S3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20619">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-S5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20618">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-T10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20551">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-T7J</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20607">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-T9</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20564">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-U2J (YP-U2JXB/XAA)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20605">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-U3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20627">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-U4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20769">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-U5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20791">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-Z3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1256">
+ <match key="usb.product_id" int="20540">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Samsung YP-Z5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29712">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa c150</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29776">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa c240/c250</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29778">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa c250 v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29746">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Clip</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29748">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Clip v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29924">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Clip Zip</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29904">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Clip+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29824">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Connect</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29728">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa e200/e250/e260/e270/e280</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29730">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa e260/e280 v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29792">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Express</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29888">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Fuze</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29890">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Fuze v2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29920">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa Fuze+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29697">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa m200-tcc (MTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29696">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa m230/m240</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29744">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa m240/m250</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1921">
+ <match key="usb.product_id" int="29872">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SanDisk Sansa View</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1140">
+ <match key="usb.product_id" int="560">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sanyo VPC-C5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="35073">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ScanHex SX-35a</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="35081">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ScanHex SX-35b</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="35089">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ScanHex SX-35c</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2125">
+ <match key="usb.product_id" int="4097">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ScanHex SX-35d</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Scott APX 30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="851">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sea &amp; Sea 2G (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="8718">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sea &amp; Sea 5000G</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1482">
+ <match key="usb.product_id" int="807">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sea &amp; Sea 5000G (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Shark 2-in-1 Mini</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Shark SDC-513</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Shark SDC-519</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1245">
+ <match key="usb.product_id" int="38497">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SHARP Corporation SBM203SH</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1245">
+ <match key="usb.product_id" int="38602">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SHARP Corporation SH-06E</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1161">
+ <match key="usb.product_id" int="49189">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SHARP Corporation SH930W</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Shift3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1647">
+ <match key="usb.product_id" int="40976">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SigmaTel Inc. MTPMSCN Audio Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3191">
+ <match key="usb.product_id" int="4113">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix Blink 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3191">
+ <match key="usb.product_id" int="4117">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix CAMeleon</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3191">
+ <match key="usb.product_id" int="4098">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix SC2100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3191">
+ <match key="usb.product_id" int="4112">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix Snap</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3428">
+ <match key="usb.product_id" int="4097">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix Stylecam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3191">
+ <match key="usb.product_id" int="4097">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SiPix Web2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6390">
+ <match key="usb.product_id" int="258">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sirius Stiletto</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6390">
+ <match key="usb.product_id" int="272">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sirius Stiletto 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="13056">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Skanhex SX-330z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7132">
+ <match key="usb.product_id" int="64191">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Slacker Inc. Slacker Portable Media Player</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3530">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SMaL Ultra-Pocket</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3783">
+ <match key="usb.product_id" int="4104">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">So. Show 301</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1870">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A3000</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1990">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A5000 (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2391">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A5100 (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2279">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A5100 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2382">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A6000 (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2231">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A6000 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2387">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A77 M2 (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2381">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A7r (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2388">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A7S (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2274">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony Alpha-A7S (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="4756">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony DCR-SR75</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="704">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-A100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="743">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-A900 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-F707V (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-F717 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-F828 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-H1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-H2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-H5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1347">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-HX100V (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1567">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-HX200V (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1774">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-HX300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1169">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-HX5V (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="2221">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-HX60V (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-N2 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P10 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P120 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P30 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P31 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P32 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P41 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P43 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P5 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P50 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P51 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P52 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P71 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P72 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P73 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P92 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-P93 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-R1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1323">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-RX1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1322">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-RX100 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1867">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-RX100M2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S40 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S60 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="662">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S730 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S75 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="662">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S780 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-S85 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-T1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-T10 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-T3 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-U10 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-U20 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-V1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W1 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W12 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="835">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W130 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="760">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W200 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W35 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1340">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W510 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony DSC-W55 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20853">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY IS12S Xperia Acro HD MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="41333">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY IS12S Xperia Acro HD MTP+UMS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="45429">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY IS12S Xperia Acro MTP+UMS+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="370">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT22i Xperia P MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20850">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT22i Xperia P MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16754">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT22i Xperia P MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="390">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT25i Xperia V MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20870">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT25i Xperia V MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16774">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT25i Xperia V MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="361">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26i Xperia S MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20841">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26i Xperia S MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16745">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26i Xperia S MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="373">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26w Xperia Acro HD IS12S MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16757">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26w Xperia Acro HD IS12S MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="374">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26w Xperia Acro HD SO-03D MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16758">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT26w Xperia Acro HD SO-03D MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="375">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT28at Xperia Ion MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20855">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT28at Xperia Ion MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16759">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT28at Xperia Ion MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="41335">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT28at Xperia Ion MTP+UMS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="45431">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT28at Xperia Ion MTP+UMS+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="376">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT29i Xperia GX MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20856">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT29i Xperia GX MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16760">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT29i Xperia GX MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="386">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT30p Xperia T MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20866">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT30p Xperia T MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16770">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY LT30p Xperia T MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="371">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY MT27i Xperia Sola MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20851">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY MT27i Xperia Sola MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16755">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY MT27i Xperia Sola MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="41331">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY MT27i Xperia Sola MTP+UMS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="45427">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY MT27i Xperia Sola MTP+UMS+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony MVC-CD300 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony MVC-CD500 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1839">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony NEX-3N (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1656">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony NEX-6</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="860">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-A726/NWZ-A728/NWZ-A768</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="805">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-A815/NWZ-A818</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="859">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-A826/NWZ-A828/NWZ-A829</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1028">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-A845</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="878">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-B135</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="984">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-B142F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1214">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-B153F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1434">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-B163F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1673">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-B173F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1020">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-E344/E345</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1227">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-E354</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="901">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-E436F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1021">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-E445</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1446">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-E464</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="806">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S516</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1022">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S545</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="807">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S615F/NWZ-S616F/NWZ-S618F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="910">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S638F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="858">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S716F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="908">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S739F</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1228">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S754</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1448">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-S765</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="904">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-W202</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1211">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-W252B</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="919">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-X1050B/NWZ-X1060B</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="920">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony NWZ-X1051/NWZ-X1061</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="78">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony PTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1191">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A35 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="801">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A350 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1187">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A55 (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1641">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A57</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1846">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A58</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1847">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A58 (Control)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1396">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A65V (PTP mode)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1653">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">Sony SLT-A99v</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20854">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-03D Xperia Acro HD MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="41334">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-03D Xperia Acro HD MTP+UMS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="45430">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-03D Xperia Acro MTP+UMS+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="385">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-05D Xperia SX MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20865">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-05D Xperia SX MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16769">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY SO-05D Xperia SX MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1233">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony Sony Tablet P1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1459">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony Sony Tablet S</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1356">
+ <match key="usb.product_id" int="1460">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Sony Sony Tablet S1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="369">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST15i Xperia U MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="368">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST21i Xperia Tipo MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20848">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST21i Xperia Tipo MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16752">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST21i Xperia Tipo MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="384">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST23i Xperia Miro MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20864">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST23i Xperia Miro MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16768">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST23i Xperia Miro MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20849">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST25i Xperia U MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16753">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST25i Xperia U MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="382">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST27i/ST27a Xperia go MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20862">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST27i/ST27a Xperia go MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16766">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST27i/ST27a Xperia go MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="41342">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST27i/ST27a Xperia go MTP+UMS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="45438">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY ST27i/ST27a Xperia go MTP+UMS+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="365">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY WT19i Live Walkman MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="408">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia A MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20888">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia A MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="419">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia C MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20899">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia C MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16803">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia C MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="396">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20876">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16780">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="444">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E3 MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20924">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E3 MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="444">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia E3 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="459">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY XPeria E4g MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20939">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY XPeria E4g MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16843">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY XPeria E4g MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="392">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia J MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20872">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia J MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16776">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia J MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="402">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia L MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20882">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia L MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16786">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia L MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="411">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20891">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16795">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="427">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 Dual MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20907">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 Dual MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16811">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 Dual MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="426">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20906">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16810">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia M2 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="405">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia SP MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20885">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia SP MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16789">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia SP MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="397">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="404">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20877">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP+ADB 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20884">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP+ADB 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16781">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP+CDROM 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16788">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Tablet Z MTP+CDROM 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="403">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20883">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16787">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="438">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="406">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="412">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20918">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20886">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP+ADB (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20892">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP+ADB (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16796">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z Ultra MTP+CDROM (ID3)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="423">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 Compact D5503</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16807">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 Compact D5503 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20903">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 Compact MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="414">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20894">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16798">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z1 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="431">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z2 MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20911">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z2 MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16815">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z2 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 Compact MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20923">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 Compact MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16827">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 Compact MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="442">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20922">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16826">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia Z3 MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="393">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia ZL MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20873">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia ZL MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16777">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia ZL MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="407">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia ZR MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20887">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SONY Xperia ZR MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="326">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson c1605 Xperia Dual E MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20806">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson c1605 Xperia Dual E MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="217">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson C702</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="212">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson C902</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="239">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson C905</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="343">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson IS12S Xperia Acro MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20823">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson IS12S Xperia Acro MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16727">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson IS12S Xperia Acro MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="334">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson j108i (Cedar)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="53572">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson j10i (Elm)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="324">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson j10i2 (Elm)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="57344">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson K550i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="117">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson K850i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20815">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson LT15i Xperia Arc MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="335">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson LT15i Xperia arc S MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="346">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson MK16i Xperia MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20826">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson MK16i Xperia MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="342">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson MT11i Xperia Neo MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20822">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson MT11i Xperia Neo MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="349">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson R800/R88i Xperia Play MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20829">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson R800/R88i Xperia Play MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="358">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson SK17i Xperia Mini Pro MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20838">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson SK17i Xperia Mini Pro MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="359">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST15i Xperia Mini MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20839">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST15i Xperia Mini MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="360">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST17i Xperia Active MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20840">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST17i Xperia Active MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="16744">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST17i Xperia Active MTP+CDROM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="353">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST18a Xperia Ray MTP</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20833">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson ST18i Xperia Ray MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="251">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson T700</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="307">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson U5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="314">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson U8i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="4296">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W302</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="243">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W595</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="261">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W705/W715</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="198">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W760i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="179">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W890i</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="245">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W902</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="118">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W910</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="218">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W980</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="274">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson W995</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4046">
+ <match key="usb.product_id" int="20845">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">SonyEricsson WT19i Live Walkman MTP+ADB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Soundstar TDC-35</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SpyPen Axys</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SpyPen Cleo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SpyPen Luxo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SpyPen Memo</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SpyPen Xion</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SQ chip camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">StarCam CP086</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">STM USB Dual-mode camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Stop &amp; Shop 87096</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">STV0680</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37181">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Suprema Digital Keychain Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">SY-2107C</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1105">
+ <match key="usb.product_id" int="53512">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">TCL Alcatel one touch 986+</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5073">
+ <match key="usb.product_id" int="28695">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Technika MP-709</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2726">
+ <match key="usb.product_id" int="12305">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Tevion MD 81488</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="12341">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson / RCA Lyra HC308A</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="1911">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson / RCA Opal / Lyra MC4002</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="1908">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson EM28 Series</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="1916">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson Lyra MC5104B (M51 Series)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="12314">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson RCA H106</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1691">
+ <match key="usb.product_id" int="12328">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Thomson scenium E308</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2329">
+ <match key="usb.product_id" int="256">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Tiger Fast Flicks</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Timlex CP075</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="5008">
+ <match key="usb.product_id" int="21589">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">TomTom Rider 40</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4571">
+ <match key="usb.product_id" int="4096">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Topfield TF5000PVR</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="2403">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Excite AT300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="12">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="9">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat MEGF-40</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="29">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat MET401</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="26">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat MEU201</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="24">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat MEU202</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="17">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat P10</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="15">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat P20</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="16">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat S</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="25">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat T</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="22">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat U</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="20">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Gigabeat V30</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4402">
+ <match key="usb.product_id" int="17207">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba PDR-M11</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4402">
+ <match key="usb.product_id" int="17202">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba PDR-M60</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4402">
+ <match key="usb.product_id" int="17205">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba PDR-M61</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="4402">
+ <match key="usb.product_id" int="17204">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba PDR-M65</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2352">
+ <match key="usb.product_id" int="28928">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Toshiba Thrive AT100/AT105</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="13056">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Traveler SX330z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3478">
+ <match key="usb.product_id" int="16640">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Traveler SX410z</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7784">
+ <match key="usb.product_id" int="2">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">TrekStor i.Beat Organix 2.0</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1026">
+ <match key="usb.product_id" int="1553">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">TrekStor i.Beat Sweez FM</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1647">
+ <match key="usb.product_id" int="33834">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">TrekStor Vibez 8/12GB</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2125">
+ <match key="usb.product_id" int="3">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Trust Familycam 300</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1750">
+ <match key="usb.product_id" int="46">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Trust PowerC@m 350FS</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1750">
+ <match key="usb.product_id" int="45">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Trust PowerC@m 350FT</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2250">
+ <match key="usb.product_id" int="272">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Trust Spyc@m 100</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1276">
+ <match key="usb.product_id" int="20554">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Trust Spyc@m 500F FLASH</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1943">
+ <match key="usb.product_id" int="32794">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Typhoon StyloCam</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1363">
+ <match key="usb.product_id" int="514">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">UMAX AstraPen</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3428">
+ <match key="usb.product_id" int="4097">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">UMAX AstraPix 320s</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.interface.class" int="6">
+ <match key="usb.interface.subclass" int="1">
+ <match key="usb.interface.protocol" int="1">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">ptp</merge>
+ <merge key="camera.libgphoto2.name" type="string">USB PTP Class Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8711">
+ <match key="usb.product_id" int="1">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Various Viewpia DR/bq Kepler</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8711">
+ <match key="usb.product_id" int="17">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Various Viewpia DR/bq Kepler Debugging</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1032">
+ <match key="usb.product_id" int="14489">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Verizon Ellipsis 7</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ViviCam3350</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="37152">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ViviCam5B</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2425">
+ <match key="usb.product_id" int="551">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Vivitar Freelance</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="270">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Vivitar Mini Digital Camera</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="2362">
+ <match key="usb.product_id" int="271">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Vivitar Vivicam 55</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32778">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Vivitar Vivicam3350B</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Vivitar Vivicam35</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1161">
+ <match key="usb.product_id" int="57617">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Vizio (for Lenovo) LIFETAB S9714</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1161">
+ <match key="usb.product_id" int="49190">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Vizio Unknown 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1161">
+ <match key="usb.product_id" int="57408">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Vizio VTAB1008</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1329">
+ <match key="usb.product_id" int="8193">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Wacom Cintiq Companion Hybrid (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="3141">
+ <match key="usb.product_id" int="32769">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">Wild Planet Digital Spy Camera 70137</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7763">
+ <match key="usb.product_id" int="7">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Wyplay Wyplayer</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="4968">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi HM NOTE 1LTEW MIUI (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="4680">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Hongmi (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="4672">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Hongmi (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="61443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Mi-2 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="36921">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Mi-2 (MTP+ADB)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="65352">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Mi-2s (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="872">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Mi-3 (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="864">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi Mi-3w (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10007">
+ <match key="usb.product_id" int="1632">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Xiaomi MiPad (MTP)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="8711">
+ <match key="usb.product_id" int="6">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">YiFang BQ Tesla</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10518">
+ <match key="usb.product_id" int="37197">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Yota Phone 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10518">
+ <match key="usb.product_id" int="61443">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">Yota Phone 2 (ID2)</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="7871">
+ <match key="usb.product_id" int="32553">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">YU Yureka Vodafone smart turbo 4</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="1054">
+ <match key="usb.product_id" int="24576">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZiiLABS Zii EGG</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="10096">
+ <match key="usb.product_id" int="36956">
+ <merge key="info.category" type="string">camera</merge>
+ <addset key="info.capabilities" type="strlist">camera</addset>
+ <merge key="camera.access_method" type="string">proprietary</merge>
+ <merge key="camera.libgphoto2.name" type="string">ZINA Mini Digital Keychain Camer</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="835">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE Grand X In</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="65486">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V5</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="580">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V55 ID 1</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="581">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V55 ID 2</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="774">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V790/Blade 3</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="775">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V880E</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ <match key="usb.vendor_id" int="6610">
+ <match key="usb.product_id" int="899">
+ <merge key="info.category" type="string">portable_audio_player</merge>
+ <addset key="info.capabilities" type="strlist">portable_audio_player</addset>
+ <merge key="portable_audio_player.access_method" type="string">user</merge>
+ <merge key="portable_audio_player.type" type="string">mtp</merge>
+ <append key="portable_audio_player.output_formats" type="strlist">audio/mpeg</append>
+ <merge key="camera.libgphoto2.name" type="string">ZTE V985</merge>
+ <merge key="camera.libgphoto2.support" type="bool">true</merge>
+ </match>
+ </match>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/40-libgphoto2.rules b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/40-libgphoto2.rules
new file mode 100644
index 000000000..b9f04398d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2/40-libgphoto2.rules
@@ -0,0 +1,1955 @@
+# udev rules file for libgphoto2 devices (for udev 0.98 version)
+# Created from this library:
+# libgphoto2 2.5.8 all camlibs, gcc, ltdl, no EXIF
+# libgphoto2_port 0.12.0 gcc, ltdl, no USB, serial without locking
+#
+# this file is autogenerated, local changes will be LOST on upgrades
+ACTION!="add", GOTO="libgphoto2_rules_end"
+SUBSYSTEM!="usb|usb_device", GOTO="libgphoto2_usb_end"
+
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="33c3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="33c4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3643", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="353c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="362d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3586", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3348", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3349", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="334a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="33d8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="337c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="337d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="33cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3325", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3341", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3344", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3345", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3389", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="338a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3378", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3514", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="35a8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3644", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3725", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3609", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3473", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="355f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="3657", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="33aa", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="35e4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0502", ATTRS{idProduct}=="361d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="16d5", ATTRS{idProduct}=="8006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="16d5", ATTRS{idProduct}=="8005", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="06bd", ATTRS{idProduct}=="0403", MODE="l36"
+ATTRS{idVendor}=="06bd", ATTRS{idProduct}=="0404", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504b", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504a", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="08ca", ATTRS{idProduct}=="0111", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504a", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504b", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="0168", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="a00e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="f003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="904d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="0167", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="0800", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="0007", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="0008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="000a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="000c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="0012", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="000b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="000d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="0005", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1949", ATTRS{idProduct}=="00f2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0224", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="129a", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="12ab", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1290", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1292", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1294", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1297", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="12a0", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="12a8", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1291", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1293", MODE="l36"
+ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1299", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="5008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="5009", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="4002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1528", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1529", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1539", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1538", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="14b9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1548", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="120a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="131d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="120c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1301", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1303", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1311", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1321", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="31f3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1331", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1333", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="3229", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1307", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1357", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1351", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1309", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="130b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1313", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1315", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1335", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="130d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="130f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1319", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="14ef", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1568", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1569", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="14bf", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1518", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1508", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1509", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="14ad", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="149a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="146b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="145e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1458", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="31ab", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1207", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1341", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="131b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e79", ATTRS{idProduct}=="1208", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="913c", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5a0f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4ce0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4ce1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="514f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="7773", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="540f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="541f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="550f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5500", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4cd0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4cd1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="521f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="520f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4cc0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4cc1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5460", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5468", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5400", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5410", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5411", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5466", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="7772", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5506", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5561", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5200", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5201", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5210", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5211", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5214", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5220", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5221", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5230", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5231", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4e00", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4e01", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4e0f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4e1f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4d00", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4d01", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4c80", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4c81", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4c90", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4c91", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4ca0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4ca1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="561f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5f02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="580f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="581f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5480", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5481", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="7781", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5490", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="5491", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9051", MODE="l36"
+ATTRS{idVendor}=="2080", ATTRS{idProduct}=="0006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2080", ATTRS{idProduct}=="0005", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04a5", ATTRS{idProduct}=="3003", MODE="l36"
+ATTRS{idVendor}=="1d45", ATTRS{idProduct}=="459d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2a47", ATTRS{idProduct}=="7f10", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2a47", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2a47", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3047", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31bd", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31e6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f3", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3268", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="304d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f7", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3066", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30bf", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3075", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ba", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="310e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ff", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="311c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30fe", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3116", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3184", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3119", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3174", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3136", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3160", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3174", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3115", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="315f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3173", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3193", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3072", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3052", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3065", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3070", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3071", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ee", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3088", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3087", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30a5", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="317b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3270", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3083", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30bc", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3217", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="327f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ea", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3147", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31d0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3219", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30eb", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ec", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3084", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3099", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3113", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ef", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ee", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ee", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3110", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3146", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3145", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31cf", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="319b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31ea", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3101", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3102", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3199", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3218", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3215", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3250", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3272", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3253", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="319a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="326f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3044", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3060", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3084", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3099", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3110", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3084", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3099", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ee", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3110", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3145", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31cf", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3299", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31cf", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3145", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="308e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3241", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="32a9", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3225", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31e6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3193", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3046", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="304b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3096", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="307c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="307a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30a0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3096", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="308e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3081", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3080", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30a9", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="308d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3082", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="307f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3080", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3096", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30a9", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3105", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="308e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="304f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3061", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="318e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c3", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3264", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="304e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3062", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3191", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31be", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="322a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="324a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3249", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3271", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3262", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3059", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3076", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b8", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3261", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3058", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b7", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3243", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f9", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="310f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f8", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3155", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3149", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="317a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31bf", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31ef", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3126", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="311b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3150", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3177", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3176", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3074", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30fd", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30fc", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="313a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3139", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="315b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3073", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3117", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3138", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="315d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b5", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3226", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b9", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30bb", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31bc", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3288", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3289", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3048", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3233", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="318f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31df", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3258", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3055", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3085", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b3", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3125", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="315a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3049", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3041", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3236", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3045", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3051", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="325b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3275", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3043", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3065", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3070", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3071", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="311a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3057", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="304c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3066", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3056", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3075", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ba", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="306d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3148", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3077", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30fa", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3212", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="309b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3072", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30b6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3184", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30c0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3137", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30ff", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30f2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="311c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30fe", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3119", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3175", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c2", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3174", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="314b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3196", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3115", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31e6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c1", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3193", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="318d", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="315e", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3192", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31e0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3211", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3234", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="325a", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3276", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31e4", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31c0", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31f6", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="322c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3228", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3245", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3244", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="325f", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3238", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="325c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3277", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="329b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3050", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="305c", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="31ea", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3217", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="323b", MODE="l36"
+ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3078", MODE="l36"
+ATTRS{idVendor}=="07cf", ATTRS{idProduct}=="1049", MODE="l36"
+ATTRS{idVendor}=="07cf", ATTRS{idProduct}=="1042", MODE="l36"
+ATTRS{idVendor}=="07cf", ATTRS{idProduct}=="104d", MODE="l36"
+ATTRS{idVendor}=="07cf", ATTRS{idProduct}=="104c", MODE="l36"
+ATTRS{idVendor}=="07cf", ATTRS{idProduct}=="117a", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="c200", MODE="l36"
+ATTRS{idVendor}=="04b7", ATTRS{idProduct}=="88a9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="1002", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="8001", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0224", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="1e74", ATTRS{idProduct}=="6512", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1e53", ATTRS{idProduct}=="0005", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="03e8", ATTRS{idProduct}=="2182", MODE="l36"
+ATTRS{idVendor}=="03e8", ATTRS{idProduct}=="2180", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0952", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0711", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0751", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0911", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0941", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0801", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0871", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0891", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0861", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0881", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0921", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0901", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0701", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0761", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0e21", ATTRS{idProduct}=="0931", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4016", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4007", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="400a", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4012", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="400b", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4013", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4123", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4157", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4130", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="413c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4133", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4161", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4137", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="413d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4131", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4150", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4158", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4152", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="411f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4153", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="413e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4151", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4162", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4169", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4128", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="106c", ATTRS{idProduct}=="3215", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="084d", ATTRS{idProduct}=="0003", MODE="l36"
+ATTRS{idVendor}=="0d64", ATTRS{idProduct}=="1021", MODE="l36"
+ATTRS{idVendor}=="03e8", ATTRS{idProduct}=="2130", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8000", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="4132", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="412f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="413c", ATTRS{idProduct}=="b10b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="413c", ATTRS{idProduct}=="b11a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="413c", ATTRS{idProduct}=="b11b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="413c", ATTRS{idProduct}=="4500", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="1f3a", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="05da", ATTRS{idProduct}=="1018", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="1183", ATTRS{idProduct}=="0001", MODE="l36"
+ATTRS{idVendor}=="05da", ATTRS{idProduct}=="1020", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0aa6", ATTRS{idProduct}=="6021", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9050", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9052", MODE="l36"
+ATTRS{idVendor}=="10d6", ATTRS{idProduct}=="2200", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0403", MODE="l36"
+ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0402", MODE="l36"
+ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2970", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4001", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="06d3", ATTRS{idProduct}=="21ba", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0dca", ATTRS{idProduct}=="0002", MODE="l36"
+ATTRS{idVendor}=="0dca", ATTRS{idProduct}=="0002", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="014a", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01d2", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c6", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01d3", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="021b", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0193", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01e0", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c0", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01e4", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="019b", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c1", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c5", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01d4", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01e6", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01fa", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="020e", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="022d", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0271", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0250", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01dd", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01db", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01ef", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0200", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01e8", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0209", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0240", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="027d", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0265", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0298", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c4", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01d7", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01bf", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0142", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="018f", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="029c", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0233", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="026e", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0263", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="02a6", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0288", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01d8", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="0201", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="020d", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01fe", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="02b5", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="04cb", ATTRS{idProduct}=="01c3", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="04c5", ATTRS{idProduct}=="1140", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04c5", ATTRS{idProduct}=="133b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="091e", ATTRS{idProduct}=="2585", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0458", ATTRS{idProduct}=="7005", MODE="l36"
+ATTRS{idVendor}=="040d", ATTRS{idProduct}=="885c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0414", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0414", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="0007", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="0006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e41", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e0f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4d00", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="2d02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="740a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d10a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d109", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="b00a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="70a8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e25", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e26", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="05b3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="7102", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2672", ATTRS{idProduct}=="0011", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="801c", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="1302", ATTRS{idProduct}=="1016", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1302", ATTRS{idProduct}=="1017", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7e1d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="5d1d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="5c1d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="109b", ATTRS{idProduct}=="9106", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="109b", ATTRS{idProduct}=="9109", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="109b", ATTRS{idProduct}=="9105", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6502", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6202", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7c02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7d02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6302", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6602", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7402", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7802", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7202", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6e02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7902", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6d02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6302", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4102", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6802", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7102", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6b02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6402", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7602", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6702", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6c02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6a02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4202", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7702", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7e02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4302", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4102", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4402", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4502", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4102", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="6002", MODE="l36"
+ATTRS{idVendor}=="f003", ATTRS{idProduct}=="6002", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8b02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8c02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7502", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7b02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7302", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="7a02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8002", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8102", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8202", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="9b02", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8402", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8502", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="9602", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="9702", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8702", MODE="l36"
+ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="8802", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="685c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0ec6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0ebd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dff", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0c93", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0ca8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dfe", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0de4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="05fd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dd5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0e31", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0e32", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0df5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="07ae", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dda", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f91", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f64", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f63", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f87", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f5f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f60", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dea", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dd2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="07ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0f25", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="061a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0fb4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0fb5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="07cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="07d9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0cec", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0df8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0df9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dfa", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dfb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dfc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dfd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="07d8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="2012", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="060b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0dcd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="f0ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0ba1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0ba2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1082", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="360f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="361f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1051", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1052", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9153", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0489", ATTRS{idProduct}=="c025", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="19ff", ATTRS{idProduct}=="0303", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19ff", ATTRS{idProduct}=="0309", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19ff", ATTRS{idProduct}=="0307", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0a5f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0a15", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0a16", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0630", MODE="l36"
+ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0a5e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="8087", ATTRS{idProduct}=="09fb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="112a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1126", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1141", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1142", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1152", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1167", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1151", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="2101", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="2105", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="2102", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1006", ATTRS{idProduct}=="3004", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1122", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1006", ATTRS{idProduct}=="4002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1006", ATTRS{idProduct}=="4003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1147", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1113", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1120", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1117", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1115", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1114", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1118", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1119", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1153", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1134", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1042", ATTRS{idProduct}=="1143", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1e68", ATTRS{idProduct}=="1002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1116", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="4102", ATTRS{idProduct}=="1132", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0b20", ATTRS{idProduct}=="ddee", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0784", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="3300", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="05da", ATTRS{idProduct}=="1006", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="0000", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2931", ATTRS{idProduct}=="0a01", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2931", ATTRS{idProduct}=="0a05", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04f1", ATTRS{idProduct}=="6105", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="084e", ATTRS{idProduct}=="0001", MODE="l36"
+ATTRS{idVendor}=="0b28", ATTRS{idProduct}=="100c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2237", ATTRS{idProduct}=="d108", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2237", ATTRS{idProduct}=="d109", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2237", ATTRS{idProduct}=="b108", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0617", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="060b", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057e", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="058a", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="058c", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="058d", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0589", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05aa", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="059a", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05a2", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05b7", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ba", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05a7", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05af", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ae", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05c3", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05a9", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05c6", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="059c", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0560", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0560", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0535", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0566", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0566", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0574", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0573", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0571", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0584", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0579", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0578", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0578", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057a", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057b", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0586", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057c", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0120", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0121", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0110", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0111", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0130", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0112", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0132", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0160", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0131", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0525", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0500", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0510", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0530", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0170", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0555", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0576", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0550", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0570", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0572", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0575", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057d", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="057f", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0577", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0300", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0540", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0568", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0569", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0565", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0567", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ce", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0600", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="059f", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05c1", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ad", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0585", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0400", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0592", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0593", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="058e", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="058f", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0591", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05a0", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ac", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05ab", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05b8", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="059d", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="059e", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0587", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05b3", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05b4", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0580", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0588", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0403", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05b5", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="0595", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05cf", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05cd", MODE="l36"
+ATTRS{idVendor}=="040a", ATTRS{idProduct}=="05c0", MODE="l36"
+ATTRS{idVendor}=="04c8", ATTRS{idProduct}=="0722", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0001", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0019", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0009", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0007", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0018", MODE="l36"
+ATTRS{idVendor}=="132b", ATTRS{idProduct}=="0022", MODE="l36"
+ATTRS{idVendor}=="1f3a", ATTRS{idProduct}=="1006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0482", ATTRS{idProduct}=="0979", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0482", ATTRS{idProduct}=="0810", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0482", ATTRS{idProduct}=="0571", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0482", ATTRS{idProduct}=="059a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9051", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2375", MODE="l36"
+ATTRS{idVendor}=="1a98", ATTRS{idProduct}=="0002", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7737", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="772b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7498", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="75bc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="75be", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7542", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="757d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="76e8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="740a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7883", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="75b5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="775a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="74cc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7497", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="74a6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="74f8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7718", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="741c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="76f2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="77ea", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="76ff", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="77b1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61f1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61f9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="627f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="626e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="611b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="608f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6132", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="633e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6239", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="623d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="621c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6225", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="619a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="043e", ATTRS{idProduct}=="7040", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="043e", ATTRS{idProduct}=="70b1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="631c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6265", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6010", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6005", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="13d1", ATTRS{idProduct}=="7002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0900", MODE="l36"
+ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0950", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="3300", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504b", MODE="l36"
+ATTRS{idVendor}=="066f", ATTRS{idProduct}=="846c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0e8d", ATTRS{idProduct}=="0050", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0408", ATTRS{idProduct}=="b00a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7483", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504a", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2205", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4102", MODE="l36"
+ATTRS{idVendor}=="066f", ATTRS{idProduct}=="8550", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="066f", ATTRS{idProduct}=="8588", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0408", ATTRS{idProduct}=="b009", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1271", ATTRS{idProduct}=="2012", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="201e", ATTRS{idProduct}=="42ab", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2a45", ATTRS{idProduct}=="2008", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2a45", ATTRS{idProduct}=="0c02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="10d6", ATTRS{idProduct}=="2300", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0db0", ATTRS{idProduct}=="5572", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0640", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0622", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="04ec", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0710", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="063e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="f0ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00c9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0641", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8008", MODE="l36"
+ATTRS{idVendor}=="084d", ATTRS{idProduct}=="0003", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="60ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="7088", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="64cf", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e32", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e33", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e67", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2ea5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2ea8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e68", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="41d6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="41da", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="42a7", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="437f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="4373", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="4811", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="41dc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="70ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e76", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e82", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e84", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e62", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e63", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e66", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="6413", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="64b5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="64b6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e50", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e51", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="6415", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2a65", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="70a3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="70a8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="70a9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="4311", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="4306", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="41cf", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="710d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="710e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="4362", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+# not working yet: PROGRAM="check-mtp-device", , ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="c200", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="a350", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="c220", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="c420", MODE="l36"
+ATTRS{idVendor}=="055f", ATTRS{idProduct}=="c520", MODE="l36"
+ATTRS{idVendor}=="0aa6", ATTRS{idProduct}=="9601", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0409", ATTRS{idProduct}=="0326", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0409", ATTRS{idProduct}=="0432", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0409", ATTRS{idProduct}=="0242", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0402", ATTRS{idProduct}=="5668", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0302", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0117", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0122", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0123", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0109", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0115", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0121", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0111", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="011d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="012d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0204", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="010b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0130", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0131", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0129", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0113", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0206", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0119", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="012e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="010d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0135", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0139", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0137", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="011f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0103", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0127", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0112", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0191", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0102", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0226", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0188", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0208", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="030b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0309", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="017e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="015f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0185", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0315", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0318", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0317", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0324", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0343", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0305", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0192", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0140", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="017d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0142", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0221", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="020c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0169", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0184", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="015b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0223", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0163", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0228", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0311", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="016f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="017f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="018b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0225", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0229", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="016b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="016c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0173", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0337", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0346", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="014e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0161", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0177", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0178", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0321", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="032d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="033f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="031b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0320", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0334", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="032a", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0144", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0329", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="015d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0220", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="014e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0171", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="021e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="021c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0157", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="021f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0222", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0186", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0193", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="034b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0404", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="040c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0408", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="041c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="040a", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0402", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0410", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0416", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="041a", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0424", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0425", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0427", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042c", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0433", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0426", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0420", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042b", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0414", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0418", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0435", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0423", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0429", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042f", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0431", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="041e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042d", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0434", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0406", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0422", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0428", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="040e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0430", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0437", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0412", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042a", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="042e", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0436", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0421", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0602", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0603", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0605", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0609", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0606", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0601", MODE="l36"
+ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0604", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504a", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0224", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="02c1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0065", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="005f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0462", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="01ee", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0209", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04be", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="02e2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04ba", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="006c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="00ea", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="047e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0229", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04b4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0154", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0155", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0159", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="002e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0098", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="008d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="003c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0297", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="05d3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0592", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="03c1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="03cd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="01cf", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="032f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0179", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="00e5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0334", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0335", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="00e4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="01a1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0221", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="06fc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0666", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0661", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0524", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0488", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04d1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04e1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0079", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0186", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="02fe", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0302", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04f1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="000a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0074", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0092", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="051a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0485", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0478", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04e5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="04ef", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="006e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="03d2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0039", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="01f5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="026b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="01f4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="0274", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0421", ATTRS{idProduct}=="06e8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1703", ATTRS{idProduct}=="0001", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1703", ATTRS{idProduct}=="0002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="70a9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="b400", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="cf07", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="cf02", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="7100", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0955", ATTRS{idProduct}=="7102", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1e53", ATTRS{idProduct}=="0006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0110", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="012f", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="012f", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0116", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0113", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="012f", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0114", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0116", MODE="l36"
+ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0116", MODE="l36"
+ATTRS{idVendor}=="22d9", ATTRS{idProduct}=="2765", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22d9", ATTRS{idProduct}=="2774", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="22d9", ATTRS{idProduct}=="2773", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2374", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2145", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04da", ATTRS{idProduct}=="2158", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="106c", ATTRS{idProduct}=="f003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1d4d", ATTRS{idProduct}=="5036", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1d4d", ATTRS{idProduct}=="5035", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1d4d", ATTRS{idProduct}=="504a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="25fb", ATTRS{idProduct}=="0165", MODE="l36"
+ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="000d", MODE="l36"
+ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="00f7", MODE="l36"
+ATTRS{idVendor}=="0aa6", ATTRS{idProduct}=="9702", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="207c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="20b9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2138", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0165", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2077", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="208e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2004", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0857", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="084e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="014f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2075", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="207b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="20b7", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="20e5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="014d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="014c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="01eb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="014b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="190b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2190", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="7e01", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0181", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0164", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2022", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0172", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="08e4", ATTRS{idProduct}=="0142", MODE="l36"
+ATTRS{idVendor}=="08e4", ATTRS{idProduct}=="0148", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0784", ATTRS{idProduct}=="2888", MODE="l36"
+ATTRS{idVendor}=="0546", ATTRS{idProduct}=="2035", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0546", ATTRS{idProduct}=="0daf", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="29e4", ATTRS{idProduct}=="1203", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="29e4", ATTRS{idProduct}=="1103", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0784", ATTRS{idProduct}=="5300", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="ffff", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="8800", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="f003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="0229", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="3196", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="6764", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="6765", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9039", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9025", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0dca", ATTRS{idProduct}=="0004", MODE="l36"
+ATTRS{idVendor}=="0784", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="1260", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="1268", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220b", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2203", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2204", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2208", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220c", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="0325", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2214", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="032d", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220d", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2212", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="032b", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2213", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2216", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="032f", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2217", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="221a", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="0110", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="2202", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="033d", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220d", MODE="l36"
+ATTRS{idVendor}=="0fca", ATTRS{idProduct}=="8007", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220f", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220f", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="913d", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="913d", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="913d", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8003", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8003", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8003", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6866", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6727", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="685c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6877", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6752", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="68af", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="e20c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6819", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="04a4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="4f1f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6734", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6642", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="140c", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="1384", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="684a", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6763", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6709", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="68a9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6702", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="502e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="501d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5022", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="502f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5024", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5a0f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5033", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="0409", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5057", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5081", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="505a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5118", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5083", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="511a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5115", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="511d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5130", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5125", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="510f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="512e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5091", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="508b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="508a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5047", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="507f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5054", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="507d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5093", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5121", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5137", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="503c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7410", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7450", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7452", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7432", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7434", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74e4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74d0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7480", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7420", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7422", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7460", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74c0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74c2", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74e0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7401", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7400", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="7430", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0781", ATTRS{idProduct}=="74b0", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0474", ATTRS{idProduct}=="0230", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="8901", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="8909", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="8911", MODE="l36"
+ATTRS{idVendor}=="084d", ATTRS{idProduct}=="1001", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="0353", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="220e", MODE="l36"
+ATTRS{idVendor}=="05ca", ATTRS{idProduct}=="0327", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="04dd", ATTRS{idProduct}=="9661", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="04dd", ATTRS{idProduct}=="96ca", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0489", ATTRS{idProduct}=="c025", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="066f", ATTRS{idProduct}=="a010", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0c77", ATTRS{idProduct}=="1011", MODE="l36"
+ATTRS{idVendor}=="0c77", ATTRS{idProduct}=="1015", MODE="l36"
+ATTRS{idVendor}=="0c77", ATTRS{idProduct}=="1002", MODE="l36"
+ATTRS{idVendor}=="0c77", ATTRS{idProduct}=="1010", MODE="l36"
+ATTRS{idVendor}=="0d64", ATTRS{idProduct}=="1001", MODE="l36"
+ATTRS{idVendor}=="0c77", ATTRS{idProduct}=="1001", MODE="l36"
+ATTRS{idVendor}=="18f6", ATTRS{idProduct}=="0102", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="18f6", ATTRS{idProduct}=="0110", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="3300", MODE="l36"
+ATTRS{idVendor}=="1bdc", ATTRS{idProduct}=="fabf", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0dca", ATTRS{idProduct}=="0002", MODE="l36"
+ATTRS{idVendor}=="0ec7", ATTRS{idProduct}=="1008", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="074e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="07c6", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0957", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="08e7", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="094e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="08b7", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0953", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="094d", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0954", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="08e2", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="1294", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02c0", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02e7", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0543", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="061f", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06ee", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0491", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="08ad", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="052b", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="052a", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="074b", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0296", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0296", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0343", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02f8", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="053c", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5175", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="a175", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="b175", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0172", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5172", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4172", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0186", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5186", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4186", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0169", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5169", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4169", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0175", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4175", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0176", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4176", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0177", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5177", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4177", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="a177", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="b177", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0178", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5178", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4178", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0182", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5182", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4182", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0173", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5173", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4173", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="a173", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="b173", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="072f", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0678", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="035c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0325", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="035b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0404", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="036e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="03d8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04be", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="059a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0689", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="03fc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0385", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="03fd", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05a6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0326", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="03fe", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0327", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="038e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="035a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="038c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04cc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05a8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0388", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04bb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0397", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0398", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="004e", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04a7", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0321", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04a3", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0669", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0736", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0737", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0574", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0675", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5176", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="a176", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="b176", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0181", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5181", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4181", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="04d1", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05b3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05b4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0171", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0170", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5170", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4170", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0180", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5180", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4180", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5171", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4171", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="017e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="517e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="417e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="a17e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="b17e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="016d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0198", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5198", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01a3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51a3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41a3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="018c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="518c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="418c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01bc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51bc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01bc", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41cb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0188", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5188", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4188", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0192", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5192", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4192", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="019b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="519b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="419b", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01ab", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51ab", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41ab", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01aa", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51aa", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41aa", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0195", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5195", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4195", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="018d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0194", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="518d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5194", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="418d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4194", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0193", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5193", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4193", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01b6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0196", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="019c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51b6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5196", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="519c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="419c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01a7", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41a7", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51a7", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="019e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="519e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="419e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01af", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51af", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41af", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01bb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51bb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41bb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="01ba", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="51ba", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="41ba", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0189", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5189", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4189", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0197", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5197", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0146", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5146", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00d9", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00d4", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00ef", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0157", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5157", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4157", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="014e", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="d144", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0144", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="e000", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0075", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="514f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="014f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="015a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="515a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0156", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5156", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="015d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="515d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0166", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5166", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0167", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5167", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0168", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5168", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="4168", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0161", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="5161", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00fb", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0133", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="013a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="10c8", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00f3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0105", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00c6", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00b3", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00f5", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0076", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="00da", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="0112", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="516d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="913d", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0451", ATTRS{idProduct}=="d108", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="13d1", ATTRS{idProduct}=="7017", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0aa6", ATTRS{idProduct}=="3011", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="3035", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="0777", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="0774", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="077c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="301a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="069b", ATTRS{idProduct}=="3028", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0919", ATTRS{idProduct}=="0100", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="1390", ATTRS{idProduct}=="5455", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="11db", ATTRS{idProduct}=="1000", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0963", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="000c", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0009", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="001d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="001a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0018", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0011", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="000f", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0010", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0019", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0016", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="0014", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1132", ATTRS{idProduct}=="4337", MODE="l36"
+ATTRS{idVendor}=="1132", ATTRS{idProduct}=="4332", MODE="l36"
+ATTRS{idVendor}=="1132", ATTRS{idProduct}=="4335", MODE="l36"
+ATTRS{idVendor}=="1132", ATTRS{idProduct}=="4334", MODE="l36"
+ATTRS{idVendor}=="0930", ATTRS{idProduct}=="7100", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="3300", MODE="l36"
+ATTRS{idVendor}=="0d96", ATTRS{idProduct}=="4100", MODE="l36"
+ATTRS{idVendor}=="1e68", ATTRS{idProduct}=="0002", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0402", ATTRS{idProduct}=="0611", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="066f", ATTRS{idProduct}=="842a", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="084d", ATTRS{idProduct}=="0003", MODE="l36"
+ATTRS{idVendor}=="06d6", ATTRS{idProduct}=="002e", MODE="l36"
+ATTRS{idVendor}=="06d6", ATTRS{idProduct}=="002d", MODE="l36"
+ATTRS{idVendor}=="08ca", ATTRS{idProduct}=="0110", MODE="l36"
+ATTRS{idVendor}=="04fc", ATTRS{idProduct}=="504a", MODE="l36"
+ATTRS{idVendor}=="0797", ATTRS{idProduct}=="801a", MODE="l36"
+ATTRS{idVendor}=="0553", ATTRS{idProduct}=="0202", MODE="l36"
+ATTRS{idVendor}=="0d64", ATTRS{idProduct}=="1001", MODE="l36"
+PROGRAM="check-ptp-camera 06/01/01", MODE="l36"
+ATTRS{idVendor}=="2207", ATTRS{idProduct}=="0001", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2207", ATTRS{idProduct}=="0011", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0408", ATTRS{idProduct}=="3899", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="9120", MODE="l36"
+ATTRS{idVendor}=="0979", ATTRS{idProduct}=="0227", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010e", MODE="l36"
+ATTRS{idVendor}=="093a", ATTRS{idProduct}=="010f", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="800a", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="0489", ATTRS{idProduct}=="e111", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0489", ATTRS{idProduct}=="c026", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0489", ATTRS{idProduct}=="e040", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0531", ATTRS{idProduct}=="2001", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8001", MODE="l36"
+ATTRS{idVendor}=="1e53", ATTRS{idProduct}=="0007", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="1368", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="1248", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="1240", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="f003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="9039", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="ff48", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="0368", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="0360", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2717", ATTRS{idProduct}=="0660", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2207", ATTRS{idProduct}=="0006", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2916", ATTRS{idProduct}=="914d", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2916", ATTRS{idProduct}=="f003", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="1ebf", ATTRS{idProduct}=="7f29", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="041e", ATTRS{idProduct}=="6000", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="2770", ATTRS{idProduct}=="905c", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0343", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="ffce", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0244", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0245", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0306", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0307", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0383", ENV{ID_MEDIA_PLAYER}="1", MODE="l36"
+
+LABEL="libgphoto2_usb_end"
+
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="1908", ATTRS{idProduct}=="1315", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="1908", ATTRS{idProduct}=="1320", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="1908", ATTRS{idProduct}=="0102", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="1908", ATTRS{idProduct}=="3335", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0116", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0108", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0110", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="010e", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0104", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="04b0", ATTRS{idProduct}=="0401", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0109", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0105", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0109", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0109", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0109", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0109", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="0070", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="00a1", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="006e", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="0093", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="0091", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="25fb", ATTRS{idProduct}=="0164", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="25fb", ATTRS{idProduct}=="0132", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="25fb", ATTRS{idProduct}=="0102", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="0009", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0a17", ATTRS{idProduct}=="0007", MODE="l36"
+KERNEL=="sd[a-z]*", ATTRS{idVendor}=="1403", ATTRS{idProduct}=="0001", MODE="l36"
+KERNEL=="sg[0-9]*", ATTRS{idVendor}=="0168", ATTRS{idProduct}=="3011", MODE="l36"
+
+LABEL="libgphoto2_rules_end"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.16.bb b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.16.bb
new file mode 100644
index 000000000..7a691c611
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.16.bb
@@ -0,0 +1,54 @@
+SUMMARY = "libgphoto2 allows you to access digital cameras"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0448d3676bc0de00406af227d341a4d1"
+
+DEPENDS = "libtool jpeg virtual/libusb0 libexif zlib libxml2"
+
+# The .fdi and .rules files were generated with:
+# libgphoto2-2.5.8/packaging/generic$ qemu-arm -s 1048576 -r 2.6.24 -L /OE/angstrom-dev/staging/armv5te-angstrom-linux-gnueabi/ .libs/print-camera-list
+# They are release specific, so please regen when adding new releases
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/libgphoto2-${PV}.tar.bz2;name=libgphoto2 \
+ file://10-camera-libgphoto2-device.fdi \
+ file://10-camera-libgphoto2.fdi \
+ file://40-libgphoto2.rules \
+ file://0001-configure.ac-remove-AM_PO_SUBDIRS.patch \
+"
+
+SRC_URI[libgphoto2.md5sum] = "084d220d078d28c0c7a3ba13f4476128"
+SRC_URI[libgphoto2.sha256sum] = "e757416d1623e01a9d0d294b2e790162e434c0964f50d3b7ff1a3424b62a2906"
+
+inherit autotools pkgconfig gettext lib_package
+
+EXTRA_OECONF = " --with-drivers=all udevscriptdir=${nonarch_base_libdir}/udev ac_cv_lib_ltdl_lt_dlcaller_register=yes"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gd] = ",--without-gdlib,gd"
+PACKAGECONFIG[serial] = "--enable-serial,--disable-serial,lockdev"
+
+do_configure_append() {
+ cp ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in ${S}/libgphoto2_port/po/
+ cd ${S}/libgphoto2_port/
+ autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
+ cd ${S}
+}
+
+do_install_append() {
+ install -d ${D}${datadir}/hal/fdi/information/20thirdparty
+ install -m 0644 ${WORKDIR}/*.fdi ${D}${datadir}/hal/fdi/information/20thirdparty/
+
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ install -m 0755 ${WORKDIR}/*.rules ${D}${sysconfdir}/udev/rules.d/
+}
+
+PACKAGES =+ "libgphotoport libgphoto2-camlibs"
+FILES_libgphoto2-camlibs = "${libdir}/libgphoto2*/*/*.so*"
+RRECOMMENDS_${PN} = "libgphoto2-camlibs"
+
+FILES_libgphotoport = "${libdir}/libgphoto2_port.so.*"
+
+FILES_${PN} += "${nonarch_base_libdir}/udev/* ${datadir}/hal"
+FILES_${PN}-dbg += "${libdir}/*/*/.debug"
+FILES_${PN}-dev += "${libdir}/*/*/*.la"
+FILES_${PN}-doc += "${datadir}/libgphoto2_port/0.12.0/vcamera/README.txt"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0001-Include-stdlib.h-for-exit-API.patch b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0001-Include-stdlib.h-for-exit-API.patch
new file mode 100644
index 000000000..d529ddd23
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0001-Include-stdlib.h-for-exit-API.patch
@@ -0,0 +1,34 @@
+From f8ac48abded02353918b02db38629988bd111c46 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 08:19:44 -0700
+Subject: [PATCH 1/2] Include stdlib.h for exit() API
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes
+main.c:81: warning: incompatible implicit declaration of built-in function ‘exit’
+
+Patch from Debian
+http://sources.debian.net/src/gtkperf/0.40%2Bds-2/debian/patches/01-include_stdlib.patch/
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/main.c b/src/main.c
+index 888eb36..c226799 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -11,6 +11,7 @@
+ #endif
+
+ #include <getopt.h>
++#include <stdlib.h>
+
+ #include "interface.h"
+ #include "support.h"
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0002-timing.c-Fix-format-security-errors.patch b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0002-timing.c-Fix-format-security-errors.patch
new file mode 100644
index 000000000..0548040af
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/0002-timing.c-Fix-format-security-errors.patch
@@ -0,0 +1,42 @@
+From 47974b8473c5b928f6742caee466f5c2d4d2e9eb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 08:22:26 -0700
+Subject: [PATCH 2/2] timing.c: Fix format-security errors
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/timing.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/timing.c b/src/timing.c
+index 0b8f0eb..c0668c9 100644
+--- a/src/timing.c
++++ b/src/timing.c
+@@ -97,7 +97,7 @@ add_test_info_time (AppData * appdata)
+ gtk_text_buffer_insert (appdata->textview_info_buffer, &iter,
+ timestring, -1);
+
+- g_printf (timestring);
++ g_printf ("%s", timestring);
+
+ }
+
+@@ -129,7 +129,7 @@ add_test_info_end (AppData * appdata)
+ gtk_statusbar_push (GTK_STATUSBAR (appdata->statusbar_main), 0,
+ " Test Finished");
+
+- g_printf (timestring);
++ g_printf ("%s", timestring);
+
+ }
+
+@@ -154,5 +154,5 @@ add_test_info_start (AppData * appdata)
+ gtk_statusbar_push (GTK_STATUSBAR (appdata->statusbar_main), 0,
+ " Running tests...");
+
+- g_printf (timestring);
++ g_printf ("%s", timestring);
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/Makevars b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/Makevars
new file mode 100644
index 000000000..8b09f53b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf/Makevars
@@ -0,0 +1,25 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb
new file mode 100644
index 000000000..4094513b2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb
@@ -0,0 +1,32 @@
+SUMMARY = "GTK Performance tool"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://prdownloads.sourceforge.net/${BPN}/${BPN}_${PV}.tar.gz \
+ file://Makevars \
+ file://0001-Include-stdlib.h-for-exit-API.patch \
+ file://0002-timing.c-Fix-format-security-errors.patch \
+ "
+
+SRC_URI[md5sum] = "4331dde4bb83865e15482885fcb0cc53"
+SRC_URI[sha256sum] = "9704344e732038eecbd007dd996a56293a6b027b5b76f3f036273a3fae1ab27b"
+
+DEPENDS = "gtk+"
+
+S = "${WORKDIR}/${BPN}"
+
+inherit distro_features_check autotools binconfig pkgconfig gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_configure_prepend () {
+ rm -f ${S}/m4/init.m4
+ cp -f ${WORKDIR}/Makevars ${S}/po/
+}
+
+do_install_append () {
+ rm -rf ${D}/${exec_prefix}/doc
+}
+
+FILES_${PN} += "${exec_prefix}/share/duck.png"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_1.900.1.bb b/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_1.900.1.bb
new file mode 100644
index 000000000..cc6a694ce
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_1.900.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Jpeg 2000 implementation"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=baa697d7510288a9cdcce9bd7edaf9bc"
+
+PR = "r1"
+
+SRC_URI = "http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-${PV}.zip"
+
+inherit autotools lib_package
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[jpeg] = "--enable-libjpeg,--disable-libjpeg,jpeg"
+PACKAGECONFIG[opengl] = "--enable-opengl,--disable-opengl,freeglut"
+
+EXTRA_OECONF = "--enable-shared"
+
+SRC_URI[md5sum] = "a342b2b4495b3e1394e161eb5d85d754"
+SRC_URI[sha256sum] = "6b905a9c2aca2e275544212666eefc4eb44d95d0a57e4305457b407fe63f9494"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.74.4.bb b/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.74.4.bb
new file mode 100644
index 000000000..91fa00cc9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.74.4.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A pedagogically-oriented open source site containing software that is broadly useful for image processing and image analysis applications"
+DEPENDS = "jpeg tiff libpng zlib"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://leptonica-license.txt;md5=34aa579294e8284b7b848c8d5d361e8f"
+
+SRC_URI = "http://leptonica.com/source/leptonica-${PV}.tar.gz"
+SRC_URI[md5sum] = "4f32be9bd2e2c142ba018037ab5d746f"
+SRC_URI[sha256sum] = "29c35426a416bf454413c6fec24c24a0b633e26144a17e98351b6dffaa4a833b"
+
+EXTRA_OECONF += " \
+ --without-libwebp \
+"
+
+PACKAGECONFIG ??= "giflib"
+PACKAGECONFIG[openjpeg] = "--with-libopenjpeg,--without-libopenjpeg,openjpeg"
+PACKAGECONFIG[giflib] = "--with-giflib,--without-giflib,giflib"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libmng/libmng_2.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/libmng/libmng_2.0.3.bb
new file mode 100644
index 000000000..ba928d281
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libmng/libmng_2.0.3.bb
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Development files for the Multiple-image Network Graphics library"
+HOMEPAGE = "http://www.libpng.org/pub/mng/"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=32becdb8930f90eab219a8021130ec09"
+SECTION = "devel"
+DEPENDS = "zlib"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "7e9a12ba2a99dff7e736902ea07383d4"
+SRC_URI[sha256sum] = "cf112a1fb02f5b1c0fce5cab11ea8243852c139e669c44014125874b14b7dfaa"
+
+inherit autotools-brokensep pkgconfig
+
+PACKAGECONFIG ??= "jpeg"
+
+PACKAGECONFIG[jpeg] = "--with-jpeg,--without-jpeg,jpeg"
+PACKAGECONFIG[lcms] = "--with-lcms2,--without-lcms2,lcms"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.11.bb b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.11.bb
new file mode 100644
index 000000000..38dac06e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.11.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "library for easy implementation of a RDP/VNC server"
+HOMEPAGE = "https://libvnc.github.io"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f"
+
+DEPENDS += "zlib libsdl jpeg libpng gtk+ libgcrypt nettle gnutls gmp"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)}"
+PACKAGECONFIG[systemd] = ",,systemd"
+
+RDEPENDS_${PN} += "libpng gtk+ libgcrypt"
+
+inherit distro_features_check autotools binconfig pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "https://github.com/LibVNC/libvncserver/archive/LibVNCServer-${PV}.tar.gz"
+SRC_URI[md5sum] = "7f06104d5c009813e95142932c4ddb06"
+SRC_URI[sha256sum] = "193d630372722a532136fd25c5326b2ca1a636cbb8bf9bb115ef869c804d2894"
+
+S = "${WORKDIR}/${BPN}-LibVNCServer-${PV}"
+
+TARGET_LDFLAGS += "-lgcrypt"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-Fix-the-error-of-can-t-find-header-file.patch b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-Fix-the-error-of-can-t-find-header-file.patch
new file mode 100644
index 000000000..045f3cafa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-Fix-the-error-of-can-t-find-header-file.patch
@@ -0,0 +1,101 @@
+From eb0086dc4ea8fe9cda069456287b3a29a2631d30 Mon Sep 17 00:00:00 2001
+From: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+Date: Wed, 13 Dec 2017 16:18:45 +0900
+Subject: [PATCH] Fix the error of can't find header file
+
+Upstream-Status: Inappropriate [embedded specific]
+This fix is just for yocto.
+
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ src/NCApplication.cc | 2 +-
+ src/NCstyle.h | 2 +-
+ src/NCurses.h | 2 +-
+ src/ncursesp.h | 2 +-
+ src/ncursesw.cc | 2 +-
+ src/ncursesw.h | 4 ++--
+ 6 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/src/NCApplication.cc b/src/NCApplication.cc
+index 5bcf969..510f034 100644
+--- a/src/NCApplication.cc
++++ b/src/NCApplication.cc
+@@ -23,7 +23,7 @@
+
+ /-*/
+
+-#include <ncursesw/curses.h>
++#include <curses.h>
+
+ #define YUILogComponent "ncurses"
+ #include <yui/YUILog.h>
+diff --git a/src/NCstyle.h b/src/NCstyle.h
+index a40d5a8..3657917 100644
+--- a/src/NCstyle.h
++++ b/src/NCstyle.h
+@@ -25,7 +25,7 @@
+ #ifndef NCstyle_h
+ #define NCstyle_h
+
+-#include <ncursesw/ncurses.h>
++#include <ncurses.h>
+
+ #include <iosfwd>
+ #include <string>
+diff --git a/src/NCurses.h b/src/NCurses.h
+index a07c6bf..d17d3c3 100644
+--- a/src/NCurses.h
++++ b/src/NCurses.h
+@@ -34,7 +34,7 @@
+ #include <yui/YWidget.h>
+ #include <yui/YMenuItem.h>
+
+-#include <ncursesw/curses.h> /* curses.h: #define NCURSES_CH_T cchar_t */
++#include <curses.h> /* curses.h: #define NCURSES_CH_T cchar_t */
+ #include <wchar.h>
+
+ #include "ncursesw.h"
+diff --git a/src/ncursesp.h b/src/ncursesp.h
+index d478347..2fcfea5 100644
+--- a/src/ncursesp.h
++++ b/src/ncursesp.h
+@@ -28,7 +28,7 @@
+ #include <iosfwd>
+
+ #include "ncursesw.h"
+-#include <ncursesw/panel.h>
++#include <panel.h>
+
+ class NCursesPanel : public NCursesWindow
+ {
+diff --git a/src/ncursesw.cc b/src/ncursesw.cc
+index 3c771af..bb83210 100644
+--- a/src/ncursesw.cc
++++ b/src/ncursesw.cc
+@@ -47,7 +47,7 @@
+ #include <iostream>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <ncursesw/term.h>
++#include <term.h>
+ #undef line
+ #undef columns
+
+diff --git a/src/ncursesw.h b/src/ncursesw.h
+index d25923a..c140d37 100644
+--- a/src/ncursesw.h
++++ b/src/ncursesw.h
+@@ -27,8 +27,8 @@
+
+ #include <iosfwd>
+
+-#include <ncursesw/curses.h>
+-#include <ncursesw/etip.h>
++#include <curses.h>
++#include <etip.h>
+ #include <cstdio>
+ #include <cstdarg>
+ #include <climits>
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-use-_nl_msg_cat_cntr-only-with-glibc.patch b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-use-_nl_msg_cat_cntr-only-with-glibc.patch
new file mode 100644
index 000000000..8e3774c1a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses/0001-use-_nl_msg_cat_cntr-only-with-glibc.patch
@@ -0,0 +1,40 @@
+From 4b84f243a70a8c07f6a38dad3c9411fa707f25c9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 4 Mar 2018 17:08:43 -0800
+Subject: [PATCH] use _nl_msg_cat_cntr only with glibc
+
+The musl libc provides libintl (similar to glibc)
+but does not use the same internals,
+so even though we are using the GNU gettext
+the libintl included with the libc does not define
+_nl_msg_cat_cntr and it does not need to.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/NCi18n.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/NCi18n.h b/src/NCi18n.h
+index 165b0e7..bfc4ed7 100644
+--- a/src/NCi18n.h
++++ b/src/NCi18n.h
+@@ -59,12 +59,13 @@ inline void setTextdomain( const char * domain )
+ bindtextdomain( domain, YSettings::localeDir().c_str() );
+ bind_textdomain_codeset( domain, "UTF-8" );
+ textdomain( domain );
+-
++#if defined(__GLIBC__)
+ // Make change known
+ {
+ extern int _nl_msg_cat_cntr;
+ ++_nl_msg_cat_cntr;
+ }
++#endif
+ }
+
+
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_git.bb b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_git.bb
new file mode 100644
index 000000000..578c71301
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_git.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Character Based User Interface for libyui"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.lgpl-3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ file://COPYING.lgpl-2.1;md5=4fbd65380cdd255951079008b364516c \
+"
+
+SRC_URI = "git://github.com/libyui/libyui-ncurses.git \
+ file://0001-use-_nl_msg_cat_cntr-only-with-glibc.patch \
+ "
+
+SRC_URI_append_class-target = " file://0001-Fix-the-error-of-can-t-find-header-file.patch"
+
+PV = "2.48.3+git${SRCPV}"
+SRCREV = "79b804b45ffc6a0d92e28e793ff389a20b63b54b"
+
+S = "${WORKDIR}/git"
+
+inherit cmake gettext pkgconfig
+
+DEPENDS += "boost libyui ncurses"
+
+BBCLASSEXTEND = "nativesdk"
+
+do_configure_prepend () {
+ cd ${S}
+ git checkout bootstrap.sh
+ sed -i "s#/usr#${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" bootstrap.sh
+ ./bootstrap.sh
+ mkdir -p ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
+ cp ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib/libyui.so* ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
+ cd -
+ sed -i "s#\${YPREFIX}#\${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" ${S}/CMakeLists.txt
+ sed -i "s#/usr#${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" ${PKG_CONFIG_SYSROOT_DIR}${libdir}/cmake/libyui/LibyuiLibraryDepends-release.cmake
+}
+
+do_install_append () {
+ if [ "${libdir}" = "${base_prefix}/usr/lib" ] && [ -d ${D}/usr/lib64 ]; then
+ mv ${D}/usr/lib64 ${D}/usr/lib
+ fi
+}
+
+do_install_append_class-nativesdk () {
+ mkdir -p ${D}/${base_prefix}
+ mv ${D}/usr ${D}/${base_prefix}
+}
+
+FILES_${PN} += "${datadir}/*"
+
+FILES_${PN}-dev += "${libdir}/*"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-GCC-8-warning.patch b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-GCC-8-warning.patch
new file mode 100644
index 000000000..c1ba42eee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-GCC-8-warning.patch
@@ -0,0 +1,48 @@
+From 1e6d40fec16a94d1a4bd40634405267200b7e969 Mon Sep 17 00:00:00 2001
+From: marxin <mliska@suse.cz>
+Date: Tue, 10 Apr 2018 15:21:40 +0200
+Subject: [PATCH] Fix GCC 8 warning:
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+/home/marxin/Programming/libyui/src/YDialog.cc: In static member function ‘static void YDialog::showText(const string&, bool)’:
+/home/marxin/Programming/libyui/src/YDialog.cc:690:26: error: catching polymorphic type ‘class YUIException’ by value [-Werror=catch-value=]
+ catch ( YUIException exception )
+ ^~~~~~~~~
+/home/marxin/Programming/libyui/src/YDialog.cc: In static member function ‘static bool YDialog::showRelNotesText()’:
+/home/marxin/Programming/libyui/src/YDialog.cc:814:26: error: catching polymorphic type ‘class YUIException’ by value [-Werror=catch-value=]
+ catch ( YUIException exception )
+ ^~~~~~~~~
+---
+Upstream-Status: Submitted [https://github.com/libyui/libyui/pull/122]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+ src/YDialog.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/YDialog.cc b/src/YDialog.cc
+index 92e5031..8ecff90 100644
+--- a/src/YDialog.cc
++++ b/src/YDialog.cc
+@@ -687,7 +687,7 @@ YDialog::showText( const std::string & text, bool useRichText )
+ dialog->waitForEvent();
+ dialog->destroy();
+ }
+- catch ( YUIException exception )
++ catch ( YUIException &exception )
+ {
+ // Don't let the application die just because help couldn't be displayed.
+
+@@ -811,7 +811,7 @@ YDialog::showRelNotesText()
+ }
+ dialog->destroy();
+ }
+- catch ( YUIException exception )
++ catch ( YUIException &exception )
+ {
+ // Don't let the application die just because RN couldn't be displayed.
+
+--
+2.17.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-build-with-clang.patch b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-build-with-clang.patch
new file mode 100644
index 000000000..426901819
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui/0001-Fix-build-with-clang.patch
@@ -0,0 +1,687 @@
+From 18562671982ad97549bccb444fdbb5905b6e9335 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 24 Apr 2018 15:06:14 -0700
+Subject: [PATCH] Fix build with clang
+
+Fix warnings found with clang
+
+error: class 'YButtonBoxPrivate' was previously declared as a struct [-Werror,-Wmismatched-tags]
+| friend class YButtonBoxPrivate;
+
+YTimezoneSelector.cc:35:9: error: private field 'dummy' is not used [-Werror,-Wunused-private-field]
+ bool dummy;
+ ^
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/libyui/libyui/pull/123]
+
+ src/YAlignment.h | 2 +-
+ src/YBarGraph.h | 2 +-
+ src/YBusyIndicator.h | 2 +-
+ src/YButtonBox.h | 4 ++--
+ src/YCheckBox.h | 2 +-
+ src/YCheckBoxFrame.h | 2 +-
+ src/YComboBox.h | 2 +-
+ src/YCommandLine.h | 2 +-
+ src/YContextMenu.h | 2 +-
+ src/YDateField.h | 2 +-
+ src/YDialog.h | 2 +-
+ src/YDownloadProgress.h | 2 +-
+ src/YDumbTab.h | 2 +-
+ src/YEmpty.h | 2 +-
+ src/YEventFilter.h | 2 +-
+ src/YFrame.h | 2 +-
+ src/YGraph.h | 2 +-
+ src/YImage.h | 2 +-
+ src/YInputField.h | 2 +-
+ src/YIntField.h | 2 +-
+ src/YLabel.h | 2 +-
+ src/YLayoutBox.h | 2 +-
+ src/YLogView.h | 2 +-
+ src/YMenuButton.h | 2 +-
+ src/YMultiLineEdit.h | 2 +-
+ src/YMultiProgressMeter.h | 2 +-
+ src/YMultiSelectionBox.h | 2 +-
+ src/YPartitionSplitter.h | 2 +-
+ src/YProgressBar.h | 2 +-
+ src/YPushButton.h | 2 +-
+ src/YRadioButton.h | 2 +-
+ src/YRadioButtonGroup.h | 2 +-
+ src/YRichText.h | 2 +-
+ src/YSelectionBox.h | 2 +-
+ src/YSelectionWidget.h | 2 +-
+ src/YSimpleInputField.h | 2 +-
+ src/YSlider.h | 2 +-
+ src/YSpacing.h | 2 +-
+ src/YSquash.h | 2 +-
+ src/YTable.h | 2 +-
+ src/YTableHeader.h | 2 +-
+ src/YTimeField.h | 2 +-
+ src/YTimezoneSelector.cc | 2 +-
+ src/YTree.h | 2 +-
+ src/YUILog.h | 2 +-
+ src/YWidget.h | 2 +-
+ src/YWizard.h | 2 +-
+ 47 files changed, 48 insertions(+), 48 deletions(-)
+
+diff --git a/src/YAlignment.h b/src/YAlignment.h
+index d716c77..7276944 100644
+--- a/src/YAlignment.h
++++ b/src/YAlignment.h
+@@ -28,7 +28,7 @@
+ #include "YSingleChildContainerWidget.h"
+
+
+-class YAlignmentPrivate;
++struct YAlignmentPrivate;
+
+ /**
+ * Implementation of all the alignment widgets:
+diff --git a/src/YBarGraph.h b/src/YBarGraph.h
+index 29f7f26..d7eaad2 100644
+--- a/src/YBarGraph.h
++++ b/src/YBarGraph.h
+@@ -29,7 +29,7 @@
+ #include "YColor.h"
+
+
+-class YBarGraphPrivate;
++struct YBarGraphPrivate;
+ class YBarGraphSegment;
+
+ /**
+diff --git a/src/YBusyIndicator.h b/src/YBusyIndicator.h
+index 9530fa5..75297d8 100644
+--- a/src/YBusyIndicator.h
++++ b/src/YBusyIndicator.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YBusyIndicatorPrivate;
++struct YBusyIndicatorPrivate;
+
+
+ /**
+diff --git a/src/YButtonBox.h b/src/YButtonBox.h
+index 84f8dbb..ca51f57 100644
+--- a/src/YButtonBox.h
++++ b/src/YButtonBox.h
+@@ -30,7 +30,7 @@
+ #include "YWidget.h"
+ #include "YPushButton.h"
+
+-class YButtonBoxPrivate;
++struct YButtonBoxPrivate;
+ class YPushButton;
+
+
+@@ -147,7 +147,7 @@ struct YButtonBoxMargins
+ **/
+ class YButtonBox : public YWidget
+ {
+- friend class YButtonBoxPrivate;
++ friend struct YButtonBoxPrivate;
+
+ protected:
+ /**
+diff --git a/src/YCheckBox.h b/src/YCheckBox.h
+index 793cc77..03f3faa 100644
+--- a/src/YCheckBox.h
++++ b/src/YCheckBox.h
+@@ -30,7 +30,7 @@
+ #include "YWidget.h"
+ #include "ImplPtr.h"
+
+-class YCheckBoxPrivate;
++struct YCheckBoxPrivate;
+
+ enum YCheckBoxState
+ {
+diff --git a/src/YCheckBoxFrame.h b/src/YCheckBoxFrame.h
+index 243f1a0..7017110 100644
+--- a/src/YCheckBoxFrame.h
++++ b/src/YCheckBoxFrame.h
+@@ -29,7 +29,7 @@
+ #include "YSingleChildContainerWidget.h"
+ #include "ImplPtr.h"
+
+-class YCheckBoxFramePrivate;
++struct YCheckBoxFramePrivate;
+
+
+ /**
+diff --git a/src/YComboBox.h b/src/YComboBox.h
+index 416359a..ad0e550 100644
+--- a/src/YComboBox.h
++++ b/src/YComboBox.h
+@@ -27,7 +27,7 @@
+
+ #include "YSelectionWidget.h"
+
+-class YComboBoxPrivate;
++struct YComboBoxPrivate;
+
+
+ /**
+diff --git a/src/YCommandLine.h b/src/YCommandLine.h
+index 70cb4fe..f344a3b 100644
+--- a/src/YCommandLine.h
++++ b/src/YCommandLine.h
+@@ -28,7 +28,7 @@
+ #include <string>
+ #include "ImplPtr.h"
+
+-class YCommandLinePrivate;
++struct YCommandLinePrivate;
+
+
+ /**
+diff --git a/src/YContextMenu.h b/src/YContextMenu.h
+index a4acb1c..1253002 100644
+--- a/src/YContextMenu.h
++++ b/src/YContextMenu.h
+@@ -29,7 +29,7 @@
+ #include "YMenuItem.h"
+
+ class YMenuItem;
+-class YContextMenuPrivate;
++struct YContextMenuPrivate;
+
+
+ /**
+diff --git a/src/YDateField.h b/src/YDateField.h
+index e5a468d..6164fba 100644
+--- a/src/YDateField.h
++++ b/src/YDateField.h
+@@ -27,7 +27,7 @@
+
+ #include "YSimpleInputField.h"
+
+-class YDateFieldPrivate;
++struct YDateFieldPrivate;
+
+ /**
+ * Input field for entering a date.
+diff --git a/src/YDialog.h b/src/YDialog.h
+index 66c25c0..371209b 100644
+--- a/src/YDialog.h
++++ b/src/YDialog.h
+@@ -32,7 +32,7 @@
+
+ class YShortcutManager;
+ class YPushButton;
+-class YDialogPrivate;
++struct YDialogPrivate;
+ class YEvent;
+ class YEventFilter;
+
+diff --git a/src/YDownloadProgress.h b/src/YDownloadProgress.h
+index c47ec4f..fe09a9d 100644
+--- a/src/YDownloadProgress.h
++++ b/src/YDownloadProgress.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+
+
+-class YDownloadProgressPrivate;
++struct YDownloadProgressPrivate;
+
+ /**
+ * DownloadProgress: A progress bar that monitors downloading a file by
+diff --git a/src/YDumbTab.h b/src/YDumbTab.h
+index aec17a3..f8fb250 100644
+--- a/src/YDumbTab.h
++++ b/src/YDumbTab.h
+@@ -27,7 +27,7 @@
+
+ #include "YSelectionWidget.h"
+
+-class YDumbTabPrivate;
++struct YDumbTabPrivate;
+
+ /**
+ * DumbTab: A very simple tab widget that can display and switch between a
+diff --git a/src/YEmpty.h b/src/YEmpty.h
+index 9a3cb36..9b88fbc 100644
+--- a/src/YEmpty.h
++++ b/src/YEmpty.h
+@@ -29,7 +29,7 @@
+ #include "ImplPtr.h"
+
+
+-class YEmptyPrivate;
++struct YEmptyPrivate;
+
+ /**
+ * A widget with zero size, useful as a placeholder.
+diff --git a/src/YEventFilter.h b/src/YEventFilter.h
+index 3dc1803..74aa62d 100644
+--- a/src/YEventFilter.h
++++ b/src/YEventFilter.h
+@@ -32,7 +32,7 @@
+ class YEvent;
+ class YDialog;
+
+-class YEventFilterPrivate;
++struct YEventFilterPrivate;
+
+
+ /**
+diff --git a/src/YFrame.h b/src/YFrame.h
+index 111e8ec..4f8c61e 100644
+--- a/src/YFrame.h
++++ b/src/YFrame.h
+@@ -29,7 +29,7 @@
+ #include "YSingleChildContainerWidget.h"
+ #include "ImplPtr.h"
+
+-class YFramePrivate;
++struct YFramePrivate;
+
+
+ /**
+diff --git a/src/YGraph.h b/src/YGraph.h
+index d90d1ae..287d800 100644
+--- a/src/YGraph.h
++++ b/src/YGraph.h
+@@ -37,7 +37,7 @@
+ * For that reason a lot of functions simply take a void* instead of graph_t*.
+ */
+
+-class YGraphPrivate;
++struct YGraphPrivate;
+
+ /**
+ * A graph with nodes and edges, rendered with Graphviz.
+diff --git a/src/YImage.h b/src/YImage.h
+index 17bea21..84eb674 100644
+--- a/src/YImage.h
++++ b/src/YImage.h
+@@ -29,7 +29,7 @@
+ #include <string>
+
+
+-class YImagePrivate;
++struct YImagePrivate;
+
+ /**
+ * A picture, possibly animated, loaded from a file.
+diff --git a/src/YInputField.h b/src/YInputField.h
+index 70641ce..fa29b42 100644
+--- a/src/YInputField.h
++++ b/src/YInputField.h
+@@ -28,7 +28,7 @@
+ #include <string>
+ #include "YWidget.h"
+
+-class YInputFieldPrivate;
++struct YInputFieldPrivate;
+
+
+
+diff --git a/src/YIntField.h b/src/YIntField.h
+index 9da0537..8ad2949 100644
+--- a/src/YIntField.h
++++ b/src/YIntField.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YIntFieldPrivate;
++struct YIntFieldPrivate;
+
+
+
+diff --git a/src/YLabel.h b/src/YLabel.h
+index d2fff61..bf06d8b 100644
+--- a/src/YLabel.h
++++ b/src/YLabel.h
+@@ -30,7 +30,7 @@
+ #include "ImplPtr.h"
+
+
+-class YLabelPrivate;
++struct YLabelPrivate;
+
+ /**
+ * Implementation of the Label, Heading and OutputField widgets
+diff --git a/src/YLayoutBox.h b/src/YLayoutBox.h
+index e652a45..070eaff 100644
+--- a/src/YLayoutBox.h
++++ b/src/YLayoutBox.h
+@@ -29,7 +29,7 @@
+ #include "YWidget.h"
+
+
+-class YLayoutBoxPrivate;
++struct YLayoutBoxPrivate;
+
+ /**
+ * A vertical or horizontal stacking of widgets, implementing HBox and VBox.
+diff --git a/src/YLogView.h b/src/YLogView.h
+index 53fb9ee..5b44229 100644
+--- a/src/YLogView.h
++++ b/src/YLogView.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YLogViewPrivate;
++struct YLogViewPrivate;
+
+
+ /**
+diff --git a/src/YMenuButton.h b/src/YMenuButton.h
+index 205e730..5df7efb 100644
+--- a/src/YMenuButton.h
++++ b/src/YMenuButton.h
+@@ -29,7 +29,7 @@
+ #include "YMenuItem.h"
+
+ class YMenuItem;
+-class YMenuButtonPrivate;
++struct YMenuButtonPrivate;
+
+
+ /**
+diff --git a/src/YMultiLineEdit.h b/src/YMultiLineEdit.h
+index c52a6ae..1f792f8 100644
+--- a/src/YMultiLineEdit.h
++++ b/src/YMultiLineEdit.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YMultiLineEditPrivate;
++struct YMultiLineEditPrivate;
+
+ /**
+ * A multi-line plain-text area
+diff --git a/src/YMultiProgressMeter.h b/src/YMultiProgressMeter.h
+index 57c758d..f6bec91 100644
+--- a/src/YMultiProgressMeter.h
++++ b/src/YMultiProgressMeter.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+ #include <vector>
+
+-class YMultiProgressMeterPrivate;
++struct YMultiProgressMeterPrivate;
+
+
+ /**
+diff --git a/src/YMultiSelectionBox.h b/src/YMultiSelectionBox.h
+index bbe5a20..f3a2947 100644
+--- a/src/YMultiSelectionBox.h
++++ b/src/YMultiSelectionBox.h
+@@ -27,7 +27,7 @@
+
+ #include "YSelectionWidget.h"
+
+-class YMultiSelectionBoxPrivate;
++struct YMultiSelectionBoxPrivate;
+
+
+ /**
+diff --git a/src/YPartitionSplitter.h b/src/YPartitionSplitter.h
+index 2839bbc..9de1174 100644
+--- a/src/YPartitionSplitter.h
++++ b/src/YPartitionSplitter.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+
+
+-class YPartitionSplitterPrivate;
++struct YPartitionSplitterPrivate;
+
+
+ /**
+diff --git a/src/YProgressBar.h b/src/YProgressBar.h
+index 718352f..baab662 100644
+--- a/src/YProgressBar.h
++++ b/src/YProgressBar.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YProgressBarPrivate;
++struct YProgressBarPrivate;
+
+
+ /**
+diff --git a/src/YPushButton.h b/src/YPushButton.h
+index 5b65c98..e288252 100644
+--- a/src/YPushButton.h
++++ b/src/YPushButton.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YPushButtonPrivate;
++struct YPushButtonPrivate;
+
+
+
+diff --git a/src/YRadioButton.h b/src/YRadioButton.h
+index 9dc62de..5a7c0dd 100644
+--- a/src/YRadioButton.h
++++ b/src/YRadioButton.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+
+ class YRadioButtonGroup;
+-class YRadioButtonPrivate;
++struct YRadioButtonPrivate;
+
+
+ /**
+diff --git a/src/YRadioButtonGroup.h b/src/YRadioButtonGroup.h
+index 063a52e..671a257 100644
+--- a/src/YRadioButtonGroup.h
++++ b/src/YRadioButtonGroup.h
+@@ -28,7 +28,7 @@
+ #include "YSingleChildContainerWidget.h"
+
+ class YRadioButton;
+-class YRadioButtonGroupPrivate;
++struct YRadioButtonGroupPrivate;
+
+ typedef std::list<YRadioButton *> YRadioButtonList;
+ typedef YRadioButtonList::iterator YRadioButtonListIterator;
+diff --git a/src/YRichText.h b/src/YRichText.h
+index 149bfb3..86b3f80 100644
+--- a/src/YRichText.h
++++ b/src/YRichText.h
+@@ -30,7 +30,7 @@
+ #include "ImplPtr.h"
+
+
+-class YRichTextPrivate;
++struct YRichTextPrivate;
+
+
+ /**
+diff --git a/src/YSelectionBox.h b/src/YSelectionBox.h
+index 7fc4fb8..9bbf9f3 100644
+--- a/src/YSelectionBox.h
++++ b/src/YSelectionBox.h
+@@ -27,7 +27,7 @@
+
+ #include "YSelectionWidget.h"
+
+-class YSelectionBoxPrivate;
++struct YSelectionBoxPrivate;
+
+
+ /**
+diff --git a/src/YSelectionWidget.h b/src/YSelectionWidget.h
+index abbdfb4..cf05afd 100644
+--- a/src/YSelectionWidget.h
++++ b/src/YSelectionWidget.h
+@@ -29,7 +29,7 @@
+ #include "YItem.h"
+ #include "ImplPtr.h"
+
+-class YSelectionWidgetPrivate;
++struct YSelectionWidgetPrivate;
+
+ /**
+ * Base class for various kinds of multi-value widgets.
+diff --git a/src/YSimpleInputField.h b/src/YSimpleInputField.h
+index 6d926d4..b93fe6b 100644
+--- a/src/YSimpleInputField.h
++++ b/src/YSimpleInputField.h
+@@ -27,7 +27,7 @@
+
+ #include "YWidget.h"
+
+-class YSimpleInputFieldPrivate;
++struct YSimpleInputFieldPrivate;
+
+
+ /**
+diff --git a/src/YSlider.h b/src/YSlider.h
+index d29f6b8..4bcd7d3 100644
+--- a/src/YSlider.h
++++ b/src/YSlider.h
+@@ -27,7 +27,7 @@
+
+ #include "YIntField.h"
+
+-class YSliderPrivate;
++struct YSliderPrivate;
+
+
+ /**
+diff --git a/src/YSpacing.h b/src/YSpacing.h
+index e8aafd3..066cd68 100644
+--- a/src/YSpacing.h
++++ b/src/YSpacing.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+ #include "ImplPtr.h"
+
+-class YSpacingPrivate;
++struct YSpacingPrivate;
+
+
+ /**
+diff --git a/src/YSquash.h b/src/YSquash.h
+index 4bd0fb6..3804cc4 100644
+--- a/src/YSquash.h
++++ b/src/YSquash.h
+@@ -29,7 +29,7 @@
+ #include "ImplPtr.h"
+
+
+-class YSquashPrivate;
++struct YSquashPrivate;
+
+ /**
+ * HSquash, VSquash HVSquash: reduce child to its preferred size.
+diff --git a/src/YTable.h b/src/YTable.h
+index 6694f10..469b8ca 100644
+--- a/src/YTable.h
++++ b/src/YTable.h
+@@ -30,7 +30,7 @@
+ #include "YTableItem.h"
+ #include "YTableHeader.h"
+
+-class YTablePrivate;
++struct YTablePrivate;
+
+
+
+diff --git a/src/YTableHeader.h b/src/YTableHeader.h
+index 70166c2..4ae99b4 100644
+--- a/src/YTableHeader.h
++++ b/src/YTableHeader.h
+@@ -31,7 +31,7 @@
+
+
+
+-class YTableHeaderPrivate;
++struct YTableHeaderPrivate;
+
+ /**
+ * Helper class for YTable for table column properties:
+diff --git a/src/YTimeField.h b/src/YTimeField.h
+index ab2f9a3..f3a7b94 100644
+--- a/src/YTimeField.h
++++ b/src/YTimeField.h
+@@ -27,7 +27,7 @@
+
+ #include "YSimpleInputField.h"
+
+-class YTimeFieldPrivate;
++struct YTimeFieldPrivate;
+
+
+ /**
+diff --git a/src/YTimezoneSelector.cc b/src/YTimezoneSelector.cc
+index 9259b64..e2f9b6f 100644
+--- a/src/YTimezoneSelector.cc
++++ b/src/YTimezoneSelector.cc
+@@ -32,7 +32,7 @@
+
+ class YTimezoneSelectorPrivate
+ {
+- bool dummy;
++// bool dummy;
+ };
+
+
+diff --git a/src/YTree.h b/src/YTree.h
+index 14fa279..70e1364 100644
+--- a/src/YTree.h
++++ b/src/YTree.h
+@@ -28,7 +28,7 @@
+ #include "YSelectionWidget.h"
+
+ class YTreeItem;
+-class YTreePrivate;
++struct YTreePrivate;
+
+
+ /**
+diff --git a/src/YUILog.h b/src/YUILog.h
+index 0890bc5..4a927a7 100644
+--- a/src/YUILog.h
++++ b/src/YUILog.h
+@@ -64,7 +64,7 @@
+
+
+
+-class YUILogPrivate;
++struct YUILogPrivate;
+
+ enum YUILogLevel_t
+ {
+diff --git a/src/YWidget.h b/src/YWidget.h
+index 5b285d0..636a41b 100644
+--- a/src/YWidget.h
++++ b/src/YWidget.h
+@@ -45,7 +45,7 @@ typedef YChildrenManager<YWidget> YWidgetChildrenManager;
+ typedef YSingleChildManager<YWidget> YSingleWidgetChildManager;
+ typedef YChildrenRejector<YWidget> YWidgetChildrenRejector;
+
+-class YWidgetPrivate;
++struct YWidgetPrivate;
+
+
+ /**
+diff --git a/src/YWizard.h b/src/YWizard.h
+index 7671cbf..975b597 100644
+--- a/src/YWizard.h
++++ b/src/YWizard.h
+@@ -28,7 +28,7 @@
+ #include "YWidget.h"
+
+ class YMacroRecorder;
+-class YWizardPrivate;
++struct YWizardPrivate;
+ class YPushButton;
+ class YReplacePoint;
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui_git.bb b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui_git.bb
new file mode 100644
index 000000000..42945288c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Libyui is a widget abstraction library providing Qt, GTK and ncurses frontends."
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.gpl-3;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.lgpl-2.1;md5=4fbd65380cdd255951079008b364516c \
+ file://COPYING.lgpl-3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ "
+
+SRC_URI = "git://github.com/libyui/libyui.git \
+ file://0001-Fix-GCC-8-warning.patch \
+ file://0001-Fix-build-with-clang.patch \
+ "
+
+PV = "3.3.3+git"
+SRCREV = "2b634cb7821e2e79dd4b7a73caf8e67c50189376"
+
+S = "${WORKDIR}/git"
+
+inherit cmake gettext pkgconfig
+
+DEPENDS += "boost"
+
+BBCLASSEXTEND = "native nativesdk"
+
+do_configure_prepend () {
+ cd ${S}
+ ./bootstrap.sh
+ cd -
+}
+
+do_install_append () {
+ if [ "${libdir}" = "${base_prefix}/usr/lib" ] && [ -d ${D}/usr/lib64 ]; then
+ mv ${D}/usr/lib64 ${D}/usr/lib
+ fi
+}
+
+do_install_append_class-nativesdk () {
+ mkdir -p ${D}/${base_prefix}
+ mv ${D}/usr ${D}/${base_prefix}
+}
+
+FILES_${PN}-dev = "${libdir}/* ${includedir}/yui*"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-check-for-libexecinfo-providing-backtrace-APIs.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-check-for-libexecinfo-providing-backtrace-APIs.patch
new file mode 100644
index 000000000..f9fd4970f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-check-for-libexecinfo-providing-backtrace-APIs.patch
@@ -0,0 +1,36 @@
+From 1d2425febf2020e38db70188df582acc9f37b136 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 30 Mar 2017 13:01:33 -0700
+Subject: [PATCH] check for libexecinfo providing backtrace() APIs
+
+on musl it depends on external library to provide backtrace APIs
+unlike glibc where it is bundled in
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index aa3291c..b15f65d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -15,6 +15,7 @@ AM_PROG_CC_C_O
+
+ # Checks for libraries.
+ AC_CHECK_LIB([crypt], [crypt])
++AC_CHECK_LIB([execinfo], [backtrace])
+
+ # Check for PAM support
+ AC_ARG_WITH(pam, AC_HELP_STRING([--with-pam],[Use PAM for authentication]),
+@@ -33,6 +34,7 @@ AM_CONDITIONAL(HAVE_PAM, [test -n "$USE_PAM" -a "x$USE_PAM" != xno ])
+ # Checks for header files.
+ AC_PATH_X
+ AC_CHECK_HEADERS([shadow.h stdlib.h string.h unistd.h utmpx.h])
++AC_CHECK_HEADERS([execinfo.h])
+
+ # Checks for typedefs, structures, and compiler characteristics.
+ AC_TYPE_PID_T
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-lxdm.conf.in-blacklist-root-for-release-images.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-lxdm.conf.in-blacklist-root-for-release-images.patch
new file mode 100644
index 000000000..49ecdb8d3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-lxdm.conf.in-blacklist-root-for-release-images.patch
@@ -0,0 +1,29 @@
+From 5038c49c0b61e057dec44c932f02c4bf99cee96e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 3 Sep 2012 10:02:51 +0200
+Subject: [PATCH] lxdm.conf.in: blacklist root for release images
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ data/lxdm.conf.in | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/data/lxdm.conf.in b/data/lxdm.conf.in
+index defc082..759e6e5 100644
+--- a/data/lxdm.conf.in
++++ b/data/lxdm.conf.in
+@@ -58,5 +58,5 @@ disable=0
+ white=
+
+ ## blacklist user
+-black=
++black=root
+
+--
+1.7.4.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-let-autotools-create-lxdm.conf.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-let-autotools-create-lxdm.conf.patch
new file mode 100644
index 000000000..75dc10c97
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-let-autotools-create-lxdm.conf.patch
@@ -0,0 +1,35 @@
+From 0ea0329f2c19a43acdc8444fa89e233ba617973d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 6 Oct 2014 13:06:24 +0200
+Subject: [PATCH] let autotools create lxdm.conf
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+in out of tree builds lxdm.conf is empty
+
+Upstream-Status: submitted [1]
+
+[1] http://sourceforge.net/p/lxde/mailman/message/32901417/
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ data/lxdm.conf.in | 2 +-
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/data/lxdm.conf.in b/data/lxdm.conf.in
+index d93f280..6206262 100644
+--- a/data/lxdm.conf.in
++++ b/data/lxdm.conf.in
+@@ -19,7 +19,7 @@
+ # skip_password=1
+
+ ## greeter used to welcome the user
+-greeter=@FULL_LIBEXECDIR@/lxdm-greeter-gtk
++greeter=@libexecdir@/lxdm-greeter-gtk
+
+ [server]
+ ## arg used to start xserver, not fully function
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam
new file mode 100644
index 000000000..486621f4f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam
@@ -0,0 +1,13 @@
+#%PAM-1.0
+# taken from http://aur.archlinux.org/packages/lx/lxdm-git/lxdm-git.tar.gz
+# further info https://wiki.archlinux.org/index.php/LXDM
+auth requisite pam_nologin.so
+auth required pam_env.so
+auth required pam_unix.so
+# To allow passwordless login comment previous line and uncomment next line
+#auth required pam_unix.so nullok
+account required pam_unix.so
+session required pam_limits.so
+session required pam_unix.so
+password required pam_unix.so
+-session optional pam_systemd.so
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam-debug b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam-debug
new file mode 100644
index 000000000..734949fa4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm-pam-debug
@@ -0,0 +1,13 @@
+#%PAM-1.0
+# taken from http://aur.archlinux.org/packages/lx/lxdm-git/lxdm-git.tar.gz
+# further info https://wiki.archlinux.org/index.php/LXDM
+auth requisite pam_nologin.so
+auth required pam_env.so
+#auth required pam_unix.so
+# To deny passwordless login comment next line and uncomment previous line
+auth required pam_unix.so nullok
+account required pam_unix.so
+session required pam_limits.so
+session required pam_unix.so
+password required pam_unix.so
+-session optional pam_systemd.so
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm.conf b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm.conf
new file mode 100644
index 000000000..0a6e6721b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/lxdm.conf
@@ -0,0 +1,4 @@
+[base]
+last_session=
+last_lang=
+last_langs=
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb
new file mode 100644
index 000000000..8e7efcdad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb
@@ -0,0 +1,80 @@
+SUMMARY = "LXDM is the lightweight display manager"
+HOMEPAGE = "http://blog.lxde.org/?p=531"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}%20${PV}/${BPN}-${PV}.tar.xz \
+ file://lxdm.conf \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'file://lxdm-pam file://lxdm-pam-debug', '', d)} \
+ ${@bb.utils.contains("DISTRO_TYPE", "debug", "", "file://0001-lxdm.conf.in-blacklist-root-for-release-images.patch",d)} \
+ file://0002-let-autotools-create-lxdm.conf.patch \
+ file://0001-check-for-libexecinfo-providing-backtrace-APIs.patch \
+ "
+SRC_URI[md5sum] = "061caae432634e6db38bbdc84bc6ffa0"
+SRC_URI[sha256sum] = "4891efee81c72a400cc6703e40aa76f3f3853833d048b72ec805da0f93567f2f"
+
+PE = "1"
+
+DEPENDS = "virtual/libintl intltool-native cairo dbus gdk-pixbuf glib-2.0 gtk+ virtual/libx11 libxcb pango iso-codes"
+DEPENDS += "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "", "consolekit", d)}"
+DEPENDS_append_libc-musl = " libexecinfo"
+
+# combine oe-core way with angstrom DISTRO_TYPE
+DISTRO_TYPE ?= "${@bb.utils.contains("IMAGE_FEATURES", "debug-tweaks", "debug", "",d)}"
+
+inherit autotools pkgconfig gettext systemd distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+CFLAGS_append = " -fno-builtin-fork -fno-builtin-memset -fno-builtin-strstr "
+LDFLAGS_append_libc-musl = " -lexecinfo"
+
+EXTRA_OECONF += "--enable-gtk3=no --enable-password=yes --with-x -with-xconn=xcb \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/ --disable-consolekit', '--without-systemdsystemunitdir', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
+"
+
+do_configure_prepend() {
+ cp ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in ${S}/po/
+}
+
+do_compile_append() {
+ # default background configured not available / no password field available / no default screensaver
+ sed -i -e 's,bg=,# bg=,g' \
+ -e 's,# skip_password=,skip_password=,g' \
+ -e 's,# arg=.*,arg=${bindir}/X -s 0,g' \
+ ${S}/data/lxdm.conf.in
+ # add default configuration
+ oe_runmake -C ${B}/data lxdm.conf
+}
+
+do_install_append() {
+ install -d ${D}${localstatedir}/lib/lxdm
+ install -m 644 ${WORKDIR}/lxdm.conf ${D}${localstatedir}/lib/lxdm
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
+ # ArchLinux version of pam config has the following advantages:
+ # * simple setup of passwordless login
+ # * in XFCE powerdown/restart enabled in logoff dialog
+ install -m 644 ${WORKDIR}/${@bb.utils.contains("DISTRO_TYPE", "debug", "lxdm-pam-debug", "lxdm-pam",d)} ${D}${sysconfdir}/pam.d/lxdm
+ fi
+}
+
+# make installed languages choosable
+pkg_postinst_${PN} () {
+langs=""
+for lang in `find $D${libdir}/locale -maxdepth 1 | grep _ | sort`; do
+lang=`basename $lang`
+if [ "x$langs" = "x" ]; then
+ langs="$lang"
+else
+ langs="$langs $lang"
+fi
+done
+sed -i "s:last_langs=.*$:last_langs=$langs:g" $D${localstatedir}/lib/lxdm/lxdm.conf
+}
+
+RDEPENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-loginuid', '', d)} setxkbmap bash librsvg-gtk"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "lxdm.service"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/numlockx/numlockx_1.2.bb b/meta-openembedded/meta-oe/recipes-graphics/numlockx/numlockx_1.2.bb
new file mode 100644
index 000000000..08d7f5b52
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/numlockx/numlockx_1.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Enable NumLock in X11 sessions"
+HOMEPAGE = "http://home.kde.org/~seli/numlockx/"
+SECTION = "x11/apps"
+LICENSE = "MIT-X"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dcb1cc75e21540a4a66b54e38d95b047"
+DEPENDS = "virtual/libx11 libxtst"
+
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/numlockx/numlockx-${PV}.tar.gz/be9109370447eae23f6f3f8527bb1a67/numlockx-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "be9109370447eae23f6f3f8527bb1a67"
+SRC_URI[sha256sum] = "e468eb9121c94c9089dc6a287eeb347e900ce04a14be37da29d7696cbce772e4"
+
+inherit autotools distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR} \
+ --x-libraries=${STAGING_LIBDIR}"
+
+do_configure_prepend() {
+ # remove this from acinclude.m4 or build fails
+ sed -i '/_AC_PATH_X_XMKMF/d' ${S}/acinclude.m4
+}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch b/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch
new file mode 100644
index 000000000..2762e1c21
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch
@@ -0,0 +1,54 @@
+From 6bbde84a2197c97e49d9e64118a979728209e436 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 23 Sep 2015 23:21:42 +0200
+Subject: [PATCH] Makefile.am: avoid race when creating autostart directories
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fixes:
+
+| make: creating data/xsession/openbox-gnome-session
+| make: creating data/xsession/openbox-session
+| make: creating data/xsession/openbox-kde-session
+| make: creating data/autostart/openbox-autostart
+| make: creating doc/openbox.1
+| make: creating data/autostart/autostart
+| make: creating doc/openbox-session.1
+| make: creating doc/openbox-gnome-session.1
+| make: creating doc/openbox-kde-session.1
+| make: creating doc/obxprop.1
+| mkdir: cannot create directory './data/autostart': File exists
+| Makefile:4329: recipe for target 'data/autostart/autostart' failed
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ Makefile.am | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index f25bf8e..306e77d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -505,14 +505,12 @@ edit = $(SED) \
+
+ data/autostart/autostart: $(top_srcdir)/data/autostart/autostart.in Makefile
+ @echo make: creating $@
+- @test -d $(shell dirname $(top_builddir)/$@) || \
+- mkdir $(shell dirname $(top_builddir)/$@)
++ mkdir -p $(shell dirname $(top_builddir)/$@)
+ @$(edit) $< >$(top_builddir)/$@
+
+ data/autostart/openbox-autostart: $(top_srcdir)/data/autostart/openbox-autostart.in Makefile
+ @echo make: creating $@
+- @test -d $(shell dirname $(top_builddir)/$@) || \
+- mkdir $(shell dirname $(top_builddir)/$@)
++ mkdir -p $(shell dirname $(top_builddir)/$@)
+ @$(edit) $< >$(top_builddir)/$@
+
+ %.desktop: %.desktop.in Makefile
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
new file mode 100644
index 000000000..c35a0c723
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
@@ -0,0 +1,56 @@
+SUMMARY = "openbox Window Manager"
+SECTION = "x11/wm"
+DEPENDS = "glib-2.0 pango libxml2 virtual/libx11 libcroco librsvg gdk-pixbuf"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = " \
+ http://icculus.org/openbox/releases/openbox-${PV}.tar.gz \
+ file://0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch \
+"
+
+SRC_URI[md5sum] = "b72794996c6a3ad94634727b95f9d204"
+SRC_URI[sha256sum] = "8b4ac0760018c77c0044fab06a4f0c510ba87eae934d9983b10878483bde7ef7"
+
+inherit autotools gettext update-alternatives pkgconfig distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+ALTERNATIVE_${PN}-core = "x-window-manager x-session-manager"
+ALTERNATIVE_TARGET[x-window-manager] = "${bindir}/openbox"
+ALTERNATIVE_PRIORITY[x-window-manager] = "10"
+ALTERNATIVE_TARGET[x-session-manager] = "${bindir}/openbox-session"
+ALTERNATIVE_PRIORITY[x-session-manager] = "100"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[imlib2] = "--enable-imlib2,--disable-imlib2,imlib2"
+PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+PACKAGECONFIG[xrandr] = "--enable-xrandr,--disable-xrandr,libxrandr"
+PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama"
+PACKAGECONFIG[xcursor] = "--enable-xcursor,--disable-xcursor,libxcursor"
+
+PACKAGES =+ "${PN}-core ${PN}-lxde ${PN}-gnome ${PN}-config"
+
+PACKAGES_DYNAMIC += "^${PN}-theme-.*"
+
+python populate_packages_prepend() {
+ theme_dir = d.expand('${datadir}/themes/')
+ theme_name = d.expand('${PN}-theme-%s')
+ do_split_packages(d, theme_dir, '(.*)', theme_name, '${PN} theme for %s', extra_depends='', allow_dirs=True)
+}
+
+RDEPENDS_${PN} += "${PN}-core ${PN}-config ${PN}-theme-clearlooks"
+FILES_${PN}-core = "${bindir}/openbox ${bindir}/openbox-session ${libdir}/*${SOLIBS}"
+
+FILES_${PN}-lxde += "${datadir}/lxde/ \
+ ${datadir}/lxpanel \
+ ${datadir}/xsessions \
+ ${datadir}/icons"
+
+FILES_${PN}-gnome += " \
+ ${bindir}/openbox-gnome-session \
+ ${datadir}/gnome \
+ ${datadir}/gnome-session \
+"
+
+FILES_${PN}-config += "${sysconfdir}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/files/0001-bmp_read_info_header-reject-bmp-files-with-biBitCoun.patch b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/files/0001-bmp_read_info_header-reject-bmp-files-with-biBitCoun.patch
new file mode 100644
index 000000000..866d9aa41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/files/0001-bmp_read_info_header-reject-bmp-files-with-biBitCoun.patch
@@ -0,0 +1,31 @@
+From 226f07e4b49c2757b181c62e6841000c512054e3 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Mon, 14 Aug 2017 17:26:58 +0200
+Subject: [PATCH] bmp_read_info_header(): reject bmp files with biBitCount == 0
+ (#983)
+
+Upstream-Status: Backport [https://github.com/uclouvain/openjpeg/commit/baf0c1ad4572daa89caa3b12985bdd93530f0dd7]
+CVE: CVE-2017-12982
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ src/bin/jp2/convertbmp.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/bin/jp2/convertbmp.c b/src/bin/jp2/convertbmp.c
+index b49e7a0..2715fdf 100644
+--- a/src/bin/jp2/convertbmp.c
++++ b/src/bin/jp2/convertbmp.c
+@@ -392,6 +392,10 @@ static OPJ_BOOL bmp_read_info_header(FILE* IN, OPJ_BITMAPINFOHEADER* header)
+
+ header->biBitCount = (OPJ_UINT16)getc(IN);
+ header->biBitCount |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
++ if (header->biBitCount == 0) {
++ fprintf(stderr, "Error, invalid biBitCount %d\n", 0);
++ return OPJ_FALSE;
++ }
+
+ if (header->biSize >= 40U) {
+ header->biCompression = (OPJ_UINT32)getc(IN);
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.2.0.bb b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.2.0.bb
new file mode 100644
index 000000000..4ef1c408f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.2.0.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "OpenJPEG library is an open-source JPEG 2000 codec"
+HOMEPAGE = "http://www.openjpeg.org"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c648878b4840d7babaade1303e7f108c"
+
+SRC_URI = "https://github.com/uclouvain/${BPN}/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
+ file://0001-bmp_read_info_header-reject-bmp-files-with-biBitCoun.patch \
+ "
+SRC_URI[md5sum] = "269bb0b175476f3addcc0d03bd9a97b6"
+SRC_URI[sha256sum] = "6fddbce5a618e910e03ad00d66e7fcd09cc6ee307ce69932666d54c73b7c6e7b"
+
+inherit cmake
+
+DEPENDS = "libpng tiff lcms zlib"
+
+# standard path for *.cmake
+EXTRA_OECMAKE += "-DOPENJPEG_INSTALL_PACKAGE_DIR=${baselib}/cmake \
+ -DOPENJPEG_INSTALL_LIB_DIR:PATH=${libdir}"
+
+FILES_${PN}-dev += "${libdir}/cmake/*.cmake"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/packagegroups/packagegroup-fonts-truetype.bb b/meta-openembedded/meta-oe/recipes-graphics/packagegroups/packagegroup-fonts-truetype.bb
new file mode 100644
index 000000000..3069d2ded
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/packagegroups/packagegroup-fonts-truetype.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Install one of these tasks to get support for truetype fonts"
+SECTION = "fonts"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+PV = "1.0"
+PR = "r2"
+
+inherit packagegroup
+
+PACKAGES += "\
+ ${PN}-core \
+ ${PN}-chinese \
+ ${PN}-japanese \
+"
+
+RRECOMMENDS_${PN} = "\
+ ${PN}-core \
+ ${PN}-chinese \
+ ${PN}-japanese \
+"
+
+RDEPENDS_${PN}-core = "\
+ fontconfig-utils \
+ \
+ ttf-dejavu-common \
+ ttf-dejavu-sans \
+ ttf-dejavu-sans-mono \
+"
+# ttf-dejavu-serif
+
+RDEPENDS_${PN}-chinese = "\
+ ${PN}-core \
+ ttf-arphic-uming \
+"
+
+RDEPENDS_${PN}-japanese = "\
+ ${PN}-core \
+ ttf-sazanami-gothic \
+ ttf-sazanami-mincho \
+"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb
new file mode 100644
index 000000000..e0f72cd58
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "C++ bindings for the pango library"
+SECTION = "libs"
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
+ file://COPYING.tools;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "mm-common cairomm glibmm pango"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/pangomm/${SHRT_VER}/pangomm-${PV}.tar.xz"
+SRC_URI[md5sum] = "874eadd9434613dbacf0272c82c3ac23"
+SRC_URI[sha256sum] = "9762ee2a2d5781be6797448d4dd2383ce14907159b30bc12bf6b08e7227be3af"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECONF = " --disable-documentation "
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${libdir}/*/include/ ${libdir}/pangomm-*/"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb
new file mode 100644
index 000000000..f5397750f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb
@@ -0,0 +1,16 @@
+SUMMARY = "C library for encoding data in a QR Code symbol"
+AUTHOR = "Kentaro Fukuchi"
+HOMEPAGE = "http://fukuchi.org/works/qrencode/"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+PV = "4.0.0+git${SRCPV}"
+
+SRCREV = "07f3c5d4bf9136711422cc7dbf28aff469da220a"
+SRC_URI = "git://github.com/fukuchi/libqrencode.git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--without-tools --without-tests"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/takao-fonts/takao-fonts_003.03.01.bb b/meta-openembedded/meta-oe/recipes-graphics/takao-fonts/takao-fonts_003.03.01.bb
new file mode 100644
index 000000000..d99ff144b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/takao-fonts/takao-fonts_003.03.01.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Takao Fonts are a community developed derivatives of IPA Fonts."
+DESCRIPTION = "Takao Fonts are a community developed derivatives of IPA Fonts."
+
+HOMEPAGE = "https://launchpad.net/takao-fonts"
+SECTION = "User Interface/X"
+
+LICENSE = "IPA"
+LIC_FILES_CHKSUM = "file://IPA_Font_License_Agreement_v1.0.txt;md5=6cd3351ba979cf9db1fad644e8221276"
+SRC_URI = "https://launchpad.net/${BPN}/trunk/15.03/+download/TakaoFonts_00303.01.tar.xz"
+SRC_URI[md5sum] = "8cd3fe724faa5034a9369e98cf108d2d"
+SRC_URI[sha256sum] = "e9871f72ac69acb3e277aebbee7ca01fbebf54800733e29fafdc46133fc3552f"
+
+S = "${WORKDIR}/TakaoFonts_00303.01"
+do_install() {
+ install -m 0755 -d ${D}/${datadir}/fonts
+ install -m 0644 -p ${S}/*.ttf ${D}/${datadir}/fonts/
+}
+
+FILES_${PN} += "${datadir}/fonts/*.ttf"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/terminus-font/terminus-font_4.38.bb b/meta-openembedded/meta-oe/recipes-graphics/terminus-font/terminus-font_4.38.bb
new file mode 100644
index 000000000..c460fc35c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/terminus-font/terminus-font_4.38.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Terminus fonts packages (console and X11)"
+DESCRIPTION = "Terminus Font is a clean, fixed width bitmap font, designed for \
+ long (8 and more hours per day) work with computers."
+HOMEPAGE = "http://terminus-font.sourceforge.net/"
+AUTHOR = "Dimitar Zhekov"
+SECTION = "fonts"
+
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://OFL.TXT;md5=9cadb26f4c5c005618c5ae74f041ec54"
+
+DEPENDS = "hostperl-runtime-native gzip-native bdftopcf-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "a8e792fe6e84c86ed2b6ed3e2a12ba66"
+SRC_URI[sha256sum] = "f6f4876a4dabe6a37c270c20bb9e141e38fb50e0bba200e1b9d0470e5eed97b7"
+
+inherit allarch fontcache
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = ""
+
+# Don't use font cache mecanism for console packages
+FONT_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'x11', '${PN}-pcf', '', d)}"
+
+# Hand made configure script. Don't need oe_runconf
+do_configure() {
+ chmod +x ${S}/configure
+ ${S}/configure --prefix=${prefix} \
+ --psfdir=${datadir}/consolefonts \
+ --acmdir=${datadir}/consoletrans \
+ --x11dir=${datadir}/fonts/terminus
+}
+
+do_compile() {
+ oe_runmake DESTDIR=${D} psf txt ${@bb.utils.contains('PACKAGECONFIG', 'x11', 'pcf', '', d)}
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install-psf install-acm ${@bb.utils.contains('PACKAGECONFIG', 'x11', 'install-pcf', '', d)}
+}
+
+PACKAGES += "${PN}-consolefonts ${PN}-consoletrans ${PN}-pcf"
+FILES_${PN}-consolefonts = "${datadir}/consolefonts"
+FILES_${PN}-consoletrans = "${datadir}/consoletrans"
+FILES_${PN}-pcf = "${datadir}/fonts/terminus"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract-lang_git.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract-lang_git.bb
new file mode 100644
index 000000000..ac36a91a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract-lang_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "tesseract-ocr language files"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9648bd7af63bd3cc4f5ac046d12c49e4"
+
+PV = "3.04.00+git${SRCPV}"
+SRCREV = "3cf1e2df1fe1d1da29295c9ef0983796c7958b7d"
+SRC_URI = "git://github.com/tesseract-ocr/tessdata.git"
+S = "${WORKDIR}/git"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/tessdata
+ cp -R --no-dereference --preserve=mode,links -v ${S}/*.traineddata ${S}/*.cube.* ${S}/*.tesseract_cube.* ${D}${datadir}/tessdata
+}
+
+python populate_packages_prepend () {
+ tessdata_dir= d.expand('${datadir}/tessdata')
+ pkgs = do_split_packages(d, tessdata_dir, '^([a-z_]*)\.*', '${BPN}-%s', 'tesseract-ocr language files for %s', extra_depends='')
+ pn = d.getVar('PN')
+ d.appendVar('RDEPENDS_' + pn, ' '+' '.join(pkgs))
+}
+
+PACKAGES_DYNAMIC += "^${BPN}-.*"
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb
new file mode 100644
index 000000000..89d09a0f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A commercial quality OCR engine "
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7ea4f9a43aba9d3c849fe5c203a0ed40"
+
+BRANCH = "3.05"
+PV = "${BRANCH}.01+git${SRCPV}"
+SRCREV = "215866151e774972c9502282111b998d7a053562"
+SRC_URI = "git://github.com/${BPN}-ocr/${BPN}.git;branch=${BRANCH}"
+S = "${WORKDIR}/git"
+
+DEPENDS = "leptonica"
+
+EXTRA_OECONF += "LIBLEPT_HEADERSDIR=${STAGING_INCDIR}/leptonica"
+
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/tessdata"
+
+RRECOMMENDS_${PN} += "tesseract-lang-eng"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0001-tigervnc-remove-includedir.patch b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0001-tigervnc-remove-includedir.patch
new file mode 100644
index 000000000..12c437629
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0001-tigervnc-remove-includedir.patch
@@ -0,0 +1,50 @@
+From 4b423cd2e5e4296abca3be553bf64d8cc287180a Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 17:09:05 +0800
+Subject: [PATCH 1/4] tigervnc: remove includedir
+
+Upstream-Status: Pending
+
+Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
+
+It fixes host contamination
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ unix/xserver/hw/vnc/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am
+index 0d6a4ac..854f078 100644
+--- a/unix/xserver/hw/vnc/Makefile.am
++++ b/unix/xserver/hw/vnc/Makefile.am
+@@ -22,7 +22,7 @@ libvnccommon_la_SOURCES = $(HDRS) \
+
+ libvnccommon_la_CPPFLAGS = -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
+ -DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(TIGERVNC_SRCDIR)/common -UHAVE_CONFIG_H \
+- -I$(TIGERVNC_SRCDIR)/unix/vncconfig $(XVNC_CPPFLAGS) ${XSERVERLIBS_CFLAGS} -I$(includedir) \
++ -I$(TIGERVNC_SRCDIR)/unix/vncconfig $(XVNC_CPPFLAGS) ${XSERVERLIBS_CFLAGS} \
+ -I$(top_srcdir)/include
+
+ bin_PROGRAMS = Xvnc
+@@ -42,7 +42,7 @@ Xvnc_CPPFLAGS = $(XVNC_CPPFLAGS) -DTIGERVNC -DNO_MODULE_EXTS \
+ -UHAVE_CONFIG_H \
+ -DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
+ -DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(TIGERVNC_SRCDIR)/common \
+- -I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS} -I$(includedir)
++ -I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS}
+
+ Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \
+ $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11
+@@ -62,7 +62,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I$(TIGERVNC_SRCDIR)/common -UHAVE_CONFIG_
+ -I$(top_srcdir)/hw/xfree86/os-support \
+ -I$(top_srcdir)/hw/xfree86/os-support/bus \
+ -I$(top_srcdir)/include \
+- ${XSERVERLIBS_CFLAGS} -I$(includedir)
++ ${XSERVERLIBS_CFLAGS}
+
+ libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0002-do-not-build-tests-sub-directory.patch b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0002-do-not-build-tests-sub-directory.patch
new file mode 100644
index 000000000..4e875ba82
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0002-do-not-build-tests-sub-directory.patch
@@ -0,0 +1,29 @@
+From c3460d63f0b6cd50b9a64265f420f0439e12a1d5 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 25 Apr 2017 01:36:44 -0400
+Subject: [PATCH 2/4] do not build tests sub directory
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ CMakeLists.txt | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 94ec2ef..fb72a00 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -300,9 +300,6 @@ if(BUILD_VIEWER)
+ add_subdirectory(media)
+ endif()
+
+-add_subdirectory(tests)
+-
+-
+ include(cmake/BuildPackages.cmake)
+
+ # uninstall
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0003-add-missing-dynamic-library-to-FLTK_LIBRARIES.patch b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0003-add-missing-dynamic-library-to-FLTK_LIBRARIES.patch
new file mode 100644
index 000000000..cfb84ac14
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0003-add-missing-dynamic-library-to-FLTK_LIBRARIES.patch
@@ -0,0 +1,28 @@
+From 6369a5be2af2ed1fa443f40f48deaf318d22713e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 05:06:00 -0400
+Subject: [PATCH 3/4] add missing dynamic library to FLTK_LIBRARIES
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ CMakeLists.txt | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fb72a00..5732dc8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -246,6 +246,8 @@ if(UNIX AND NOT APPLE)
+ endif()
+ endif()
+
++set(FLTK_LIBRARIES ${FLTK_LIBRARIES} -lm -ldl -lpng -ljpeg)
++
+ # Check for GNUTLS library
+ option(ENABLE_GNUTLS "Enable protocol encryption and advanced authentication" ON)
+ if(ENABLE_GNUTLS)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0004-tigervnc-add-fPIC-option-to-COMPILE_FLAGS.patch b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0004-tigervnc-add-fPIC-option-to-COMPILE_FLAGS.patch
new file mode 100644
index 000000000..97b0a388a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0004-tigervnc-add-fPIC-option-to-COMPILE_FLAGS.patch
@@ -0,0 +1,62 @@
+From 9563b69640227da2220ee0c39077afb736cc96d1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 17:12:17 +0800
+Subject: [PATCH 4/4] tigervnc: add fPIC option to COMPILE_FLAGS
+
+The static libraries in Xregion/network/rdr/rfb were linked by shared
+library libvnc.so, so we should add fPIC option to COMPILE_FLAGS to fix
+relocation issue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ common/Xregion/CMakeLists.txt | 1 +
+ common/network/CMakeLists.txt | 1 +
+ common/rdr/CMakeLists.txt | 1 +
+ common/rfb/CMakeLists.txt | 1 +
+ 4 files changed, 4 insertions(+)
+
+diff --git a/common/Xregion/CMakeLists.txt b/common/Xregion/CMakeLists.txt
+index 40ca97e..9411328 100644
+--- a/common/Xregion/CMakeLists.txt
++++ b/common/Xregion/CMakeLists.txt
+@@ -3,4 +3,5 @@ add_library(Xregion STATIC
+
+ if(UNIX)
+ libtool_create_control_file(Xregion)
++ set_target_properties(Xregion PROPERTIES COMPILE_FLAGS -fPIC)
+ endif()
+diff --git a/common/network/CMakeLists.txt b/common/network/CMakeLists.txt
+index b624c8e..6c06ec9 100644
+--- a/common/network/CMakeLists.txt
++++ b/common/network/CMakeLists.txt
+@@ -9,4 +9,5 @@ endif()
+
+ if(UNIX)
+ libtool_create_control_file(network)
++ set_target_properties(network PROPERTIES COMPILE_FLAGS -fPIC)
+ endif()
+diff --git a/common/rdr/CMakeLists.txt b/common/rdr/CMakeLists.txt
+index 989ba2f..20f6489 100644
+--- a/common/rdr/CMakeLists.txt
++++ b/common/rdr/CMakeLists.txt
+@@ -27,4 +27,5 @@ target_link_libraries(rdr ${RDR_LIBRARIES})
+
+ if(UNIX)
+ libtool_create_control_file(rdr)
++ set_target_properties(rdr PROPERTIES COMPILE_FLAGS -fPIC)
+ endif()
+diff --git a/common/rfb/CMakeLists.txt b/common/rfb/CMakeLists.txt
+index 5047e5e..88838ab 100644
+--- a/common/rfb/CMakeLists.txt
++++ b/common/rfb/CMakeLists.txt
+@@ -98,4 +98,5 @@ target_link_libraries(rfb ${RFB_LIBRARIES})
+
+ if(UNIX)
+ libtool_create_control_file(rfb)
++ set_target_properties(rfb PROPERTIES COMPILE_FLAGS -fPIC)
+ endif()
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0005-Remove-INITARGS-from-xserver119.patch.patch b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0005-Remove-INITARGS-from-xserver119.patch.patch
new file mode 100644
index 000000000..2f342c683
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/files/0005-Remove-INITARGS-from-xserver119.patch.patch
@@ -0,0 +1,27 @@
+From e4ec992984983ac9107efae1f1cc552007e4229e Mon Sep 17 00:00:00 2001
+From: Vishal Biswas <vshlbiswas@ymail.com>
+Date: Mon, 8 May 2017 11:06:11 +0530
+Subject: [PATCH] Remove INITARGS from xserver119.patch
+
+Upstream-Status: Backport
+
+---
+ unix/xserver119.patch | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/unix/xserver119.patch b/unix/xserver119.patch
+index 614f104..7adf314 100644
+--- a/unix/xserver119.patch
++++ b/unix/xserver119.patch
+@@ -66,7 +66,7 @@ diff -up xserver/mi/miinitext.c.xserver116-rebased xserver/mi/miinitext.c
+ #include "globals.h"
+
+ +#ifdef TIGERVNC
+-+extern void vncExtensionInit(INITARGS);
+++extern void vncExtensionInit(void);
+ +#endif
+ +
+ /* The following is only a small first step towards run-time
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.8.0.bb b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.8.0.bb
new file mode 100644
index 000000000..469745f2a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.8.0.bb
@@ -0,0 +1,132 @@
+DESCRIPTION = "TigerVNC remote display system"
+HOMEPAGE = "http://www.tigervnc.com/"
+LICENSE = "GPLv2+"
+SECTION = "x11/utils"
+DEPENDS = "xserver-xorg gnutls jpeg libxtst gettext-native fltk"
+RDEPENDS_${PN} = "chkconfig coreutils hicolor-icon-theme"
+
+LIC_FILES_CHKSUM = "file://LICENCE.TXT;md5=75b02c2872421380bbd47781d2bd75d3"
+
+S = "${WORKDIR}/git"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11"
+
+inherit autotools cmake
+B = "${S}"
+
+SRCREV = "4d6e1b8306a8cca8ad5e15ff8201f6ea24459cfd"
+
+SRC_URI = "git://github.com/TigerVNC/tigervnc.git;branch=1.8-branch \
+ file://0001-tigervnc-remove-includedir.patch \
+ file://0002-do-not-build-tests-sub-directory.patch \
+ file://0003-add-missing-dynamic-library-to-FLTK_LIBRARIES.patch \
+ file://0004-tigervnc-add-fPIC-option-to-COMPILE_FLAGS.patch \
+ file://0005-Remove-INITARGS-from-xserver119.patch.patch \
+"
+
+# Keep sync with xorg-server in oe-core
+XORG_PN ?= "xorg-server"
+XORG_PV ?= "1.19.3"
+SRC_URI += "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${XORG_PV}.tar.bz2;name=xorg"
+XORG_S = "${WORKDIR}/${XORG_PN}-${XORG_PV}"
+SRC_URI[xorg.md5sum] = "015d2fc4b9f2bfe7a626edb63a62c65e"
+SRC_URI[xorg.sha256sum] = "677a8166e03474719238dfe396ce673c4234735464d6dadf2959b600d20e5a98"
+
+# It is the directory containing the Xorg source for the
+# machine on which you are building TigerVNC.
+XSERVER_SOURCE_DIR="${S}/unix/xserver"
+
+do_patch[postfuncs] += "do_patch_xserver"
+do_patch_xserver () {
+ for subdir in Xext xkb GL hw/xquartz/bundle hw/xfree86/common; do
+ install -d ${XSERVER_SOURCE_DIR}/$subdir
+ done
+
+ for subdir in hw/dmx/doc man doc hw/dmx/doxygen; do
+ install -d ${XSERVER_SOURCE_DIR}/$subdir
+ done
+
+ sources="hw/xquartz/bundle/cpprules.in man/Xserver.man doc/smartsched \
+ hw/dmx/doxygen/doxygen.conf.in xserver.ent.in xkb/README.compiled \
+ hw/xfree86/xorgconf.cpp hw/xfree86/Xorg.sh.in"
+ for i in ${sources}; do
+ install -m 0644 ${XORG_S}/$i ${XSERVER_SOURCE_DIR}/$i;
+ done
+
+ cd ${XORG_S}
+ find . -type f | egrep '.*\.(c|h|am|ac|inc|m4|h.in|pc.in|man.pre|pl|txt)$' | \
+ xargs tar cf - | (cd ${XSERVER_SOURCE_DIR} && tar xf -)
+
+ cd ${XSERVER_SOURCE_DIR}
+ xserverpatch="${S}/unix/xserver119.patch"
+ echo "Apply $xserverpatch"
+ patch -p1 -b --suffix .vnc < $xserverpatch
+}
+
+EXTRA_OECONF = "--disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
+ --disable-xwin --disable-xephyr --disable-kdrive --with-pic \
+ --disable-static --disable-xinerama \
+ --with-xkb-output=${localstatedir}/lib/xkb \
+ --disable-glx --disable-dri --disable-dri2 \
+ --disable-config-hal \
+ --disable-config-udev \
+ --without-dtrace \
+ --disable-unit-tests \
+ --disable-devel-docs \
+ --disable-selective-werror \
+ --disable-xshmfence \
+ --disable-config-udev \
+ --disable-dri3 \
+ --disable-libunwind \
+ --without-xmlto \
+ --enable-systemd-logind=no \
+ --disable-xinerama \
+ --disable-xwayland \
+"
+
+do_configure_append () {
+ olddir=`pwd`
+ cd ${XSERVER_SOURCE_DIR}
+
+ rm -rf aclocal-copy/
+ rm -f aclocal.m4
+
+ export ACLOCALDIR="${XSERVER_SOURCE_DIR}/aclocal-copy"
+ mkdir -p ${ACLOCALDIR}/
+ if [ -d ${STAGING_DATADIR_NATIVE}/aclocal ]; then
+ cp-noerror ${STAGING_DATADIR_NATIVE}/aclocal/ ${ACLOCALDIR}/
+ fi
+ if [ -d ${STAGING_DATADIR}/aclocal -a "${STAGING_DATADIR_NATIVE}/aclocal" != "${STAGING_DATADIR}/aclocal" ]; then
+ cp-noerror ${STAGING_DATADIR}/aclocal/ ${ACLOCALDIR}/
+ fi
+ ACLOCAL="aclocal --system-acdir=${ACLOCALDIR}/" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || bbfatal "autoreconf execution failed."
+ chmod +x ./configure
+ ${CACHED_CONFIGUREVARS} ./configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
+ cd $olddir
+}
+
+do_compile_append () {
+ olddir=`pwd`
+ cd ${XSERVER_SOURCE_DIR}
+
+ oe_runmake
+
+ cd $olddir
+}
+
+do_install_append() {
+ olddir=`pwd`
+ cd ${XSERVER_SOURCE_DIR}/hw/vnc
+
+ oe_runmake 'DESTDIR=${D}' install
+
+ cd $olddir
+}
+
+FILES_${PN} += " \
+ ${libdir}/xorg/modules/extensions \
+ ${datadir}/icons \
+"
+
+FILES_${PN}-dbg += "${libdir}/xorg/modules/extensions/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/ts.conf b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/ts.conf
new file mode 100644
index 000000000..1b0da937e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/ts.conf
@@ -0,0 +1,25 @@
+# Uncomment if you wish to use the linux input layer event interface
+module_raw input
+
+# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
+# module_raw collie
+
+# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
+# module_raw corgi
+
+# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
+# module_raw ucb1x00
+
+# Uncomment if you're using an HP iPaq h3600 or similar
+# module_raw h3600
+
+# Uncomment if you're using a Hitachi Webpad
+# module_raw mk712
+
+# Uncomment if you're using an IBM Arctic II
+# module_raw arctic2
+
+module pthres pmin=1
+module variance delta=30
+module dejitter delta=100
+module linear
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/tslib.sh b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/tslib.sh
new file mode 100644
index 000000000..7068e8d92
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/tslib.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ -e /dev/input/touchscreen0 ]; then
+ TSLIB_TSDEVICE=/dev/input/touchscreen0
+
+ export TSLIB_TSDEVICE
+fi
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.15.bb b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.15.bb
new file mode 100644
index 000000000..7ae941a3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.15.bb
@@ -0,0 +1,82 @@
+SUMMARY = "An abstraction layer for touchscreen panel events"
+DESCRIPTION = "Tslib is an abstraction layer for touchscreen panel \
+events, as well as a filter stack for the manipulation of those events. \
+Tslib is generally used on embedded devices to provide a common user \
+space interface to touchscreen functionality."
+HOMEPAGE = "http://tslib.org/"
+
+AUTHOR = "Martin Kepplinger <martink@posteo.de>"
+SECTION = "base"
+LICENSE = "LGPLv2+ & GPLv2+"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=fc178bcd425090939a8b634d1d6a9594 \
+ file://tests/COPYING;md5=a23a74b3f4caf9616230789d94217acb \
+"
+
+SRC_URI = "https://github.com/kergoth/tslib/releases/download/${PV}/tslib-${PV}.tar.xz;downloadfilename=tslib-${PV}.tar.xz \
+ file://ts.conf \
+ file://tslib.sh \
+"
+SRC_URI[md5sum] = "9ff36788c9ab76a10b58422227b9629e"
+SRC_URI[sha256sum] = "7ce48807cab655076d71a1ceef3ed0ab8a25df98074981d4a8fd1477ee5f710c"
+
+UPSTREAM_CHECK_URI = "https://github.com/kergoth/tslib/releases"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "debounce dejitter iir linear median pthres skip lowpass invert variance input touchkit waveshare"
+PACKAGECONFIG[debounce] = "--enable-debounce,--disable-debounce"
+PACKAGECONFIG[dejitter] = "--enable-dejitter,--disable-dejitter"
+PACKAGECONFIG[iir] = "--enable-iir,--disable-iir"
+PACKAGECONFIG[linear] = "--enable-linear,--disable-linear"
+PACKAGECONFIG[median] = "--enable-median,--disable-median"
+PACKAGECONFIG[pthres] = "--enable-pthres,--disable-pthres"
+PACKAGECONFIG[skip] = "--enable-skip,--disable-skip"
+PACKAGECONFIG[lowpass] = "--enable-lowpass,--disable-lowpass"
+PACKAGECONFIG[invert] = "--enable-invert,--disable-invert"
+PACKAGECONFIG[variance] = "--enable-variance,--disable-variance"
+PACKAGECONFIG[input] = "--enable-input,--disable-input"
+PACKAGECONFIG[tatung] = "--enable-tatung,--disable-tatung"
+PACKAGECONFIG[touchkit] = "--enable-touchkit,--disable-touchkit"
+PACKAGECONFIG[waveshare] = "--enable-waveshare,--disable-waveshare"
+PACKAGECONFIG[ucb1x00] = "--enable-ucb1x00,--disable-ucb1x00"
+PACKAGECONFIG[mk712] = "--enable-mk712,--disable-mk712"
+PACKAGECONFIG[h3600] = "--enable-h3600,--disable-h3600"
+PACKAGECONFIG[dmc] = "--enable-dmc,--disable-dmc"
+PACKAGECONFIG[linear-h2200] = "--enable-linear-h2200,--disable-linear-h2200"
+PACKAGECONFIG[corgi] = "--enable-corgi,--disable-corgi"
+PACKAGECONFIG[collie] = "--enable-collie,--disable-collie"
+PACKAGECONFIG[arctic2] = "--enable-arctic2,--disable-arctic2"
+PACKAGECONFIG[dmc_dus3000] = "--enable-dmc_dus3000,--disable-dmc_dus3000"
+PACKAGECONFIG[cy8mrln-palmpre] = "--enable-cy8mrln-palmpre,--disable-cy8mrln-palmpre"
+PACKAGECONFIG[galax] = "--enable-galax,--disable-galax"
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+
+do_install_prepend() {
+ install -m 0644 ${WORKDIR}/ts.conf ${S}/etc/ts.conf
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/profile.d/
+ install -m 0755 ${WORKDIR}/tslib.sh ${D}${sysconfdir}/profile.d/
+}
+
+RPROVIDES_tslib-conf = "libts-0.0-conf"
+
+PACKAGES =+ "tslib-conf tslib-tests tslib-calibrate tslib-uinput"
+DEBIAN_NOAUTONAME_tslib-conf = "1"
+DEBIAN_NOAUTONAME_tslib-tests = "1"
+DEBIAN_NOAUTONAME_tslib-calibrate = "1"
+DEBIAN_NOAUTONAME_tslib-uinput = "1"
+
+RDEPENDS_${PN} = "tslib-conf"
+RRECOMMENDS_${PN} = "pointercal"
+
+FILES_${PN}-dev += "${libdir}/ts/*.la"
+FILES_tslib-conf = "${sysconfdir}/ts.conf ${sysconfdir}/profile.d/tslib.sh ${datadir}/tslib"
+FILES_${PN} = "${libdir}/*.so.* ${libdir}/ts/*.so*"
+FILES_tslib-calibrate += "${bindir}/ts_calibrate"
+FILES_tslib-uinput += "${bindir}/ts_uinput"
+
+FILES_tslib-tests = "${bindir}/ts_harvest ${bindir}/ts_print ${bindir}/ts_print_raw ${bindir}/ts_print_mt \
+ ${bindir}/ts_test ${bindir}/ts_test_mt ${bindir}/ts_verify ${bindir}/ts_finddev"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts/44-source-han-sans-cn.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts/44-source-han-sans-cn.conf
new file mode 100644
index 000000000..6855791b4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts/44-source-han-sans-cn.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+ <!--
+ - Medium variant is used instead of Regular on Qt apps:
+ https://bugs.launchpad.net/ubuntu-font-family/+bug/744812
+ - Medium and Bold looks the same in certain applications:
+ https://bugs.launchpad.net/ubuntu/+source/gnome-specimen/+bug/813373
+ -->
+ <match target="scan">
+ <test name="fullname" compare="eq">
+ <string>Source Han Sans CN Medium</string>
+ </test>
+ <edit name="weight" mode="assign">
+ <const>demibold</const>
+ </edit>
+ </match>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts_1.004.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts_1.004.bb
new file mode 100644
index 000000000..9fbfc8b49
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-cn-fonts_1.004.bb
@@ -0,0 +1,34 @@
+require ttf.inc
+
+SUMMARY = "Adobe OpenType Pan-CJK font family for Simplified Chinese"
+HOMEPAGE = "https://github.com/adobe-fonts/source-han-sans"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=55719faa0112708e946b820b24b14097"
+
+inherit allarch fontcache
+
+# Download tends to break - so - or not?
+#EXCLUDE_FROM_WORLD = "1"
+
+SRC_URI = " \
+ https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/SourceHanSansCN.zip \
+ file://44-source-han-sans-cn.conf \
+"
+SRC_URI[md5sum] = "d16abc21f6575bb08894efedbed484a2"
+SRC_URI[sha256sum] = "0a0e1d8e52833bc352d454d8242da03b82c0efc41323fb66f7435e5b39734a4f"
+
+S = "${WORKDIR}/SourceHanSansCN"
+
+do_install() {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/44-source-han-sans-cn.conf ${D}${sysconfdir}/fonts/conf.d/
+
+ install -d ${D}${datadir}/fonts/truetype/
+ find ./ -name '*.otf' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+FILES_${PN} = " \
+ ${sysconfdir}/fonts \
+ ${datadir}/fonts \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts/44-source-han-sans-jp.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts/44-source-han-sans-jp.conf
new file mode 100644
index 000000000..a7a93feea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts/44-source-han-sans-jp.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+ <!--
+ - Medium variant is used instead of Regular on Qt apps:
+ https://bugs.launchpad.net/ubuntu-font-family/+bug/744812
+ - Medium and Bold looks the same in certain applications:
+ https://bugs.launchpad.net/ubuntu/+source/gnome-specimen/+bug/813373
+ -->
+ <match target="scan">
+ <test name="fullname" compare="eq">
+ <string>Source Han Sans JP Medium</string>
+ </test>
+ <edit name="weight" mode="assign">
+ <const>demibold</const>
+ </edit>
+ </match>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts_1.004.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts_1.004.bb
new file mode 100644
index 000000000..4a26a2f57
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-jp-fonts_1.004.bb
@@ -0,0 +1,34 @@
+require ttf.inc
+
+SUMMARY = "Adobe OpenType Pan-CJK font family for Japanese"
+HOMEPAGE = "https://github.com/adobe-fonts/source-han-sans"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=55719faa0112708e946b820b24b14097"
+
+inherit allarch fontcache
+
+# Download tends to break - so - or not?
+#EXCLUDE_FROM_WORLD = "1"
+
+SRC_URI = " \
+ https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/SourceHanSansJP.zip \
+ file://44-source-han-sans-jp.conf \
+"
+SRC_URI[md5sum] = "908fbf97f3df04a6838708c093f1e900"
+SRC_URI[sha256sum] = "dc6dbae3fba35f220bac88ba7130b826c7efe1282f472788fae3628b79be3f54"
+
+S = "${WORKDIR}/SourceHanSansJP"
+
+do_install() {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/44-source-han-sans-jp.conf ${D}${sysconfdir}/fonts/conf.d/
+
+ install -d ${D}${datadir}/fonts/truetype/
+ find ./ -name '*.otf' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+FILES_${PN} = " \
+ ${sysconfdir}/fonts \
+ ${datadir}/fonts \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts/44-source-han-sans-kr.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts/44-source-han-sans-kr.conf
new file mode 100644
index 000000000..dee73ae77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts/44-source-han-sans-kr.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+ <!--
+ - Medium variant is used instead of Regular on Qt apps:
+ https://bugs.launchpad.net/ubuntu-font-family/+bug/744812
+ - Medium and Bold looks the same in certain applications:
+ https://bugs.launchpad.net/ubuntu/+source/gnome-specimen/+bug/813373
+ -->
+ <match target="scan">
+ <test name="fullname" compare="eq">
+ <string>Source Han Sans KR Medium</string>
+ </test>
+ <edit name="weight" mode="assign">
+ <const>demibold</const>
+ </edit>
+ </match>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts_1.004.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts_1.004.bb
new file mode 100644
index 000000000..c91d1671f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-kr-fonts_1.004.bb
@@ -0,0 +1,34 @@
+require ttf.inc
+
+SUMMARY = "Adobe OpenType Pan-CJK font family for Korean"
+HOMEPAGE = "https://github.com/adobe-fonts/source-han-sans"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=55719faa0112708e946b820b24b14097"
+
+inherit allarch fontcache
+
+# Download tends to break - so - or not?
+#EXCLUDE_FROM_WORLD = "1"
+
+SRC_URI = " \
+ https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/SourceHanSansKR.zip \
+ file://44-source-han-sans-kr.conf \
+"
+SRC_URI[md5sum] = "f8d1bd6c87d8575afdb25e2f46bd81d4"
+SRC_URI[sha256sum] = "38fd15c80f9980492faaa1af39ff873d8a38e45027023fb17d5b10d4b4b0e6af"
+
+S = "${WORKDIR}/SourceHanSansKR"
+
+do_install() {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/44-source-han-sans-kr.conf ${D}${sysconfdir}/fonts/conf.d/
+
+ install -d ${D}${datadir}/fonts/truetype/
+ find ./ -name '*.otf' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+FILES_${PN} = " \
+ ${sysconfdir}/fonts \
+ ${datadir}/fonts \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts/44-source-han-sans-tw.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts/44-source-han-sans-tw.conf
new file mode 100644
index 000000000..ae289401b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts/44-source-han-sans-tw.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+ <!--
+ - Medium variant is used instead of Regular on Qt apps:
+ https://bugs.launchpad.net/ubuntu-font-family/+bug/744812
+ - Medium and Bold looks the same in certain applications:
+ https://bugs.launchpad.net/ubuntu/+source/gnome-specimen/+bug/813373
+ -->
+ <match target="scan">
+ <test name="fullname" compare="eq">
+ <string>Source Han Sans TWHK Medium</string>
+ </test>
+ <edit name="weight" mode="assign">
+ <const>demibold</const>
+ </edit>
+ </match>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts_1.004.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts_1.004.bb
new file mode 100644
index 000000000..728250538
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-han-sans-tw-fonts_1.004.bb
@@ -0,0 +1,34 @@
+require ttf.inc
+
+SUMMARY = "Adobe OpenType Pan-CJK font family for Traditional Chinese"
+HOMEPAGE = "https://github.com/adobe-fonts/source-han-sans"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=55719faa0112708e946b820b24b14097"
+
+inherit allarch fontcache
+
+# Download tends to break - so - or not?
+#EXCLUDE_FROM_WORLD = "1"
+
+SRC_URI = " \
+ https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/SourceHanSansTW.zip \
+ file://44-source-han-sans-tw.conf \
+"
+SRC_URI[md5sum] = "6533b71b31c19e548768f0fc963202f3"
+SRC_URI[sha256sum] = "92ba161921c5cdec5a8f8d5711676f0865b50cee071c25eb4bd4125b5af59fd0"
+
+S = "${WORKDIR}/SourceHanSansTW"
+
+do_install() {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/44-source-han-sans-tw.conf ${D}${sysconfdir}/fonts/conf.d/
+
+ install -d ${D}${datadir}/fonts/truetype/
+ find ./ -name '*.otf' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+FILES_${PN} = " \
+ ${sysconfdir}/fonts \
+ ${datadir}/fonts \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb
new file mode 100644
index 000000000..ce003e922
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb
@@ -0,0 +1,17 @@
+require ttf.inc
+
+SUMMARY = "Ethiopia and Eritrea (Amharic) font - TTF Edition"
+HOMEPAGE = "http://software.sil.org/abyssinica/"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://OFL.txt;md5=1694c7fc245cdc85c9971db707928159"
+
+SRCNAME = "AbyssinicaSIL"
+SRC_URI = "http://software.sil.org/downloads/r/abyssinica/${SRCNAME}-${PV}.zip"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+SRC_URI[md5sum] = "a3d943d18e303197c8d3d92d2de54d1e"
+SRC_URI[sha256sum] = "e48a77d5ab8ee0b06464a5b29be70f292aa25dc1e73eb39ec933bd7fa47bbd86"
+
+FONT_PACKAGES = "${PN}"
+FILES_${PN} = "${datadir}"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-arphic-uming_20080216.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-arphic-uming_20080216.bb
new file mode 100644
index 000000000..522f0fb7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-arphic-uming_20080216.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Unicode Mingti (printed) TrueType Font"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/CJKUnifonts"
+LICENSE = "Arphic-Public-License"
+LIC_FILES_CHKSUM = "file://README;md5=62be011094b7865ddc4d1a648444d31a"
+SRC_DISTRIBUTE_LICENSES += "${PN}"
+RPROVIDES_${PN} = "virtual-chinese-font"
+PR = "r6"
+
+FONT_PACKAGES = "${PN}"
+
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/t/ttf-arphic-uming/ttf-arphic-uming_0.2.${PV}.1.orig.tar.gz"
+S = "${WORKDIR}"
+
+require ttf.inc
+
+FILES_${PN} = "${datadir}"
+
+SRC_URI[md5sum] = "d219fcaf953f3eb1889399955a00379f"
+SRC_URI[sha256sum] = "8038a6db9e832456d5da5559aff8d15130243be1091bf24f3243503a6f1bda98"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf
new file mode 100644
index 000000000..9c6e56bf7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>DejaVu Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+</fontconfig>
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu_2.37.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu_2.37.bb
new file mode 100644
index 000000000..f74e5ce6c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-dejavu_2.37.bb
@@ -0,0 +1,47 @@
+require ttf.inc
+
+SUMMARY = "DejaVu font - TTF Edition"
+HOMEPAGE = "http://dejavu.sourceforge.net/wiki/"
+LICENSE = "BitstreamVera"
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=449b2c30bfe5fa897fe87b8b70b16cfa"
+
+# all subpackages except ${PN}-common itself rdepends on ${PN}-common
+RDEPENDS_${PN}-sans = "${PN}-common"
+RDEPENDS_${PN}-sans-mono = "${PN}-common"
+RDEPENDS_${PN}-sans-condensed = "${PN}-common"
+RDEPENDS_${PN}-serif = "${PN}-common"
+RDEPENDS_${PN}-serif-condensed = "${PN}-common"
+RDEPENDS_${PN}-mathtexgyre = "${PN}-common"
+RDEPENDS_${PN}-common = ""
+PR = "r7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-fonts-ttf-${PV}.tar.bz2 \
+ file://30-dejavu-aliases.conf"
+
+S = "${WORKDIR}/dejavu-fonts-ttf-${PV}/ttf"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/
+}
+
+PACKAGES = "\
+ ${PN}-sans \
+ ${PN}-sans-mono \
+ ${PN}-sans-condensed \
+ ${PN}-serif \
+ ${PN}-serif-condensed \
+ ${PN}-mathtexgyre \
+ ${PN}-common"
+FONT_PACKAGES = "${PN}-sans ${PN}-sans-mono ${PN}-sans-condensed ${PN}-serif ${PN}-serif-condensed ${PN}-mathtexgyre"
+
+FILES_${PN}-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf"
+FILES_${PN}-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf"
+FILES_${PN}-sans-condensed = "${datadir}/fonts/truetype/DejaVuSansCondensed*.ttf"
+FILES_${PN}-serif = "${datadir}/fonts/truetype/DejaVuSerif.ttf ${datadir}/fonts/truetype/DejaVuSerif-*.ttf"
+FILES_${PN}-serif-condensed = "${datadir}/fonts/truetype/DejaVuSerifCondensed*.ttf"
+FILES_${PN}-mathtexgyre = "${datadir}/fonts/truetype/DejaVuMathTeXGyre.ttf"
+FILES_${PN}-common = "${sysconfdir}"
+
+SRC_URI[md5sum] = "d0efec10b9f110a32e9b8f796e21782c"
+SRC_URI[sha256sum] = "fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-droid_git.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-droid_git.bb
new file mode 100644
index 000000000..e62badf77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-droid_git.bb
@@ -0,0 +1,27 @@
+require ttf.inc
+
+SUMMARY = "Droid fonts - TTF Edition"
+HOMEPAGE = "http://www.droidfonts.com/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.txt;md5=83544262a86f1f1ec761e75897df92bc"
+SRCREV = "21e6e2de1f0062f949fcc52d0b4559dfa3246e0e"
+PV = "0.1+gitr${SRCPV}"
+PR = "r3"
+
+SRC_URI = "git://github.com/android/platform_frameworks_base.git;branch=master"
+
+S = "${WORKDIR}/git/data/fonts"
+
+do_install_prepend() {
+ rm ${S}/Ahem.ttf MTLc3m.ttf DroidSansArabic.ttf DroidSansThai.ttf Clockopia.ttf MTLmr3m.ttf DroidSansHebrew.ttf DroidSansFallbackLegacy.ttf # we're not packaging it
+}
+
+PACKAGES = "ttf-droid-sans ttf-droid-sans-mono \
+ ttf-droid-sans-fallback ttf-droid-sans-japanese ttf-droid-serif"
+FONT_PACKAGES = "ttf-droid-sans ttf-droid-sans-mono ttf-droid-sans-fallback ttf-droid-sans-japanese ttf-droid-serif"
+
+FILES_ttf-droid-sans = "${datadir}/fonts/truetype/DroidSans.ttf ${datadir}/fonts/truetype/DroidSans-Bold.ttf"
+FILES_ttf-droid-sans-mono = "${datadir}/fonts/truetype/DroidSansMono.ttf"
+FILES_ttf-droid-sans-fallback = "${datadir}/fonts/truetype/DroidSansFallback.ttf"
+FILES_ttf-droid-sans-japanese = "${datadir}/fonts/truetype/DroidSansJapanese.ttf"
+FILES_ttf-droid-serif = "${datadir}/fonts/truetype/DroidSerif*.ttf"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-gentium_1.02.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-gentium_1.02.bb
new file mode 100644
index 000000000..6a6258add
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-gentium_1.02.bb
@@ -0,0 +1,37 @@
+require ttf.inc
+
+SUMMARY = "Gentium fonts - TTF Version"
+HOMEPAGE = "http://scripts.sil.org/gentium"
+LICENSE = "OFL"
+LICENSE_URL = "http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=OFL"
+LIC_FILES_CHKSUM = "file://OFL;md5=33a5bf7b98a9c0ae87430760ba762295 \
+"
+PR = "r8"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/t/ttf-gentium/ttf-gentium_${PV}.orig.tar.gz "
+
+S = "${WORKDIR}/ttf-sil-gentium-${PV}"
+
+do_install_append() {
+
+ install -d ${D}${datadir}/doc/ttf-gentium/
+ install -d ${D}${datadir}/doc/ttf-gentium-alt/
+
+ install -m 0644 ${S}/OFL ${D}${datadir}/doc/ttf-gentium/
+ install -m 0644 ${S}/OFL ${D}${datadir}/doc/ttf-gentium-alt/
+
+}
+
+PACKAGES = "${PN} ${PN}-alt"
+FONT_PACKAGES = "${PN} ${PN}-alt"
+
+FILES_${PN}-alt = "${datadir}/fonts/truetype/GenAI*.ttf \
+ ${datadir}/fonts/truetype/GenAR*.ttf \
+ ${datadir}/doc/ttf-gentium-alt/*"
+
+FILES_${PN} = "${datadir}/fonts/truetype/GenI*.ttf \
+ ${datadir}/fonts/truetype/GenR*.ttf \
+ ${datadir}/doc/ttf-gentium/*"
+
+SRC_URI[md5sum] = "4c3e6ae586be277537ebb68f2a45b883"
+SRC_URI[sha256sum] = "4746c04c9a4ad9e0788a38e0a2f81919a630d8070ceabc89f156b6d41d8ceb37"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
new file mode 100644
index 000000000..5cd9935d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
@@ -0,0 +1,20 @@
+require ttf.inc
+
+SUMMARY = "Hunky fonts - TTF Version"
+HOMEPAGE = "http://sourceforge.net/projects/hunkyfonts"
+LICENSE = "LGPL"
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=7fbc338309ac38fefcd64b04bb903e34"
+PR = "r7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/hunkyfonts/hunkyfonts-${PV}.tar.bz2"
+
+S = "${WORKDIR}/hunkyfonts-${PV}/TTF/"
+
+PACKAGES = "ttf-hunky-sans ttf-hunky-serif"
+FONT_PACKAGES = "ttf-hunky-sans ttf-hunky-serif"
+
+FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf"
+FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf"
+
+SRC_URI[md5sum] = "36444795a356fb8a56c63b2840729bab"
+SRC_URI[sha256sum] = "e0b1849c545b6af276407d93025c73094dd74fc259b07c1d91594fdbb9a0b829"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata/OFL.txt b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata/OFL.txt
new file mode 100644
index 000000000..1456c1809
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata/OFL.txt
@@ -0,0 +1,97 @@
+Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
+with Reserved Font Name <Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
+with Reserved Font Name <additional Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb
new file mode 100644
index 000000000..20041bb7b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb
@@ -0,0 +1,26 @@
+require ttf.inc
+
+SUMMARY = "Inconsolata font - TTF Version"
+HOMEPAGE = "http://www.levien.com/type/myfonts/inconsolata.html"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://../OFL.txt;md5=969851e3a70122069a4d9ee61dd5a2ed"
+
+SRC_URI = "http://levien.com/type/myfonts/Inconsolata.otf \
+ file://OFL.txt"
+
+S = "${WORKDIR}/ttf-inconsolata-${PV}"
+
+FILES_${PN} = "${datadir}/fonts/truetype/Inconsolata.ttf \
+ ${datadir}/doc/ttf-inconsolata/*"
+
+do_configure() {
+ mv ${WORKDIR}/Inconsolata.otf ${S}/Inconsolata.ttf
+}
+
+do_install_append() {
+ install -d ${D}${datadir}/doc/ttf-inconsolata/
+ install -m 0644 ${WORKDIR}/OFL.txt ${D}${datadir}/doc/ttf-inconsolata/
+}
+
+SRC_URI[md5sum] = "0fbe014c1f0fb5e3c71140ff0dc63edf"
+SRC_URI[sha256sum] = "1561e616c414a1b82d6e6dfbd18e5726fd65028913ade191e5fa38b6ec375a1a"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow/30-0-liberation-sans-narrow.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow/30-0-liberation-sans-narrow.conf
new file mode 100644
index 000000000..a4f4da7e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow/30-0-liberation-sans-narrow.conf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Arial Narrow</family>
+ <accept>
+ <family>Liberation Sans Narrow</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Liberation Sans Narrow</family>
+ <default>
+ <family>Arial Narrow</family>
+ </default>
+ </alias>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb
new file mode 100644
index 000000000..5b406bc65
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb
@@ -0,0 +1,32 @@
+require ttf.inc
+
+SUMMARY = "Liberation(tm) Fonts"
+DESCRIPTION = "The Liberation(tm) Fonts is a font family originally \
+created by Ascender(c) which aims at metric compatibility with \
+Arial, Times New Roman, Courier New."
+
+HOMEPAGE = "https://fedorahosted.org/liberation-fonts/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "https://releases.pagure.org/liberation-fonts/liberation-fonts-ttf-${PV}.tar.gz \
+ file://30-0-liberation-sans-narrow.conf \
+"
+
+SRC_URI[md5sum] = "134d8262145fc793c6af494dcace3e71"
+SRC_URI[sha256sum] = "61a7e2b6742a43c73e8762cdfeaf6dfcf9abdd2cfa0b099a9854d69bc4cfee5c"
+
+S = "${WORKDIR}/liberation-fonts-ttf-${PV}"
+
+do_install_append () {
+ install -d ${D}${datadir}/fonts/TTF/
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 LiberationSansNarrow*.ttf ${D}${datadir}/fonts/TTF/
+ install -D -m 0644 ${WORKDIR}/30-0-liberation-sans-narrow.conf ${D}${sysconfdir}/conf.avail/30-${PN}-sans.conf
+ install -D -m 0644 ${S}/License.txt ${D}${datadir}/licenses/${PN}/LICENSE
+}
+
+PACKAGES = "${PN}"
+FONT_PACKAGES = "${PN}"
+
+FILES_${PN} = "${datadir}/fonts ${sysconfdir} ${datadir}/licenses"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation_0.2.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation_0.2.bb
new file mode 100644
index 000000000..7204c926a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation_0.2.bb
@@ -0,0 +1,23 @@
+require ttf.inc
+
+SUMMARY = "Liberation fonts - TTF Version"
+HOMEPAGE = "https://www.redhat.com/promo/fonts/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://License.txt;md5=5b171c5100029d884fcea21d9a2b7543 \
+"
+
+PR = "r7"
+
+SRC_URI = "http://fedorahosted.org/liberation-fonts/export/807b6dfd069b998cd9b4d3158da98817ef23c79d/F-9/liberation-fonts-ttf-3.tar.gz"
+S = "${WORKDIR}/liberation-fonts-${PV}"
+
+PACKAGES = "ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif"
+FONT_PACKAGES = "ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif"
+
+FILES_ttf-liberation-mono = "${datadir}/fonts/truetype/*Mono*"
+FILES_ttf-liberation-sans = "${datadir}/fonts/truetype/*Sans*"
+FILES_ttf-liberation-serif = "${datadir}/fonts/truetype/*Serif*"
+
+SRC_URI[md5sum] = "77728078a17e39f7c242b42c3bf6feb8"
+SRC_URI[sha256sum] = "174cf27c57612971434ec8cc4a52bfd37bad8408e9b9219539c6d5113df6ff8f"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lklug_0.6-14.20090803cvs.fc24.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lklug_0.6-14.20090803cvs.fc24.bb
new file mode 100644
index 000000000..2ef6c57e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lklug_0.6-14.20090803cvs.fc24.bb
@@ -0,0 +1,24 @@
+require ttf.inc
+
+SUMMARY = "Fonts for Sinhala language - TTF Edition"
+HOMEPAGE = "http://rpms.famillecollet.com/rpmphp/zoom.php?rpm=lklug-fonts"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "http://dl.fedoraproject.org/pub/fedora/linux/releases/24/Everything/source/tree/Packages/l/lklug-fonts-0.6-14.20090803cvs.fc24.src.rpm;extract=lklug-20090803.tar.gz"
+SRC_URI[md5sum] = "3341dfb997043d234ab3f6e5a965e759"
+SRC_URI[sha256sum] = "f54c1f3b4df08995982657fed290b562556191fee2a0386afd9e8bf228f72b1a"
+
+DEPENDS = "fontforge-native"
+
+S = "${WORKDIR}"
+FONT_PACKAGES = "${PN}"
+FILES_${PN} = "${datadir}"
+
+do_compile() {
+ fontforge ${S}/convert.ff lklug
+}
+
+do_install() {
+ make install DESTDIR=${D}
+}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb
new file mode 100644
index 000000000..f9679d606
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb
@@ -0,0 +1,23 @@
+require ttf.inc
+
+SUMMARY = "The project goal is to improve existing offerings of the fonts \
+- making sure the Lohit fonts deliver the best available quality and functions \
+to the community."
+HOMEPAGE = "https://fedorahosted.org/lohit"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://OFL.txt;md5=7dfa0a236dc535ad2d2548e6170c4402"
+
+SRCREV = "d678f1b1807ea5602586279e90b5db6d62ed475e"
+SRC_URI = "git://github.com/pravins/lohit.git;branch=master"
+
+DEPENDS = "fontforge-native"
+S = "${WORKDIR}/git"
+FONT_PACKAGES = "${PN}"
+FILES_${PN} = "${datadir}"
+
+inherit pythonnative
+
+do_compile() {
+ cd ${S}; make ttf;
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-mplus_027.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-mplus_027.bb
new file mode 100644
index 000000000..9ad348d9f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-mplus_027.bb
@@ -0,0 +1,28 @@
+require ttf.inc
+
+SUMMARY = "MPlus font - TTF Edition"
+HOMEPAGE = "http://dejavu.sourceforge.net/wiki/"
+LICENSE = "${PN}"
+LIC_FILES_CHKSUM = "file://LICENSE_E;md5=ac161e96eda00db9a3aec7870b5d9658 \
+ file://LICENSE_J;md5=a120ca8d7c8e4a475d5277c9aeb95221 \
+"
+PR = "r4"
+
+SRC_URI = "http://osdn.dl.sourceforge.jp/mplus-fonts/6650/mplus-TESTFLIGHT-${PV}.tar.gz"
+S = "${WORKDIR}/mplus-TESTFLIGHT-${PV}"
+
+PACKAGESPLITFUNCS_prepend = "split_ttf_mplus_packages "
+
+python split_ttf_mplus_packages() {
+ plugindir = d.expand('${datadir}/fonts/ttf-mplus/')
+ packages = do_split_packages(d, plugindir, '^(.*)\.ttf$', 'ttf-%s', 'TTF Font %s')
+ d.setVar('FONT_PACKAGES', ' '.join(packages))
+}
+
+do_install() {
+ install -d ${D}${datadir}/fonts/ttf-mplus
+ install -m 0644 *.ttf ${D}${datadir}/fonts/ttf-mplus/
+}
+
+SRC_URI[md5sum] = "d1400184b51b3871e8d2fca6c50e18ae"
+SRC_URI[sha256sum] = "a20b9b9b03c2a6fb1e2137d29e8a6ce06406ba1e008906ea3c474dc048dc06a6"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-pt-sans_1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-pt-sans_1.1.bb
new file mode 100644
index 000000000..ac60a365f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-pt-sans_1.1.bb
@@ -0,0 +1,39 @@
+SUMMARY = "PT Sans Fonts"
+DESCRIPTION = "The PT Sans TTF font set"
+HOMEPAGE = "http://www.paratype.com/public/"
+
+SECTION = "x11/fonts"
+
+LICENSE = "ParaTypeFFL-1.3"
+LIC_FILES_CHKSUM = "file://../PT%20Free%20Font%20License_eng.txt;md5=d720f3a281ed81c3f4cfc465e11b1d0d"
+
+inherit allarch fontcache
+
+# Downloading from fedora because upstream doesn't version its zip file
+# and causes hash build failures
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/paratype-pt-sans-fonts/PTSans.zip/c3f5a0e20a75cf628387510a720924a7/PTSans.zip"
+
+SRC_URI[md5sum] = "c3f5a0e20a75cf628387510a720924a7"
+SRC_URI[sha256sum] = "0164f824e03c32c99e8a225853ec168893a04a09ade132e93a674e85ae033b2e"
+
+do_install () {
+ install -d ${D}${datadir}/fonts/X11/TTF/
+ cd ..
+ for i in *.ttf; do
+ install -m 0644 $i ${D}${prefix}/share/fonts/X11/TTF/${i}
+ done
+}
+
+FILES_${PN} += "${datadir}"
+
+pkg_postinst_${PN} () {
+ set -x
+ for fontdir in `find $D/usr/lib/X11/fonts -type d`; do
+ mkfontdir $fontdir
+ mkfontscale $fontdir
+ done
+ for fontdir in `find $D/usr/share/fonts/X11 -type d`; do
+ mkfontdir $fontdir
+ mkfontscale $fontdir
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-sazanami_20040629.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-sazanami_20040629.bb
new file mode 100644
index 000000000..efdcec840
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-sazanami_20040629.bb
@@ -0,0 +1,35 @@
+require ttf.inc
+
+SUMMARY = "Sazanami Gothic/Mincho Japanese TrueType fonts"
+SUMMARY_ttf-sazanami-gothic = "Sazanami Gothic Japanese TrueType font"
+SUMMARY_ttf-sazanami-mincho = "Sazanami Mincho Japanese TrueType font"
+AUTHOR = "Electronic Font Open Laboratory (/efont/)"
+HOMEPAGE = "http://sourceforge.jp/projects/efont/"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://README;md5=97d739900be6e852830f55aa3c07d4a0"
+SRC_DISTRIBUTE_LICENSES += "${PN}"
+RPROVIDES_${PN} = "virtual-japanese-font"
+PR = "r9"
+
+SRC_URI = "http://osdn.dl.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2"
+S = "${WORKDIR}/sazanami-20040629"
+
+PACKAGES = "ttf-sazanami-gothic ttf-sazanami-mincho"
+FONT_PACKAGES = "ttf-sazanami-gothic ttf-sazanami-mincho"
+
+FILES_ttf-sazanami-gothic = "${datadir}/fonts/truetype/sazanami-gothic.ttf \
+ ${datadir}/doc/ttf-sazanami-gothic/README"
+FILES_ttf-sazanami-mincho = "${datadir}/fonts/truetype/sazanami-mincho.ttf \
+ ${datadir}/doc/ttf-sazanami-mincho/README"
+
+do_install_append() {
+ # README contains the redistribution license
+ install -d ${D}${datadir}/doc/
+ install -d ${D}${datadir}/doc/ttf-sazanami-gothic
+ install -d ${D}${datadir}/doc/ttf-sazanami-mincho
+ install -m 0644 ${S}/README ${D}${datadir}/doc/ttf-sazanami-gothic
+ install -m 0644 ${S}/README ${D}${datadir}/doc/ttf-sazanami-mincho
+}
+
+SRC_URI[md5sum] = "ceef10579a75c92483171f3bd7f77df2"
+SRC_URI[sha256sum] = "3467ce2f70a9a3fbbf8d4d97355a2f334a6351baa6722251403637a8cbebf6b7"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-tlwg_0.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-tlwg_0.6.1.bb
new file mode 100644
index 000000000..06a3fe533
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-tlwg_0.6.1.bb
@@ -0,0 +1,27 @@
+require ttf.inc
+
+SUMMARY = "Thai Linux Working Group Fonts"
+AUTHOR = "Thai Linux Working Group"
+HOMEPAGE = "http://linux.thai.net/projects/fonts-tlwg"
+LICENSE = "GPLv2 & TLWG"
+LIC_FILES_CHKSUM = "file://../fonts-tlwg-${PV}/COPYING;md5=3d20cd7eadf4afd5460c0adb32e387fd"
+
+SRC_URI = "http://linux.thai.net/pub/ThaiLinux/software/fonts-tlwg/fonts-tlwg-${PV}.tar.xz;name=source \
+ http://linux.thai.net/pub/ThaiLinux/software/ttf-tlwg/ttf-tlwg-${PV}.tar.xz;name=ttf"
+SRC_URI[source.md5sum] = "5ea5bc964d992df0428f2e0b85f48400"
+SRC_URI[source.sha256sum] = "77fb9832221fde60c9f683ac3fdce7d45ab6e9c0d83df83da969a3fe9faba537"
+SRC_URI[ttf.md5sum] = "1bc51f45a7b661404a944fab6911261c"
+SRC_URI[ttf.sha256sum] = "aa9cd68969b6f704df3e5b1a2e11204c47f118c8ab052f04c111bd5f299f77c8"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/fonts/conf.d
+
+ for x in ${S}/etc/fonts/conf.avail/*.conf; do
+ install -m 0644 $x ${D}${sysconfdir}/fonts/conf.d/
+ done
+}
+
+PACKAGES = "${PN}"
+FONT_PACKAGES = "${PN}"
+
+FILES_${PN} = "${datadir}/fonts ${sysconfdir}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-ubuntu-font-family_0.80.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-ubuntu-font-family_0.80.bb
new file mode 100644
index 000000000..d5d1b9a17
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-ubuntu-font-family_0.80.bb
@@ -0,0 +1,20 @@
+require ttf.inc
+
+SUMMARY = "Ubuntu Font Family - TTF Version"
+HOMEPAGE = "http://font.ubuntu.com"
+LICENSE = "UFL"
+LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=325a1a9029112a2405e743c7f816427b"
+PR = "r1"
+
+SRC_URI = "http://font.ubuntu.com/download/ubuntu-font-family-${PV}.zip"
+
+SRC_URI[md5sum] = "a1fc70f5a5b1d096ab8310886cddaa1c"
+SRC_URI[sha256sum] = "107170099bbc3beae8602b97a5c423525d363106c3c24f787d43e09811298e4c"
+
+S = "${WORKDIR}/ubuntu-font-family-${PV}"
+
+PACKAGES = "ttf-ubuntu-mono ttf-ubuntu-sans"
+FONT_PACKAGES = "ttf-ubuntu-mono ttf-ubuntu-sans"
+
+FILES_ttf-ubuntu-mono = "${datadir}/fonts/truetype/*Mono*"
+FILES_ttf-ubuntu-sans = "${datadir}/fonts/truetype/Ubuntu-*"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-vlgothic_20141206.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-vlgothic_20141206.bb
new file mode 100644
index 000000000..62f2bb280
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-vlgothic_20141206.bb
@@ -0,0 +1,28 @@
+require ttf.inc
+
+SUMMARY = "Japanese TrueType fonts from Vine Linux"
+AUTHOR = "Contributor: noonov <noonov@gmail.com>"
+HOMEPAGE = "http://vlgothic.dicey.org/"
+
+LICENSE = "mplus & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.en;md5=66ecd0fd7e4da6246fa30317c7b66755 \
+ file://LICENSE_E.mplus;md5=1c4767416f20215f1e61b970f2117db9 \
+"
+
+SRC_URI = "https://osdn.jp/dl/vlgothic/VLGothic-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "bb7fadb2dff09a4fb6a11dc9dfdc0c36"
+SRC_URI[sha256sum] = "982040db2f9cb73d7c6ab7d9d163f2ed46d1180f330c9ba2fae303649bf8102d"
+
+S = "${WORKDIR}/VLGothic"
+
+do_install_append () {
+ install -D -m644 ${S}/LICENSE_E.mplus ${D}${datadir}/licenses/${PN}/COPYING_MPLUS.txt
+ install -D -m644 ${S}/README.sazanami ${D}${datadir}/licenses/${PN}/COPYING_SAZANAMI.txt
+ install -D -m644 ${S}/LICENSE.en ${D}${datadir}/licenses/${PN}/COPYING_VLGOTHIC.txt
+}
+
+PACKAGES = "${PN}"
+FONT_PACKAGES = "${PN}"
+
+FILES_${PN} = "${datadir}/fonts/truetype ${datadir}/licenses"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-wqy-zenhei_0.9.45.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-wqy-zenhei_0.9.45.bb
new file mode 100644
index 000000000..1207a61b8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-wqy-zenhei_0.9.45.bb
@@ -0,0 +1,27 @@
+require ttf.inc
+
+SUMMARY = "WenQuanYi Zen Hei - A Hei-Ti Style Chinese font"
+AUTHOR = "Qianqian Fang and The WenQuanYi Project Contributors"
+HOMEPAGE = "http://wenq.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cf540fc7d35b5777e36051280b3a911c"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wqy/wqy-zenhei-${PV}.tar.gz"
+SRC_URI[md5sum] = "4c6c3f4e902dd5ee0a121e8c41d040bd"
+SRC_URI[sha256sum] = "e4b7e306475bf9427d1757578f0e4528930c84c44eaa3f167d4c42f110ee75d6"
+
+S = "${WORKDIR}/wqy-zenhei"
+
+do_install_append () {
+ sed -i -e '/<string>[^W]/d' ${S}/44-wqy-zenhei.conf
+ install -d ${D}${sysconfdir}/fonts/conf.d
+
+ for x in ${S}/*.conf; do
+ install -m 0644 $x ${D}${sysconfdir}/fonts/conf.d/
+ done
+}
+
+PACKAGES = "${PN}"
+FONT_PACKAGES = "${PN}"
+
+FILES_${PN} = "${datadir}/fonts ${sysconfdir}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf.inc b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf.inc
new file mode 100644
index 000000000..c77af3993
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf.inc
@@ -0,0 +1,12 @@
+DESCRIPTION ?= "TrueType font package ${PN}"
+SECTION = "fonts"
+
+# we don't need a compiler nor a c library for these fonts
+INHIBIT_DEFAULT_DEPS = "1"
+
+do_install() {
+ install -d ${D}${datadir}/fonts/truetype/
+ find ./ -name '*.tt[cf]' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+inherit allarch fontcache
diff --git a/meta-openembedded/meta-oe/recipes-graphics/vdpau/libvdpau_git.bb b/meta-openembedded/meta-oe/recipes-graphics/vdpau/libvdpau_git.bb
new file mode 100644
index 000000000..31bcce066
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/vdpau/libvdpau_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Video Decode and Presentation API for UNIX"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=83af8811a28727a13f04132cc33b7f58"
+
+DEPENDS = "virtual/libx11 libxext dri2proto"
+
+PV = "1.1.1+git${SRCPV}"
+
+SRCREV = "a21bf7aa438f5dd40d0a300a3167aa3d6f26dccc"
+SRC_URI = "git://anongit.freedesktop.org/vdpau/libvdpau"
+
+S = "${WORKDIR}/git"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_install_append() {
+ rm -f ${D}${libdir}/*/*.la
+}
+
+FILES_${PN}-dbg += "${libdir}/vdpau/.debug"
+FILES_${PN}-dev += "${libdir}/vdpau/lib*${SOLIBSDEV}"
+FILES_${PN} += "${libdir}/vdpau/lib*${SOLIBS}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/endian-fix.patch b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/endian-fix.patch
new file mode 100644
index 000000000..f2a538bf6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/endian-fix.patch
@@ -0,0 +1,24 @@
+libvncserver: replace LIBVNCSERVER_WORDS_BIGENDIAN with WORDS_BIGENDIAN
+
+since macro AC_C_BIGENDIAN is used in autoconf and WORDS_BIGENDIAN is
+automatically set for different arch, it is better to use WORDS_BIGENDIAN
+instead of LIBVNCSERVER_WORDS_BIGENDIAN, which cuase issue in mips.
+
+Signed-off-by: Yu Ke <ke.yu@intel.com>
+
+Upstream-Status: Pending
+
+diff --git a/libvncserver/main.c b/libvncserver/main.c
+index b6bd930..8bbb7bf 100644
+--- a/libvncserver/main.c
++++ b/libvncserver/main.c
+@@ -47,7 +47,7 @@ static MUTEX(extMutex);
+
+ static int rfbEnableLogging=1;
+
+-#ifdef LIBVNCSERVER_WORDS_BIGENDIAN
++#ifdef WORDS_BIGENDIAN
+ char rfbEndianTest = (1==0);
+ #else
+ char rfbEndianTest = (1==1);
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/remove-redundant-RPATH.patch b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/remove-redundant-RPATH.patch
new file mode 100644
index 000000000..8e894bd8e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/remove-redundant-RPATH.patch
@@ -0,0 +1,86 @@
+From 7be055c13c7d0d640941830a3291af3b404928c1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 27 Jun 2016 04:44:14 -0400
+Subject: [PATCH] configure.ac: remove redundant RPATH
+
+It caused oe QA issue:
+...
+|ERROR: QA Issue: x11vnc: work/i586-poky-linux/x11vnc/0.9.13-r0/packages-split/
+x11vnc/usr/bin/x11vnc contains probably-redundant RPATH /usr/lib [useless-rpaths]
+...
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 21 +++++----------------
+ 1 file changed, 5 insertions(+), 16 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6f664d0..f986686 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -330,10 +330,8 @@ if test "x$with_crypto" != "xno" -a "x$with_ssl" != "xno"; then
+ saved_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS -I$with_ssl/include"
+ LDFLAGS="$LDFLAGS -L$with_ssl/lib"
+- if test "x$ld_minus_R" = "xno"; then
++ if test "x$ld_minus_R" = "xno" -o "x$GCC" = "xyes"; then
+ :
+- elif test "x$GCC" = "xyes"; then
+- LDFLAGS="$LDFLAGS -Xlinker -R$with_ssl/lib"
+ else
+ LDFLAGS="$LDFLAGS -R$with_ssl/lib"
+ fi
+@@ -447,10 +445,8 @@ if test ! -z "$with_system_libvncserver" -a "x$with_system_libvncserver" != "xno
+ fi
+ if test "x$with_system_libvncserver" != "xyes"; then
+ rflag=""
+- if test "x$ld_minus_R" = "xno"; then
++ if test "x$ld_minus_R" = "xno" -o "x$GCC" = "xyes"; then
+ :
+- elif test "x$GCC" = "xyes"; then
+- rflag="-Xlinker -R$with_system_libvncserver/lib"
+ else
+ rflag="-R$with_system_libvncserver/lib"
+ fi
+@@ -484,10 +480,8 @@ new enough.
+ elif libvncserver-config --version 1>/dev/null 2>&1; then
+ rflag=""
+ rprefix=`libvncserver-config --prefix`
+- if test "x$ld_minus_R" = "xno"; then
++ if test "x$ld_minus_R" = "xno" -o "x$GCC" = "xyes"; then
+ :
+- elif test "x$GCC" = "xyes"; then
+- rflag=" -Xlinker -R$rprefix/lib "
+ else
+ rflag=" -R$rprefix/lib "
+ fi
+@@ -541,11 +535,8 @@ if test "x$with_jpeg" != "xno"; then
+ saved_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS -I$with_jpeg/include"
+ LDFLAGS="$LDFLAGS -L$with_jpeg/lib"
+- if test "x$ld_minus_R" = "xno"; then
++ if test "x$ld_minus_R" = "xno" -o "x$GCC" = "xyes"; then
+ :
+- elif test "x$GCC" = "xyes"; then
+- # this is not complete... in general a rat's nest.
+- LDFLAGS="$LDFLAGS -Xlinker -R$with_jpeg/lib"
+ else
+ LDFLAGS="$LDFLAGS -R$with_jpeg/lib"
+ fi
+@@ -590,10 +581,8 @@ if test "x$with_zlib" != "xno" -a "x$with_libz" != "xno"; then
+ saved_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS -I$with_zlib/include"
+ LDFLAGS="$LDFLAGS -L$with_zlib/lib"
+- if test "x$ld_minus_R" = "xno"; then
++ if test "x$ld_minus_R" = "xno" -o "x$GCC" = "xyes"; then
+ :
+- elif test "x$GCC" = "xyes"; then
+- LDFLAGS="$LDFLAGS -Xlinker -R$with_zlib/lib"
+ else
+ LDFLAGS="$LDFLAGS -R$with_zlib/lib"
+ fi
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/starting-fix.patch b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/starting-fix.patch
new file mode 100644
index 000000000..f62e405dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/starting-fix.patch
@@ -0,0 +1,25 @@
+"-gui" & "-rfbport" require "wish" installed, or else x11vnc fails to start.
+Removing these 2 parameters makes x11vnc works well on poky sato image.
+
+Add also -skip_lockkeys option to ignore all Caps_Lock, Shift_Lock, Num_Lock,
+Scroll_Lock keysyms received from viewers, in order to leave the lock state on
+the server side unchanged. Yet, the keys will appear correctly.
+
+Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
+Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: x11vnc-0.9.12/x11vnc/x11vnc.desktop
+===================================================================
+--- x11vnc-0.9.12.orig/x11vnc/x11vnc.desktop 2011-03-03 10:33:18.000000000 +0800
++++ x11vnc-0.9.12/x11vnc/x11vnc.desktop 2011-03-03 10:35:20.000000000 +0800
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Name=X11VNC Server
+ Comment=Share this desktop by VNC
+-Exec=x11vnc -gui tray=setpass -rfbport PROMPT -bg -o %%HOME/.x11vnc.log.%%VNCDISPLAY
++Exec=x11vnc -bg -rfbport 5900 -skip_lockkeys -o %%HOME/.x11vnc.log.%%VNCDISPLAY
+ Icon=computer
+ Terminal=false
+ Type=Application
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.13.bb b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.13.bb
new file mode 100644
index 000000000..b047bc462
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.13.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Exports your X session on-the-fly via VNC"
+HOMEPAGE = "http://www.karlrunge.com/x11vnc/"
+
+SECTION = "x11/utils"
+AUTHOR = "Karl Runge"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f \
+ file://x11vnc/x11vnc.h;endline=33;md5=6f95dc6535467d7ee1563fd434fb372e"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/x11vnc/${PV}/x11vnc-${PV}.tar.gz\
+ file://starting-fix.patch \
+ file://endian-fix.patch \
+ file://remove-redundant-RPATH.patch \
+"
+
+SRC_URI[md5sum] = "a372ec4fe8211221547b1c108cf56e4c"
+SRC_URI[sha256sum] = "f6829f2e629667a5284de62b080b13126a0736499fe47cdb447aedb07a59f13b"
+
+DEPENDS = "openssl virtual/libx11 libxext jpeg zlib libxfixes libxrandr libxdamage libxtst libtasn1 p11-kit"
+
+inherit autotools-brokensep distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} libvncserver"
+PACKAGECONFIG[avahi] = "--with-avahi,--without-avahi,avahi"
+PACKAGECONFIG[xinerama] = "--with-xinerama,--without-xinerama,libxinerama"
+PACKAGECONFIG[libvncserver] = "--with-system-libvncserver,--without-system-libvncserver,libvncserver"
+
+do_prepare_sources () {
+ # Remove old libtool macros from acinclude.m4
+ sed -i -e '/^# libtool.m4/q' ${S}/acinclude.m4
+}
+do_patch[postfuncs] += "do_prepare_sources"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xcursorgen/xcursorgen_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xcursorgen/xcursorgen_1.0.5.bb
new file mode 100644
index 000000000..a21dc42a9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xcursorgen/xcursorgen_1.0.5.bb
@@ -0,0 +1,14 @@
+LICENSE = "ManishSingh"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bd1fb9ee90eead85f7b171807b3ab4f2"
+
+DEPENDS = "libpng libxcursor"
+
+SRC_URI = "http://xorg.freedesktop.org/archive/individual/app/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "09f56978a62854534deacc8aa8ff3031"
+SRC_URI[sha256sum] = "bc7171a0fa212da866fca2301241630e2009aea8c4ddb75f21b51a31c2e4c581"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb b/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb
new file mode 100644
index 000000000..b68e994ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb
@@ -0,0 +1,23 @@
+SUMMARY = "xdotool - command-line X11 automation tool - utilising X11 XTEST interface"
+HOMEPAGE = "http://www.semicomplete.com/projects/xdotool"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=2f9cbf7e9401cec8a38666a08851ce6b"
+SECTION = "x11"
+DEPENDS = "virtual/libx11 libxtst"
+
+PR = "r1"
+
+inherit distro_features_check pkgconfig
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://semicomplete.googlecode.com/files/xdotool-${PV}.tar.gz"
+SRC_URI[md5sum] = "1d5be641e512c343abfe5f78b39e6f19"
+SRC_URI[sha256sum] = "42d7271fbc796e53db71bb221f311b9ff3c51d90a71c9487a9bd3101ca39894f"
+
+EXTRA_OEMAKE = "PREFIX=${prefix} INSTALLLIB=${libdir} INSTALLMAN=${mandir}"
+
+do_install() {
+ oe_runmake -e install DESTDIR=${D} PREFIX=${prefix}
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/bdftopcf_1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/bdftopcf_1.1.bb
new file mode 100644
index 000000000..9116b5f74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/bdftopcf_1.1.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "bdftopcf is a tool to convert BDF fonts to PCF fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/bdftopcf/"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f9a35333adf75edd1eaef84bca65a490"
+DEPENDS = "libxfont"
+
+SRC_URI[md5sum] = "2a455d3c02390597feb9cefb3fe97a45"
+SRC_URI[sha256sum] = "4b4df05fc53f1e98993638d6f7e178d95b31745c4568cee407e167491fd311a2"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/iceauth_1.0.7.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/iceauth_1.0.7.bb
new file mode 100644
index 000000000..f40dec884
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/iceauth_1.0.7.bb
@@ -0,0 +1,16 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+
+DESCRIPTION = "A collection of utilities used to tweak and query the runtime configuration\
+of the X server."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=13f70acf3c27f5f834bbc954df775f8e"
+
+BBCLASSEXTEND = "native"
+
+DEPENDS += "libice"
+
+SRC_URI[md5sum] = "25dab02f8e40d5b71ce29a07dc901b8c"
+SRC_URI[sha256sum] = "1216af2dee99b318fcf8bf9a259915273bcb37a7f1e7859af4f15d0ebf6f3f0a"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg/0001-Makefile.am-Error-Fix.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg/0001-Makefile.am-Error-Fix.patch
new file mode 100644
index 000000000..207285373
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg/0001-Makefile.am-Error-Fix.patch
@@ -0,0 +1,33 @@
+From 088bb4cef2c93bef312b076a8c7a3c798cbf2f19 Mon Sep 17 00:00:00 2001
+From: daicy <daicy@cn.fujitsu.com>
+Date: Tue, 8 Dec 2015 11:45:01 +0900
+Subject: [PATCH] Makefile.am: Error Fix
+
+Do not compile man dir since error always occur.
+ | sed: file filenames.sed line 3: unterminated `s' command
+ | make[2]: *** [sessreg.1] Error 1
+It is not a good way.But can remove it from PNBLACKLIST.
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index cddffd0..94f7048 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -18,7 +18,7 @@
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ # PERFORMANCE OF THIS SOFTWARE.
+
+-SUBDIRS = man
++#SUBDIRS = man
+ bin_PROGRAMS = sessreg
+
+ AM_CFLAGS = $(CWARNFLAGS) $(SESSREG_CFLAGS)
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg_1.1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg_1.1.1.bb
new file mode 100644
index 000000000..d2afa78f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/sessreg_1.1.1.bb
@@ -0,0 +1,11 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "a simple program for managing utmp/wtmp entries"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d938a70c8280c265a1ccd2954365d185"
+SRC_URI += "file://0001-Makefile.am-Error-Fix.patch"
+SRC_URI[md5sum] = "e475167a892b589da23edf8edf8c942d"
+SRC_URI[sha256sum] = "78a76ae3f3f6a26547a34630d1b740f42344848b5fb6d7c9c7f7da255e35a6e1"
+
+CFLAGS_append_libc-musl = " -D_WTMPX_FILE=WTMP_FILE -D_PATH_WTMPX=_PATH_WTMP -D_UTMPX_FILE=UTMP_FILE -D_PATH_UTMPX=_PATH_UTMP "
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/setxkbmap_1.3.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/setxkbmap_1.3.1.bb
new file mode 100644
index 000000000..840275387
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/setxkbmap_1.3.1.bb
@@ -0,0 +1,19 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "A program to compile XKB keyboard description"
+
+DESCRIPTION = "The xkbcomp keymap compiler converts a description of an \
+XKB keymap into one of several output formats. The most common use for \
+xkbcomp is to create a compiled keymap file (.xkm extension) which can \
+be read directly by XKB-capable X servers or utilities."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=5feafdbe6dfe9e2bd32325be0cfc86f8"
+
+PE = "1"
+
+DEPENDS += "libxkbfile"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "2c47a1b8e268df73963c4eb2316b1a89"
+SRC_URI[sha256sum] = "a9ddb3963f263ba13f0ea105d8c45a531832140530217cc559587bb94f02d3e1"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/twm_1.0.9.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/twm_1.0.9.bb
new file mode 100644
index 000000000..41c804bb3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/twm_1.0.9.bb
@@ -0,0 +1,15 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+SUMMARY = "tiny window manager"
+DEPENDS += " libxext libxt libxmu bison-native"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4c6d42ef60e8166aa26606524c0b9586"
+
+SRC_URI[md5sum] = "59a6f076cdacb5f6945dac809bcf4906"
+SRC_URI[sha256sum] = "c575167ac33edf3bd1592f1bedfe0559debb128ed5fb4873c1278e3be166310a"
+
+FILES_${PN} += "${datadir}/X11/twm/system.twmrc"
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_PATH = "${bindir}/twm"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PRIORITY = "1"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xclock_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xclock_1.0.5.bb
new file mode 100644
index 000000000..cf970d5d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xclock_1.0.5.bb
@@ -0,0 +1,11 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "analog / digital clock for X"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=857759ade8f2ddde5c7b32ef7356ea36"
+
+DEPENDS += " libxaw libxrender libxft libxkbfile libxt"
+
+SRC_URI[md5sum] = "eaf124bbc9d13e1a12a29faaa2ed3612"
+SRC_URI[sha256sum] = "53a9169e24f3814fbfcfee3ca0b98637840a3156ed7c7e36ae03940fabae4c9a"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xfontsel_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xfontsel_1.0.5.bb
new file mode 100644
index 000000000..c74b29194
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xfontsel_1.0.5.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "xfontsel provides point and click selection of X11 font names"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xfontsel/"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4669d2703c60d585cc29ba7e9a69bcb3"
+DEPENDS += " libxaw"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4669d2703c60d585cc29ba7e9a69bcb3"
+
+SRC_URI[md5sum] = "a40302b88c599b63e3d3d412e02871e6"
+SRC_URI[sha256sum] = "170d8550b96fb47b04db6181b947e6f6b8b97f4df5d691c351a278480cc931bf"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xgamma_1.0.6.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xgamma_1.0.6.bb
new file mode 100644
index 000000000..4949616dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xgamma_1.0.6.bb
@@ -0,0 +1,15 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+
+DESCRIPTION = "xgamma allows X users to query and alter the gamma \
+correction of a monitor via the X video mode extension."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=ac9801b8423fd7a7699ccbd45cf134d8"
+
+DEPENDS += "libxxf86vm"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "90b4305157c2b966d5180e2ee61262be"
+SRC_URI[sha256sum] = "0ef1c35b5c18b1b22317f455c8df13c0a471a8efad63c89c98ae3ce8c2b222d3"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbevd_1.1.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbevd_1.1.4.bb
new file mode 100644
index 000000000..a6fc9e755
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbevd_1.1.4.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+SUMMARY = "A program to compile XKB keyboard description"
+DESCRIPTION = "The xkbevd event daemon listens for specified XKB \
+events and executes requested commands if they occur. "
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=208668fa9004709ba22c2b748140956c"
+
+DEPENDS += "libxkbfile"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "c747faf1f78f5a5962419f8bdd066501"
+SRC_URI[sha256sum] = "2430a2e5302a4cb4a5530c1df8cb3721a149bbf8eb377a2898921a145197f96a"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbprint_1.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbprint_1.0.4.bb
new file mode 100644
index 000000000..26977bea5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbprint_1.0.4.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+SUMMARY = "A program to compile XKB keyboard description"
+DESCRIPTION = "xkbprint generates a printable or encapsulated PostScript \
+description of an XKB keyboard description."
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=20f28f97555b220fde762bc2a4406a8f"
+
+DEPENDS += "libxkbfile"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "3c25b40de530112c08bf7d229c5c6a28"
+SRC_URI[sha256sum] = "0b3faab8fefad03dfb7e866f634cf859822801de6b5fc6cf5e0a62857ed93e12"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.4.bb
new file mode 100644
index 000000000..6a05e98e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.4.bb
@@ -0,0 +1,19 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "XKeyboard (XKB) extension to the X11 protocol"
+DESCRIPTION = " \
+xkbutils is a collection of small utilities utilizing the XKeyboard (XKB) \
+extension to the X11 protocol. \
+It includes: \
+ xkbbell - generate XKB bell events \
+ xkbvleds - display the state of LEDs on an XKB keyboard in a window \
+ xkbwatch - reports changes in the XKB keyboard state \
+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=64322fab5239f5c8d97cf6e0e14f1c62"
+
+DEPENDS += "libxaw libxkbfile"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "502b14843f610af977dffc6cbf2102d5"
+SRC_URI[sha256sum] = "d2a18ab90275e8bca028773c44264d2266dab70853db4321bdbc18da75148130"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsatoms_1.1.2.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsatoms_1.1.2.bb
new file mode 100644
index 000000000..723d4e211
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsatoms_1.1.2.bb
@@ -0,0 +1,14 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xlsatoms/"
+DESCRIPTION = "Xlsatoms lists the interned atoms defined on an X11 server"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2b08d9e2e718ac83e6fe2b974d4b5fd8"
+
+DEPENDS += "libxmu"
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "5dcb6e6c4b28c8d7aeb45257f5a72a7d"
+SRC_URI[sha256sum] = "47e5dc7c3dbda6db2cf8c00cedac1722835c1550aa21cfdbc9ba83906694dea4"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsclients_1.1.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsclients_1.1.4.bb
new file mode 100644
index 000000000..42bda7ea3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsclients_1.1.4.bb
@@ -0,0 +1,14 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xlsclients/"
+DESCRIPTION = "xlsclients is a utility for listing information about the \
+client applications running on a X11 server."
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=350e1b718a56df39cfe8ca9345ea4575"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "4fa92377e0ddc137cd226a7a87b6b29a"
+SRC_URI[sha256sum] = "773f2af49c7ea2c44fba4213bee64325875c1b3c9bc4bbcd8dac9261751809c1"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsfonts_1.0.6.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsfonts_1.0.6.bb
new file mode 100644
index 000000000..76b76e4b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xlsfonts_1.0.6.bb
@@ -0,0 +1,10 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "server font list displayer for X"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xlsfonts/"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5ec74dd7ea4d10c4715a7c44f159a40b"
+
+SRC_URI[md5sum] = "5774fd4f518b3f338f2b28f270e04bfc"
+SRC_URI[sha256sum] = "89b80b3a030006ab6cef717be286c12f2477894b227158b1e6133274f6ebd368"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmag_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmag_1.0.5.bb
new file mode 100644
index 000000000..d57742180
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmag_1.0.5.bb
@@ -0,0 +1,11 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "xmag is a tool to magnify parts of the screen"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xmag/"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3413fe6832380b44b69b172d2d1b2387"
+DEPENDS += " libxaw libxt"
+
+SRC_URI[md5sum] = "280b81cb09d1903aa868a058d90128ad"
+SRC_URI[sha256sum] = "4ace8795cf756be4ba387f30366045594ce26adda2f5ffe1f8e896825d0932c6"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmessage_1.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmessage_1.0.4.bb
new file mode 100644
index 000000000..9960706d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xmessage_1.0.4.bb
@@ -0,0 +1,10 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "Display a message or query in a window"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=73c7f696a728de728d7446cbca814cc5"
+
+DEPENDS += "libxaw"
+
+SRC_URI[md5sum] = "2dd5ae46fa18abc9331bc26250a25005"
+SRC_URI[sha256sum] = "bcdf4b461c439bb3ade6e1e41c47d6218b912da8e9396b7ad70856db2f95ab68"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrdb_1.1.0.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrdb_1.1.0.bb
new file mode 100644
index 000000000..85957e056
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrdb_1.1.0.bb
@@ -0,0 +1,9 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+SUMMARY = "X server resource database utility"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d1167c4f586bd41f0c62166db4384a69"
+
+DEPENDS += "libxmu"
+
+SRC_URI[md5sum] = "b54c7e3e53b4f332d41ed435433fbda0"
+SRC_URI[sha256sum] = "73827b6bbfc9d27ca287d95a1224c306d7053cd7b8156641698d7dc541ca565b"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrefresh_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrefresh_1.0.5.bb
new file mode 100644
index 000000000..a2a4941e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xrefresh_1.0.5.bb
@@ -0,0 +1,13 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xrefresh/"
+DESCRIPTION = "xrefresh - refresh all or part of an X screen"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dad633bce9c3cd0e3abf72a16e0057cf"
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "a896382bc53ef3e149eaf9b13bc81d42"
+SRC_URI[sha256sum] = "3213671b0a8a9d1e8d1d5d9e3fd86842c894dd9acc1be2560eda50bc1fb791d6"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetmode_1.0.0.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetmode_1.0.0.bb
new file mode 100644
index 000000000..b757329d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetmode_1.0.0.bb
@@ -0,0 +1,15 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xsetmode/"
+DESCRIPTION = "xsetmode sets the mode of an XInput device to either absolute \
+or relative."
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9b37e00e7793b667cbc64f9df7b6d733"
+
+DEPENDS += "libxi"
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "d074e79d380b031d2f60e4cd56538c93"
+SRC_URI[sha256sum] = "988b47cd922991c6e6adbce15dc386ac75690b61744b526c3af5a4eaa9afa0aa"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.1.bb
new file mode 100644
index 000000000..2c79f27ca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.1.bb
@@ -0,0 +1,14 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xsetroot/"
+DESCRIPTION = "xsetroot is a root window parameter setting utility for X"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6ea29dbee22324787c061f039e0529de"
+
+DEPENDS += "xbitmaps libxcursor"
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "7211b31ec70631829ebae9460999aa0b"
+SRC_URI[sha256sum] = "ba215daaa78c415fce11b9e58c365d03bb602eaa5ea916578d76861a468cc3d9"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xstdcmap_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xstdcmap_1.0.3.bb
new file mode 100644
index 000000000..99f70364b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xstdcmap_1.0.3.bb
@@ -0,0 +1,16 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xstdcmap"
+DESCRIPTION = "The xstdcmap utility can be used to selectively define \
+standard colormap properties."
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2b08d9e2e718ac83e6fe2b974d4b5fd8"
+
+DEPENDS += "libxmu"
+BBCLASSEXTEND = "native"
+
+SRC_URI[md5sum] = "eb5473acaef15a5db9b50df29c6a7f90"
+SRC_URI[sha256sum] = "f648e2b0cf16aa29856de998e2c7204be39dc1f8daeda9464d32288e0b580fc1"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_330.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_330.bb
new file mode 100644
index 000000000..16f9b7882
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_330.bb
@@ -0,0 +1,34 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+SUMMARY = "xterm is the standard terminal emulator for the X Window System"
+DEPENDS = "libxaw xproto xextproto libxext libxau libxinerama libxpm ncurses"
+
+LIC_FILES_CHKSUM = "file://xterm.h;beginline=3;endline=31;md5=f02ab9ebda87b770ecf711dbb3784a33"
+
+SRC_URI = "http://invisible-mirror.net/archives/${BPN}/${BP}.tgz"
+
+SRC_URI[md5sum] = "9a6db7974aa4ccbb50eabebf72618467"
+SRC_URI[sha256sum] = "7aeef9f29f6b95e09f481173c8c3053357bf5ffe162585647f690fd1707556df"
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[xft] = "--enable-freetype,--disable-freetype,libxft fontconfig freetype-native"
+
+EXTRA_OECONF = " --x-includes=${STAGING_INCDIR} \
+ --x-libraries=${STAGING_LIBDIR} \
+ FREETYPE_CONFIG=${STAGING_BINDIR_CROSS}/freetype-config \
+ --disable-imake \
+ --disable-rpath-hack \
+ --disable-setuid"
+
+B = "${S}"
+
+do_configure() {
+ gnu-configize --force
+ sed -e "s%/usr/contrib/X11R6%${STAGING_LIBDIR}%g" -i configure
+ oe_runconf
+}
+
+FILES_${PN} += "/usr/lib/X11"
+
+# busybox can supply resize too
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "resize"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwd_1.0.6.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwd_1.0.6.bb
new file mode 100644
index 000000000..694bf57ac
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwd_1.0.6.bb
@@ -0,0 +1,11 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "xwd is a tool to capture an X window or screen to file"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xwd/"
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c0cdb783e9a0198237371fdaa26a18bf"
+DEPENDS = "libxmu libxkbfile"
+
+SRC_URI[md5sum] = "6b5d48464c5f366e91efd08b62b12d94"
+SRC_URI[sha256sum] = "3bb396a2268d78de4b1c3e5237a85f7849d3434e87b3cd1f4d57eef614227d79"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwud_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwud_1.0.5.bb
new file mode 100644
index 000000000..7cb550d27
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xwud_1.0.5.bb
@@ -0,0 +1,12 @@
+require recipes-graphics/xorg-app/xorg-app-common.inc
+
+SUMMARY = "X.Org X11 X client utilities"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/app/xwud/"
+DESCRIPTION = "xwud allows X users to display in a window an image saved \
+in a specially formatted dump file, such as produced by xwd."
+SECTION = "x11/app"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=31e8892c80b7a0c1c5f37c8e8ae6d794"
+
+SRC_URI[md5sum] = "79972093bb0766fcd0223b2bd6d11932"
+SRC_URI[sha256sum] = "99997051f8a892313f22edf41dab45864e86e7062ee9012d5dbb6a40fc6b10a9"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xbitmaps_1.1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xbitmaps_1.1.1.bb
new file mode 100644
index 000000000..8647f038e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xbitmaps_1.1.1.bb
@@ -0,0 +1,11 @@
+require xorg-data-common.inc
+
+SUMMARY = "Common X11 Bitmaps"
+LICENSE = "MIT"
+DEPENDS += "libxmu"
+RDEPENDS_${PN}-dev = ""
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=dbd075aaffa4a60a8d00696f2e4b9a8f"
+
+SRC_URI[md5sum] = "7444bbbd999b53bec6a60608a5301f4c"
+SRC_URI[sha256sum] = "3671b034356bbc4d32d052808cf646c940ec8b2d1913adac51b1453e41aa1e9d"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xorg-data-common.inc b/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xorg-data-common.inc
new file mode 100644
index 000000000..cb6b5ac77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-data/xorg-data-common.inc
@@ -0,0 +1,12 @@
+HOMEPAGE = "http://www.x.org"
+SECTION = "x11/data"
+LICENSE = "MIT-X"
+
+XORG_PN = "${BPN}"
+
+SRC_URI = "${XORG_MIRROR}/individual/data/${BP}.tar.bz2"
+S = "${WORKDIR}/${XORG_PN}-${PV}"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-doc-common.inc b/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-doc-common.inc
new file mode 100644
index 000000000..f4b8b00de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-doc-common.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "X documentation"
+HOMEPAGE = "http://www.x.org"
+SECTION = "x11/docs"
+LICENSE = "MIT-X"
+
+SRC_URI = "${XORG_MIRROR}/individual/doc/${BPN}-${PV}.tar.bz2"
+
+S = "${WORKDIR}/${BPN}-${PV}"
+
+INC_PR = "r1"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-sgml-doctools_1.7.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-sgml-doctools_1.7.bb
new file mode 100644
index 000000000..80f1f008b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-doc/xorg-sgml-doctools_1.7.bb
@@ -0,0 +1,12 @@
+require xorg-doc-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
+
+DEPENDS += "util-macros"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c8c6c808cd3c797a07b24e443af1c449"
+
+SRC_URI[md5sum] = "2588efb3f49f7fc6ecf41ce42e0b2e5e"
+SRC_URI[sha256sum] = "84fd94e5c50556e6f77501485f8a48724cf3c95c6d58480bc280258ba14580c8"
+
+FILES_${PN} += " /usr/share/sgml/X11"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi
new file mode 100644
index 000000000..906043947
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.capabilities" contains="input.touchpad">
+ <merge key="input.x11_driver" type="string">tslib</merge>
+ </match>
+ <match key="info.capabilities" contains="input.touchscreen">
+ <merge key="input.x11_driver" type="string">tslib</merge>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules
new file mode 100644
index 000000000..ec130c257
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules
@@ -0,0 +1,5 @@
+# create /dev/input/touchscreenX symlink, tag xf86-input-tslib as driver
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen%n", ENV{x11_driver}="tslib"
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/touchscreen%n", ENV{x11_driver}="tslib"
+
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch
new file mode 100644
index 000000000..07754731d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch
@@ -0,0 +1,20 @@
+xorg-server-1.7.3/hw/xfree86/common/xf86Helper.c contains this code
+causing a double free crash on chvt or exit:
+
+ /* This should *really* be handled in drv->UnInit(dev) call instead, but
+ * if the driver forgets about it make sure we free it or at least crash
+ * with flying colors */
+ if (pInp->private)
+ xfree(pInp->private);
+Index: xf86-input-tslib-0.0.6/src/tslib.c
+===================================================================
+--- xf86-input-tslib-0.0.6.orig/src/tslib.c
++++ xf86-input-tslib-0.0.6/src/tslib.c
+@@ -435,6 +435,7 @@ xf86TslibUninit(InputDriverPtr drv, Inpu
+ xf86TslibControlProc(pInfo->dev, DEVICE_OFF);
+ ts_close(priv->ts);
+ xfree(pInfo->private);
++ pInfo->private = NULL;
+ xf86DeleteInput(pInfo, 0);
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-0.0.6-xf86XInputSetScreen.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-0.0.6-xf86XInputSetScreen.patch
new file mode 100644
index 000000000..d16b4a53c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-0.0.6-xf86XInputSetScreen.patch
@@ -0,0 +1,31 @@
+Fixes crash when a touchscreen event is received with xserver 1.12 and later:
+X: symbol lookup error: /usr/lib/xorg/modules/input/tslib_drv.so: undefined symbol: xf86XInputSetScreen
+
+Upstream-Status: Pending
+
+Taken from Gentoo:
+https://bugs.gentoo.org/show_bug.cgi?id=446432
+
+diff -ur xf86-input-tslib-0.0.6.orig/src/tslib.c xf86-input-tslib-0.0.6/src/tslib.c
+--- xf86-input-tslib-0.0.6.orig/src/tslib.c 2012-12-05 01:12:16.286597071 +0100
++++ xf86-input-tslib-0.0.6/src/tslib.c 2012-12-05 01:11:02.686598595 +0100
+@@ -75,6 +75,19 @@
+ #define COLLECT_INPUT_OPTIONS(pInfo, options) xf86CollectInputOptions((pInfo), (options))
+ #endif
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 13
++static void
++xf86XInputSetScreen(InputInfoPtr pInfo,
++ int screen_number,
++ int x,
++ int y)
++{
++ if (miPointerGetScreen(pInfo->dev) !=
++ screenInfo.screens[screen_number]) {
++ miPointerSetScreen(pInfo->dev, screen_number, x, y);
++ }
++}
++#endif
+
+ enum { TSLIB_ROTATE_NONE=0, TSLIB_ROTATE_CW=270, TSLIB_ROTATE_UD=180, TSLIB_ROTATE_CCW=90 };
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-port-ABI-12-r48.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-port-ABI-12-r48.patch
new file mode 100644
index 000000000..6a6d5b92c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xf86-input-tslib-port-ABI-12-r48.patch
@@ -0,0 +1,196 @@
+Upstream-Status: Pending
+
+Taken from debian:
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=627075
+
+Index: xf86-input-tslib-trunk/src/tslib.c
+===================================================================
+--- xf86-input-tslib-trunk/src/tslib.c (revision 48)
++++ xf86-input-tslib-trunk/src/tslib.c (working copy)
+@@ -69,6 +69,13 @@
+ #define DEFAULT_HEIGHT 240
+ #define DEFAULT_WIDTH 320
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
++#define COLLECT_INPUT_OPTIONS(pInfo, options) xf86CollectInputOptions((pInfo), (options), NULL)
++#else
++#define COLLECT_INPUT_OPTIONS(pInfo, options) xf86CollectInputOptions((pInfo), (options))
++#endif
++
++
+ enum { TSLIB_ROTATE_NONE=0, TSLIB_ROTATE_CW=270, TSLIB_ROTATE_UD=180, TSLIB_ROTATE_CCW=90 };
+
+ enum button_state { BUTTON_NOT_PRESSED = 0, BUTTON_1_PRESSED = 1, BUTTON_3_CLICK = 3, BUTTON_3_CLICKED=4, BUTTON_EMULATION_OFF=-1 };
+@@ -106,7 +113,7 @@
+ }
+
+ static Bool
+-ConvertProc( LocalDevicePtr local,
++ConvertProc( InputInfoPtr local,
+ int first,
+ int num,
+ int v0,
+@@ -135,7 +142,7 @@
+ return t;
+ }
+
+-static void ReadInput (LocalDevicePtr local)
++static void ReadInput (InputInfoPtr local)
+ {
+ struct ts_priv *priv = (struct ts_priv *) (local->private);
+ struct ts_sample samp;
+@@ -382,7 +389,11 @@
+ axiswidth - 1, /* max val */
+ axiswidth, /* resolution */
+ 0, /* min_res */
+- axiswidth); /* max_res */
++ axiswidth /* max_res */
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
++ ,Absolute
++#endif
++ );
+
+ InitValuatorAxisStruct(device, 1,
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+@@ -392,7 +403,11 @@
+ axisheight - 1, /* max val */
+ axisheight, /* resolution */
+ 0, /* min_res */
+- axisheight); /* max_res */
++ axisheight /* max_res */
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
++ ,Absolute
++#endif
++ );
+
+ if (InitProximityClassDeviceStruct (device) == FALSE) {
+ ErrorF ("Unable to allocate EVTouch touchscreen ProximityClassDeviceStruct\n");
+@@ -434,7 +449,7 @@
+ ErrorF("%s\n", __FUNCTION__);
+ xf86TslibControlProc(pInfo->dev, DEVICE_OFF);
+ ts_close(priv->ts);
+- xfree(pInfo->private);
++ free(pInfo->private);
+ pInfo->private = NULL;
+ xf86DeleteInput(pInfo, 0);
+ }
+@@ -444,47 +459,57 @@
+ *
+ * called when the module subsection is found in XF86Config
+ */
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
++static int
++xf86TslibInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
++#else
+ static InputInfoPtr
+ xf86TslibInit(InputDriverPtr drv, IDevPtr dev, int flags)
++#endif
+ {
+ struct ts_priv *priv;
+ char *s;
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ InputInfoPtr pInfo;
++#endif
+
+- priv = xcalloc (1, sizeof (struct ts_priv));
++ priv = calloc (1, sizeof (struct ts_priv));
+ if (!priv)
+- return NULL;
++ return BadValue;
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ if (!(pInfo = xf86AllocateInput(drv, 0))) {
+- xfree(priv);
+- return NULL;
++ free(priv);
++ return BadValue;
+ }
+
+ /* Initialise the InputInfoRec. */
+ pInfo->name = dev->identifier;
+- pInfo->type_name = XI_TOUCHSCREEN;
+ pInfo->flags =
+ XI86_KEYBOARD_CAPABLE | XI86_POINTER_CAPABLE |
+ XI86_SEND_DRAG_EVENTS;
+- pInfo->device_control = xf86TslibControlProc;
+- pInfo->read_input = ReadInput;
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
+ pInfo->motion_history_proc = xf86GetMotionEvents;
+ pInfo->history_size = 0;
+ #endif
+- pInfo->control_proc = NULL;
++ pInfo->conf_idev = dev;
+ pInfo->close_proc = NULL;
+- pInfo->switch_mode = NULL;
+ pInfo->conversion_proc = ConvertProc;
+ pInfo->reverse_conversion_proc = NULL;
+- pInfo->dev = NULL;
+ pInfo->private_flags = 0;
+ pInfo->always_core_feedback = 0;
+- pInfo->conf_idev = dev;
++#endif
++
++ pInfo->type_name = XI_TOUCHSCREEN;
++ pInfo->control_proc = NULL;
++ pInfo->read_input = ReadInput;
++ pInfo->device_control = xf86TslibControlProc;
++ pInfo->switch_mode = NULL;
+ pInfo->private = priv;
++ pInfo->dev = NULL;
+
+ /* Collect the options, and process the common options. */
+- xf86CollectInputOptions(pInfo, NULL, NULL);
++ COLLECT_INPUT_OPTIONS(pInfo, NULL);
+ xf86ProcessCommonOptions(pInfo, pInfo->options);
+
+ priv->screen_num = xf86SetIntOption(pInfo->options, "ScreenNumber", 0 );
+@@ -510,23 +535,31 @@
+ priv->rotate = TSLIB_ROTATE_NONE;
+ }
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ s = xf86CheckStrOption(dev->commonOptions, "path", NULL);
++#else
++ s = xf86CheckStrOption(pInfo->options, "path", NULL);
++#endif
+ if (!s)
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ s = xf86CheckStrOption(dev->commonOptions, "Device", NULL);
++#else
++ s = xf86CheckStrOption(pInfo->options, "Device", NULL);
++#endif
+
+ priv->ts = ts_open(s, 1);
+- xfree(s);
++ free(s);
+
+ if (!priv->ts) {
+ ErrorF("ts_open failed (device=%s)\n",s);
+ xf86DeleteInput(pInfo, 0);
+- return NULL;
++ return BadValue;
+ }
+
+ if (ts_config(priv->ts)) {
+ ErrorF("ts_config failed\n");
+ xf86DeleteInput(pInfo, 0);
+- return NULL;
++ return BadValue;
+ }
+
+ pInfo->fd = ts_fd(priv->ts);
+@@ -536,11 +569,13 @@
+ priv->state = BUTTON_EMULATION_OFF;
+ }
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ /* Mark the device configured */
+ pInfo->flags |= XI86_CONFIGURED;
++#endif
+
+ /* Return the configured device */
+- return (pInfo);
++ return Success;
+ }
+
+ _X_EXPORT InputDriverRec TSLIB = {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch
new file mode 100644
index 000000000..a1f6ba8f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch
@@ -0,0 +1,34 @@
+From Grazvydas Ignotas
+
+At least xserver 1.7.4 crashes on XGetPointerControl request because of xf86-input-tslib:
+
+Program received signal SIGSEGV, Segmentation fault.
+#0 0x000355e0 in ProcGetPointerControl (client=0x4a2e58) at devices.c:2122
+#1 0x00062fa8 in Dispatch () at dispatch.c:439
+#2 0x00022444 in main (argc=4, argv=0xbeebedc4, envp=0xbeebedd8) at main.c:285
+
+This happens because ptrfeed field is not set in device structure from tslib.
+To fix this, call InitPtrFeedbackClassDeviceStruct() during DEVICE_INIT to get necessary setup done (as done in other input drivers).
+
+---
+diff -ur xf86-input-tslib-0.0.6/src/tslib.c xf86-input-tslib-0.0.6_/src/tslib.c
+--- xf86-input-tslib-0.0.6/src/tslib.c 2010-02-09 12:23:22.000000000 +0200
++++ xf86-input-tslib-0.0.6_/src/tslib.c 2010-02-09 12:37:33.000000000 +0200
+@@ -103,8 +103,6 @@
+ static void
+ PointerControlProc(DeviceIntPtr dev, PtrCtrl * ctrl)
+ {
+- ErrorF("%s\n", __FUNCTION__);
+- return;
+ }
+
+ static Bool
+@@ -406,6 +404,8 @@
+ xf86MotionHistoryAllocate(pInfo);
+ #endif
+
++ if (!InitPtrFeedbackClassDeviceStruct(device, PointerControlProc))
++ return !Success;
+ break;
+
+ case DEVICE_ON:
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib_0.0.6.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib_0.0.6.bb
new file mode 100644
index 000000000..6a3689a2e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib_0.0.6.bb
@@ -0,0 +1,35 @@
+require recipes-graphics/xorg-driver/xorg-driver-input.inc
+SUMMARY = "X.Org X server -- tslib input driver"
+DEPENDS += "tslib"
+RRECOMMENDS_${PN} += "tslib-calibrate"
+RSUGGESTS_${PN} += "hal"
+
+# derived from xf86-input-void, that's why I kept MIT-X, but it's not clear, see COPYING
+LIC_FILES_CHKSUM = "file://src/tslib.c;endline=28;md5=bd62eaef222dcf5cd59e490a12bd795e \
+ file://COPYING;md5=4641deddaa80fe7ca88e944e1fd94a94"
+
+PR = "${INC_PR}.1"
+
+SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2 \
+ file://double-free-crash.patch \
+ file://10-x11-input-tslib.fdi \
+ file://xserver-174-XGetPointerControl.patch \
+ file://99-xf86-input-tslib.rules \
+ file://xf86-input-tslib-port-ABI-12-r48.patch \
+ file://xf86-input-tslib-0.0.6-xf86XInputSetScreen.patch \
+"
+
+SRC_URI[md5sum] = "b7a4d2f11637ee3fcf432e044b1d017f"
+SRC_URI[sha256sum] = "5f46fdef095a6e44a69e0f0b57c7d665224b26d990d006611236d8332e85b105"
+
+do_configure_prepend() {
+ rm -rf ${S}/m4/ || true
+}
+do_install_append() {
+ install -d ${D}/${datadir}/hal/fdi/policy/20thirdparty
+ install -m 0644 ${WORKDIR}/10-x11-input-tslib.fdi ${D}/${datadir}/hal/fdi/policy/20thirdparty
+ install -d ${D}${nonarch_base_libdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/99-xf86-input-tslib.rules ${D}${nonarch_base_libdir}/udev/rules.d/
+}
+
+FILES_${PN} += "${datadir}/hal ${nonarch_base_libdir}/udev"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-void_1.4.1.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-void_1.4.1.bb
new file mode 100644
index 000000000..ca0b48634
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-input-void_1.4.1.bb
@@ -0,0 +1,8 @@
+require recipes-graphics/xorg-driver/xorg-driver-input.inc
+SUMMARY = "X.Org X server -- void input driver"
+PR = "${INC_PR}.0"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4be6a915bfbf111cd88706fc6a6f141b"
+
+SRC_URI[md5sum] = "5227013b52b3ca85d6b7ec8adea988d4"
+SRC_URI[sha256sum] = "f96e4f0a622821bf43a74bd419f2a18423343996c9d243c7e1430ba2d142339c"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-ati_7.8.0.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-ati_7.8.0.bb
new file mode 100644
index 000000000..d409a1863
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-ati_7.8.0.bb
@@ -0,0 +1,23 @@
+require recipes-graphics/xorg-driver/xorg-driver-video.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=aabff1606551f9461ccf567739af63dc"
+
+SUMMARY = "X.Org X server -- ATI Radeon video driver"
+
+DESCRIPTION = "Open-source X.org graphics driver for ATI Radeon graphics"
+
+DEPENDS += "virtual/libx11 libxvmc drm xf86driproto glproto \
+ virtual/libgl xineramaproto libpciaccess"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+SRC_URI[md5sum] = "f34d04a755e761e03b459155fa3ddcbb"
+SRC_URI[sha256sum] = "401f5de772928f3dc4ce43a885adb0a47a2f61aa4a9e45d2ab3d184136a9d6fa"
+
+EXTRA_OECONF += "--disable-glamor"
+
+RDEPENDS_${PN} += "xserver-xorg-module-exa"
+RRECOMMENDS_${PN} += "linux-firmware-radeon"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga/checkfile.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga/checkfile.patch
new file mode 100644
index 000000000..ceae6dfba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga/checkfile.patch
@@ -0,0 +1,68 @@
+Upstream-Status: Submitted [https://bugs.freedesktop.org/show_bug.cgi?id=57606]
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From c9014a8f3c9b691b5aa7b1f3ec66cf7c84b8211b Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Thu, 29 Nov 2012 11:00:43 +0000
+Subject: [PATCH] build: dont use AC_CHECK_FILE when enabling DRI
+
+Automatically enabling or disabling a feature based on installed files isn't
+deterministic, and AC_CHECK_FILE returns an error when cross-compiling.
+
+Fix this by enabling DRI by default, and removing the explicit file checks as
+pkg-config is good enough.
+
+(#57606)
+
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+---
+ configure.ac | 25 ++-----------------------
+ 1 file changed, 2 insertions(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index fca1a9c..d2aa2ed 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,9 +55,9 @@ AC_ARG_WITH(xorg-module-dir,
+ [moduledir="$libdir/xorg/modules"])
+
+ AC_ARG_ENABLE(dri, AS_HELP_STRING([--disable-dri],
+- [Disable DRI support [[default=auto]]]),
++ [Disable DRI support [[default=enabled]]]),
+ [DRI="$enableval"],
+- [DRI=auto])
++ [DRI=yes])
+ AC_ARG_ENABLE(exa,
+ AS_HELP_STRING([--disable-exa],
+ [Disable EXA support [[default=enabled]]]),
+@@ -76,27 +76,6 @@ sdkdir=`$PKG_CONFIG --variable=sdkdir xorg-server`
+
+ # Checks for libraries.
+
+-if test "x$DRI" != xno; then
+- AC_CHECK_FILE([${sdkdir}/dri.h],
+- [have_dri_h="yes"], [have_dri_h="no"])
+- AC_CHECK_FILE([${sdkdir}/sarea.h],
+- [have_sarea_h="yes"], [have_sarea_h="no"])
+- AC_CHECK_FILE([${sdkdir}/dristruct.h],
+- [have_dristruct_h="yes"], [have_dristruct_h="no"])
+-fi
+-
+-AC_MSG_CHECKING([whether to include DRI support])
+-if test "x$DRI" = xauto; then
+- if test "x$have_dri_h" = xyes && \
+- test "x$have_sarea_h" = xyes && \
+- test "x$have_dristruct_h" = xyes; then
+- DRI="yes"
+- else
+- DRI="no"
+- fi
+-fi
+-AC_MSG_RESULT([$DRI])
+-
+ AM_CONDITIONAL(DRI, test "x$DRI" = xyes)
+ if test "x$DRI" = xyes; then
+ PKG_CHECK_MODULES(DRI, [libdrm >= 2.0 xf86driproto])
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga_1.6.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga_1.6.5.bb
new file mode 100644
index 000000000..cd680597c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-mga_1.6.5.bb
@@ -0,0 +1,21 @@
+require recipes-graphics/xorg-driver/xorg-driver-video.inc
+
+SUMMARY = "X.Org X server -- Matrox MGA display driver"
+
+DESCRIPTION = "mga is an Xorg driver for Matrox video cards"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=bc1395d2cd32dfc5d6c57d2d8f83d3fc"
+
+SRC_URI += "file://checkfile.patch"
+
+DEPENDS += "virtual/libx11 libpciaccess"
+
+COMPATIBLE_HOST = '(i.86.*-linux|x86_64.*-linux)'
+
+SRC_URI[md5sum] = "3ee2549247e01de3e7bce52c27483118"
+SRC_URI[sha256sum] = "b663cd8e6364f7c4e2637b9fcab9861d0e3971518c73b00d213f6545a1289422"
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'dri', '', d)}"
+PACKAGECONFIG[dri] = "--enable-dri,--disable-dri,drm xf86driproto,xserver-xorg-extension-dri"
+
+RDEPENDS_${PN} = "xserver-xorg-module-exa"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-nouveau_1.0.15.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-nouveau_1.0.15.bb
new file mode 100644
index 000000000..2746821cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-nouveau_1.0.15.bb
@@ -0,0 +1,20 @@
+require recipes-graphics/xorg-driver/xorg-driver-video.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4641deddaa80fe7ca88e944e1fd94a94"
+
+SUMMARY = "X.Org X server -- nouveau video driver"
+
+DESCRIPTION = "Open-source X.org graphics driver for NVIDIA graphics"
+
+DEPENDS += "virtual/libx11 libxvmc drm xf86driproto glproto \
+ virtual/libgl xineramaproto libpciaccess"
+RDEPENDS_${PN} += "xserver-xorg-module-exa"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+SRC_URI[md5sum] = "717203cb87029cddcbccf7398f9ad8c3"
+SRC_URI[sha256sum] = "aede10fd395610a328697adca3434fb14e9afbd79911d6c8545cfa2c0e541d4c"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-100dpi_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-100dpi_1.0.3.bb
new file mode 100644
index 000000000..29229bb51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-100dpi_1.0.3.bb
@@ -0,0 +1,18 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "Adobe 100 DPI fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/adobe-100dpi/"
+SECTION = "x11/font"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5dfa0fdf45473b4ca0acf37d854df10e"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native font-util"
+RDEPENDS_${PN} = "encodings font-util"
+RDEPENDS_${PN}_class-native = "font-util-native"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "1347c3031b74c9e91dc4dfa53b12f143"
+SRC_URI[sha256sum] = "b2c08433eab5cb202470aa9f779efefce8d9cab2534f34f3aa4a31d05671c054"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-utopia-100dpi_1.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-utopia-100dpi_1.0.4.bb
new file mode 100644
index 000000000..898850bbc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-adobe-utopia-100dpi_1.0.4.bb
@@ -0,0 +1,18 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "Adobe Utopia 100 DPI fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/adobe-utopia-100dpi/"
+SECTION = "x11/font"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fa13e704b7241f60ef9105cc041b9732"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native font-util"
+RDEPENDS_${PN} = "encodings font-util"
+RDEPENDS_${PN}_class-native = "font-util-native"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "66fb6de561648a6dce2755621d6aea17"
+SRC_URI[sha256sum] = "d16f5e3f227cc6dd07a160a71f443559682dbc35f1c056a5385085aaec4fada5"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-100dpi_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-100dpi_1.0.3.bb
new file mode 100644
index 000000000..4976e527f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-100dpi_1.0.3.bb
@@ -0,0 +1,18 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "Bigelow & Holmes 100 DPI fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/bh-100dpi/"
+SECTION = "x11/font"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cffd5e9c4b61b3d74166ca74b99e460e"
+
+DEPENDS += "util-macros-native font-util-native bdftopcf-native font-util"
+RDEPENDS_${PN} = "encodings font-util"
+RDEPENDS_${PN}_class-native = "font-util-native"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "9f11ade089d689b9d59e0f47d26f39cd"
+SRC_URI[sha256sum] = "23c07162708e4b79eb33095c8bfa62c783717a9431254bbf44863734ea239481"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.3.bb
new file mode 100644
index 000000000..6e0b33ca3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.3.bb
@@ -0,0 +1,18 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "Bigelow & Holmes Lucida Typewriter 100 DPI fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/bh-lucidatypewriter-100dpi/"
+SECTION = "x11/font"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0d221a9cd144806cb469735cc4775939"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native font-util"
+RDEPENDS_${PN} = "encodings font-util"
+RDEPENDS_${PN}_class-native = "font-util-native"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "c8b73a53dcefe3e8d3907d3500e484a9"
+SRC_URI[sha256sum] = "62a83363c2536095fda49d260d21e0847675676e4e3415054064cbdffa641fbb"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bitstream-100dpi_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bitstream-100dpi_1.0.3.bb
new file mode 100644
index 000000000..e8cfb615a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-bitstream-100dpi_1.0.3.bb
@@ -0,0 +1,18 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "Bitstream 100 DPI fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/bitstream-100dpi/"
+SECTION = "x11/font"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=30330812324ff9d9bd9ea645bb944427"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native"
+RDEPENDS_${PN} = "encodings font-util"
+RDEPENDS_${PN}_class-native = "font-util-native"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "6b223a54b15ecbd5a1bc52312ad790d8"
+SRC_URI[sha256sum] = "ebe0d7444e3d7c8da7642055ac2206f0190ee060700d99cd876f8fc9964cb6ce"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-cursor-misc_1.0.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-cursor-misc_1.0.3.bb
new file mode 100644
index 000000000..d425ce515
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-cursor-misc_1.0.3.bb
@@ -0,0 +1,17 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "X.org cursor fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/cursor-misc/"
+SECTION = "x11/font"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8b32ccac3ad25e75e68478deb7780265"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native"
+RDEPENDS_${PN} = "encodings font-util"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "3e0069d4f178a399cffe56daa95c2b63"
+SRC_URI[sha256sum] = "17363eb35eece2e08144da5f060c70103b59d0972b4f4d77fd84c9a7a2dba635"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-misc-misc_1.1.2.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-misc-misc_1.1.2.bb
new file mode 100644
index 000000000..e4cd90a7a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/font-misc-misc_1.1.2.bb
@@ -0,0 +1,17 @@
+require recipes-graphics/xorg-font/xorg-font-common.inc
+
+SUMMARY = "X.org miscellaneous fonts"
+HOMEPAGE = "http://cgit.freedesktop.org/xorg/font/misc-misc/"
+SECTION = "x11/font"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=200c507f595ee97008c7c5c3e94ab9a8"
+
+DEPENDS = "util-macros-native font-util-native bdftopcf-native font-util"
+RDEPENDS_${PN} = "encodings font-util"
+
+inherit distro_features_check
+# depends on bdftopcf-native -> virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "c88eb44b3b903d79fb44b860a213e623"
+SRC_URI[sha256sum] = "b8e77940e4e1769dc47ef1805918d8c9be37c708735832a07204258bacc11794"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-font/xorg-fonts-100dpi.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/xorg-fonts-100dpi.bb
new file mode 100644
index 000000000..45e3f7b59
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-font/xorg-fonts-100dpi.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Xorg 100 DPI font set"
+LICENSE = "Custom"
+
+inherit packagegroup distro_features_check
+# rdepends on font recipes with this restriction
+REQUIRED_DISTRO_FEATURES = "x11"
+
+RDEPENDS_${PN} = "\
+ font-adobe-100dpi \
+ font-adobe-utopia-100dpi \
+ font-bh-100dpi \
+ font-bh-lucidatypewriter-100dpi \
+ font-bitstream-100dpi \
+"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil-1.1.0/mkg3states-1.1.patch b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil-1.1.0/mkg3states-1.1.patch
new file mode 100644
index 000000000..f9f4a6382
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil-1.1.0/mkg3states-1.1.patch
@@ -0,0 +1,55 @@
+diff -uNr liblbxutil-1.1.0.orig/configure.ac liblbxutil-1.1.0/configure.ac
+--- liblbxutil-1.1.0.orig/configure.ac 2009-12-04 23:52:04.000000000 +0100
++++ liblbxutil-1.1.0/configure.ac 2009-12-16 10:45:00.000000000 +0100
+@@ -50,4 +50,5 @@
+
+ AC_OUTPUT([Makefile
+ src/Makefile
++ src/image/Makefile
+ lbxutil.pc])
+diff -uNr liblbxutil-1.1.0.orig/src/image/Makefile.am liblbxutil-1.1.0/src/image/Makefile.am
+--- liblbxutil-1.1.0.orig/src/image/Makefile.am 1970-01-01 01:00:00.000000000 +0100
++++ liblbxutil-1.1.0/src/image/Makefile.am 2009-12-16 10:45:00.000000000 +0100
+@@ -0,0 +1,15 @@
++# evil hack
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
++
++CC=$(CC_FOR_BUILD)
++LIBTOOL = @LIBTOOL@ --tag=CC
++
++noinst_PROGRAMS = mkg3states
++
++mkg3states_SOURCES = \
++ mkg3states.c
++
++mkg3states_CFLAGS=$(CFLAGS_FOR_BUILD)
++mkg3states_LDFLAGS=$(LDFLAGS_FOR_BUILD)
+diff -uNr liblbxutil-1.1.0.orig/src/Makefile.am liblbxutil-1.1.0/src/Makefile.am
+--- liblbxutil-1.1.0.orig/src/Makefile.am 2009-12-16 10:48:11.000000000 +0100
++++ liblbxutil-1.1.0/src/Makefile.am 2009-12-16 10:46:47.000000000 +0100
+@@ -3,10 +3,7 @@
+ AM_CFLAGS = $(CWARNFLAGS) $(LBXUTIL_CFLAGS)
+ INCLUDES = -I$(top_srcdir)/include
+
+-noinst_PROGRAMS = mkg3states
+-
+-mkg3states_SOURCES = \
+- $(srcdir)/image/mkg3states.c
++SUBDIRS = image
+
+ liblbxutil_la_SOURCES = \
+ $(srcdir)/lbx_zlib/reqstats.h \
+@@ -38,9 +35,8 @@
+
+ $(srcdir)/image/dfaxg42d.c: g3states.h
+
+-g3states.h: mkg3states
+- -rm -f g3states.h
+- $(AM_V_GEN) ./mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
++g3states.h: image/mkg3states
++ $(AM_V_GEN) ./image/mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
+
+ liblbxutil_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil_1.1.0.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil_1.1.0.bb
new file mode 100644
index 000000000..7d26d141f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/liblbxutil_1.1.0.bb
@@ -0,0 +1,14 @@
+require recipes-graphics/xorg-lib/xorg-lib-common.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b0d5bdc98f7ebab3b6c3791d9bf40907"
+
+SUMMARY = "XFIXES Extension"
+DEPENDS += " xextproto xproto zlib"
+PE = "1"
+PR = "r11"
+
+SRC_URI += "file://mkg3states-1.1.patch"
+SRC_URI[md5sum] = "273329a78c2e9ea189ac416c7fde94a1"
+SRC_URI[sha256sum] = "c6b6ff7858ec619cafa8205debca6bf78c5610a2844a782ed643c7fd017cf8ae"
+
+export CC_FOR_BUILD = "gcc"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxaw_1.0.13.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxaw_1.0.13.bb
new file mode 100644
index 000000000..8ba5ac354
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxaw_1.0.13.bb
@@ -0,0 +1,28 @@
+require recipes-graphics/xorg-lib/xorg-lib-common.inc
+SUMMARY = "X Athena Widget Set"
+DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxau xmlto-native"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1c65719d42900bb81b83e8293c20a364"
+
+PE = "1"
+PR = "r2"
+
+SRC_URI[md5sum] = "e5e06eb14a608b58746bdd1c0bd7b8e3"
+SRC_URI[sha256sum] = "8ef8067312571292ccc2bbe94c41109dcf022ea5a4ec71656a83d8cce9edb0cd"
+
+do_install_append () {
+ ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so
+}
+
+PACKAGES =+ "libxaw6 libxaw7 libxaw8"
+
+FILES_libxaw6 = "${libdir}/libXaw*.so.6*"
+FILES_libxaw7 = "${libdir}/libXaw*.so.7*"
+FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
+
+# Avoid dependency on libxaw as it is not build
+RDEPENDS_${PN}-dev = ""
+
+XORG_PN = "libXaw"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxkbui_1.0.2.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxkbui_1.0.2.bb
new file mode 100644
index 000000000..103da1f08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/libxkbui_1.0.2.bb
@@ -0,0 +1,10 @@
+require recipes-graphics/xorg-lib/xorg-lib-common.inc
+SUMMARY = "X11 keyboard UI presentation library"
+LICENSE = "SGI-1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4641deddaa80fe7ca88e944e1fd94a94"
+DEPENDS += "virtual/libx11 libxt libxkbfile"
+PE = "1"
+PR = "r10"
+
+SRC_URI[md5sum] = "1143e456f7429e18e88f2eadb2f2b6b1"
+SRC_URI[sha256sum] = "20c23101d63234ee5f6d696dfa069b29c6c58e39eff433bcd7705b50b3ffa214"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-COPYING-add-GPLv2-license-file.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-COPYING-add-GPLv2-license-file.patch
new file mode 100644
index 000000000..2bfe85b28
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-COPYING-add-GPLv2-license-file.patch
@@ -0,0 +1,362 @@
+From f919725918fad2b32504f89a28310fcae4ab0406 Mon Sep 17 00:00:00 2001
+From: Yu Ke <ke.yu@intel.com>
+Date: Wed, 11 Apr 2012 14:26:16 +0200
+Subject: [PATCH] COPYING: add GPLv2 license file
+
+this is a local file recipe and the license file is missing.In order
+to pass the license checksum checking, the license file is needed. So
+this patch add the GPLv2 license file.
+
+Signed-off-by: Yu Ke <ke.yu@intel.com>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ COPYING | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 339 insertions(+)
+ create mode 100644 COPYING
+
+diff --git a/COPYING b/COPYING
+new file mode 100644
+index 0000000..d511905
+--- /dev/null
++++ b/COPYING
+@@ -0,0 +1,339 @@
++ GNU GENERAL PUBLIC LICENSE
++ Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users. This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it. (Some other Free Software Foundation software is covered by
++the GNU Lesser General Public License instead.) You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++ To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have. You must make sure that they, too, receive or can get the
++source code. And you must show them these terms so they know their
++rights.
++
++ We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++ Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software. If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++ Finally, any free program is threatened constantly by software
++patents. We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary. To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ GNU GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License. The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language. (Hereinafter, translation is included without limitation in
++the term "modification".) Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++ 1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++ 2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) You must cause the modified files to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ b) You must cause any work that you distribute or publish, that in
++ whole or in part contains or is derived from the Program or any
++ part thereof, to be licensed as a whole at no charge to all third
++ parties under the terms of this License.
++
++ c) If the modified program normally reads commands interactively
++ when run, you must cause it, when started running for such
++ interactive use in the most ordinary way, to print or display an
++ announcement including an appropriate copyright notice and a
++ notice that there is no warranty (or else, saying that you provide
++ a warranty) and that users may redistribute the program under
++ these conditions, and telling the user how to view a copy of this
++ License. (Exception: if the Program itself is interactive but
++ does not normally print such an announcement, your work based on
++ the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++ a) Accompany it with the complete corresponding machine-readable
++ source code, which must be distributed under the terms of Sections
++ 1 and 2 above on a medium customarily used for software interchange; or,
++
++ b) Accompany it with a written offer, valid for at least three
++ years, to give any third party, for a charge no more than your
++ cost of physically performing source distribution, a complete
++ machine-readable copy of the corresponding source code, to be
++ distributed under the terms of Sections 1 and 2 above on a medium
++ customarily used for software interchange; or,
++
++ c) Accompany it with the information you received as to the offer
++ to distribute corresponding source code. (This alternative is
++ allowed only for noncommercial distribution and only if you
++ received the program in object code or executable form with such
++ an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it. For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable. However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License. Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++ 5. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Program or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++ 6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++ 7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all. For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded. In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++ 9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation. If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++ 10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission. For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this. Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++ NO WARRANTY
++
++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the program's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++
++Also add information on how to contact you by electronic and paper mail.
++
++If the program is interactive, make it output a short notice like this
++when it starts in an interactive mode:
++
++ Gnomovision version 69, Copyright (C) year name of author
++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, the commands you use may
++be called something other than `show w' and `show c'; they could even be
++mouse-clicks or menu items--whatever suits your program.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the program, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
++ `Gnomovision' (which makes passes at compilers) written by James Hacker.
++
++ <signature of Ty Coon>, 1 April 1989
++ Ty Coon, President of Vice
++
++This General Public License does not permit incorporating your program into
++proprietary programs. If your program is a subroutine library, you may
++consider it more useful to permit linking proprietary applications with the
++library. If this is what you want to do, use the GNU Lesser General
++Public License instead of this License.
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-Don-t-install-Xsession-or-Xserver.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-Don-t-install-Xsession-or-Xserver.patch
new file mode 100644
index 000000000..0ed12d106
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0001-Don-t-install-Xsession-or-Xserver.patch
@@ -0,0 +1,28 @@
+From 1002a1137b140dad3319bf3206fec5b6c6b74fea Mon Sep 17 00:00:00 2001
+From: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Date: Thu, 10 Nov 2016 14:33:05 +0200
+Subject: [PATCH] Don't install Xsession or Xserver
+
+The goal is to use Xsession and Xserver from xserver-nodm-init.
+Xsession scripts and xserver-common from this recipe will still
+be used as before.
+
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index caa5de1..9428205 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,8 +20,6 @@ install-program:
+ install -m 755 run-calibrate.sh $(DESTDIR)$(PREFIX)/bin/run-calibrate.sh
+ install -m 644 X11/Xdefaults $(DESTDIR)/etc/X11/Xdefaults
+ install -m 755 X11/Xinit $(DESTDIR)/etc/X11/Xinit
+- install -m 755 X11/Xserver $(DESTDIR)/etc/X11/Xserver
+- install -m 755 X11/Xsession $(DESTDIR)/etc/X11/Xsession
+ install -m 755 X11/xserver-common $(DESTDIR)/etc/X11/xserver-common
+ install -m 755 X11/functions $(DESTDIR)/etc/X11/functions
+ install -d $(DESTDIR)/etc/X11/xmodmap
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0002-add-setdpi-Xinit.d-script.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0002-add-setdpi-Xinit.d-script.patch
new file mode 100644
index 000000000..0be3fa5b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0002-add-setdpi-Xinit.d-script.patch
@@ -0,0 +1,110 @@
+From 3b5f431a370054bfc090796e8d55de8c8cea46f4 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:28:45 +0200
+Subject: [PATCH] add setdpi Xinit.d script
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/Xinit.d/50setdpi | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 92 insertions(+)
+ create mode 100644 X11/Xinit.d/50setdpi
+
+diff --git a/X11/Xinit.d/50setdpi b/X11/Xinit.d/50setdpi
+new file mode 100644
+index 0000000..04a2edd
+--- /dev/null
++++ b/X11/Xinit.d/50setdpi
+@@ -0,0 +1,92 @@
++#! /bin/sh
++#
++# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
++# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
++#
++# Filename: setDPI.sh
++# Date: 09-Apr-06
++
++# This script configures Xft.dpi dependent on your screens DPI. This insures that the same font-size
++# setting of 7 can be used on all machines.
++
++
++XDEFAULTS="/etc/X11/Xdefaults"
++
++
++
++set_dpi() {
++
++ CURRENT_SETTING="`cat ${XDEFAULTS} | sed -n "/Xft.dpi\:/s/.*\:\(.*\)/\1/p" | sed -n "s/\ //p"`"
++
++ if test "$CURRENT_SETTING" != "$1"
++ then
++ echo "Using Xft.dpi of $SET_SCREEN_DPI for your $SCREEN_DPI DPI screen"
++
++ if grep -q "Xft.dpi" "$XDEFAULTS"
++ then
++ cat "${XDEFAULTS}" | sed "s/^Xft.dpi\:.*/Xft.dpi\: $SET_SCREEN_DPI/" > "${XDEFAULTS}_"
++ mv "${XDEFAULTS}_" "${XDEFAULTS}"
++ else
++ echo -e "Xft.dpi: $SET_SCREEN_DPI\n" >> "$XDEFAULTS"
++ fi
++ else
++ echo "Your $SCREEN_DPI DPI screen is already configured."
++ fi
++}
++
++set_rxvt_font() {
++
++ CURRENT_SETTING="`cat ${XDEFAULTS} | sed -n "/Rxvt\*font/s/\(.*\pixelsize=\)\(.*\)/\2/p"`"
++
++ if test "$1" -gt 100
++ then
++
++ # Configure the rxvt font-size for your screen here:
++ test "$1" -gt 180 -a "$1" -lt "221" && RXVT_FONT_SIZE=16
++
++ if test -z "$RXVT_FONT_SIZE"
++ then
++ echo "WARNING: No rxvt font-size configured for a $SCREEN_DPI DPI screen!"
++ echo "Defaulting to size 9"
++ RXVT_FONT_SIZE=9
++ fi
++
++ if test "$CURRENT_SETTING" != "$RXVT_FONT_SIZE"
++ then
++ echo "Using a rxvt font-size of $RXVT_FONT_SIZE"
++ cat ${XDEFAULTS} | sed "/Rxvt\*font/s/\(.*\pixelsize\)\(=*.*\)/\1=$RXVT_FONT_SIZE/" > ${XDEFAULTS}_
++ mv ${XDEFAULTS}_ ${XDEFAULTS}
++ else
++ echo "The rxvt font-size is already configured"
++ fi
++ fi
++}
++
++if test -z "$DISPLAY"
++then
++ echo "DISPLAY is not set, aborting..."
++ exit 0
++fi
++
++SCREEN_DPI="`/usr/bin/xdpyinfo | grep "dots per inch" | awk '{print $2}'| sed -n "s/\(.*\)x\(.*\)/\2/p"`"
++
++if test -z "$SCREEN_DPI"
++then
++ echo "WARNING: Couldn't read your screens DPI, defaulting to 100"
++ SCREEN_DPI=100
++fi
++
++# Configure your screen here:
++test "$SCREEN_DPI" -gt 180 -a "$SCREEN_DPI" -lt "221" && SET_SCREEN_DPI=160
++test "$SCREEN_DPI" -gt 90 -a "$SCREEN_DPI" -lt "121" && SET_SCREEN_DPI=100
++
++
++if test -z "$SET_SCREEN_DPI"
++then
++ echo "WARNING: No default configuration found for your $SCREEN_DPI DPI screen!"
++ echo "Using 100 DPI"
++ SET_SCREEN_DPI=100
++fi
++
++set_dpi "$SET_SCREEN_DPI"
++set_rxvt_font "$SCREEN_DPI"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0006-add-support-for-etc-X11-xserver-system.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0006-add-support-for-etc-X11-xserver-system.patch
new file mode 100644
index 000000000..53a283fea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0006-add-support-for-etc-X11-xserver-system.patch
@@ -0,0 +1,24 @@
+From b60e364c35d56a2a3164254d98c9931bfa3feed4 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:34:43 +0200
+Subject: [PATCH] add support for /etc/X11/xserver-system
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index 52655cb..bb7c2ff 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -204,3 +204,8 @@ fi
+ if [ "$XSERVER" != "Xorg" ] ; then
+ ARGS="$ARGS $MOUSE $KDRIVEARGS"
+ fi
++
++# let a local script modify the variables
++if [ -e /etc/X11/xserver-system ] ; then
++ . /etc/X11/xserver-system
++fi
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0007-use-own-functions-file-instead-etc-init.d-functions.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0007-use-own-functions-file-instead-etc-init.d-functions.patch
new file mode 100644
index 000000000..94a35407a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0007-use-own-functions-file-instead-etc-init.d-functions.patch
@@ -0,0 +1,85 @@
+From 492c65a32a4ae44c34580ed8ac5d3f50a155cfef Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:36:02 +0200
+Subject: [PATCH] use own functions file instead /etc/init.d/functions
+
+* so we don't have to depend on initscripts
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ Makefile | 1 +
+ X11/Xinit.d/11zaurus | 2 +-
+ X11/Xinit.d/12keymap | 2 +-
+ X11/functions | 11 +++++++++++
+ X11/xserver-common | 2 +-
+ 5 files changed, 15 insertions(+), 3 deletions(-)
+ create mode 100644 X11/functions
+
+diff --git a/Makefile b/Makefile
+index e2d9af9..caa5de1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -23,6 +23,7 @@ install-program:
+ install -m 755 X11/Xserver $(DESTDIR)/etc/X11/Xserver
+ install -m 755 X11/Xsession $(DESTDIR)/etc/X11/Xsession
+ install -m 755 X11/xserver-common $(DESTDIR)/etc/X11/xserver-common
++ install -m 755 X11/functions $(DESTDIR)/etc/X11/functions
+ install -d $(DESTDIR)/etc/X11/xmodmap
+ install -m 644 X11/xmodmap/*.xmodmap $(DESTDIR)/etc/X11/xmodmap
+ install -m 644 X11/xmodmap/xmodmap-* $(DESTDIR)/etc/X11/xmodmap
+diff --git a/X11/Xinit.d/11zaurus b/X11/Xinit.d/11zaurus
+index 54ea6f5..23e7713 100644
+--- a/X11/Xinit.d/11zaurus
++++ b/X11/Xinit.d/11zaurus
+@@ -8,7 +8,7 @@ else
+ CHCK=chkhinge
+ fi
+
+-. /etc/init.d/functions
++. /etc/X11/functions
+
+ $CHCK -e
+ if [ $? = 12 ]; then
+diff --git a/X11/Xinit.d/12keymap b/X11/Xinit.d/12keymap
+index 7eac296..b7a7f2d 100644
+--- a/X11/Xinit.d/12keymap
++++ b/X11/Xinit.d/12keymap
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+
+-. /etc/init.d/functions
++. /etc/X11/functions
+
+ # since kdrive 1.4 there is no default keymap in server
+ xmodmap - </etc/X11/xmodmap/default.xmodmap
+diff --git a/X11/functions b/X11/functions
+new file mode 100644
+index 0000000..a1311ad
+--- /dev/null
++++ b/X11/functions
+@@ -0,0 +1,11 @@
++# -*-Shell-script-*-
++#
++# functions This file contains functions shared by few X11 scripts
++# machine_id also exists in /etc/init.d/functions but some
++# people don't use initscripts anymore
++#
++
++machine_id() { # return the machine ID
++ awk 'BEGIN { FS=": " } /Hardware/ \
++ { gsub(" ", "_", $2); print tolower($2) } ' </proc/cpuinfo
++}
+diff --git a/X11/xserver-common b/X11/xserver-common
+index bb7c2ff..d622f2a 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -30,7 +30,7 @@ if [ -f /etc/profile ]; then
+ . /etc/profile
+ fi
+
+-. /etc/init.d/functions
++. /etc/X11/functions
+
+ fallback_screen_arg() {
+ geom=`fbset | grep geometry`
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0008-xserver-common-add-dpi-and-nocursor-params-for-gta01.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0008-xserver-common-add-dpi-and-nocursor-params-for-gta01.patch
new file mode 100644
index 000000000..90d0f2584
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0008-xserver-common-add-dpi-and-nocursor-params-for-gta01.patch
@@ -0,0 +1,38 @@
+From e2abbe110e71a7b4b56564e6b9d58ffa7f34a9e8 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:37:29 +0200
+Subject: [PATCH] xserver-common: add dpi and nocursor params for gta01 and
+ gta02
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index d622f2a..a2c0591 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -133,15 +133,19 @@ else
+ ARGS="$ARGS -screen ${SCREEN_SIZE}"
+ DPI="225" ;;
+ "gta01" )
+- DPI="285"
++ DPI="280"
+ if [ "$XSERVER" != "Xorg" ] ; then
+ ARGS="$ARGS -screen 480x640"
++ else
++ ARGS="$ARGS -dpi ${DPI} -nocursor"
+ fi
+ ;;
+ "gta02")
+- DPI="285"
++ DPI="280"
+ if [ "$XSERVER" != "Xorg" ] ; then
+ ARGS="$ARGS -screen ${SCREEN_SIZE}"
++ else
++ ARGS="$ARGS -dpi ${DPI} -nocursor"
+ fi
+ ;;
+ "motorola_ezx_platform")
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0009-xserver-common-add-support-for-n900-alias-nokia_rx-5.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0009-xserver-common-add-support-for-n900-alias-nokia_rx-5.patch
new file mode 100644
index 000000000..8fb69b356
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0009-xserver-common-add-support-for-n900-alias-nokia_rx-5.patch
@@ -0,0 +1,29 @@
+From f2d808cea5b9f69158f82e16c06f882a6db10d63 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:40:14 +0200
+Subject: [PATCH] xserver-common: add support for n900 alias nokia_rx-51_board
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index a2c0591..b8c37e6 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -132,6 +132,13 @@ else
+ "nokia_n800" | "nokia_rx-44" | "nokia_n770")
+ ARGS="$ARGS -screen ${SCREEN_SIZE}"
+ DPI="225" ;;
++ "nokia_rx-51_board" )
++ DPI="267"
++ if [ "$XSERVER" != "Xorg" ] ; then
++ ARGS="$ARGS -screen ${SCREEN_SIZE}"
++ else
++ ARGS="$ARGS -dpi ${DPI} -nocursor"
++ fi ;;
+ "gta01" )
+ DPI="280"
+ if [ "$XSERVER" != "Xorg" ] ; then
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0010-xserver-common-add-support-for-nexus-S-alias-herring.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0010-xserver-common-add-support-for-nexus-S-alias-herring.patch
new file mode 100644
index 000000000..d30c7bbdc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0010-xserver-common-add-support-for-nexus-S-alias-herring.patch
@@ -0,0 +1,25 @@
+From a194ba2013f9e58cf73cd39b57be68386e501eda Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:40:44 +0200
+Subject: [PATCH] xserver-common: add support for nexus S alias herring
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index b8c37e6..9aa6b24 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -126,6 +126,9 @@ else
+ "htc_tornado")
+ ARGS="$ARGS -hide-cursor"
+ DPI="100" ;;
++ "herring")
++ DPI="235"
++ ARGS="$ARGS -dpi ${DPI} -nocursor";;
+ "generic_omap1510/1610/1710")
+ ARGS="$ARGS -screen ${SCREEN_SIZE}"
+ DPI="225" ;;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0011-xserver-common-add-support-for-nexus-one-alias-mahim.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0011-xserver-common-add-support-for-nexus-one-alias-mahim.patch
new file mode 100644
index 000000000..23e17f098
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0011-xserver-common-add-support-for-nexus-one-alias-mahim.patch
@@ -0,0 +1,25 @@
+From dfd832b35b6cb4cf2b6f2b51df7b0999f10c8ca1 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:41:06 +0200
+Subject: [PATCH] xserver-common: add support for nexus one alias mahimahi
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index 9aa6b24..8da926e 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -129,6 +129,9 @@ else
+ "herring")
+ DPI="235"
+ ARGS="$ARGS -dpi ${DPI} -nocursor";;
++ "mahimahi")
++ DPI="254"
++ ARGS="$ARGS -dpi ${DPI}";;
+ "generic_omap1510/1610/1710")
+ ARGS="$ARGS -screen ${SCREEN_SIZE}"
+ DPI="225" ;;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0012-xserver-common-add-support-for-gta04-alias-OpenPhoen.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0012-xserver-common-add-support-for-gta04-alias-OpenPhoen.patch
new file mode 100644
index 000000000..5e794f6b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0012-xserver-common-add-support-for-gta04-alias-OpenPhoen.patch
@@ -0,0 +1,30 @@
+From d9e05e53b30c66705852256ff5c603252aa94b2c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Wed, 11 Apr 2012 14:41:52 +0200
+Subject: [PATCH] xserver-common: add support for gta04 alias OpenPhoenux
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index 8da926e..d9325dd 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -161,6 +161,14 @@ else
+ ARGS="$ARGS -dpi ${DPI} -nocursor"
+ fi
+ ;;
++ "gta04")
++ DPI="280"
++ if [ "$XSERVER" != "Xorg" ] ; then
++ ARGS="$ARGS -screen ${SCREEN_SIZE}"
++ else
++ ARGS="$ARGS -dpi ${DPI} -nocursor"
++ fi
++ ;;
+ "motorola_ezx_platform")
+ ARGS="$ARGS -screen 240x320"
+ DPI="170" ;;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0013-xserver-common-add-support-for-tuna-alias-Galaxy-Nex.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0013-xserver-common-add-support-for-tuna-alias-Galaxy-Nex.patch
new file mode 100644
index 000000000..78d2e4029
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0013-xserver-common-add-support-for-tuna-alias-Galaxy-Nex.patch
@@ -0,0 +1,30 @@
+From 57ab521ffc1024f21105ca14be2d041a477942b1 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Fri, 17 Aug 2012 13:00:56 +0200
+Subject: [PATCH] xserver-common: add support for tuna alias Galaxy Nexus
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ X11/xserver-common | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index d9325dd..017e5ae 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -169,6 +169,14 @@ else
+ ARGS="$ARGS -dpi ${DPI} -nocursor"
+ fi
+ ;;
++ "tuna")
++ DPI="316"
++ if [ "$XSERVER" != "Xorg" ] ; then
++ ARGS="$ARGS -screen ${SCREEN_SIZE}"
++ else
++ ARGS="$ARGS -dpi ${DPI} -nocursor"
++ fi
++ ;;
+ "motorola_ezx_platform")
+ ARGS="$ARGS -screen 240x320"
+ DPI="170" ;;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0015-xserver-common-disable-TCP-connections.patch b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0015-xserver-common-disable-TCP-connections.patch
new file mode 100644
index 000000000..a73191700
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common-1.34/0015-xserver-common-disable-TCP-connections.patch
@@ -0,0 +1,26 @@
+From 5236209e30e0f45113e140f0667c8ffcfe621536 Mon Sep 17 00:00:00 2001
+From: Javier Viguera <javier.viguera@digi.com>
+Date: Wed, 26 Nov 2014 09:24:44 +0100
+Subject: [PATCH] xserver-common: disable TCP connections
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Javier Viguera <javier.viguera@digi.com>
+
+---
+ X11/xserver-common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/X11/xserver-common b/X11/xserver-common
+index 017e5ae..4dc48c4 100644
+--- a/X11/xserver-common
++++ b/X11/xserver-common
+@@ -44,7 +44,7 @@ SCREEN_SIZE=`fallback_screen_arg`
+ export USER=root
+ export XSERVER_DEFAULT_ORIENTATION=normal
+
+-ARGS="-br -pn $INPUT_EXTRA_ARGS"
++ARGS="-br -pn -nolisten tcp $INPUT_EXTRA_ARGS"
+ DPI="100"
+ MOUSE=""
+ KDRIVEARGS=""
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common_1.34.bb b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common_1.34.bb
new file mode 100644
index 000000000..a5ed21d45
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xserver-common/xserver-common_1.34.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Common X11 scripts and support files"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+PR = "r9"
+
+# we are using a gpe-style Makefile
+inherit distro_features_check gpe
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "82f2f84cd96610e8f7b92c700cd31c14"
+SRC_URI[sha256sum] = "cd04c33418f776b1e13fcc7af3d6bd0c7cccd03fbabd7dbcd97f88166cc34210"
+
+SRC_URI_append = " \
+ file://0001-COPYING-add-GPLv2-license-file.patch \
+ file://0002-add-setdpi-Xinit.d-script.patch \
+ file://0006-add-support-for-etc-X11-xserver-system.patch \
+ file://0007-use-own-functions-file-instead-etc-init.d-functions.patch \
+ file://0008-xserver-common-add-dpi-and-nocursor-params-for-gta01.patch \
+ file://0009-xserver-common-add-support-for-n900-alias-nokia_rx-5.patch \
+ file://0010-xserver-common-add-support-for-nexus-S-alias-herring.patch \
+ file://0011-xserver-common-add-support-for-nexus-one-alias-mahim.patch \
+ file://0012-xserver-common-add-support-for-gta04-alias-OpenPhoen.patch \
+ file://0013-xserver-common-add-support-for-tuna-alias-Galaxy-Nex.patch \
+ file://0015-xserver-common-disable-TCP-connections.patch \
+ file://0001-Don-t-install-Xsession-or-Xserver.patch \
+"
+
+do_install_append() {
+ sed -i 's:^BINDIR=.*$:BINDIR=${bindir}:' ${D}/etc/X11/xserver-common
+ # Rename all Xsession files not ending with .sh
+ # Unfortunatelly when xinput-calibrator was moved to oe-core
+ # its Xsession file got name 30xinput_calibrate.sh and ls -X sorts it
+ # last, not respecting numbers for sorting them
+ for i in ${D}/${sysconfdir}/X11/Xsession.d/*; do
+ echo $i | grep '.sh$' || mv $i $i.sh
+ done
+}
+
+RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo fbset xinput-calibrator"
+
+RCONFLICTS_${PN} = "xserver-kdrive-common x11-common"
+RREPLACES_${PN} = "xserver-kdrive-common x11-common"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/30xTs_Calibrate.sh b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/30xTs_Calibrate.sh
new file mode 100644
index 000000000..fa43617bd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/30xTs_Calibrate.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+. /etc/formfactor/config
+
+if [ "$HAVE_TOUCHSCREEN" = "1" ]; then
+ n=1
+ while [ ! -z $TSLIB_TSDEVICE ] && [ ! -f /etc/pointercal ] && [ $n -le 5 ]
+ do
+ /usr/bin/xtscal
+ sleep 1
+ n=$(($n+1))
+ done
+fi
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/change-cross.patch b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/change-cross.patch
new file mode 100644
index 000000000..1da771786
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/change-cross.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+--- tmp/main.c.orig 2007-01-02 15:39:54.000000000 +0000
++++ tmp/main.c 2007-01-02 15:39:54.000000000 +0000
+@@ -131,9 +131,10 @@
+ {
+ XRenderFillRectangles (dpy, PictOpSrc, pict, &rect_color, rectangles, 2);
+
+- XFillArc (dpy, crosshair_w, crosshair_gc, (CROSSHAIR_SIZE / 2) - (WIDTH / 2) - 1,
+- (CROSSHAIR_SIZE / 2) - (WIDTH / 2) - 1,
+- WIDTH + 1, WIDTH + 1, 0, 360 * 64);
++ XFillRectangle (dpy, crosshair_w, crosshair_gc,
++ (CROSSHAIR_SIZE / 2) - (WIDTH / 2),
++ (CROSSHAIR_SIZE / 2) - (WIDTH / 2),
++ WIDTH, WIDTH);
+ }
+
+ void
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/cleanup.patch b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/cleanup.patch
new file mode 100644
index 000000000..f7b0854c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/cleanup.patch
@@ -0,0 +1,621 @@
+---
+ Makefile.am | 9 --
+ configure.ac | 3
+ gpe-dist.am | 12 ---
+ h3600_ts.h | 216 -----------------------------------------------------------
+ main.c | 210 ++-------------------------------------------------------
+ xtscal.in | 19 -----
+ 6 files changed, 14 insertions(+), 455 deletions(-)
+
+Upstream-Status: Pending
+
+Index: xtscal-0.6.3/xtscal.in
+===================================================================
+--- xtscal-0.6.3.orig/xtscal.in 2004-09-10 20:10:36.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,19 +0,0 @@
+-#!/bin/sh
+-
+-module_id() {
+- # Get model name
+- echo `grep "^Hardware" /proc/cpuinfo | sed -e "s/.*: *//" | tr a-z A-Z`
+-}
+-
+-case `module_id` in
+- "HP IPAQ H3100" | "HP IPAQ H3800" )
+- ARGS="-rotate 90" ;;
+- "HP IPAQ H3600" | "HP IPAQ H3700" | "HP IPAQ H3900" | *COLLIE | *POODLE)
+- ARGS="-rotate 270" ;;
+- # H2200: works without rotation
+-esac
+-
+-# the things we do for autoconf
+-prefix=@prefix@
+-exec_prefix=@exec_prefix@
+-exec @libexecdir@/xtscal.bin $ARGS $*
+Index: xtscal-0.6.3/main.c
+===================================================================
+--- xtscal-0.6.3.orig/main.c 2007-07-01 01:12:52.000000000 +0100
++++ xtscal-0.6.3/main.c 2007-07-01 01:12:55.000000000 +0100
+@@ -22,12 +22,10 @@
+ #include <X11/Xlib.h>
+
+ #include <X11/extensions/Xrender.h>
+-#include <X11/extensions/Xrandr.h>
+ #include <X11/Xft/Xft.h>
+ #include <X11/extensions/xcalibrate.h>
+ #include <X11/keysym.h>
+
+-#include "h3600_ts.h"
+ #include "calibrate.h"
+
+ Display *dpy;
+@@ -45,15 +43,11 @@ XftColor xftcol;
+ XftDraw *xftdraw;
+ XftFont *xftfont;
+ int screen_x, screen_y;
+-int ts_fd;
+ int samples;
+ Pixmap bg_pixmap;
+ int flag_debug;
+-int rotation = 0;
+ int error_base, event_base;
+
+-int using_xcalibrate;
+-
+ int moving;
+
+ #define CROSSHAIR_SIZE 25
+@@ -63,7 +57,6 @@ int moving;
+ #define ENOUGH 5
+ #define MAX_SAMPLES 40
+
+-#define RAW_DEVICE "/dev/h3600_tsraw"
+ #define FONTNAME "sans-10"
+
+ struct point
+@@ -287,12 +280,8 @@ sort_by_y (const void* a, const void *b)
+ void
+ set_calibration (calibration *cal)
+ {
+- TS_CAL tc;
+- int xtrans, ytrans, xscale, yscale, xyscale, yxscale;
+ calibration ocal = *cal;
+
+- if (using_xcalibrate)
+- {
+ FILE *fp;
+ if (flag_debug)
+ printf ("constants are: %d %d %d %d %d %d %d\n", cal->a[1], cal->a[2], cal->a[0], cal->a[4], cal->a[5], cal->a[3], cal->a[6]);
+@@ -304,29 +293,6 @@ set_calibration (calibration *cal)
+ }
+ fprintf (fp, "%d %d %d %d %d %d %d\n", cal->a[1], cal->a[2], cal->a[0], cal->a[4], cal->a[5], cal->a[3], cal->a[6]);
+ fclose (fp);
+- return;
+- }
+-
+- xtrans = cal->a[0] / cal->a[6];
+- ytrans = cal->a[3] / cal->a[6];
+- xscale = cal->a[1] * 256 / cal->a[6];
+- yscale = cal->a[5] * 256 / cal->a[6];
+- xyscale = cal->a[2] * 256 / cal->a[6];
+- yxscale = cal->a[4] * 256 / cal->a[6];
+-
+- tc.xtrans = xtrans;
+- tc.ytrans = ytrans;
+- tc.xscale = xscale;
+- tc.yscale = yscale;
+- tc.xyswap = 0;
+-
+- printf ("%d %d %d %d %d\n", tc.xscale, tc.xtrans, tc.yscale, tc.ytrans, tc.xyswap);
+-
+- if (ioctl (ts_fd, TS_SET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_SET_CAL");
+- exit (1);
+- }
+ }
+
+ void
+@@ -398,80 +364,13 @@ handle_ts_event (int x, int y, int press
+ }
+
+ void
+-read_ts (void)
+-{
+- TS_EVENT ts_ev;
+- int r;
+-
+- r = read (ts_fd, &ts_ev, sizeof (ts_ev));
+- if (r == sizeof (ts_ev))
+- handle_ts_event (ts_ev.x, ts_ev.y, ts_ev.pressure);
+-}
+-
+-void
+-do_cal (char **args)
+-{
+- TS_CAL tc;
+-
+- tc.xscale = atoi (args[0]);
+- tc.xtrans = atoi (args[1]);
+- tc.yscale = atoi (args[2]);
+- tc.ytrans = atoi (args[3]);
+- tc.xyswap = atoi (args[4]);
+-
+- if (flag_debug)
+- fprintf (stderr, "setting: %d %d %d %d %d\n",
+- tc.xtrans, tc.ytrans, tc.xscale, tc.yscale, tc.xyswap);
+-
+- if (ioctl (ts_fd, TS_SET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_SET_CAL");
+- exit (1);
+- }
+-
+- exit (0);
+-}
+-
+-void
+-show_cal (void)
+-{
+- TS_CAL tc;
+-
+- if (ioctl (ts_fd, TS_GET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_GET_CAL");
+- exit (1);
+- }
+-
+- printf ("%d %d %d %d %d\n", tc.xscale, tc.xtrans, tc.yscale, tc.ytrans, tc.xyswap);
+-}
+-
+-void
+ usage (const char *name)
+ {
+- fprintf (stderr, "usage: %s -view\n", name);
+- fprintf (stderr, " %s [-rotate <0 | 90 | 180 | 270>]\n", name);
+- fprintf (stderr, " %s -cal <xs> <xt> <ys> <yt> <xyswap>\n", name);
+-
++ fprintf (stderr, "usage: %s [-debug]\n", name);
+ exit (1);
+ }
+
+ int
+-xrr_supported (void)
+-{
+- int xrr_event_base, xrr_error_base;
+- int xrr_major, xrr_minor;
+-
+- if (XRRQueryExtension (dpy, &xrr_event_base, &xrr_error_base) == False
+- || XRRQueryVersion (dpy, &xrr_major, &xrr_minor) == 0
+- || xrr_major != 1
+- || xrr_minor < 1)
+- return 0;
+-
+- return 1;
+-}
+-
+-int
+ main (int argc, char *argv[])
+ {
+ XSetWindowAttributes attributes;
+@@ -480,31 +379,11 @@ main (int argc, char *argv[])
+ int max_fd;
+ GC bg_gc;
+ int i;
+- int have_xrandr;
+
+ for (i = 1; i < argc; i++)
+ {
+- if (!strcmp (argv[i], "-view"))
+- {
+- show_cal ();
+- exit (0);
+- }
+- else if (!strcmp (argv[i], "-debug"))
++ if (!strcmp (argv[i], "-debug"))
+ flag_debug = 1;
+- else if (!strcmp (argv[i], "-cal"))
+- {
+- if (argc > (i + 5))
+- do_cal (argv + i + 1);
+- else
+- usage (argv[0]);
+- }
+- else if (!strcmp (argv[i], "-rotate"))
+- {
+- if (argc > (i + 1))
+- rotation = atoi (argv[++i]);
+- else
+- usage (argv[0]);
+- }
+ else
+ usage (argv[0]);
+ }
+@@ -531,48 +410,11 @@ main (int argc, char *argv[])
+ fprintf (stderr, "failed to set raw mode: error %d\n", r);
+ exit (1);
+ }
+-
+- using_xcalibrate = 1;
+- }
+-
+- have_xrandr = xrr_supported ();
+- if (have_xrandr)
+- {
+- XRRScreenConfiguration *rr_screen;
+- Rotation current_rotation;
+-
+- if (flag_debug)
+- fprintf (stderr, "XRANDR is supported\n");
+-
+- rr_screen = XRRGetScreenInfo (dpy, RootWindow (dpy, screen));
+-
+- XRRRotations (dpy, screen, &current_rotation);
+-
+- XRRFreeScreenConfigInfo (rr_screen);
+-
+- if (flag_debug)
+- fprintf (stderr, "Current RANDR rotation is %d\n", current_rotation);
+-
+- switch (current_rotation)
+- {
+- case RR_Rotate_270:
+- rotation += 90;
+- case RR_Rotate_180:
+- rotation += 90;
+- case RR_Rotate_90:
+- rotation += 90;
+- rotation %= 360;
+- case RR_Rotate_0:
+- break;
+- default:
+- fprintf (stderr, "Unknown RANDR rotation: %d\n", current_rotation);
+- break;
+- }
+ }
+ else
+ {
+- if (flag_debug)
+- fprintf (stderr, "XRANDR not supported\n");
++ perror ("XCALIBRATE extension missing");
++ exit (1);
+ }
+
+ attributes.override_redirect = flag_debug ? False : True;
+@@ -666,45 +508,17 @@ main (int argc, char *argv[])
+
+ for (i = 0; i < NR_POINTS; i++)
+ {
+- switch (rotation)
+- {
+- case 0:
+- cal.xfb[i] = cal.xscr[i];
+- cal.yfb[i] = cal.yscr[i];
+- break;
+- case 90:
+- cal.xfb[i] = cal.yscr[i];
+- cal.yfb[i] = screen_x - cal.xscr[i];
+- break;
+- case 180:
+- cal.xfb[i] = screen_x - cal.xscr[i];
+- cal.yfb[i] = screen_y - cal.yscr[i];
+- break;
+- case 270:
+- cal.xfb[i] = screen_y - cal.yscr[i];
+- cal.yfb[i] = cal.xscr[i];
+- break;
+- }
++ cal.xfb[i] = cal.xscr[i];
++ cal.yfb[i] = cal.yscr[i];
++ XCalibrateScreenToCoord (dpy, &cal.xfb[i], &cal.yfb[i]);
+
+ if (flag_debug)
+- printf ("rotation %d: (%d,%d) -> (%d,%d)\n", rotation,
++ printf ("rotation conversion: (%d,%d) -> (%d,%d)\n",
+ cal.xscr[i], cal.yscr[i], cal.xfb[i], cal.yfb[i]);
+ }
+
+ next_event ();
+
+- if (!using_xcalibrate)
+- {
+- ts_fd = open (RAW_DEVICE, O_RDONLY);
+- if (ts_fd < 0)
+- {
+- perror (RAW_DEVICE);
+- exit (1);
+- }
+- }
+-
+- max_fd = (xfd > ts_fd) ? xfd : ts_fd;
+-
+ for (;;)
+ {
+ fd_set fds;
+@@ -713,12 +527,8 @@ main (int argc, char *argv[])
+
+ FD_ZERO (&fds);
+ FD_SET (xfd, &fds);
+- if (ts_fd != -1)
+- FD_SET (ts_fd, &fds);
+
+- select (max_fd + 1, &fds, NULL, NULL, NULL);
+-
+- if (ts_fd != -1 && FD_ISSET (ts_fd, &fds))
+- read_ts ();
++ select (xfd + 1, &fds, NULL, NULL, NULL);
+ }
+ }
++
+Index: xtscal-0.6.3/configure.ac
+===================================================================
+--- xtscal-0.6.3.orig/configure.ac 2004-09-10 20:11:12.000000000 +0100
++++ xtscal-0.6.3/configure.ac 2007-07-01 01:12:55.000000000 +0100
+@@ -9,8 +9,7 @@ AM_INIT_AUTOMAKE([foreign dist-bzip2])
+ # Checks for programs.
+ AC_PROG_CC
+
+-PKG_CHECK_MODULES(XTSCAL, x11 xft xext xrandr xcalibrate)
++PKG_CHECK_MODULES(XTSCAL, x11 xft xext xcalibrate)
+
+ AC_CONFIG_FILES([Makefile])
+-AC_CONFIG_FILES([xtscal])
+ AC_OUTPUT
+Index: xtscal-0.6.3/gpe-dist.am
+===================================================================
+--- xtscal-0.6.3.orig/gpe-dist.am 2004-06-02 23:07:13.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,12 +0,0 @@
+-CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
+-
+-dist-upload: dist
+- scp $(PACKAGE)-$(VERSION).tar.bz2 $(USER)@handhelds.org:/home/ftp/pub/projects/gpe/source/
+-
+-tag:
+- cvs tag $(CVSTAG)
+-
+-retag:
+- cvs tag -F $(CVSTAG)
+-
+-source: tag dist-upload
+Index: xtscal-0.6.3/h3600_ts.h
+===================================================================
+--- xtscal-0.6.3.orig/h3600_ts.h 2003-07-05 17:27:10.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,216 +0,0 @@
+-/*
+-*
+-* Driver for the H3600 Touch Screen and other Atmel controlled devices.
+-*
+-* Copyright 2000 Compaq Computer Corporation.
+-*
+-* Use consistent with the GNU GPL is permitted,
+-* provided that this copyright notice is
+-* preserved in its entirety in all copies and derived works.
+-*
+-* COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
+-* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
+-* FITNESS FOR ANY PARTICULAR PURPOSE.
+-*
+-* Author: Charles Flynn.
+-*
+-*/
+-
+-
+-#ifndef __H3600_TS_H__
+-#define __H3600_TS_H__
+-
+-#include <linux/ioctl.h>
+-
+-enum h3600_ts_minor_devices {
+- TS_MINOR = 0,
+- TSRAW_MINOR = 1,
+- KEY_MINOR = 2
+-};
+-
+-typedef struct h3600_ts_calibration {
+- int xscale;
+- int xtrans;
+- int yscale;
+- int ytrans;
+- int xyswap;
+-} TS_CAL;
+-
+-typedef struct h3600_ts_event {
+- unsigned short pressure;
+- unsigned short x;
+- unsigned short y;
+- unsigned short pad;
+-} TS_EVENT;
+-
+-/* Deprecated - do not use */
+-typedef struct h3600_ts_return {
+- unsigned short pressure;
+- unsigned short x;
+- unsigned short y;
+- unsigned short pad;
+-} TS_RET;
+-
+-enum power_button_mode {
+- PBM_SUSPEND = 0,
+- PBM_GENERATE_KEYPRESS = 1
+-};
+-
+-
+-/* ++++++++++++++ +++++++++++++++++++++++++++++++++++++ */
+-
+-typedef struct therm_dev {
+- short data;
+-} THERM_DEV;
+-
+-#define H3600_BATT_CHEM_ALKALINE 0x01
+-#define H3600_BATT_CHEM_NICD 0x02
+-#define H3600_BATT_CHEM_NIMH 0x03
+-#define H3600_BATT_CHEM_LION 0x04
+-#define H3600_BATT_CHEM_LIPOLY 0x05
+-#define H3600_BATT_CHEM_NOT_INSTALLED 0x06
+-#define H3600_BATT_CHEM_UNKNOWN 0xff
+-
+-/* These should match the apm_bios.h definitions */
+-#define H3600_AC_STATUS_AC_OFFLINE 0x00
+-#define H3600_AC_STATUS_AC_ONLINE 0x01
+-#define H3600_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */
+-#define H3600_AC_STATUS_AC_UNKNOWN 0xff
+-
+-/* These bitfields are rarely "or'd" together */
+-#define H3600_BATT_STATUS_HIGH 0x01
+-#define H3600_BATT_STATUS_LOW 0x02
+-#define H3600_BATT_STATUS_CRITICAL 0x04
+-#define H3600_BATT_STATUS_CHARGING 0x08
+-#define H3600_BATT_STATUS_CHARGE_MAIN 0x10
+-#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
+-#define H3600_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */
+-#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
+-#define H3600_BATT_STATUS_NOBATT 0x80
+-#define H3600_BATT_STATUS_UNKNOWN 0xff
+-
+-struct battery_data {
+- unsigned char chemistry;
+- unsigned char status;
+- unsigned short voltage; /* Voltage for battery #0; unknown for battery #1 */
+- unsigned short percentage; /* Percentage of full charge */
+- unsigned short life; /* Life remaining in minutes */
+-};
+-
+-struct h3600_battery {
+- unsigned char ac_status;
+- unsigned char battery_count; /* How many batteries we have */
+- struct battery_data battery[2];
+-};
+-
+-/* -------- EEPROM and SPI Interfaces ---------------*/
+-
+-#define EEPROM_RD_BUFSIZ 6 /* EEPROM reads are 16 bits */
+-#define EEPROM_WR_BUFSIZ 5 /* Allow room for 8bit 'addr' field in buffer*/
+-#define SPI_RD_BUFSIZ 16 /* SPI reads are 8 bits */
+-#define SPI_WR_BUFSIZ 7
+-
+-/* The EEPROM is where internal programs are stored on the Amtel.
+- You probably don't want to read or write these values */
+-
+-typedef struct h3600_eeprom_read_request {
+- unsigned char addr; /* 8bit Address Offset 0-255 */
+- unsigned char len; /* Number of 16bit words to read 0-128 */
+- unsigned short buff[EEPROM_RD_BUFSIZ];
+-} EEPROM_READ;
+-
+-typedef struct h3600_eeprom_write_request {
+- unsigned char len; /* used only to compute the number of bytes to send */
+- unsigned char addr; /* 0-128 */
+- unsigned short buff[EEPROM_WR_BUFSIZ];
+-} EEPROM_WRITE;
+-
+-/* The SPI bus connects to EEPROMs located on sleeves plugged into
+- the iPAQ. You may want to read these values */
+-
+-typedef struct h3600_spi_read_request {
+- unsigned short addr; /* 16bit Address Offset 0-128 */
+- unsigned char len; /* Number of bytes to read */
+- unsigned char buff[SPI_RD_BUFSIZ];
+-} SPI_READ;
+-
+-#define SPI_READ_STATUS_BYTE 0xffff /* Use this address to read the status byte */
+-
+-typedef struct h3600_spi_write_request {
+- unsigned short len; /* used only to compute the number of bytes to send */
+- unsigned short addr; /* this 16bit address accesses a single byte */
+- unsigned char buff[SPI_WR_BUFSIZ];
+-} SPI_WRITE;
+-
+-
+-/* -------- end of EEPROM and SPI Interfaces ---------------*/
+-
+-/* User space structures for IOCTL calls */
+-
+-typedef struct h3600_ts_version {
+- unsigned char host_version[8]; /* ascii "x.yy" */
+- unsigned char pack_version[8]; /* ascii "x.yy" */
+- unsigned char boot_type; /* TODO ?? */
+-} VER_RET;
+-
+-typedef struct h3600_ts_led {
+- unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
+- unsigned char TotalTime; /* Units of 5 seconds */
+- unsigned char OnTime; /* units of 100m/s */
+- unsigned char OffTime; /* units of 100m/s */
+-} LED_IN;
+-
+-enum flite_mode {
+- FLITE_MODE1 = 1,
+- FLITE_AUTO_MODE = 1, /* for reference only */
+- FLITE_MANUAL_MODE = 2, /* Use this normally? */
+- FLITE_GET_LIGHT_SENSOR = 3 /* Returns light reading in "brightness" field */
+-};
+-enum flite_pwr {
+- FLITE_PWR_OFF = 0,
+- FLITE_PWR_ON = 1
+-};
+-
+-typedef struct h3600_ts_flite {
+- unsigned char mode;
+- unsigned char pwr;
+- unsigned char brightness;
+-} FLITE_IN;
+-
+-/*************************** Updated "universal" structures *******************/
+-
+-/* Sets backlight for both H3100 and H3600 models - technically "frontlight" for H3600 */
+-struct h3600_ts_backlight {
+- enum flite_pwr power; /* 0 = off, 1 = on */
+- unsigned char brightness; /* 0 - 255 */
+-};
+-
+-struct h3600_ts_contrast { /* Only useful on H3100 model */
+- unsigned char contrast; /* 0 - 255 */
+-};
+-
+-/* IOCTL cmds user or kernel space */
+-
+-/* Use 'f' as magic number */
+-#define IOC_H3600_TS_MAGIC 'f'
+-
+-/* TODO: Some of these IOWR values are just plain wrong */
+-#define GET_VERSION _IOR(IOC_H3600_TS_MAGIC, 1, struct h3600_ts_version )
+-#define READ_EEPROM _IOWR(IOC_H3600_TS_MAGIC, 2, struct h3600_eeprom_read_request)
+-#define WRITE_EEPROM _IOWR(IOC_H3600_TS_MAGIC, 3, struct h3600_eeprom_write_request)
+-#define GET_THERMAL _IOR(IOC_H3600_TS_MAGIC, 4, struct therm_dev)
+-#define LED_ON _IOW(IOC_H3600_TS_MAGIC, 5, struct h3600_ts_led)
+-#define GET_BATTERY_STATUS _IOR(IOC_H3600_TS_MAGIC, 6, struct h3600_battery)
+-#define FLITE_ON _IOW(IOC_H3600_TS_MAGIC, 7, struct h3600_ts_flite)
+-#define READ_SPI _IOWR(IOC_H3600_TS_MAGIC, 8, struct h3600_spi_read_request)
+-#define WRITE_SPI _IOWR(IOC_H3600_TS_MAGIC, 9, struct h3600_spi_write_request)
+-#define TS_GET_CAL _IOR(IOC_H3600_TS_MAGIC, 10, struct h3600_ts_calibration)
+-#define TS_SET_CAL _IOW(IOC_H3600_TS_MAGIC, 11, struct h3600_ts_calibration)
+-
+-/* New IOCTL interfaces - defined to be more user friendly */
+-#define TS_GET_BACKLIGHT _IOR(IOC_H3600_TS_MAGIC, 20, struct h3600_ts_backlight)
+-#define TS_SET_BACKLIGHT _IOW(IOC_H3600_TS_MAGIC, 20, struct h3600_ts_backlight)
+-#define TS_GET_CONTRAST _IOR(IOC_H3600_TS_MAGIC, 21, struct h3600_ts_contrast)
+-#define TS_SET_CONTRAST _IOW(IOC_H3600_TS_MAGIC, 21, struct h3600_ts_contrast)
+-
+-#endif
+Index: xtscal-0.6.3/Makefile.am
+===================================================================
+--- xtscal-0.6.3.orig/Makefile.am 2004-06-02 23:07:13.000000000 +0100
++++ xtscal-0.6.3/Makefile.am 2007-07-02 12:51:02.000000000 +0100
+@@ -1,11 +1,8 @@
+-libexec_PROGRAMS = xtscal.bin
+-bin_SCRIPTS = xtscal
++bin_PROGRAMS = xtscal
+
+-xtscal_bin_SOURCES = main.c calibrate.c calibrate.h h3600_ts.h
++xtscal_SOURCES = main.c calibrate.c calibrate.h
+
+-xtscal_bin_LDADD = @XTSCAL_LIBS@
++xtscal_LDADD = @XTSCAL_LIBS@
+
+ INCLUDES = @XTSCAL_CFLAGS@ -DNR_POINTS=5
+
+-include gpe-dist.am
+-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/dso_linking_change_build_fix.patch b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/dso_linking_change_build_fix.patch
new file mode 100644
index 000000000..3e4533f78
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal/dso_linking_change_build_fix.patch
@@ -0,0 +1,27 @@
+after gcc linking has changed, all the libraries must be explicitely specified
+This patch avoids this linking error:
+
+| ccache i586-poky-linux-gcc -march=i586 --sysroot=/disk0/pokybuild/build1/tmp/sysroots/i586-poky-linux -fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2 -ggdb -feliminate-unused-debug-types -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -o xtscal main.o calibrate.o -lX11 -lXft -lXext -lXcalibrate^M
+| /disk0/pokybuild/build1/tmp/sysroots/x86_64-linux/usr/libexec/i586-poky-linux/gcc/i586-poky-linux/4.5.1/ld: ^?: invalid DSO for symbol `XRenderChangePicture' definition^M
+| /disk0/pokybuild/build1/tmp/sysroots/i586-poky-linux/usr/lib/libXrender.so.1: could not read symbols: Bad value^M
+| collect2: ld returned 1 exit status^M
+| make: *** [xtscal] Error 1
+
+Nitin A Kamble <nitin.a.kamble@intel.com>
+Date: 2011/01/11
+
+Upstream-Status: Pending
+
+Index: xtscal-0.6.3/configure.ac
+===================================================================
+--- xtscal-0.6.3.orig/configure.ac
++++ xtscal-0.6.3/configure.ac
+@@ -9,7 +9,7 @@ AM_INIT_AUTOMAKE([foreign dist-bzip2])
+ # Checks for programs.
+ AC_PROG_CC
+
+-PKG_CHECK_MODULES(XTSCAL, x11 xft xext xcalibrate)
++PKG_CHECK_MODULES(XTSCAL, x11 xft xext xcalibrate xrender)
+
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal_0.6.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal_0.6.3.bb
new file mode 100644
index 000000000..4bfddf06b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xtscal/xtscal_0.6.3.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Touchscreen calibration utility"
+
+DESCRIPTION = "Basic touchscreen calibration utility"
+
+HOMEPAGE = "http://gpe.linuxtogo.org"
+BUGTRACKER = "http://bugs.linuxtogo.org"
+LICENSE = "GPLv2 & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://main.c;endline=10;md5=8721bcb08ae9f24e5fe4c82941873c87"
+
+SECTION = "x11/base"
+
+DEPENDS = "virtual/libx11 libxft libxcalibrate"
+
+PR = "r13"
+
+SRC_URI = "${GPE_MIRROR}/xtscal-${PV}.tar.bz2 \
+ file://change-cross.patch \
+ file://cleanup.patch \
+ file://dso_linking_change_build_fix.patch \
+ file://30xTs_Calibrate.sh"
+
+SRC_URI[md5sum] = "9bcab80b474d5454477d1ca166a68c34"
+SRC_URI[sha256sum] = "27b9dc2203de9b1706ca39fa6ca80ecab8807909ec901c4a345b8e41178800a1"
+
+inherit autotools pkgconfig distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/X11/Xsession.d/
+ install -m 0755 ${WORKDIR}/30xTs_Calibrate.sh ${D}${sysconfdir}/X11/Xsession.d/
+}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/agent-proxy_git.bb b/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/agent-proxy_git.bb
new file mode 100644
index 000000000..8e370f962
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/agent-proxy_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Proxy for UDP/TCP debug connections"
+DESCRIPTION = "The agent-proxy will forward tcp or udp connections as well as allow for script multiplexing of terminal sessions."
+HOMEPAGE = "http://kgdb.wiki.kernel.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
+
+SECTION = "devel"
+
+EXTRA_OEMAKE = "'CC=${CC}'"
+
+SRCREV = "e6c9d3d996bd55e7ab14dbd74deb7841e0c3a4f1"
+PV = "1.96+git${SRCPV}"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git;protocol=git \
+ file://0001-Makefile-Add-LDFLAGS-variable.patch \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+S = "${WORKDIR}/git"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 agent-proxy ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/files/0001-Makefile-Add-LDFLAGS-variable.patch b/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/files/0001-Makefile-Add-LDFLAGS-variable.patch
new file mode 100644
index 000000000..5eec91d72
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/agent-proxy/files/0001-Makefile-Add-LDFLAGS-variable.patch
@@ -0,0 +1,43 @@
+From 1beb0dad6f8b99eb3bf1b9982e0b49e81ff77bbc Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 23 Nov 2016 19:17:31 +0800
+Subject: [PATCH] Makefile: Add LDFLAGS variable
+
+Add LDFLAGS variable to make sure the extra linkder
+flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index e20918f..25d92d3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -51,7 +51,7 @@ $(CROSS_COMPILE)agent-proxy: $(OBJS)
+ $(CC) -DAGENT_VER=$(AGENTVER) $(LINKFLAGS) $(CFLAGS) -o $(extpath)$@ $(OBJS) wsock32.lib
+ else
+ $(CROSS_COMPILE)agent-proxy: $(OBJS)
+- $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) -o $(extpath)$@ $(OBJS) $(LDLIBS)
++ $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) $(LDFLAGS) -o $(extpath)$@ $(OBJS) $(LDLIBS)
+ endif
+
+
+@@ -61,9 +61,9 @@ clean:
+ rm -f $(extpath)$(CROSS_COMPILE)agent-proxy $(extpath)agent-proxy $(extpath)*.o $(extpath)*.obj $(extpath)*.exp $(extpath)*.exe $(extpath)*.ilk $(extpath)*.pdb *~
+
+ $(extpath)$(CROSS_COMPILE)%.o::%.c
+- $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) -c $< -o $@
++ $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) $(LDFLAGS) -c $< -o $@
+
+ $(extpath)%.obj:%.c
+- $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) -c -Fo$@ $(TLSPATH_INC) $<
++ $(CC) -DAGENT_VER=$(AGENTVER) $(CFLAGS) $(LDFLAGS) -c -Fo$@ $(TLSPATH_INC) $<
+
+
+--
+2.8.3
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/cpupower/cpupower.bb b/meta-openembedded/meta-oe/recipes-kernel/cpupower/cpupower.bb
new file mode 100644
index 000000000..4abd273fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/cpupower/cpupower.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Shows and sets processor power related values"
+DESCRIPTION = "cpupower is a collection of tools to examine and tune power \
+saving related features of your processor."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+DEPENDS = "pciutils gettext-native"
+PROVIDES = "virtual/cpupower"
+
+inherit kernelsrc kernel-arch
+
+do_populate_lic[depends] += "virtual/kernel:do_patch"
+
+EXTRA_OEMAKE = "-C ${S}/tools/power/cpupower O=${B} CROSS=${TARGET_PREFIX} CC="${CC}" LD="${LD}" AR=${AR} ARCH=${ARCH}"
+
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+ # Do not ship headers
+ rm -rf ${D}${includedir}
+ chown -R root:root ${D}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RDEPENDS_${PN} = "bash"
+
+python do_package_prepend() {
+ d.setVar('PKGV', d.getVar("KERNEL_VERSION", True).split("-")[0])
+}
+
+B = "${WORKDIR}/${BPN}-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-cross_add_configure_option.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-cross_add_configure_option.patch
new file mode 100644
index 000000000..26a34e5c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-cross_add_configure_option.patch
@@ -0,0 +1,35 @@
+From 73269df4d8196abe81112acaa2613155b308a8b8 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Fri, 9 Jan 2015 11:51:18 +0900
+Subject: [PATCH 1/9] cross_add_configure_option
+
+%% original patch: 0001-cross_add_configure_option.patch
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a2baec1..f1972c8 100644
+--- a/Makefile
++++ b/Makefile
+@@ -232,7 +232,7 @@ gdb_merge: force
+ @echo "../../${PROGRAM} ../../${PROGRAM}lib.a" > ${GDB}/gdb/mergeobj
+ @rm -f ${PROGRAM}
+ @if [ ! -f ${GDB}/config.status ]; then \
+- (cd ${GDB}; ./configure ${GDB_CONF_FLAGS} --with-separate-debug-dir=/usr/lib/debug \
++ (cd ${GDB}; ./configure --host=${GDB_TARGET} --build=${GDB_HOST} --with-separate-debug-dir=/usr/lib/debug \
+ --with-bugurl="" --with-expat=no --with-python=no --disable-sim; \
+ make --no-print-directory CRASH_TARGET=${TARGET}; echo ${TARGET} > crash.target) \
+ else make --no-print-directory rebuild; fi
+@@ -283,7 +283,7 @@ force:
+
+ make_configure: force
+ @rm -f configure
+- @${CC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS}
++ @${BUILD_CC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS}
+
+ clean: make_configure
+ @./configure ${CONF_TARGET_FLAG} -q -b
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch
new file mode 100644
index 000000000..8355fe44e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch
@@ -0,0 +1,36 @@
+From 52fc1a7c17768fd52c3577d21dad84e8babb94b5 Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Thu, 6 Apr 2017 23:01:14 -0400
+Subject: [PATCH 2/3] crash: fix build error unknown type name 'gdb_fpregset_t'
+
+Upstream-Status: Pending
+
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ gdb-7.6/gdb/gdb_proc_service.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/gdb-7.6/gdb/gdb_proc_service.h b/gdb-7.6/gdb/gdb_proc_service.h
+index 8bc6088..99c6496 100644
+--- a/gdb-7.6/gdb/gdb_proc_service.h
++++ b/gdb-7.6/gdb/gdb_proc_service.h
+@@ -20,6 +20,7 @@
+ #define GDB_PROC_SERVICE_H
+
+ #include <sys/types.h>
++#include "gregset.h"
+
+ #ifdef HAVE_PROC_SERVICE_H
+ #include <proc_service.h>
+@@ -53,8 +54,6 @@
+ #include <sys/procfs.h>
+ #endif
+
+-#include "gregset.h"
+-
+ /* Functions in this interface return one of these status codes. */
+ typedef enum
+ {
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0003-crash-detect-the-sysroot-s-glibc-header-file.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0003-crash-detect-the-sysroot-s-glibc-header-file.patch
new file mode 100644
index 000000000..1f4bd01da
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0003-crash-detect-the-sysroot-s-glibc-header-file.patch
@@ -0,0 +1,33 @@
+From c7950ef5228adc52a500b4fc67d7e48c3c09c1df Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Thu, 6 Apr 2017 23:02:44 -0400
+Subject: [PATCH 3/3] crash: detect the sysroot's glibc header file
+
+This is cross compile, so let the Makefile detect the sysroot's glibc
+header file, not the host's glibc header file.
+
+Upstream-Status: Pending
+
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index b6b7e80..94f21a5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -264,8 +264,8 @@ gdb_patch:
+ if [ "${ARCH}" = "x86_64" ] && [ "${TARGET}" = "PPC64" ] && [ -f ${GDB}-ppc64le-support.patch ]; then \
+ patch -d ${GDB} -p1 -F0 < ${GDB}-ppc64le-support.patch ; \
+ fi
+- if [ -f /usr/include/proc_service.h ]; then \
+- grep 'extern ps_err_e ps_get_thread_area (struct' /usr/include/proc_service.h; \
++ if [ -f ${RECIPE_SYSROOT}/usr/include/proc_service.h ]; then \
++ grep 'extern ps_err_e ps_get_thread_area (struct' ${RECIPE_SYSROOT}/usr/include/proc_service.h; \
+ if [ $$? -eq 0 ]; then \
+ patch -p0 < ${GDB}-proc_service.h.patch; \
+ fi; \
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7001force_define_architecture.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7001force_define_architecture.patch
new file mode 100644
index 000000000..0d44c7f17
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7001force_define_architecture.patch
@@ -0,0 +1,13 @@
+diff -uprN crash-5.1.8.org/configure.c crash-5.1.8/configure.c
+--- crash-5.1.8.org/configure.c 2011-09-17 04:01:12.000000000 +0900
++++ crash-5.1.8/configure.c 2012-09-13 13:28:45.393344108 +0900
+@@ -391,6 +391,9 @@ get_current_configuration(struct support
+ arch_mismatch(sp);
+ }
+
++ /** Force define archtecture */
++ target_data.target = FORCE_DEFINE_ARCH;
++
+ if ((fp = fopen("Makefile", "r")) == NULL) {
+ perror("Makefile");
+ goto get_release;
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7003cross_ranlib.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7003cross_ranlib.patch
new file mode 100644
index 000000000..d567fa0a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/7003cross_ranlib.patch
@@ -0,0 +1,10 @@
+--- crash-5.1.8/Makefile.orig 2011-12-27 11:21:58.220652105 +0900
++++ crash-5.1.8/Makefile 2011-12-27 11:22:29.563651593 +0900
+@@ -285,6 +285,7 @@
+
+ library: make_build_data ${OBJECT_FILES}
+ ar -rs ${PROGRAM}lib.a ${OBJECT_FILES}
++ ${RANLIB} ${PROGRAM}lib.a
+
+ gdb: force
+ rm -f ${GDB_OFILES}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/config-site.crash-7.0.9 b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/config-site.crash-7.0.9
new file mode 100644
index 000000000..d6fc22fb3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/config-site.crash-7.0.9
@@ -0,0 +1 @@
+bash_cv_have_mbstate_t=yes
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/donnot-extract-gdb-during-do-compile.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/donnot-extract-gdb-during-do-compile.patch
new file mode 100644
index 000000000..e254fe877
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/donnot-extract-gdb-during-do-compile.patch
@@ -0,0 +1,32 @@
+Put gdb source tarball in SRC_URI and don't fetch and extract it during
+do_compile.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/Makefile b/Makefile
+index bb0a34e..5eb7604 100644
+--- a/Makefile
++++ b/Makefile
+@@ -226,7 +226,7 @@ all: make_configure
+ # @make --no-print-directory extensions
+
+ gdb_merge: force
+- @if [ ! -f ${GDB}/README ]; then \
++ @if [ ! -f ${GDB}/${GDB}.patch ]; then \
+ make --no-print-directory gdb_unzip; fi
+ @echo "${LDFLAGS} -lz -ldl -rdynamic" > ${GDB}/gdb/mergelibs
+ @echo "../../${PROGRAM} ../../${PROGRAM}lib.a" > ${GDB}/gdb/mergeobj
+@@ -253,11 +253,6 @@ gdb_unzip:
+ @rm -f gdb.files
+ @for FILE in ${GDB_FILES} dummy; do\
+ echo $$FILE >> gdb.files; done
+- @if [ ! -f ${GDB}.tar.gz ] && [ ! -f /usr/bin/wget ]; then \
+- echo /usr/bin/wget is required to download ${GDB}.tar.gz; echo; exit 1; fi
+- @if [ ! -f ${GDB}.tar.gz ] && [ -f /usr/bin/wget ]; then \
+- wget http://ftp.gnu.org/gnu/gdb/${GDB}.tar.gz; fi
+- @tar --exclude-from gdb.files -xvzmf ${GDB}.tar.gz
+ @make --no-print-directory gdb_patch
+
+ gdb_patch:
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/gdb_build_jobs_and_not_write_crash_target.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/gdb_build_jobs_and_not_write_crash_target.patch
new file mode 100644
index 000000000..aa5f44dd4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/gdb_build_jobs_and_not_write_crash_target.patch
@@ -0,0 +1,26 @@
+This enables parallel building (multiple jobs in gdb) by reading the
+value from GDB_MAKE_JOBS.
+
+Signed-off-by: Amy Fong <amy.fong@windriver.com>
+
+Upstream-Status: Pending
+
+Don't write ${TARGET} to crash.target which causes rebuild fails.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+--
+diff --git a/Makefile b/Makefile
+index 27a1d47..bcf2d2f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -232,8 +232,8 @@ gdb_merge: force
+ @if [ ! -f ${GDB}/config.status ]; then \
+ (cd ${GDB}; ./configure --host=${GDB_TARGET} --build=${GDB_HOST} --with-separate-debug-dir=/usr/lib/debug \
+ --with-bugurl="" --with-expat=no --with-python=no --disable-sim; \
+- make --no-print-directory CRASH_TARGET=${TARGET}; echo ${TARGET} > crash.target) \
+- else make --no-print-directory rebuild; fi
++ make --no-print-directory CRASH_TARGET=${TARGET} ${GDB_MAKE_JOBS}; ) \
++ else make --no-print-directory ${GDB_MAKE_JOBS} rebuild; fi
+ @if [ ! -f ${PROGRAM} ]; then \
+ echo; echo "${PROGRAM} build failed"; \
+ echo; exit 1; fi
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/remove-unrecognized-gcc-option-m32-for-mips.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/remove-unrecognized-gcc-option-m32-for-mips.patch
new file mode 100644
index 000000000..905b4c2cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/remove-unrecognized-gcc-option-m32-for-mips.patch
@@ -0,0 +1,33 @@
+Upstream-Status: Pending
+
+It fails to build crash for mips with error:
+
+| mips-wrs-linux-gcc: error: unrecognized command line option '-m32'
+| Makefile:291: recipe for target 'make_build_data' failed
+
+So remove the unrecognized option '-m32' for mips.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/configure.c b/configure.c
+index cf1973b..71e97b3 100644
+--- a/configure.c
++++ b/configure.c
+@@ -151,7 +151,7 @@ void add_extra_lib(char *);
+ #define TARGET_CFLAGS_PPC64_ON_X86_64 "TARGET_CFLAGS="
+ #define TARGET_CFLAGS_MIPS "TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64"
+ #define TARGET_CFLAGS_MIPS_ON_X86 "TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64"
+-#define TARGET_CFLAGS_MIPS_ON_X86_64 "TARGET_CFLAGS=-m32 -D_FILE_OFFSET_BITS=64"
++#define TARGET_CFLAGS_MIPS_ON_X86_64 "TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64"
+ #define TARGET_CFLAGS_SPARC64 "TARGET_CFLAGS="
+
+ #define GDB_TARGET_DEFAULT "GDB_CONF_FLAGS="
+@@ -162,7 +162,7 @@ void add_extra_lib(char *);
+ #define GDB_TARGET_ARM64_ON_X86_64 "GDB_CONF_FLAGS=--target=aarch64-elf-linux" /* TBD */
+ #define GDB_TARGET_PPC64_ON_X86_64 "GDB_CONF_FLAGS=--target=powerpc64le-unknown-linux-gnu"
+ #define GDB_TARGET_MIPS_ON_X86 "GDB_CONF_FLAGS=--target=mipsel-elf-linux"
+-#define GDB_TARGET_MIPS_ON_X86_64 "GDB_CONF_FLAGS=--target=mipsel-elf-linux CFLAGS=-m32"
++#define GDB_TARGET_MIPS_ON_X86_64 "GDB_CONF_FLAGS=--target=mipsel-elf-linux"
+
+ /*
+ * The original plan was to allow the use of a particular version
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-common-sim-arange-fix-extern-inline-handling.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-common-sim-arange-fix-extern-inline-handling.patch
new file mode 100644
index 000000000..0185b5704
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-common-sim-arange-fix-extern-inline-handling.patch
@@ -0,0 +1,79 @@
+Upstream-Status: Backport
+
+https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=92fc615
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+--
+From 92fc6153a6fdf2a027d9780f5945712aafad4a9e Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Sun, 29 Mar 2015 15:59:01 -0400
+Subject: [PATCH] sim: common: sim-arange: fix extern inline handling
+
+With newer versions of gcc (5.x), the extern inline we're using with the
+sim-arange module no longer works. Since this code really wants the gnu
+inline semantics, use that attribute explicitly.
+
+Reported-by: DJ Delorie <dj@redhat.com>
+Reported-by: Joel Sherrill <joel.sherrill@oarcorp.com>
+---
+ gdb-7.6/sim/common/sim-arange.h | 20 ++++++++++++--------
+ gdb-7.6/sim/common/sim-inline.h | 4 +++-
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/gdb-7.6/sim/common/sim-arange.h b/gdb-7.6/sim/common/sim-arange.h
+index 73117f3..de842c9 100644
+--- a/gdb-7.6/sim/common/sim-arange.h
++++ b/gdb-7.6/sim/common/sim-arange.h
+@@ -60,22 +60,26 @@ extern void sim_addr_range_delete (ADDR_RANGE * /*ar*/,
+ address_word /*start*/,
+ address_word /*end*/);
+
++/* TODO: This should get moved into sim-inline.h. */
++#ifdef HAVE_INLINE
++#ifdef SIM_ARANGE_C
++#define SIM_ARANGE_INLINE INLINE
++#else
++#define SIM_ARANGE_INLINE EXTERN_INLINE
++#endif
++#else
++#define SIM_ARANGE_INLINE EXTERN
++#endif
++
+ /* Return non-zero if ADDR is in range AR, traversing the entire tree.
+ If no range is specified, that is defined to mean "everything". */
+-extern INLINE int
++SIM_ARANGE_INLINE int
+ sim_addr_range_hit_p (ADDR_RANGE * /*ar*/, address_word /*addr*/);
+ #define ADDR_RANGE_HIT_P(ar, addr) \
+ ((ar)->range_tree == NULL || sim_addr_range_hit_p ((ar), (addr)))
+
+ #ifdef HAVE_INLINE
+-#ifdef SIM_ARANGE_C
+-#define SIM_ARANGE_INLINE INLINE
+-#else
+-#define SIM_ARANGE_INLINE EXTERN_INLINE
+-#endif
+ #include "sim-arange.c"
+-#else
+-#define SIM_ARANGE_INLINE
+ #endif
+ #define SIM_ARANGE_C_INCLUDED
+
+diff --git a/gdb-7.6/sim/common/sim-inline.h b/gdb-7.6/sim/common/sim-inline.h
+index af75562..8a9c286 100644
+--- a/gdb-7.6/sim/common/sim-inline.h
++++ b/gdb-7.6/sim/common/sim-inline.h
+@@ -303,7 +303,9 @@
+ /* ??? Temporary, pending decision to always use extern inline and do a vast
+ cleanup of inline support. */
+ #ifndef INLINE2
+-#if defined (__GNUC__)
++#if defined (__GNUC_GNU_INLINE__) || defined (__GNUC_STDC_INLINE__)
++#define INLINE2 __inline__ __attribute__ ((__gnu_inline__))
++#elif defined (__GNUC__)
+ #define INLINE2 __inline__
+ #else
+ #define INLINE2 /*inline*/
+--
+2.6.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-ppc-drop-LIBS-from-psim-dependency.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-ppc-drop-LIBS-from-psim-dependency.patch
new file mode 100644
index 000000000..77a287f14
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/sim-ppc-drop-LIBS-from-psim-dependency.patch
@@ -0,0 +1,37 @@
+Upstream-Status: Backport
+
+https://sourceware.org/git/?p=binutils-gdb.git;h=0d8a6ab
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 0d8a6ab7d39d28fb1557e2a62e9e4b336341ab34 Mon Sep 17 00:00:00 2001
+From: Aaro Koskinen <aaro.koskinen@iki.fi>
+Date: Mon, 17 Feb 2014 17:12:59 -0500
+Subject: [PATCH] sim: ppc: drop $(LIBS) from psim dependency
+
+When cross-compiling GDB for PPC, there's a prerequisite "-lz" for psim
+that results in a build failure. With such prerequisite, GNU Make will
+try to search the library from build machine's /usr/lib which is wrong.
+On 64-bit Linux build machines the compilation will fail because of this.
+
+URL: https://sourceware.org/bugzilla/show_bug.cgi?id=12202
+---
+ sim/ppc/Makefile.in | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/gdb-7.6/sim/ppc/Makefile.in b/gdb-7.6/sim/ppc/Makefile.in
+index b811f6f..740bdb0 100644
+--- a/gdb-7.6/sim/ppc/Makefile.in
++++ b/gdb-7.6/sim/ppc/Makefile.in
+@@ -552,7 +552,7 @@ PACKAGE_SRC = @sim_pk_src@
+ PACKAGE_OBJ = @sim_pk_obj@
+
+
+-psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBS) $(LIBINTL_DEP)
++psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBINTL_DEP)
+ $(CC) $(CFLAGS) $(SIM_CFLAGS) $(LDFLAGS) -o psim$(EXEEXT) main.o $(TARGETLIB) $(BFD_LIB) $(LIBINTL) $(LIBIBERTY_LIB) $(LIBS)
+
+ run: psim
+--
+1.9.4
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.0.bb b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.0.bb
new file mode 100644
index 000000000..9bea48e0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.0.bb
@@ -0,0 +1,115 @@
+SUMMARY = "Kernel analysis utility for live systems, netdump, diskdump, kdump, LKCD or mcore dumpfiles"
+DESCRIPTION = "The core analysis suite is a self-contained tool that can be used to\
+investigate either live systems, kernel core dumps created from the\
+netdump, diskdump and kdump packages from Red Hat Linux, the mcore kernel patch\
+offered by Mission Critical Linux, or the LKCD kernel patch."
+
+HOMEPAGE = "http://people.redhat.com/anderson"
+SECTION = "devel"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING3;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "zlib readline coreutils-native"
+
+SRC_URI = "https://github.com/crash-utility/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
+ http://ftp.gnu.org/gnu/gdb/gdb-7.6.tar.gz;name=gdb;subdir=${BP} \
+ file://7001force_define_architecture.patch \
+ file://7003cross_ranlib.patch \
+ file://0001-cross_add_configure_option.patch \
+ file://sim-ppc-drop-LIBS-from-psim-dependency.patch \
+ file://sim-common-sim-arange-fix-extern-inline-handling.patch \
+ file://donnot-extract-gdb-during-do-compile.patch \
+ file://gdb_build_jobs_and_not_write_crash_target.patch \
+ file://remove-unrecognized-gcc-option-m32-for-mips.patch \
+ file://0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch \
+ file://0003-crash-detect-the-sysroot-s-glibc-header-file.patch \
+ "
+SRC_URI[md5sum] = "48899de3118e04cfa40a2364f5618193"
+SRC_URI[sha256sum] = "5d076e1fefb41aa178ad3e1cef6511670efc47de5cb04d4af9bdd4e8f2f18cbc"
+
+SRC_URI[gdb.md5sum] = "a9836707337e5f7bf76a009a8904f470"
+SRC_URI[gdb.sha256sum] = "8070389a5dcc104eb0be483d582729f98ed4d761ad19cedd3f17b5d2502faa36"
+
+inherit gettext
+
+BBCLASSEXTEND = "native cross"
+TARGET_CC_ARCH_append = " ${SELECTED_OPTIMIZATION}"
+
+# crash 7.1.3 and before don't support mips64
+COMPATIBLE_HOST = "^(?!mips64).*"
+
+EXTRA_OEMAKE = 'RPMPKG="${PV}" \
+ GDB_TARGET="${TARGET_SYS}" \
+ GDB_HOST="${BUILD_SYS}" \
+ GDB_MAKE_JOBS="${PARALLEL_MAKE}" \
+ LDFLAGS="${LDFLAGS}" \
+ '
+
+EXTRA_OEMAKE_class-cross = 'RPMPKG="${PV}" \
+ GDB_TARGET="${BUILD_SYS} \
+ \${GDB_CONF_FLAGS} \
+ --target=${TARGET_SYS}" \
+ GDB_HOST="${BUILD_SYS}" \
+ GDB_MAKE_JOBS="${PARALLEL_MAKE}" \
+ '
+
+EXTRA_OEMAKE_append_class-native = " LDFLAGS='${BUILD_LDFLAGS}'"
+EXTRA_OEMAKE_append_class-cross = " LDFLAGS='${BUILD_LDFLAGS}'"
+
+REMOVE_M32 = "sed -i -e 's/#define TARGET_CFLAGS_ARM_ON_X86_64.*/#define TARGET_CFLAGS_ARM_ON_X86_64\t\"TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64\"/g' ${S}/configure.c"
+
+REMOVE_M32_class-cross = ""
+
+do_configure() {
+ :
+}
+
+do_compile_prepend() {
+ case ${TARGET_ARCH} in
+ aarch64*) ARCH=ARM64 ;;
+ arm*) ARCH=ARM ;;
+ i*86*) ARCH=X86 ;;
+ x86_64*) ARCH=X86_64 ;;
+ powerpc64*) ARCH=PPC64 ;;
+ powerpc*) ARCH=PPC ;;
+ mips*) ARCH=MIPS ;;
+ esac
+
+ sed -i s/FORCE_DEFINE_ARCH/"${ARCH}"/g ${S}/configure.c
+ ${REMOVE_M32}
+ sed -i 's/&gt;/>/g' ${S}/Makefile
+}
+
+do_compile() {
+ oe_runmake ${EXTRA_OEMAKE} RECIPE_SYSROOT=${RECIPE_SYSROOT}
+}
+
+do_install_prepend () {
+ install -d ${D}${bindir}
+ install -d ${D}/${mandir}/man8
+ install -d ${D}${includedir}/crash
+
+ install -m 0644 ${S}/crash.8 ${D}/${mandir}/man8/
+ install -m 0644 ${S}/defs.h ${D}${includedir}/crash
+}
+
+do_install_class-target () {
+ oe_runmake DESTDIR=${D} install
+}
+
+do_install_class-native () {
+ oe_runmake DESTDIR=${D}${STAGING_DIR_NATIVE} install
+}
+
+do_install_class-cross () {
+ install -m 0755 ${S}/crash ${D}/${bindir}
+}
+
+RDEPENDS_${PN} += "liblzma"
+RDEPENDS_${PN}_class-native = ""
+RDEPENDS_${PN}_class-cross = ""
+
+# Causes gcc to get stuck and eat all available memory in qemuarm builds
+# jenkins 15161 100 12.5 10389596 10321284 ? R 11:40 28:17 /home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/x86_64-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.9.2/cc1 -quiet -I . -I . -I ./common -I ./config -I ./../include/opcode -I ./../opcodes/.. -I ./../readline/.. -I ../bfd -I ./../bfd -I ./../include -I ../libdecnumber -I ./../libdecnumber -I ./gnulib/import -I build-gnulib/import -isysroot /home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/qemuarm -MMD eval.d -MF .deps/eval.Tpo -MP -MT eval.o -D LOCALEDIR="/usr/local/share/locale" -D CRASH_MERGE -D HAVE_CONFIG_H -D TUI=1 eval.c -quiet -dumpbase eval.c -march=armv5te -mthumb -mthumb-interwork -mtls-dialect=gnu -auxbase-strip eval.o -g -O2 -Wall -Wpointer-arith -Wformat-nonliteral -Wno-pointer-sign -Wno-unused -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts -Wmissing-prototypes -Wdeclaration-after-statement -Wempty-body -feliminate-unused-debug-types -o -
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb
new file mode 100644
index 000000000..9f73d2799
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Utility for IPMI control"
+DESCRIPTION = "This package contains a utility for interfacing with devices that support \
+the Intelligent Platform Management Interface specification. IPMI is \
+an open standard for machine health, inventory, and remote power control. \
+\
+This utility can communicate with IPMI-enabled devices through either a \
+kernel driver such as OpenIPMI or over the RMCP LAN protocol defined in \
+the IPMI specification. IPMIv2 adds support for encrypted LAN \
+communications and remote Serial-over-LAN functionality. \
+\
+It provides commands for reading the Sensor Data Repository (SDR) and \
+displaying sensor values, displaying the contents of the System Event \
+Log (SEL), printing Field Replaceable Unit (FRU) information, reading and \
+setting LAN configuration, and chassis power control. \
+"
+
+HOMEPAGE = "http://ipmitool.sourceforge.net/"
+SECTION = "kernel/userland"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9aa91e13d644326bf281924212862184"
+
+DEPENDS = "openssl readline ncurses"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ipmitool/ipmitool-${PV}.tar.bz2"
+SRC_URI[md5sum] = "bab7ea104c7b85529c3ef65c54427aa3"
+SRC_URI[sha256sum] = "0c1ba3b1555edefb7c32ae8cd6a3e04322056bc087918f07189eeedfc8b81e01"
+
+inherit autotools
+
+# --disable-dependency-tracking speeds up the build
+# --enable-file-security adds some security checks
+# --disable-intf-free disables FreeIPMI support - we don't want to depend on
+# FreeIPMI libraries, FreeIPMI has its own ipmitoool-like utility.
+#
+EXTRA_OECONF = "--disable-dependency-tracking --enable-file-security --disable-intf-free"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/fix_systemd_path.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/fix_systemd_path.patch
new file mode 100644
index 000000000..33116b3c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/fix_systemd_path.patch
@@ -0,0 +1,127 @@
+allow systemd path to be defined by configure option.
+
+The configure probes the host for systemd path information.
+
+Upstream Status: Inappropriate [Embedded]
+
+Signed-off-By: Armin Kuster <akuster@mvista.com>
+
+Index: ipmiutil-3.0.5/configure.ac
+===================================================================
+--- ipmiutil-3.0.5.orig/configure.ac
++++ ipmiutil-3.0.5/configure.ac
+@@ -149,7 +149,6 @@ CROSS_LFLAGS=""
+ CROSS_CFLAGS=""
+ LIBSENSORS=""
+ SAM2OBJ="isensor2.o ievents2.o"
+-SYSTEMD_DIR=/usr/share/ipmiutil
+
+ AC_ARG_ENABLE([useflags],
+ [ --enable-useflags include environment CFLAGS and LDFLAGS.],
+@@ -200,29 +199,42 @@ AC_ARG_ENABLE([gpl],
+
+ dnl Does this Linux have systemd enabled? Otherwise use sysv init.
+ AC_ARG_ENABLE([systemd],
+- [ --enable-systemd enable systemd service type=notify support and %_unitdir [[default=disabled]]],)
+-if test "x$enable_systemd" = "xyes"; then
+- GPL_CFLAGS="$GPL_CFLAGS -DENABLE_SYSTEMD"
+- # if systemd enabled, install service scripts in unitdir
+- which rpm >/dev/null 2>&1
+- if test $? -eq 0 ; then
+- SYSTEMD_DIR=`rpm --eval "%{_unitdir}"`
+- else
+- SYSTEMD_DIR=/usr/share/ipmiutil
+- fi
++ [ --enable-systemd[=systemddir] install systemd unit file. If 'yes'
++ probe the system for unit directory.
++ If a path is specified, assume that
++ is a valid install path. [[default=disabled]]],)
++# Check whether --enable-systemd was given.
++if test "${enable_systemd+set}" = set; then :
++ withval=$enable_systemd; if test "$withval" = yes; then
++ GPL_CFLAGS="$GPL_CFLAGS -DENABLE_SYSTEMD"
++ if test -z "$systemddir"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking location of the systemd unit files directory" >&5
++ $as_echo_n "checking location of the systemd unit files directory... " >&6; }
++ _rpmdir = ""
++ which rpm >/dev/null 2>&1
++ if test $? -eq 0 ; then
++ _rpmdir = `rpm --eval "%{_unitdir}"`
++ fi
++ for systemd_d in ${datadir}/usr/share/ipmiutil ${_rpmdir} /usr/share/ipmiutil; do
++ if test -z "$systemddir"; then
++ if test -d "$systemd_d"; then
++ systemddir="$systemd_d"
++ fi
++ fi
++ done
++ fi
++ if test -n "$systemddir"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $systemddir" >&5
++ $as_echo "$systemddir" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
++ $as_echo "not found" >&6; }
++ fi
+ else
+- # otherwise install the systemd service scripts in the data dir
+- SYSTEMD_DIR=/usr/share/ipmiutil
+- if test "x$sysname" != "xDarwin" ; then
+- if test "x$os" != "xhpux" ; then
+- # MacOS and HP-UX: 'which' command returns 0 always
+- which rpm >/dev/null 2>&1
+- if test $? -eq 0 ; then
+- datad=`rpm --eval "%{_datadir}"`
+- SYSTEMD_DIR=${datad}/ipmiutil
+- fi
+- fi
+- fi
++ if test "$withval" != no; then
++ systemddir=$withval
++ fi
++fi
+ fi
+
+ dnl start main logic
+@@ -528,7 +540,7 @@ AC_SUBST(INS_LIB)
+ AC_SUBST(SUBDIR_S)
+ AC_SUBST(CROSS_CFLAGS)
+ AC_SUBST(CROSS_LFLAGS)
+-AC_SUBST(SYSTEMD_DIR)
++AC_SUBST(systemddir)
+ AC_SUBST(SHR_LINK)
+ AC_SUBST(pkgconfigdir)
+
+Index: ipmiutil-3.0.5/scripts/Makefile.am
+===================================================================
+--- ipmiutil-3.0.5.orig/scripts/Makefile.am
++++ ipmiutil-3.0.5/scripts/Makefile.am
+@@ -17,7 +17,8 @@ cronto = ${DESTDIR}${etcdir}/cron.daily
+ sbinto = ${DESTDIR}${sbindir}
+ varto = ${DESTDIR}/var/lib/ipmiutil
+ initto = ${DESTDIR}@INIT_DIR@
+-sysdto = ${DESTDIR}@SYSTEMD_DIR@
++sysdto = ${DESTDIR}@systemddir@
++systemddir = @systemddir@
+ sysvinit = ${datato}
+ sbinfls = ialarms ihealth ifru igetevent ireset icmd isol ilan isensor isel iserial iwdt iconfig ipicmg ifirewall ifwum ihpm iuser
+
+@@ -47,10 +48,14 @@ install:
+ ${INSTALL_SCRIPT_SH} ipmi_port.sh ${sysvinit}/ipmi_port
+ ${INSTALL_SCRIPT_SH} ipmi_info ${sysvinit}/ipmi_info
+ ${INSTALL_SCRIPT_SH} checksel ${datato}
+- ${INSTALL_DATA_SH} ipmiutil_wdt.service ${sysdto}
+- ${INSTALL_DATA_SH} ipmiutil_asy.service ${sysdto}
+- ${INSTALL_DATA_SH} ipmiutil_evt.service ${sysdto}
+- ${INSTALL_DATA_SH} ipmi_port.service ${sysdto}
++
++ if [ ! -z "${systemddir}" ]; then \
++ $(MKDIR) ${sysdto}; \
++ ${INSTALL_DATA_SH} ipmiutil_wdt.service ${sysdto}; \
++ ${INSTALL_DATA_SH} ipmiutil_asy.service ${sysdto}; \
++ ${INSTALL_DATA_SH} ipmiutil_evt.service ${sysdto}; \
++ ${INSTALL_DATA_SH} ipmi_port.service ${sysdto}; \
++ fi
+ ${INSTALL_SCRIPT_SH} ipmiutil.env ${datato}
+ ${INSTALL_SCRIPT_SH} ipmiutil.pre ${datato}
+ ${INSTALL_SCRIPT_SH} ipmiutil.setup ${datato}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.0.5.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.0.5.bb
new file mode 100644
index 000000000..338cafd53
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.0.5.bb
@@ -0,0 +1,46 @@
+SUMMARY = "ipmiutil is an easy-to-use set of IPMI server management utilities.\
+It can get/set sensor thresholds, automate SEL management, do SOL console, etc."
+
+DESCRIPTION = "The IPMI Management Utilities currently work with platforms that \
+support the IPMI 1.5 or 2.0 specification. IPMI servers can be managed\
+locally, or remotely via IPMI LAN, even when the OS or main CPU is not\
+functional.\n \
+The ipmiutil utilities will use an IPMI Driver, either the Intel IPMI package \
+(ipmidrvr, /dev/imb), MontaVista OpenIPMI (/dev/ipmi0), the valinux IPMI \
+Driver (/dev/ipmikcs), or the LANDesk ldipmi daemon. The ipmiutil utilities \
+can also use direct user-space I/Os in Linux or FreeBSD if no IPMI driver \
+is detected."
+
+HOMEPAGE = "http://ipmiutil.sourceforge.net"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=626a5970304daa1fcb87f757fb42b795"
+
+DEPENDS += "openssl"
+
+PARALLEL_MAKE = ""
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ipmiutil/ipmiutil-${PV}.tar.gz \
+ file://fix_systemd_path.patch \
+ "
+SRC_URI[md5sum] = "5feaf6a827205792e057bb4ff5c4e842"
+SRC_URI[sha256sum] = "b2d7f72535131c7832ba4be13dc33c81513fc3ee43fe797b4b52014600ecee5e"
+
+inherit autotools-brokensep pkgconfig systemd
+
+PACKAGECONFIG ?= "lanplus gpl"
+PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--enable-systemd=${datadir}/${BPN}, --enable-systemd=no"
+PACKAGECONFIG[sha256] = "--enable-sha256, --enable-sha256=no, openssl-native, openssl"
+PACKAGECONFIG[lanplus] = "--enable-lanplus, --enable-lanplus=no, openssl-native, openssl"
+PACKAGECONFIG[landesk] = "--enable-landesk, --enable-landesk=no"
+PACKAGECONFIG[sensors] = "--enable-libsensors, --enable-libsensors=no"
+
+#build with some GPL code
+PACKAGECONFIG[gpl] = "--enable-gpl, --enable-gpl=no"
+#no GPL or LanPlus libs
+PACKAGECONFIG[standalone] = "--enable-standalone, --enable-standalone=no"
+
+CFLAGS += "-I${STAGING_INCDIR}"
+LDFLAGS += "-L${STAGING_LIBDIR}"
+
+COMPATIBLE_HOST = '(x86_64|i.86).*-linux'
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch.inc b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch.inc
new file mode 100644
index 000000000..b1e73e954
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch.inc
@@ -0,0 +1,49 @@
+SUMMARY = "Linux dynamic kernel patching infrastructure"
+DESCRIPTION = "kpatch is a Linux dynamic kernel patching infrastructure which allows you to patch a running kernel without rebooting or restarting any processes."
+LICENSE = "GPLv2 & LGPLv2"
+DEPENDS = "elfutils bash"
+
+SRC_URI = "git://github.com/dynup/kpatch.git;protocol=https \
+ file://0001-kpatch-build-add-cross-compilation-support.patch \
+ file://0002-kpatch-build-allow-overriding-of-distro-name.patch \
+ "
+
+EXTRA_OEMAKE = " \
+ PREFIX=${prefix} \
+ BINDIR=${D}${bindir} \
+ SBINDIR=${D}${sbindir} \
+ LIBDIR=${D}${libdir} \
+ MANDIR=${D}${mandir}/man1 \
+ SYSTEMDDIR=${D}${systemd_system_unitdir} \
+ DESTDIR=${D} \
+ BUILDMOD=no \
+ CC='${CC}' \
+ "
+
+S = "${WORKDIR}/git"
+
+do_install () {
+ oe_runmake install
+}
+
+PACKAGES =+ "kpatch-build"
+PROVIDES += "kpatch-build"
+
+COMPATIBLE_HOST = "(x86_64).*-linux"
+
+RDEPENDS_${PN} = "bash binutils"
+RDEPENDS_kpatch-build = "bash glibc-utils"
+
+FILES_${PN} = " \
+ ${sbindir}/kpatch \
+ ${systemd_system_unitdir}/kpatch.service \
+ ${mandir}/man1/kpatch.1.gz \
+ "
+FILES_kpatch-build = " \
+ ${bindir}/kpatch-build \
+ ${libexecdir}/* \
+ ${datadir}/kpatch \
+ ${mandir}/man1/kpatch-build.1.gz \
+ "
+
+SYSTEMD_SERVICE_${PN} = "kpatch.service"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0001-kpatch-build-add-cross-compilation-support.patch b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0001-kpatch-build-add-cross-compilation-support.patch
new file mode 100644
index 000000000..459fb2197
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0001-kpatch-build-add-cross-compilation-support.patch
@@ -0,0 +1,103 @@
+From a9a80a1f4df65892a0269295ce8a64b06f2ff61d Mon Sep 17 00:00:00 2001
+From: Ruslan Bilovol <rbilovol@cisco.com>
+Date: Tue, 19 Dec 2017 15:59:04 +0200
+Subject: [PATCH] kpatch-build: add cross-compilation support
+
+This patch introduces new option for kpatch-build
+script "--cross-compile" which can be used for
+specifying cross-complier prefix.
+It allows to build live patches not only on
+target system, but also on hosts for a target other
+than the one on which the compiler is running
+
+Also removed quotes in exec lines, so it is
+possible to pass multy-component strings like
+"ccache x86_64-xelinux-linux-" as cross-compiler
+
+Upstream-Status: Pending
+
+Signed-off-by: Ruslan Bilovol <rbilovol@cisco.com>
+---
+ kpatch-build/kpatch-build | 13 +++++++++++--
+ kpatch-build/kpatch-gcc | 4 ++--
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
+index 166ecbd..af24cc4 100755
+--- a/kpatch-build/kpatch-build
++++ b/kpatch-build/kpatch-build
+@@ -195,7 +195,7 @@ gcc_version_check() {
+ # gcc --version varies between distributions therefore extract version
+ # by compiling a test file and compare it to vmlinux's version.
+ echo 'void main(void) {}' > "$c"
+- out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
++ out="$(${KPATCH_CROSS_COMPILE}gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
+ gccver="$(gcc_version_from_file "$o")"
+ kgccver="$(gcc_version_from_file "$VMLINUX")"
+ rm -f "$c" "$o"
+@@ -381,12 +381,14 @@ usage() {
+ echo " -d, --debug Enable 'xtrace' and keep scratch files" >&2
+ echo " in <CACHEDIR>/tmp" >&2
+ echo " (can be specified multiple times)" >&2
++ echo " --cross-compile Specify the prefix used for all executables" >&2
++ echo " used during compilation" >&2
+ echo " --skip-cleanup Skip post-build cleanup" >&2
+ echo " --skip-gcc-check Skip gcc version matching check" >&2
+ echo " (not recommended)" >&2
+ }
+
+-options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"
++options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,cross-compile:,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"
+
+ eval set -- "$options"
+
+@@ -444,6 +446,10 @@ while [[ $# -gt 0 ]]; do
+ echo "DEBUG mode enabled"
+ fi
+ ;;
++ --cross-compile)
++ KPATCH_CROSS_COMPILE="$2"
++ shift
++ ;;
+ --skip-cleanup)
+ echo "Skipping cleanup"
+ SKIPCLEANUP=1
+@@ -691,6 +697,8 @@ if [[ $DEBUG -ge 4 ]]; then
+ export KPATCH_GCC_DEBUG=1
+ fi
+
++export KPATCH_CROSS_COMPILE
++
+ echo "Building original kernel"
+ ./scripts/setlocalversion --save-scmversion || die
+ make mrproper 2>&1 | logger || die
+@@ -840,6 +848,7 @@ cd "$TEMPDIR/patch" || die
+ KPATCH_BUILD="$SRCDIR" KPATCH_NAME="$MODNAME" \
+ KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
+ KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
++CROSS_COMPILE="$KPATCH_CROSS_COMPILE" \
+ make 2>&1 | logger || die
+
+ if ! "$KPATCH_MODULE"; then
+diff --git a/kpatch-build/kpatch-gcc b/kpatch-build/kpatch-gcc
+index 6ba133c..3937948 100755
+--- a/kpatch-build/kpatch-gcc
++++ b/kpatch-build/kpatch-gcc
+@@ -8,7 +8,7 @@ TOOLCHAINCMD="$1"
+ shift
+
+ if [[ -z "$KPATCH_GCC_TEMPDIR" ]]; then
+- exec "$TOOLCHAINCMD" "$@"
++ exec ${KPATCH_CROSS_COMPILE}${TOOLCHAINCMD} "$@"
+ fi
+
+ declare -a args=("$@")
+@@ -80,4 +80,4 @@ elif [[ "$TOOLCHAINCMD" = "ld" ]] ; then
+ done
+ fi
+
+-exec "$TOOLCHAINCMD" "${args[@]}"
++exec ${KPATCH_CROSS_COMPILE}${TOOLCHAINCMD} "${args[@]}"
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch
new file mode 100644
index 000000000..a9d8a7f2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch
@@ -0,0 +1,62 @@
+From d418d716dae1e2a05131dfb42a19a4da2fc8a85d Mon Sep 17 00:00:00 2001
+From: Ruslan Bilovol <rbilovol@cisco.com>
+Date: Tue, 2 Jan 2018 14:50:03 +0200
+Subject: [PATCH] kpatch-build: allow overriding of distro name
+
+It is sometimes useful to have ability to override
+distro name, for example during cross-compilation
+build when livepatch modules will be ran on the
+target which differs from host.
+
+This patch adds a new --distro option which
+implements all needed functionality
+
+Upstream-Status: Pending
+
+Signed-off-by: Ruslan Bilovol <rbilovol@cisco.com>
+---
+ kpatch-build/kpatch-build | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
+index af24cc4..4f9f78d 100755
+--- a/kpatch-build/kpatch-build
++++ b/kpatch-build/kpatch-build
+@@ -383,12 +383,13 @@ usage() {
+ echo " (can be specified multiple times)" >&2
+ echo " --cross-compile Specify the prefix used for all executables" >&2
+ echo " used during compilation" >&2
++ echo " --distro Override distro name" >&2
+ echo " --skip-cleanup Skip post-build cleanup" >&2
+ echo " --skip-gcc-check Skip gcc version matching check" >&2
+ echo " (not recommended)" >&2
+ }
+
+-options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,cross-compile:,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"
++options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,cross-compile:,distro:,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"
+
+ eval set -- "$options"
+
+@@ -450,6 +451,10 @@ while [[ $# -gt 0 ]]; do
+ KPATCH_CROSS_COMPILE="$2"
+ shift
+ ;;
++ --distro)
++ DISTRO="$2"
++ shift
++ ;;
+ --skip-cleanup)
+ echo "Skipping cleanup"
+ SKIPCLEANUP=1
+@@ -526,7 +531,7 @@ fi
+ # Don't check external file.
+ # shellcheck disable=SC1091
+ source /etc/os-release
+-DISTRO="$ID"
++DISTRO="${DISTRO:-${ID}}"
+ if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]]; then
+ [[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux"
+ [[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed"
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb
new file mode 100644
index 000000000..e495e2882
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb
@@ -0,0 +1,11 @@
+require kpatch.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRCREV = "db6efbb8c7e90d2b761272cf563047119072768f"
+
+PV = "0.5.0+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/linux/linux.inc b/meta-openembedded/meta-oe/recipes-kernel/linux/linux.inc
new file mode 100644
index 000000000..9f14370cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/linux/linux.inc
@@ -0,0 +1,131 @@
+DESCRIPTION = "Linux Kernel"
+SECTION = "kernel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+
+INC_PR = "r0"
+
+inherit kernel siteinfo
+
+# Enable OABI compat for people stuck with obsolete userspace
+ARM_KEEP_OABI ?= "0"
+
+# Set the verbosity of kernel messages during runtime
+# You can define CMDLINE_DEBUG in your local.conf or distro.conf to override this behaviour
+CMDLINE_DEBUG ?= "loglevel=3"
+
+# Kernel bootlogo is distro-specific (default is OE logo).
+# Logo resolution (qvga, vga, ...) is machine-specific.
+LOGO_SIZE ?= '${@oe.utils.conditional("MACHINE_GUI_CLASS", "bigscreen", "vga", "qvga", d)}'
+# To use this, add file://${LOGO_SIZE}/logo_linux_clut224.ppm.bz2 or similar
+# to your kernel recipe, and then structure your logos for each resolution
+# accordingly.
+
+LOCALVERSION ?= ""
+
+#kernel_conf_variable CMDLINE "\"${CMDLINE} ${CMDLINE_DEBUG}\""
+kernel_conf_variable() {
+ CONF_SED_SCRIPT="$CONF_SED_SCRIPT /CONFIG_$1[ =]/d;"
+ if test "$2" = "n"
+ then
+ echo "# CONFIG_$1 is not set" >> ${B}/.config
+ else
+ echo "CONFIG_$1=$2" >> ${B}/.config
+ fi
+}
+
+do_configure_prepend() {
+ echo "" > ${B}/.config
+ CONF_SED_SCRIPT=""
+
+ #
+ # logo support, if you supply logo_linux_clut224.ppm in SRC_URI, then it's going to be used
+ #
+ if [ -e ${WORKDIR}/logo_linux_clut224.ppm ]; then
+ install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
+ kernel_conf_variable LOGO y
+ kernel_conf_variable LOGO_LINUX_CLUT224 y
+ fi
+
+ #
+ # oabi / eabi support
+ #
+ kernel_conf_variable AEABI y
+ if [ "${ARM_KEEP_OABI}" = "1" ] ; then
+ kernel_conf_variable OABI_COMPAT y
+ else
+ kernel_conf_variable OABI_COMPAT n
+ fi
+
+ # When enabling thumb for userspace we also need thumb support in the kernel
+ if [ "${ARM_INSTRUCTION_SET}" = "thumb" ] ; then
+ kernel_conf_variable ARM_THUMB y
+ fi
+
+ kernel_conf_variable CMDLINE "\"${CMDLINE} ${CMDLINE_DEBUG}\""
+
+ kernel_conf_variable LOCALVERSION "\"${LOCALVERSION}\""
+ kernel_conf_variable LOCALVERSION_AUTO n
+
+ kernel_conf_variable SYSFS_DEPRECATED n
+ kernel_conf_variable SYSFS_DEPRECATED_V2 n
+ kernel_conf_variable HOTPLUG y
+ kernel_conf_variable UEVENT_HELPER_PATH \"\"
+ kernel_conf_variable UNIX y
+ kernel_conf_variable SYSFS y
+ kernel_conf_variable PROC_FS y
+ kernel_conf_variable TMPFS y
+ kernel_conf_variable INOTIFY_USER y
+ kernel_conf_variable SIGNALFD y
+ kernel_conf_variable TMPFS_POSIX_ACL y
+ kernel_conf_variable BLK_DEV_BSG y
+ kernel_conf_variable DEVTMPFS y
+ kernel_conf_variable DEVTMPFS_MOUNT y
+
+ # Newer inits like systemd need cgroup support
+ if [ "${KERNEL_ENABLE_CGROUPS}" = "1" ] ; then
+ kernel_conf_variable CGROUP_SCHED y
+ kernel_conf_variable CGROUPS y
+ kernel_conf_variable CGROUP_NS y
+ kernel_conf_variable CGROUP_FREEZER y
+ kernel_conf_variable CGROUP_DEVICE y
+ kernel_conf_variable CPUSETS y
+ kernel_conf_variable PROC_PID_CPUSET y
+ kernel_conf_variable CGROUP_CPUACCT y
+ kernel_conf_variable RESOURCE_COUNTERS y
+ fi
+
+ #
+ # root-over-nfs-over-usb-eth support. Limited, but should cover some cases.
+ # Enable this by setting a proper CMDLINE_NFSROOT_USB.
+ #
+ if [ ! -z "${CMDLINE_NFSROOT_USB}" ]; then
+ bbnote "Configuring the kernel for root-over-nfs-over-usb-eth with CMDLINE ${CMDLINE_NFSROOT_USB}"
+ kernel_conf_variable INET y
+ kernel_conf_variable IP_PNP y
+ kernel_conf_variable USB_GADGET y
+ kernel_conf_variable USB_GADGET_SELECTED y
+ kernel_conf_variable USB_ETH y
+ kernel_conf_variable NFS_FS y
+ kernel_conf_variable ROOT_NFS y
+ kernel_conf_variable CMDLINE \"${CMDLINE_NFSROOT_USB} ${CMDLINE_DEBUG}\"
+ fi
+
+ sed -e "${CONF_SED_SCRIPT}" \
+ < '${WORKDIR}/defconfig' >>'${B}/.config'
+
+ yes '' | oe_runmake -C ${S} O=${B} oldconfig
+}
+
+do_configure_append() {
+ if test -e scripts/Makefile.fwinst ; then
+ sed -i -e "s:-m0644:-m 0644:g" scripts/Makefile.fwinst
+ fi
+}
+
+do_install_append() {
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix}/src/linux-${KERNEL_VERSION} ARCH=$ARCH
+}
+
+PACKAGES =+ "kernel-headers"
+FILES_kernel-headers = "${exec_prefix}/src/linux*"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch
new file mode 100644
index 000000000..d599a9193
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch
@@ -0,0 +1,134 @@
+From 3c2f4ff583a156a7ed2fa0cc002a413c391d063d Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Thu, 21 Jul 2016 18:06:21 +0800
+Subject: [PATCH] makedumpfile: replace hardcode CFLAGS
+
+* Create alias for target such as powerpc as powerpc32
+* Remove hardcode CFLAGS
+* Add CFLAGS_COMMON to instead of CFLAGS so can flexibly
+ customize CFLAGS and not hardcode the CFLAGS as previously
+* Forcibly to link dynamic library as the poky build
+ system doesn't build static library by default
+
+Upstream-Status: Inappropriate[oe specific]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ Makefile | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 7dde3e4..c5286ac 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,13 +8,6 @@ ifeq ($(strip $CC),)
+ CC = gcc
+ endif
+
+-CFLAGS = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \
+- -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE \
+- -DVERSION='"$(VERSION)"' -DRELEASE_DATE='"$(DATE)"'
+-CFLAGS_ARCH = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \
+- -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
+-# LDFLAGS = -L/usr/local/lib -I/usr/local/include
+-
+ HOST_ARCH := $(shell uname -m)
+ # Use TARGET as the target architecture if specified.
+ # Defaults to uname -m
+@@ -22,29 +15,36 @@ ifeq ($(strip($TARGET)),)
+ TARGET := $(HOST_ARCH)
+ endif
+
+-ARCH := $(shell echo ${TARGET} | sed -e s/i.86/x86/ -e s/sun4u/sparc64/ \
+- -e s/arm.*/arm/ -e s/sa110/arm/ \
+- -e s/s390x/s390/ -e s/parisc64/parisc/ \
+- -e s/ppc64/powerpc64/ -e s/ppc/powerpc32/)
++ARCH := $(shell echo __${TARGET}__ | sed -e s/i.86/x86/ -e s/sun4u/sparc64/ \
++ -e s/arm.*/arm/ -e s/sa110/arm/ \
++ -e s/s390x/s390/ -e s/parisc64/parisc/ \
++ -e s/ppc64/powerpc64/ -e s/ppc/powerpc32/ \
++ -e s/_powerpc_/_powerpc32_/)
+
+ CROSS :=
+ ifneq ($(TARGET), $(HOST_ARCH))
+ CROSS := -U__$(HOST_ARCH)__
+ endif
+
+-CFLAGS += -D__$(ARCH)__ $(CROSS)
+-CFLAGS_ARCH += -D__$(ARCH)__ $(CROSS)
++CFLAGS_ARCH += -D$(ARCH) $(CROSS)
+
+-ifeq ($(ARCH), powerpc64)
+-CFLAGS += -m64
++ifeq ($(ARCH), __powerpc64__)
+ CFLAGS_ARCH += -m64
+ endif
+
+-ifeq ($(ARCH), powerpc32)
+-CFLAGS += -m32
++ifeq ($(ARCH), __powerpc32__)
+ CFLAGS_ARCH += -m32
+ endif
+
++CFLAGS_ARCH += $(CFLAGS) \
++ -D_FILE_OFFSET_BITS=64 \
++ -D_LARGEFILE_SOURCE \
++ -D_LARGEFILE64_SOURCE
++
++CFLAGS_COMMON = $(CFLAGS_ARCH) \
++ -DVERSION='"$(VERSION)"' \
++ -DRELEASE_DATE='"$(DATE)"'
++
+ SRC_BASE = makedumpfile.c makedumpfile.h diskdump_mod.h sadump_mod.h sadump_info.h
+ SRC_PART = print_info.c dwarf_info.c elf_info.c erase_info.c sadump_info.c cache.c
+ OBJ_PART=$(patsubst %.c,%.o,$(SRC_PART))
+@@ -54,17 +54,17 @@ OBJ_ARCH=$(patsubst %.c,%.o,$(SRC_ARCH))
+
+ LIBS = -ldw -lbz2 -lebl -ldl -lelf -lz
+ ifneq ($(LINKTYPE), dynamic)
+-LIBS := -static $(LIBS)
++LIBS := $(LIBS)
+ endif
+
+ ifeq ($(USELZO), on)
+ LIBS := -llzo2 $(LIBS)
+-CFLAGS += -DUSELZO
++CFLAGS_COMMON += -DUSELZO
+ endif
+
+ ifeq ($(USESNAPPY), on)
+ LIBS := -lsnappy $(LIBS)
+-CFLAGS += -DUSESNAPPY
++CFLAGS_COMMON += -DUSESNAPPY
+ endif
+
+ LIBS := -lpthread $(LIBS)
+@@ -72,14 +72,14 @@ LIBS := -lpthread $(LIBS)
+ all: makedumpfile
+
+ $(OBJ_PART): $(SRC_PART)
+- $(CC) $(CFLAGS) -c -o ./$@ $(VPATH)$(@:.o=.c)
++ $(CC) $(CFLAGS_COMMON) -c -o ./$@ $(VPATH)$(@:.o=.c)
+
+ $(OBJ_ARCH): $(SRC_ARCH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS_ARCH) -c -o ./$@ $(VPATH)$(@:.o=.c)
+
+ makedumpfile: $(SRC_BASE) $(OBJ_PART) $(OBJ_ARCH)
+- $(CC) $(CFLAGS) $(LDFLAGS) $(OBJ_PART) $(OBJ_ARCH) -rdynamic -o $@ $< $(LIBS)
++ $(CC) $(CFLAGS_COMMON) $(LDFLAGS) $(OBJ_PART) $(OBJ_ARCH) -rdynamic -o $@ $< $(LIBS)
+ echo .TH MAKEDUMPFILE 8 \"$(DATE)\" \"makedumpfile v$(VERSION)\" \"Linux System Administrator\'s Manual\" > temp.8
+ grep -v "^.TH MAKEDUMPFILE 8" $(VPATH)makedumpfile.8 >> temp.8
+ mv temp.8 makedumpfile.8
+@@ -90,7 +90,7 @@ makedumpfile: $(SRC_BASE) $(OBJ_PART) $(OBJ_ARCH)
+ gzip -c ./makedumpfile.conf.5 > ./makedumpfile.conf.5.gz
+
+ eppic_makedumpfile.so: extension_eppic.c
+- $(CC) $(CFLAGS) $(LDFLAGS) -shared -rdynamic -o $@ extension_eppic.c -fPIC -leppic -ltinfo
++ $(CC) $(CFLAGS_COMMON) $(LDFLAGS) -shared -rdynamic -o $@ extension_eppic.c -fPIC -leppic -ltinfo
+
+ clean:
+ rm -f $(OBJ) $(OBJ_PART) $(OBJ_ARCH) makedumpfile makedumpfile.8.gz makedumpfile.conf.5.gz
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch
new file mode 100644
index 000000000..e0c3d9af6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch
@@ -0,0 +1,73 @@
+From 653fe8e724081d2f289c2245d1220d5f7170538d Mon Sep 17 00:00:00 2001
+From: Alexandru Moise <alexandru.moise@windriver.com>
+Date: Fri, 29 Apr 2016 07:40:46 +0000
+Subject: [PATCH] mem_section: Support only 46 bit for MAX_PHYSMEM_BITS on
+ PPC64
+
+Related to change:
+http://lists.infradead.org/pipermail/kexec/2013-January/007849.html
+
+Linux on PPC64 has supported only 46 bit MAX_PHYSMEM_BITS since commit:
+048ee0993ec8360abb0b51bdf8f8721e9ed62ec4
+
+Also remove set_ppc64_max_physmem_bits and set info->max_physmem_bits in
+get_machdep_info_ppc64 instead. set_ppc64_max_physmem_bits is broken
+for all kernels compiled with CONFIG_SPARSEMEM=n. makedumpfile is
+unable to get mem_section field from powerpc kernel since commit:
+fd59d231f81cb02870b9cf15f456a897f3669b4e
+
+Upstream-Status: Pending
+
+Signed-off-by: Alexandru Moise <alexandru.moise@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ arch/ppc64.c | 28 ++--------------------------
+ 1 file changed, 2 insertions(+), 26 deletions(-)
+
+diff --git a/arch/ppc64.c b/arch/ppc64.c
+index 89a7f05..6c928ab 100644
+--- a/arch/ppc64.c
++++ b/arch/ppc64.c
+@@ -302,37 +302,13 @@ ppc64_vtop_level4(unsigned long vaddr)
+ }
+
+ int
+-set_ppc64_max_physmem_bits(void)
+-{
+- long array_len = ARRAY_LENGTH(mem_section);
+- /*
+- * The older ppc64 kernels uses _MAX_PHYSMEM_BITS as 42 and the
+- * newer kernels 3.7 onwards uses 46 bits.
+- */
+-
+- info->max_physmem_bits = _MAX_PHYSMEM_BITS_ORIG ;
+- if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME()))
+- || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT())))
+- return TRUE;
+-
+- info->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7;
+- if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME()))
+- || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT())))
+- return TRUE;
+-
+- return FALSE;
+-}
+-
+-int
+ get_machdep_info_ppc64(void)
+ {
+ unsigned long vmlist, vmap_area_list, vmalloc_start;
+
+ info->section_size_bits = _SECTION_SIZE_BITS;
+- if (!set_ppc64_max_physmem_bits()) {
+- ERRMSG("Can't detect max_physmem_bits.\n");
+- return FALSE;
+- }
++ info->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7;
++
+ info->page_offset = __PAGE_OFFSET;
+
+ if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) {
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.2.bb b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.2.bb
new file mode 100644
index 000000000..d6f2d807e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.2.bb
@@ -0,0 +1,54 @@
+SUMMARY = "VMcore extraction tool"
+DESCRIPTION = "\
+ This program is used to extract a subset of the memory available either \
+ via /dev/mem or /proc/vmcore (for crashdumps). It is used to get memory \
+ images without extra uneeded information (zero pages, userspace programs, \
+ etc). \
+"
+HOMEPAGE = "http://makedumpfile.sourceforge.net"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+LICENSE = "GPLv2.0"
+
+DEPENDS = "bzip2 zlib elfutils"
+RDEPENDS_${PN}-tools = "perl ${PN}"
+
+# arm would compile but has never been tested upstream. mips would not compile.
+#
+COMPATIBLE_HOST = "(x86_64|i.86|powerpc|arm).*-linux"
+
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/*.pl"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/makedumpfile/${BPN}-${PV}.tar.gz \
+ file://0001-makedumpfile-replace-hardcode-CFLAGS.patch \
+ file://0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch \
+"
+SRC_URI[md5sum] = "72be5bf973eed898c5127e3abc466583"
+SRC_URI[sha256sum] = "ee3d21cb4032a60bd2c802d1d8b21b9f399710e1574f8de8ead5ab50cd821a6d"
+
+SECTION = "base"
+
+# If we do not specify TARGET, makedumpfile will build for the host but use the
+# target gcc.
+#
+EXTRA_OEMAKE = "\
+ LINKTYPE=static \
+ TARGET=${TARGET_ARCH} \
+"
+
+do_install () {
+ mkdir -p ${D}/usr/bin
+ install -m 755 ${S}/makedumpfile ${D}/usr/bin
+ install -m 755 ${S}/makedumpfile-R.pl ${D}/usr/bin
+
+ mkdir -p ${D}/usr/share/man/man8
+ install -m 644 ${S}/makedumpfile.8.gz ${D}/usr/share/man/man8
+
+ mkdir -p ${D}/usr/share/man/man5
+ install -m 644 ${S}/makedumpfile.conf.5.gz ${D}/usr/share/man/man5
+
+ mkdir -p ${D}/etc/
+ install -m 644 ${S}/makedumpfile.conf ${D}/etc/makedumpfile.conf.sample
+}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-fix-compile-error-on-arch-x32.patch b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-fix-compile-error-on-arch-x32.patch
new file mode 100644
index 000000000..6ba6ad481
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-fix-compile-error-on-arch-x32.patch
@@ -0,0 +1,32 @@
+From 883f53ee33eaef8aca1288a110857402ad362966 Mon Sep 17 00:00:00 2001
+From: John Ogness <john.ogness@linutronix.de>
+Date: Fri, 8 Sep 2017 15:03:03 -0700
+Subject: [PATCH] fix compile error on arch=x32
+
+On the x32 architecture time_t is a "long long int". By
+ typecasting time_t to "long long", this should work correctly
+ for all architectures.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/minicoredumper/corestripper.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/minicoredumper/corestripper.c b/src/minicoredumper/corestripper.c
+index fd39bfb..07dc318 100644
+--- a/src/minicoredumper/corestripper.c
++++ b/src/minicoredumper/corestripper.c
+@@ -1241,7 +1241,7 @@ static int dump_compressed_tar(struct dump_info *di)
+ snprintf(hdr.mode, sizeof(hdr.mode), "%07o", 0644);
+ snprintf(hdr.uid, sizeof(hdr.uid), "%07o", 0);
+ snprintf(hdr.gid, sizeof(hdr.gid), "%07o", 0);
+- snprintf(hdr.mtime, sizeof(hdr.mtime), "%011lo",
++ snprintf(hdr.mtime, sizeof(hdr.mtime), "%011llo",
+ (long long)time(NULL));
+ memset(hdr.checksum, ' ', sizeof(hdr.checksum));
+ hdr.type = 'S';
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-Initialize-pointer-to-config-struct-t.patch b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-Initialize-pointer-to-config-struct-t.patch
new file mode 100644
index 000000000..ad255fae0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-Initialize-pointer-to-config-struct-t.patch
@@ -0,0 +1,29 @@
+From 6181d9c3c407ee030b4c3a94045318b9e3a3cc89 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 14:08:54 -0700
+Subject: [PATCH] minicoredumper: Initialize pointer to config struct to null
+
+Fixes
+corestripper.c:3632:13: error: variable 'cfg' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/minicoredumper/corestripper.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/minicoredumper/corestripper.c b/src/minicoredumper/corestripper.c
+index a764073..ddb0d25 100644
+--- a/src/minicoredumper/corestripper.c
++++ b/src/minicoredumper/corestripper.c
+@@ -3605,7 +3605,7 @@ out:
+
+ static int do_all_dumps(struct dump_info *di, int argc, char *argv[])
+ {
+- struct config *cfg;
++ struct config *cfg = 0;
+ const char *recept;
+ bool live_dumper;
+ char *comm_base;
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.init b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.init
new file mode 100644
index 000000000..9c96e3156
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.init
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# minicoredumper This shell script takes care of starting and stopping minicoredumper.
+#
+# chkconfig: 2345 24 89
+# description: minicoredumper.
+#
+# processname:
+# config: /etc/minicoredumper/
+
+### BEGIN INIT INFO
+# Provides: minicoredumper
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Should-Start: $syslog $network
+# Should-Stop: $syslog $network
+# Short-Description:
+# Description:
+### END INIT INFO
+
+. /etc/init.d/functions
+
+case "$1" in
+ start)
+ echo "|/usr/sbin/minicoredumper %p %u %g %s %t %h %e" > /proc/sys/kernel/core_pattern
+ ;;
+ stop)
+ echo "core" > /proc/sys/kernel/core_pattern
+ ;;
+ status)
+ if grep -q minicoredumper /proc/sys/kernel/core_pattern ; then
+ echo "minicoredumper is running"
+ else
+ echo "minicoredumper is stopped"
+ fi
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status}"
+ exit 2
+esac
diff --git a/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.service b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.service
new file mode 100644
index 000000000..45d098f29
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/files/minicoredumper.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Enable minicoredumper.
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/bin/sh -c '/bin/echo "|/usr/sbin/minicoredumper %%p %%u %%g %%s %%t %%h %%e" > /proc/sys/kernel/core_pattern'
+ExecStop=/bin/sh -c '/bin/echo "core" > /proc/sys/kernel/core_pattern'
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/minicoredumper_2.0.0.bb b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/minicoredumper_2.0.0.bb
new file mode 100644
index 000000000..0d3c66b07
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/minicoredumper/minicoredumper_2.0.0.bb
@@ -0,0 +1,45 @@
+SUMMARY = "minicoredumper provides an alternate core dump facility for Linux \
+to allow minimal and customized crash dumps"
+LICENSE = " LGPLv2.1 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=aa846ae365f71b69e9fa0d21a56391ec \
+ file://COPYING.BSD;md5=b915ac80d5236d6aa659cb986daf00e5 \
+ file://COPYING.LGPLv2.1;md5=321bf41f280cf805086dd5a720b37785 \
+ "
+DEPENDS = "elfutils dbus dbus-glib-native glib-2.0 dbus-glib util-linux json-c"
+
+inherit autotools pkgconfig systemd update-rc.d
+
+SRCREV = "cdc1faf1212a51e89b477468876e229223fceb9a"
+
+PR .= "+git${SRCPV}"
+
+SRC_URI = "git://git.linuxfoundation.org/diamon/minicoredumper.git;protocol=http \
+ file://minicoredumper.service \
+ file://minicoredumper.init \
+ file://0001-minicoredumper-Initialize-pointer-to-config-struct-t.patch \
+ file://0001-fix-compile-error-on-arch-x32.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+SYSTEMD_SERVICE_${PN} = "minicoredumper.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "minicoredumper"
+INITSCRIPT_PARAMS_${PN} = "defaults 89"
+
+do_install_append() {
+ rmdir ${D}${localstatedir}/run
+ install -d ${D}/${sysconfdir}/minicoredumper
+ cp -rf ${S}/etc/* ${D}/${sysconfdir}/
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/minicoredumper.service ${D}${systemd_system_unitdir}
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/minicoredumper.init ${D}${sysconfdir}/init.d/minicoredumper
+
+ # correct path of minicoredumper
+ sed -i -e s:/usr/bin/minicoredumper:${sbindir}/minicoredumper:g ${D}${sysconfdir}/init.d/minicoredumper
+ sed -i -e s:/usr/bin/minicoredumper:${sbindir}/minicoredumper:g ${D}${systemd_system_unitdir}/minicoredumper.service
+}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc
new file mode 100644
index 000000000..4b01654fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc
@@ -0,0 +1,65 @@
+SUMMARY = "System-Wide Profiler"
+DESCRIPTION = "OProfile is a system-wide profiler for Linux systems, capable \
+of profiling all running code at low overhead."
+HOMEPAGE = "http://oprofile.sourceforge.net/news/"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=16191&atid=116191"
+
+LICENSE = "LGPLv2.1+ & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://libopagent/opagent.h;beginline=5;endline=26;md5=4f16f72c7a493d8a4704aa18d03d15c6 \
+ "
+SECTION = "devel"
+
+DEPENDS = "popt binutils"
+RDEPENDS_${PN} = "binutils-symlinks"
+RRECOMMENDS_${PN} = "kernel-vmlinux"
+
+FILES_${PN} = "${bindir} ${libdir}/${BPN}/lib*${SOLIBS} ${datadir}/${BPN}"
+FILES_${PN}-dev += "${libdir}/${BPN}/lib*${SOLIBSDEV} ${libdir}/${BPN}/lib*.la"
+FILES_${PN}-staticdev += "${libdir}/${BPN}/lib*.a"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+ file://acinclude.m4 \
+ file://automake-foreign.patch \
+ file://oprofile-cross-compile-tests.patch \
+ file://run-ptest \
+ file://root-home-dir.patch \
+ file://0001-Add-rmb-definition-for-NIOS2-architecture.patch \
+ file://0001-Fix-FTBFS-problem-with-GCC-6.patch \
+"
+UPSTREAM_CHECK_REGEX = "oprofile-(?P<pver>\d+(\.\d+)+)/"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/oprofile/files/oprofile/"
+
+SRC_URI_append_libc-musl = " file://musl.patch"
+
+inherit autotools pkgconfig ptest
+
+EXTRA_OECONF = "--with-kernel=${STAGING_DIR_HOST}${prefix} --without-x ac_cv_prog_XSLTPROC="
+do_configure () {
+ cp ${WORKDIR}/acinclude.m4 ${S}/
+ autotools_do_configure
+}
+
+EXTRA_OEMAKE = "SRCDIR=${PTEST_PATH}/libutil++/tests"
+do_compile_ptest() {
+ oe_runmake check
+}
+
+do_install_ptest() {
+ subdirs="libdb/tests libutil++/tests libregex/tests libutil/tests libop/tests libdb/tests "
+ for tooltest in ${subdirs}
+ do
+ find ${tooltest} -perm /u=x -type f| cpio -pvdu ${D}${PTEST_PATH}
+ done
+
+ # needed by some libop tests
+ cp -r events ${D}${PTEST_PATH}
+
+ # needed by libregex regex_test
+ cp libregex/stl.pat ${D}${PTEST_PATH}/libregex
+ cp libregex/tests/mangled-name ${D}${PTEST_PATH}/libregex/tests
+
+ # needed by litutil++ file_manip_tests
+ cp ${S}/libutil++/tests/file_manip_tests.cpp \
+ libutil++/tests/file_manip_tests.o ${D}${PTEST_PATH}/libutil++/tests
+}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Add-rmb-definition-for-NIOS2-architecture.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Add-rmb-definition-for-NIOS2-architecture.patch
new file mode 100644
index 000000000..ae8562a23
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Add-rmb-definition-for-NIOS2-architecture.patch
@@ -0,0 +1,30 @@
+From 34b0d9b1a32fb404a30327a7ae8931c7c75583bf Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 9 Feb 2016 02:00:29 +0100
+Subject: [PATCH] Add rmb() definition for NIOS2 architecture
+
+Signed-off-by: Marek Vasut <marex@denx.de>
+Upstream-Status: Submitted [ http://marc.info/?l=oprofile-list&m=145501915931874&w=2 ]
+---
+ libperf_events/operf_utils.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libperf_events/operf_utils.h b/libperf_events/operf_utils.h
+index 32954cc..8270e53 100644
+--- a/libperf_events/operf_utils.h
++++ b/libperf_events/operf_utils.h
+@@ -178,6 +178,11 @@ void op_release_resources(void);
+ #define cpu_relax() asm volatile("" ::: "memory")
+ #endif
+
++#ifdef __nios2__
++#define rmb() asm volatile("" ::: "memory")
++#define cpu_relax() asm volatile("" ::: "memory")
++#endif
++
+ #ifdef __tile__
+ #include <asm/unistd.h>
+ #define rmb() __insn_mf()
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Fix-FTBFS-problem-with-GCC-6.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Fix-FTBFS-problem-with-GCC-6.patch
new file mode 100644
index 000000000..d372fd527
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Fix-FTBFS-problem-with-GCC-6.patch
@@ -0,0 +1,51 @@
+From 39d4d46a0bd504ac708ffe72df87bf74cd12ad30 Mon Sep 17 00:00:00 2001
+From: William Cohen <wcohen@redhat.com>
+Date: Fri, 5 Feb 2016 17:30:19 -0500
+Subject: [PATCH] Fix FTBFS problem with GCC-6
+
+GCC-6 is pickier about some of the type conversions causing the Fedora
+24 mass rebuild the build of oprofile failed with:
+
+make[3]: Entering directory '/builddir/build/BUILD/oprofile-1.1.0/libutil++'
+g++ -DHAVE_CONFIG_H -I. -I.. -I ../libutil -I ../libop -I ../libpp -W -Wall -fno-common -ftemplate-depth-50 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -c -o op_bfd.o op_bfd.cpp
+op_bfd.cpp: In member function 'void op_bfd::get_symbol_range(symbol_index_t, long long unsigned int&, long long unsigned int&) const':
+op_bfd.cpp:538:47: error: cannot convert 'std::ostream {aka std::basic_ostream<char>}' to 'const bool' in initialization
+ bool const verbose = cverb << (vbfd & vlevel1);
+ ^
+op_bfd.cpp:546:7: error: in argument to unary !
+ if (!verbose)
+ ^~~~~~~
+
+Avoid the intermediate bool type to make GCC-6 happy.
+
+Signed-off-by: William Cohen <wcohen@redhat.com>
+---
+Upstream-Status: Backport
+
+ libutil++/op_bfd.cpp | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/libutil++/op_bfd.cpp b/libutil++/op_bfd.cpp
+index 389c920..f2eb42b 100644
+--- a/libutil++/op_bfd.cpp
++++ b/libutil++/op_bfd.cpp
+@@ -535,15 +535,13 @@ void op_bfd::get_symbol_range(symbol_index_t sym_idx,
+ {
+ op_bfd_symbol const & sym = syms[sym_idx];
+
+- bool const verbose = cverb << (vbfd & vlevel1);
+-
+ if (anon_obj)
+ start = sym.vma();
+ else
+ start = sym.filepos();
+ end = start + sym.size();
+
+- if (!verbose)
++ if (!(cverb << (vbfd & vlevel1)))
+ return;
+
+ io_state state(cverb << (vbfd & vlevel1));
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/acinclude.m4 b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/acinclude.m4
new file mode 100644
index 000000000..95ecd91b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/acinclude.m4
@@ -0,0 +1,581 @@
+dnl AX_KERNEL_OPTION(option, action-if-found, action-if-not-found)
+dnl see if autoconf.h defines the option
+AC_DEFUN([AX_KERNEL_OPTION], [
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+AC_TRY_COMPILE( [#include <linux/config.h>],
+[
+#ifndef $1
+break_me_hard(\\\);
+#endif
+],[$2],[$3],)
+CFLAGS=$SAVE_CFLAGS
+])
+
+dnl Handle the 2.4 module inside module/
+AC_DEFUN([AX_CONFIG_MODULE],
+[
+if test ! -f $KINC/linux/autoconf.h; then
+ AC_MSG_ERROR([no suitably configured kernel include tree found])
+fi
+
+dnl --- Get Linux kernel version and compile parameters ---
+
+AC_SUBST(KVERS)
+AC_MSG_CHECKING([for kernel version])
+dnl it's like this to handle mandrake's fubar version.h - bug #471448
+eval KVERS=`gcc -I$KINC -E -dM $KINC/linux/version.h | grep -w UTS_RELEASE | awk '{print $[]3}'`
+AC_MSG_RESULT([$KVERS])
+case "$KVERS" in
+2.2.*|2.4.*) ;;
+*) AC_MSG_ERROR([Unsupported kernel version])
+esac
+
+dnl Check for the minimal kernel version supported
+AC_MSG_CHECKING([kernel version])
+AX_KERNEL_VERSION(2, 2, 10, <=, AC_MSG_RESULT([ok]), AC_MSG_ERROR([check html documentation install section]))
+
+dnl linux/spinlock.h added at some point in past
+AC_MSG_CHECKING([for $KINC/linux/spinlock.h])
+if test -f $KINC/linux/spinlock.h; then
+ EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DHAVE_LINUX_SPINLOCK_HEADER"
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+AC_MSG_CHECKING([for rtc_lock])
+gcc -I$KINC -E $KINC/linux/mc146818rtc.h | grep rtc_lock >/dev/null
+if test "$?" -eq 0; then
+ EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DRTC_LOCK"
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+arch="unknown"
+AC_MSG_CHECKING(for x86-64 architecture)
+AX_KERNEL_OPTION(CONFIG_X86_64, x8664=1, x8664=0)
+AX_MSG_RESULT_YN($x8664)
+BUILD_HAMMER=no
+if test "$x8664" -eq 1; then
+ arch="x86"
+ BUILD_HAMMER=yes
+else
+ AC_MSG_CHECKING(for x86 architecture)
+ AX_KERNEL_OPTION(CONFIG_X86, x86=1, x86=0)
+ AX_KERNEL_OPTION(CONFIG_X86_WP_WORKS_OK, x86=1, x86=$x86)
+ AX_MSG_RESULT_YN($x86)
+ test "$x86" = 1 && arch="x86"
+
+ if test "$arch" = "unknown"; then
+ AC_MSG_CHECKING(for ia64 architecture)
+ AX_KERNEL_OPTION(CONFIG_IA64, ia64=1, ia64=0)
+ AX_MSG_RESULT_YN($ia64)
+ test "$ia64" = 1 && arch="ia64"
+ fi
+
+fi
+AC_SUBST(BUILD_HAMMER)
+
+test "$arch" = "unknown" && AC_MSG_ERROR(Unsupported architecture)
+
+dnl check to see if kernel verion appropriate for arch
+AC_MSG_CHECKING(arch/kernel version combination)
+case "$arch" in
+ia64)
+ AX_KERNEL_VERSION(2, 4, 18, <, AC_MSG_RESULT([ok]),
+ AC_MSG_ERROR([unsupported arch/kernel])) ;;
+*) AC_MSG_RESULT([ok])
+esac
+
+dnl for now we do not support PREEMPT patch
+AC_MSG_CHECKING([for preempt patch])
+AX_KERNEL_OPTION(CONFIG_PREEMPT,preempt=1,preempt=0)
+AX_MSG_RESULT_YN([$preempt])
+test "$preempt" = 0 || AC_MSG_ERROR([unsupported kernel configuration : CONFIG_PREEMPT])
+
+AC_SUBST(KINC)
+
+MODINSTALLDIR=/lib/modules/$KVERS
+
+OPROFILE_MODULE_ARCH=$arch
+AC_SUBST(OPROFILE_MODULE_ARCH)
+]
+)
+
+dnl AX_MSG_RESULT_YN(a)
+dnl results "yes" iff a==1, "no" else
+AC_DEFUN([AX_MSG_RESULT_YN], [x=no
+test "x$1" = "x1" && x=yes
+AC_MSG_RESULT($x)])
+
+dnl AX_MALLOC_ATTRIBUTE - see if gcc will take __attribute__((malloc))
+AC_DEFUN([AX_MALLOC_ATTRIBUTE],
+[
+AC_MSG_CHECKING([whether malloc attribute is understood])
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+AC_TRY_COMPILE(,[
+void monkey() __attribute__((malloc));
+],AC_MSG_RESULT([yes]); AC_DEFINE(MALLOC_ATTRIBUTE_OK, 1, [whether malloc attribute is understood]), AC_MSG_RESULT([no]))
+CFLAGS=$SAVE_CFLAGS
+]
+)
+
+dnl builtin_expect is used in module we can't add that in config.h
+AC_DEFUN([AX_BUILTIN_EXPECT],
+[
+AC_MSG_CHECKING([whether __builtin_expect is understood])
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+AC_TRY_LINK(,[
+int i;
+if (__builtin_expect(i, 0)) { }
+],
+AC_MSG_RESULT([yes]); EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DEXPECT_OK",
+AC_MSG_RESULT([no]);)
+CFLAGS=$SAVE_CFLAGS
+]
+)
+
+dnl AX_EXTRA_DIRS - Let user specify extra dirs for include/libs
+AC_DEFUN([AX_EXTRA_DIRS],
+[
+AC_ARG_WITH(extra-includes,
+[ --with-extra-includes=DIR add extra include paths],
+ use_extra_includes="$withval",
+ use_extra_includes=NO
+)
+if test -n "$use_extra_includes" && \
+ test "$use_extra_includes" != "NO"; then
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $use_extra_includes; do
+ extra_includes="$extra_includes -I$dir"
+ done
+ IFS=$ac_save_ifs
+ CPPFLAGS="$CPPFLAGS $extra_includes"
+fi
+
+AC_ARG_WITH(extra-libs,
+[ --with-extra-libs=DIR add extra library paths],
+ use_extra_libs=$withval,
+ use_extra_libs=NO
+)
+if test -n "$use_extra_libs" && \
+ test "$use_extra_libs" != "NO"; then
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $use_extra_libs; do
+ extra_libraries="$extra_libraries -L$dir"
+ done
+ IFS=$ac_save_ifs
+ LDFLAGS="$LDFLAGS $extra_libraries"
+fi
+]
+)
+
+dnl AX_POPT_CONST - check popt prototype
+AC_DEFUN([AX_POPT_CONST],
+[
+AC_MSG_CHECKING([popt prototype])
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-Werror $CXXFLAGS"
+AC_TRY_COMPILE([#include <popt.h>],
+[
+int c; char **v;
+poptGetContext(0, c, v, 0, 0);
+],
+AC_MSG_RESULT([takes char **]);,
+AC_MSG_RESULT([takes const char **]); AC_DEFINE(CONST_POPT, 1, [whether popt prototype takes a const char **]))
+CXXFLAGS="$SAVE_CXXFLAGS"
+]
+)
+
+dnl AX_CHECK_SSTREAM - check if local sstream is needed to compile OK
+AC_DEFUN([AX_CHECK_SSTREAM],
+[
+AC_MSG_CHECKING([whether to use included sstream])
+AC_TRY_COMPILE([#include <sstream>], [],
+AC_MSG_RESULT([no]);,
+AC_MSG_RESULT([yes]); OP_CXXFLAGS="$OP_CXXFLAGS -I\${top_srcdir}/include")
+]
+)
+
+dnl AX_CHECK_TYPEDEF(typedef_name, type, action-if-true, action-if-false)
+dnl exec action-if-true if typedef_name is a typedef to type else exec
+dnl action-if-false
+dnl currently work only with type typedef'ed in stddef.h
+AC_DEFUN([AX_CHECK_TYPEDEF], [
+dnl AC_LANG_PUSH(C) not in autoconf 2.13
+AC_LANG_SAVE
+AC_LANG_C
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+
+AC_TRY_COMPILE(
+ [
+ #include <stddef.h>
+ ],
+ [
+ typedef void (*fct1)($1);
+ typedef void (*fct2)($2);
+ fct1 f1 = 0;
+ fct2 f2 = 0;
+ if (f1 == f2) {}
+ ],
+[$3],[$4])
+
+CFLAGS=$SAVE_CFLAGS
+AC_LANG_RESTORE
+])
+
+
+dnl AX_TYPEDEFED_NAME(typedef_name, candidate_list, var_name)
+dnl set var_name to the typedef name of $1 which must be in canditate_list
+dnl else produce a fatal error
+AC_DEFUN([AX_TYPEDEFED_NAME], [
+ AC_MSG_CHECKING([type of $1])
+ for f in $2; do
+ AX_CHECK_TYPEDEF($1, $f, $3="$f", $3="")
+ if test -n "${$3}"; then
+ break
+ fi
+ done
+ if test -n "${$3}"; then
+ AC_MSG_RESULT([${$3}])
+ else
+ AC_MSG_ERROR([not found])
+ fi
+])
+
+dnl find a binary in the path
+AC_DEFUN([QT_FIND_PATH],
+[
+ AC_MSG_CHECKING([for $1])
+ AC_CACHE_VAL(qt_cv_path_$1,
+ [
+ qt_cv_path_$1="NONE"
+ if test -n "$$2"; then
+ qt_cv_path_$1="$$2";
+ else
+ dirs="$3"
+ qt_save_IFS=$IFS
+ IFS=':'
+ for dir in $PATH; do
+ dirs="$dirs $dir"
+ done
+ IFS=$qt_save_IFS
+
+ for dir in $dirs; do
+ if test -x "$dir/$1"; then
+ if test -n "$5"; then
+ evalstr="$dir/$1 $5 2>&1 "
+ if eval $evalstr; then
+ qt_cv_path_$1="$dir/$1"
+ break
+ fi
+ else
+ qt_cv_path_$1="$dir/$1"
+ break
+ fi
+ fi
+ done
+ fi
+ ])
+
+ if test -z "$qt_cv_path_$1" || test "$qt_cv_path_$1" = "NONE"; then
+ AC_MSG_RESULT(not found)
+ $4
+ else
+ AC_MSG_RESULT($qt_cv_path_$1)
+ $2=$qt_cv_path_$1
+ fi
+])
+
+dnl Find the uic compiler on the path or in qt_cv_dir
+AC_DEFUN([QT_FIND_UIC],
+[
+ QT_FIND_PATH(uic, ac_uic, $qt_cv_dir/bin)
+ if test -z "$ac_uic" -a "$FATAL" = 1; then
+ AC_MSG_ERROR([uic binary not found in \$PATH or $qt_cv_dir/bin !])
+ fi
+])
+
+dnl Find the right moc in path/qt_cv_dir
+AC_DEFUN([QT_FIND_MOC],
+[
+ QT_FIND_PATH(moc2, ac_moc2, $qt_cv_dir/bin)
+ QT_FIND_PATH(moc, ac_moc1, $qt_cv_dir/bin)
+
+ if test -n "$ac_moc1" -a -n "$ac_moc2"; then
+ dnl found both. Prefer Qt3's if it exists else moc2
+ $ac_moc1 -v 2>&1 | grep "Qt 3" >/dev/null
+ if test "$?" = 0; then
+ ac_moc=$ac_moc1;
+ else
+ ac_moc=$ac_moc2;
+ fi
+ else
+ if test -n "$ac_moc1"; then
+ ac_moc=$ac_moc1;
+ else
+ ac_moc=$ac_moc2;
+ fi
+ fi
+
+ if test -z "$ac_moc" -a "$FATAL" = 1; then
+ AC_MSG_ERROR([moc binary not found in \$PATH or $qt_cv_dir/bin !])
+ fi
+])
+
+dnl check a particular libname
+AC_DEFUN([QT_TRY_LINK],
+[
+ SAVE_LIBS="$LIBS"
+ LIBS="$LIBS $1"
+ AC_TRY_LINK([
+ #include <qglobal.h>
+ #include <qstring.h>
+ ],
+ [
+ QString s("mangle_failure");
+ #if (QT_VERSION < 221)
+ break_me_(\\\);
+ #endif
+ ],
+ qt_cv_libname=$1,
+ )
+ LIBS="$SAVE_LIBS"
+])
+
+dnl check we can do a compile
+AC_DEFUN([QT_CHECK_COMPILE],
+[
+ AC_MSG_CHECKING([for Qt library name])
+
+ AC_CACHE_VAL(qt_cv_libname,
+ [
+ AC_LANG_CPLUSPLUS
+ SAVE_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
+
+ for libname in -lqt-mt -lqt3 -lqt2 -lqt;
+ do
+ QT_TRY_LINK($libname)
+ if test -n "$qt_cv_libname"; then
+ break;
+ fi
+ done
+
+ CXXFLAGS=$SAVE_CXXFLAGS
+ ])
+
+ if test -z "$qt_cv_libname"; then
+ AC_MSG_RESULT([failed])
+ if test "$FATAL" = 1 ; then
+ AC_MSG_ERROR([Cannot compile a simple Qt executable. Check you have the right \$QTDIR !])
+ fi
+ else
+ AC_MSG_RESULT([$qt_cv_libname])
+ fi
+])
+
+dnl get Qt version we're using
+AC_DEFUN([QT_GET_VERSION],
+[
+ AC_CACHE_CHECK([Qt version],lyx_cv_qtversion,
+ [
+ AC_LANG_CPLUSPLUS
+ SAVE_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $QT_INCLUDES"
+
+ cat > conftest.$ac_ext <<EOF
+#line __oline__ "configure"
+#include "confdefs.h"
+#include <qglobal.h>
+"%%%"QT_VERSION_STR"%%%"
+EOF
+ lyx_cv_qtversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
+ grep '^"%%%"' 2>/dev/null | \
+ sed -e 's/"%%%"//g' -e 's/"//g'`
+ rm -f conftest.$ac_ext
+ CPPFLAGS=$SAVE_CPPFLAGS
+ ])
+
+ QT_VERSION=$lyx_cv_qtversion
+ AC_SUBST(QT_VERSION)
+])
+
+dnl start here
+AC_DEFUN([QT_DO_IT_ALL],
+[
+ dnl Please leave this alone. I use this file in
+ dnl oprofile.
+ FATAL=0
+
+ AC_ARG_WITH(qt-dir, [ --with-qt-dir where the root of Qt is installed ],
+ [ qt_cv_dir=`eval echo "$withval"/` ])
+
+ AC_ARG_WITH(qt-includes, [ --with-qt-includes where the Qt includes are. ],
+ [ qt_cv_includes=`eval echo "$withval"` ])
+
+ AC_ARG_WITH(qt-libraries, [ --with-qt-libraries where the Qt library is installed.],
+ [ qt_cv_libraries=`eval echo "$withval"` ])
+
+ dnl pay attention to $QTDIR unless overridden
+ if test -z "$qt_cv_dir"; then
+ qt_cv_dir=$QTDIR
+ fi
+
+ dnl derive inc/lib if needed
+ if test -n "$qt_cv_dir"; then
+ if test -z "$qt_cv_includes"; then
+ qt_cv_includes=$qt_cv_dir/include
+ fi
+ if test -z "$qt_cv_libraries"; then
+ qt_cv_libraries=$qt_cv_dir/lib
+ fi
+ fi
+
+ dnl flags for compilation
+ QT_INCLUDES=
+ QT_LDFLAGS=
+ if test -n "$qt_cv_includes"; then
+ QT_INCLUDES="-I$qt_cv_includes"
+ fi
+ if test -n "$qt_cv_libraries"; then
+ QT_LDFLAGS="-L$qt_cv_libraries"
+ fi
+ AC_SUBST(QT_INCLUDES)
+ AC_SUBST(QT_LDFLAGS)
+
+ QT_FIND_MOC
+ MOC=$ac_moc
+ AC_SUBST(MOC)
+ QT_FIND_UIC
+ UIC=$ac_uic
+ AC_SUBST(UIC)
+
+ QT_CHECK_COMPILE
+
+ QT_LIB=$qt_cv_libname;
+ AC_SUBST(QT_LIB)
+
+ if test -n "$qt_cv_libname"; then
+ QT_GET_VERSION
+ fi
+])
+
+dnl AX_CXXFLAGS_OPTIONS(var-name, option)
+dnl add option to var-name if $CXX support it.
+AC_DEFUN([AX_CHECK_PRECOMPILED_HEADER], [
+AC_MSG_CHECKING([whether ${CXX} support precompiled header])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+SAVE_CXXFLAGS=$CXXFLAGS
+dnl we consider than if -Winvalid-pch is accepted pch will works ...
+CXXFLAGS=-Winvalid-pch
+dnl but we don't want -Winvalid-pch else compilation will fail due -Werror and
+dnl the fact than some pch will be invalid for the given compilation option
+AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} -include bits/stdc++.h", AC_MSG_RESULT([no]))
+CXXFLAGS=$SAVE_CXXFLAGS
+AC_LANG_RESTORE
+])
+
+dnl AX_CHECK_DOCBOOK
+AC_DEFUN([AX_CHECK_DOCBOOK], [
+# It's just rude to go over the net to build
+XSLTPROC_FLAGS=--nonet
+DOCBOOK_ROOT=
+if test ! -f /etc/xml/catalog; then
+ for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/;
+ do
+ if test -d "$i"; then
+ DOCBOOK_ROOT=$i
+ fi
+ done
+
+ # Last resort - try net
+ if test -z "$DOCBOOK_ROOT"; then
+ XSLTPROC_FLAGS=
+ fi
+else
+ XML_CATALOG=/etc/xml/catalog
+ CAT_ENTRY_START='<!--'
+ CAT_ENTRY_END='-->'
+fi
+
+AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,)
+XSLTPROC_WORKS=no
+if test -n "$XSLTPROC"; then
+ AC_MSG_CHECKING([whether xsltproc works])
+
+ if test -n "$XML_CATALOG"; then
+ DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"
+ else
+ DB_FILE="$DOCBOOK_ROOT/docbook.xsl"
+ fi
+
+ $XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book id="test">
+</book>
+END
+ if test "$?" = 0; then
+ XSLTPROC_WORKS=yes
+ fi
+ AC_MSG_RESULT($XSLTPROC_WORKS)
+fi
+AM_CONDITIONAL(have_xsltproc, test "$XSLTPROC_WORKS" = "yes")
+
+AC_SUBST(XML_CATALOG)
+AC_SUBST(XSLTPROC_FLAGS)
+AC_SUBST(DOCBOOK_ROOT)
+AC_SUBST(CAT_ENTRY_START)
+AC_SUBST(CAT_ENTRY_END)
+])
+
+dnl AX_CFLAGS_OPTIONS(var-name, option)
+dnl add option to var-name if $CC support it.
+AC_DEFUN([AX_CFLAGS_OPTION], [
+AC_MSG_CHECKING([whether ${CC} $2 is understood])
+AC_LANG_SAVE
+AC_LANG_C
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=$2
+AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} $2",AC_MSG_RESULT([no]))
+CFLAGS=$SAVE_CFLAGS
+AC_LANG_RESTORE
+])
+
+
+dnl AX_CXXFLAGS_OPTIONS(var-name, option)
+dnl add option to var-name if $CXX support it.
+AC_DEFUN([AX_CXXFLAGS_OPTION], [
+AC_MSG_CHECKING([whether ${CXX} $2 is understood])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=$2
+AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} $2",AC_MSG_RESULT([no]))
+CXXFLAGS=$SAVE_CXXFLAGS
+AC_LANG_RESTORE
+])
+
+dnl AX_COPY_IF_CHANGE(source, dest)
+dnl copy source to dest if they don't compare equally or if dest doesn't exist
+AC_DEFUN([AX_COPY_IF_CHANGE], [
+if test -r $2; then
+ if cmp $1 $2 > /dev/null; then
+ echo $2 is unchanged
+ else
+ cp -f $1 $2
+ fi
+else
+ cp -f $1 $2
+fi
+])
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/automake-foreign.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/automake-foreign.patch
new file mode 100644
index 000000000..b9bb6c577
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/automake-foreign.patch
@@ -0,0 +1,12 @@
+oprofile doesn't want GNU-levels of automake strictness so tell it to be "foreign".
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/configure.ac b/configure.ac
+index 5740585..cf6c316 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -16 +16 @@ AC_CONFIG_SRCDIR([libop/op_config.h])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/musl.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/musl.patch
new file mode 100644
index 000000000..51db40845
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/musl.patch
@@ -0,0 +1,46 @@
+Fix glibc-isms so that oprofile builds with musl.
+
+Patch taken from openwrt (https://github.com/openwrt-mirror/openwrt/blob/master/package/devel/oprofile/patches/100-musl.patch)
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+--- a/pe_profiling/operf.cpp
++++ b/pe_profiling/operf.cpp
+@@ -857,11 +857,14 @@ static int __delete_old_previous_sample_
+ int tflag __attribute__((unused)),
+ struct FTW *ftwbuf __attribute__((unused)))
+ {
++ int err;
++
+ if (remove(fpath)) {
++ err = errno;
+ perror("sample data removal error");
+- return FTW_STOP;
++ return err;
+ } else {
+- return FTW_CONTINUE;
++ return 0;
+ }
+ }
+
+@@ -896,7 +899,7 @@ static void convert_sample_data(void)
+ return;
+
+ if (!operf_options::append) {
+- int flags = FTW_DEPTH | FTW_ACTIONRETVAL;
++ int flags = FTW_DEPTH;
+ errno = 0;
+ if (nftw(previous_sampledir.c_str(), __delete_old_previous_sample_data, 32, flags) !=0 &&
+ errno != ENOENT) {
+--- a/libop/op_events.c
++++ b/libop/op_events.c
+@@ -83,7 +83,7 @@ static int parse_hex(char const * str)
+ static u64 parse_long_hex(char const * str)
+ {
+ u64 value;
+- if (sscanf(str, "%Lx", &value) != 1)
++ if (sscanf(str, "0x%llx", &value) != 1)
+ parse_error("expected long hexadecimal value");
+
+ fflush(stderr);
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/oprofile-cross-compile-tests.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/oprofile-cross-compile-tests.patch
new file mode 100644
index 000000000..aefa9548e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/oprofile-cross-compile-tests.patch
@@ -0,0 +1,98 @@
+Prevent running check tests on host if cross compiling
+
+This patch enables running the 'make check' tests on the target
+in a cross-compiled environment. If not cross-compiling, then 'make
+ check' builds and executes the tests; no change from this patch.
+In a cross-compiling environment, the make variable CROSS_COMPILE is
+set which bypasses assiging tests to the makekfile variable TESTS.
+Since TESTS is empty, the 'make check' process never tries to run the
+tests on the hosts. On the target, the tests must be run manually.
+
+Also, in the libutil++ tests, a makefile variable SRCDIR is passed into
+the compilation phase, pointing to the runtime location of the test
+'file-manip-tests'. The mechanism used for a host test, based on
+'topdir' doesn't work. Instead, if CROSS_COMPILE is set, the
+makefile takes the path of SRCDIR from the build environment and not
+from an expression based on the host path 'topdir'.
+
+Upstream-Status: Pending
+
+Signed-off-by: Dave Lerner <dave.lerner@windriver.com>
+
+diff --git a/configure.ac b/configure.ac
+index 41ece64..ce5a16f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -392,6 +392,7 @@ AC_ARG_ENABLE(account-check,
+ enable_account_check=$enableval, enable_account_check=yes)
+
+ AM_CONDITIONAL(CHECK_ACCOUNT, test "x$enable_account_check" = "xyes")
++AM_CONDITIONAL(CROSS_COMPILE, test "x$cross_compiling" = "xyes")
+
+ AC_SUBST(OP_CFLAGS)
+ AC_SUBST(OP_CXXFLAGS)
+diff --git a/libdb/tests/Makefile.am b/libdb/tests/Makefile.am
+index 8a69003..d820090 100644
+--- a/libdb/tests/Makefile.am
++++ b/libdb/tests/Makefile.am
+@@ -13,4 +13,6 @@ check_PROGRAMS = db_test
+ db_test_SOURCES = db_test.c
+ db_test_LDADD = ../libodb.a ../../libutil/libutil.a
+
++if ! CROSS_COMPILE
+ TESTS = ${check_PROGRAMS}
++endif
+diff --git a/libop/tests/Makefile.am b/libop/tests/Makefile.am
+index 8a79eb5..6d417c4 100644
+--- a/libop/tests/Makefile.am
++++ b/libop/tests/Makefile.am
+@@ -33,4 +33,6 @@ load_events_files_tests_LDADD = ${COMMON_LIBS}
+ mangle_tests_SOURCES = mangle_tests.c
+ mangle_tests_LDADD = ${COMMON_LIBS}
+
++if ! CROSS_COMPILE
+ TESTS = ${check_PROGRAMS} utf8_checker.sh
++endif
+diff --git a/libregex/tests/Makefile.am b/libregex/tests/Makefile.am
+index 6f19838..1d176f9 100644
+--- a/libregex/tests/Makefile.am
++++ b/libregex/tests/Makefile.am
+@@ -18,4 +18,6 @@ java_test_LDADD = \
+
+ EXTRA_DIST = mangled-name.in
+
++if ! CROSS_COMPILE
+ TESTS = ${check_PROGRAMS}
++endif
+diff --git a/libutil++/tests/Makefile.am b/libutil++/tests/Makefile.am
+index 51af031..a01ea2d 100644
+--- a/libutil++/tests/Makefile.am
++++ b/libutil++/tests/Makefile.am
+@@ -1,7 +1,9 @@
+
+ REALPATH= readlink -f
+
++if ! CROSS_COMPILE
+ SRCDIR := $(shell $(REALPATH) $(topdir)/libutil++/tests/ )
++endif
+
+ AM_CPPFLAGS = \
+ -I ${top_srcdir}/libutil++ -D SRCDIR="\"$(SRCDIR)/\"" @OP_CPPFLAGS@
+@@ -46,4 +48,6 @@ cached_value_tests_LDADD = ${COMMON_LIBS}
+ utility_tests_SOURCES = utility_tests.cpp
+ utility_tests_LDADD = ${COMMON_LIBS}
+
++if ! CROSS_COMPILE
+ TESTS = ${check_PROGRAMS}
++endif
+diff --git a/libutil/tests/Makefile.am b/libutil/tests/Makefile.am
+index dfcd6ec..e8831b5 100644
+--- a/libutil/tests/Makefile.am
++++ b/libutil/tests/Makefile.am
+@@ -12,4 +12,6 @@ file_tests_LDADD = ../libutil.a
+ string_tests_SOURCES = string_tests.c
+ string_tests_LDADD = ../libutil.a
+
++if ! CROSS_COMPILE
+ TESTS = ${check_PROGRAMS}
++endif
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/root-home-dir.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/root-home-dir.patch
new file mode 100644
index 000000000..3eaf6a794
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/root-home-dir.patch
@@ -0,0 +1,44 @@
+oprofile: Determine the root home directory dynamically
+
+This commit detects the root home directory dynamically with changes to
+the oprofile gui app source.
+
+The commit replaces an earlier fix that detected and adjusted a
+'non-standard' root home directory at build time. The advantage of this
+patch is that the oprofile tools are adjusted to the current run-time
+path to ~root, not the build time path.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Dave Lerner <dave.lerner@windriver.com>
+
+Index: oprofile-1.0.0/doc/oprofile.html
+===================================================================
+--- oprofile-1.0.0.orig/doc/oprofile.html 2014-11-03 17:55:31.511034857 +0000
++++ oprofile-1.0.0/doc/oprofile.html 2014-11-03 17:57:26.415037988 +0000
+@@ -1563,8 +1563,8 @@
+ <span class="emphasis"><em>must</em></span> stop it in a controlled manner in order to process
+ the profile data it has collected. Use <code class="code">kill -SIGINT &lt;operf-PID&gt;</code>
+ for this purpose. It is recommended that when running <span class="command"><strong>operf</strong></span>
+- with this option, your current working directory should be <code class="filename">/root</code> or a subdirectory
+- of <code class="filename">/root</code> to avoid storing sample data files in locations accessible by regular users.
++ with this option, your current working directory should be <code class="filename">~root</code> or a subdirectory
++ of <code class="filename">~root</code> to avoid storing sample data files in locations accessible by regular users.
+ </p>
+ </dd>
+ <dt>
+Index: oprofile-1.0.0/doc/oprofile.xml
+===================================================================
+--- oprofile-1.0.0.orig/doc/oprofile.xml 2014-11-03 17:55:31.515034857 +0000
++++ oprofile-1.0.0/doc/oprofile.xml 2014-11-03 17:58:03.719039005 +0000
+@@ -654,8 +654,8 @@
+ <emphasis>must</emphasis> stop it in a controlled manner in order to process
+ the profile data it has collected. Use <code>kill -SIGINT &lt;operf-PID&gt;</code>
+ for this purpose. It is recommended that when running <command>operf</command>
+- with this option, your current working directory should be <filename>/root</filename> or a subdirectory
+- of <filename>/root</filename> to avoid storing sample data files in locations accessible by regular users.
++ with this option, your current working directory should be <filename>~root</filename> or a subdirectory
++ of <filename>~root</filename> to avoid storing sample data files in locations accessible by regular users.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/run-ptest b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/run-ptest
new file mode 100644
index 000000000..4814be652
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/run-ptest
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+saved_dir=$PWD
+for dir in */tests ; do
+ cd $dir
+ for atest in * ; do
+ if [ \( -x $atest \) -a \( -f $atest \) ] ; then
+ ./$atest > ${atest}.stdout 2> ${atest}.stderr
+ if [ $? = 0 ] ; then
+ echo "PASS: $dir $atest"
+ rm ${atest}.stdout ${atest}.stderr
+ else
+ echo "FAIL: ${dir}/${atest}"
+ fi
+ fi
+ done
+ cd $saved_dir
+done
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.1.0.bb b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.1.0.bb
new file mode 100644
index 000000000..92a94ad0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.1.0.bb
@@ -0,0 +1,10 @@
+require oprofile.inc
+
+DEPENDS += "virtual/kernel"
+DEPENDS_append_powerpc64 = " libpfm4"
+
+SRC_URI[md5sum] = "248c4c069f9476f427fa7195563f9867"
+SRC_URI[sha256sum] = "cf759a6de1a6033d5dfc93bda129a9f2e128aecc4238cc657feb0801d1b0366c"
+
+S = "${WORKDIR}/oprofile-${PV}"
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss/libio.patch b/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss/libio.patch
new file mode 100644
index 000000000..5299945e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss/libio.patch
@@ -0,0 +1,43 @@
+Index: alsa-oss-1.0.28/alsa/stdioemu.c
+===================================================================
+--- alsa-oss-1.0.28.orig/alsa/stdioemu.c
++++ alsa-oss-1.0.28/alsa/stdioemu.c
+@@ -37,7 +37,9 @@
+ #endif
+
+ #include <stdio.h>
++#ifdef HAVE_LIBIO_H
+ #include <libio.h>
++#endif
+
+ struct fd_cookie {
+ int fd;
+@@ -99,7 +101,11 @@ static FILE *fake_fopen(const char *path
+
+ if (open_mode && fdc->fd > 0) {
+ result = fopencookie (fdc,"w", fns);
++#ifdef HAVE_FILENO
+ result->_fileno = fdc->fd; /* ugly patchy slimy kludgy hack */
++#else
++ result->__filedes = fdc->fd;
++#endif
+ }
+ return result;
+ }
+Index: alsa-oss-1.0.28/configure.ac
+===================================================================
+--- alsa-oss-1.0.28.orig/configure.ac
++++ alsa-oss-1.0.28/configure.ac
+@@ -35,6 +35,12 @@ if test "$with_aoss" = "yes"; then
+ LIBS="$OLD_LIBS"
+ fi
+
++AC_CHECK_HEADERS_ONCE([libio.h])
++
++AC_CHECK_MEMBER([struct _IO_FILE._fileno],
++ [AC_DEFINE([HAVE_FILENO], [1],[Define if _fileno exists.])],
++ [],[])
++
+ AC_OUTPUT(Makefile alsa/Makefile alsa/aoss alsa/aoss.old \
+ oss-redir/Makefile test/Makefile \
+ alsa/testaoss test/testaoss)
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss_1.0.28.bb b/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss_1.0.28.bb
new file mode 100644
index 000000000..0c4a9f545
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/alsa/alsa-oss_1.0.28.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Alsa OSS Compatibility Package"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+DEPENDS = "alsa-lib"
+
+SRC_URI = "ftp://ftp.alsa-project.org/pub/oss-lib/alsa-oss-${PV}.tar.bz2 \
+ file://libio.patch \
+"
+SRC_URI[md5sum] = "91f57e8cee1ad4cc956caa8b62ac5d43"
+SRC_URI[sha256sum] = "3ae62caa88a0bc7b30ed836dcb794dc6ef4d3650439e2260db54cace7d5c6ad5"
+
+inherit autotools
+
+LEAD_SONAME = "libaoss.so.0"
+
+do_configure_prepend () {
+ touch NEWS README AUTHORS ChangeLog
+ sed -i "s/libaoss.so/${LEAD_SONAME}/" ${S}/alsa/aoss.in
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/audiofile/audiofile_0.3.6.bb b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/audiofile_0.3.6.bb
new file mode 100644
index 000000000..f4e19e4ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/audiofile_0.3.6.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "The Audio File Library provides a uniform and elegant \
+API for accessing a variety of audio file formats, such as AIFF/AIFF-C, \
+WAVE, NeXT/Sun .snd/.au, Berkeley/IRCAM/CARL Sound File, Audio Visual \
+Research, Amiga IFF/8SVX, and NIST SPHERE."
+HOMEPAGE = "http://www.68k.org/~michael/audiofile/"
+SECTION = "libs"
+LICENSE = "LGPLv2 & GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = " \
+ ${GNOME_MIRROR}/audiofile/0.3/${BP}.tar.xz \
+ file://0001-fix-negative-shift-constants.patch \
+ file://0002-fix-build-on-gcc6.patch \
+ file://0003-fix-CVE-2015-7747.patch \
+"
+SRC_URI[md5sum] = "235dde14742317328f0109e9866a8008"
+SRC_URI[sha256sum] = "ea2449ad3f201ec590d811db9da6d02ffc5e87a677d06b92ab15363d8cb59782"
+
+inherit autotools lib_package pkgconfig
+
+DEPENDS = " \
+ asciidoc-native \
+ alsa-lib \
+ libogg \
+ flac \
+"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0001-fix-negative-shift-constants.patch b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0001-fix-negative-shift-constants.patch
new file mode 100644
index 000000000..ecb310805
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0001-fix-negative-shift-constants.patch
@@ -0,0 +1,77 @@
+From 99127676dba8f5d607757428bc14a6b7ab52d5ed Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 16 Dec 2016 12:42:06 +0100
+Subject: [PATCH 1/3] fix negative shift constants
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Stolen from [1]
+
+[1] http://pkgs.fedoraproject.org/cgit/rpms/audiofile.git/tree/audiofile-0.3.6-left-shift-neg.patch
+
+Upstrem-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ libaudiofile/modules/SimpleModule.h | 2 +-
+ test/FloatToInt.cpp | 2 +-
+ test/IntToFloat.cpp | 2 +-
+ test/Sign.cpp | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libaudiofile/modules/SimpleModule.h b/libaudiofile/modules/SimpleModule.h
+index 03c6c69..e4cc138 100644
+--- a/libaudiofile/modules/SimpleModule.h
++++ b/libaudiofile/modules/SimpleModule.h
+@@ -123,7 +123,7 @@ struct signConverter
+ typedef typename IntTypes<Format>::UnsignedType UnsignedType;
+
+ static const int kScaleBits = (Format + 1) * CHAR_BIT - 1;
+- static const int kMinSignedValue = -1 << kScaleBits;
++ static const int kMinSignedValue = 0-(1U<<kScaleBits);
+
+ struct signedToUnsigned : public std::unary_function<SignedType, UnsignedType>
+ {
+diff --git a/test/FloatToInt.cpp b/test/FloatToInt.cpp
+index 0d179a8..bf491b2 100644
+--- a/test/FloatToInt.cpp
++++ b/test/FloatToInt.cpp
+@@ -115,7 +115,7 @@ TEST_F(FloatToIntTest, Int16)
+ EXPECT_EQ(readData[i], expectedData[i]);
+ }
+
+-static const int32_t kMinInt24 = -1<<23;
++static const int32_t kMinInt24 = 0-(1U<<23);
+ static const int32_t kMaxInt24 = (1<<23) - 1;
+
+ TEST_F(FloatToIntTest, Int24)
+diff --git a/test/IntToFloat.cpp b/test/IntToFloat.cpp
+index b716635..1d91b58 100644
+--- a/test/IntToFloat.cpp
++++ b/test/IntToFloat.cpp
+@@ -117,7 +117,7 @@ TEST_F(IntToFloatTest, Int16)
+ EXPECT_EQ(readData[i], expectedData[i]);
+ }
+
+-static const int32_t kMinInt24 = -1<<23;
++static const int32_t kMinInt24 = 0-(1U<<23);
+ static const int32_t kMaxInt24 = (1<<23) - 1;
+
+ TEST_F(IntToFloatTest, Int24)
+diff --git a/test/Sign.cpp b/test/Sign.cpp
+index 7275399..c339514 100644
+--- a/test/Sign.cpp
++++ b/test/Sign.cpp
+@@ -116,7 +116,7 @@ TEST_F(SignConversionTest, Int16)
+ EXPECT_EQ(readData[i], expectedData[i]);
+ }
+
+-static const int32_t kMinInt24 = -1<<23;
++static const int32_t kMinInt24 = 0-(1U<<23);
+ static const int32_t kMaxInt24 = (1<<23) - 1;
+ static const uint32_t kMaxUInt24 = (1<<24) - 1;
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0002-fix-build-on-gcc6.patch b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0002-fix-build-on-gcc6.patch
new file mode 100644
index 000000000..2c66cf4d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0002-fix-build-on-gcc6.patch
@@ -0,0 +1,75 @@
+From a74c1e9c583375b9e55c29a36442485089e4b7f9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 16 Dec 2016 12:42:06 +0100
+Subject: [PATCH 2/3] fix build on gcc6
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Stolen from [1]
+
+[1] http://pkgs.fedoraproject.org/cgit/rpms/audiofile.git/tree/audiofile-0.3.6-narrowing.patch
+
+Upstrem-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ test/NeXT.cpp | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/test/NeXT.cpp b/test/NeXT.cpp
+index 7e39850..a37cea1 100644
+--- a/test/NeXT.cpp
++++ b/test/NeXT.cpp
+@@ -37,13 +37,13 @@
+
+ #include "TestUtilities.h"
+
+-const char kDataUnspecifiedLength[] =
++const signed char kDataUnspecifiedLength[] =
+ {
+ '.', 's', 'n', 'd',
+ 0, 0, 0, 24, // offset of 24 bytes
+- 0xff, 0xff, 0xff, 0xff, // unspecified length
++ -1, -1, -1, -1, // unspecified length
+ 0, 0, 0, 3, // 16-bit linear
+- 0, 0, 172, 68, // 44100 Hz
++ 0, 0, -84, 68, // 44100 Hz (0xAC44)
+ 0, 0, 0, 1, // 1 channel
+ 0, 1,
+ 0, 1,
+@@ -57,13 +57,13 @@ const char kDataUnspecifiedLength[] =
+ 0, 55
+ };
+
+-const char kDataTruncated[] =
++const signed char kDataTruncated[] =
+ {
+ '.', 's', 'n', 'd',
+ 0, 0, 0, 24, // offset of 24 bytes
+ 0, 0, 0, 20, // length of 20 bytes
+ 0, 0, 0, 3, // 16-bit linear
+- 0, 0, 172, 68, // 44100 Hz
++ 0, 0, -84, 68, // 44100 Hz (0xAC44)
+ 0, 0, 0, 1, // 1 channel
+ 0, 1,
+ 0, 1,
+@@ -152,13 +152,13 @@ TEST(NeXT, Truncated)
+ ASSERT_EQ(::unlink(testFileName.c_str()), 0);
+ }
+
+-const char kDataZeroChannels[] =
++const signed char kDataZeroChannels[] =
+ {
+ '.', 's', 'n', 'd',
+ 0, 0, 0, 24, // offset of 24 bytes
+ 0, 0, 0, 2, // 2 bytes
+ 0, 0, 0, 3, // 16-bit linear
+- 0, 0, 172, 68, // 44100 Hz
++ 0, 0, -84, 68, // 44100 Hz (0xAC44)
+ 0, 0, 0, 0, // 0 channels
+ 0, 1
+ };
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0003-fix-CVE-2015-7747.patch b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0003-fix-CVE-2015-7747.patch
new file mode 100644
index 000000000..895e320ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/audiofile/files/0003-fix-CVE-2015-7747.patch
@@ -0,0 +1,35 @@
+From 746c38105ce4fa1b609995d3386ea6b8b1f2f7bd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 16 Dec 2016 12:50:51 +0100
+Subject: [PATCH 3/3] fix CVE-2015-7747
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Stolen from [1]
+
+[1] http://pkgs.fedoraproject.org/cgit/rpms/audiofile.git/tree/audiofile-0.3.6-CVE-2015-7747.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ libaudiofile/modules/ModuleState.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libaudiofile/modules/ModuleState.cpp b/libaudiofile/modules/ModuleState.cpp
+index f76c495..0c29d7a 100644
+--- a/libaudiofile/modules/ModuleState.cpp
++++ b/libaudiofile/modules/ModuleState.cpp
+@@ -402,7 +402,7 @@ status ModuleState::arrange(AFfilehandle file, Track *track)
+ addModule(new Transform(outfc, in.pcm, out.pcm));
+
+ if (in.channelCount != out.channelCount)
+- addModule(new ApplyChannelMatrix(infc, isReading,
++ addModule(new ApplyChannelMatrix(outfc, isReading,
+ in.channelCount, out.channelCount,
+ in.pcm.minClip, in.pcm.maxClip,
+ track->channelMatrix));
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/cdrkit_1.1.11.bb b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/cdrkit_1.1.11.bb
new file mode 100644
index 000000000..3b10e978e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/cdrkit_1.1.11.bb
@@ -0,0 +1,24 @@
+SUMMARY = "CD/DVD command line tools"
+HOMEPAGE = "http://cdrkit.org/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b30d3b2750b668133fc17b401e1b98f8"
+
+# While writing download from cdrkit.org was broken so get sources from debian
+SRC_URI = "${DEBIAN_MIRROR}/main/c/${BPN}/${BPN}_${PV}.orig.tar.gz \
+ file://0001-do-not-create-a-run-test-to-determine-order-of-bitfi.patch \
+ file://0001-genisoimage-Fix-fprintf-format-errors.patch \
+ file://0001-define-__THROW-to-avoid-build-issue-with-musl.patch \
+ file://0002-Do-not-use-rcmd-on-build-with-musl.patch \
+ "
+SRC_URI[md5sum] = "efe08e2f3ca478486037b053acd512e9"
+SRC_URI[sha256sum] = "d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da"
+
+inherit cmake
+
+DEPENDS = "libcap file bzip2"
+RDEPENDS_${PN} = "perl"
+
+do_install_append() {
+ ln -sf ${bindir}/genisoimage ${D}${bindir}/mkisofs
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-define-__THROW-to-avoid-build-issue-with-musl.patch b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-define-__THROW-to-avoid-build-issue-with-musl.patch
new file mode 100644
index 000000000..b3beb069e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-define-__THROW-to-avoid-build-issue-with-musl.patch
@@ -0,0 +1,47 @@
+From 7c3036609494296f7c29413bf3acba829c81f62c Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@openwide.fr>
+Date: Sat, 8 Aug 2015 22:58:57 +0200
+Subject: [PATCH 1/2] define __THROW to avoid build issue with musl
+
+Fixes:
+http://autobuild.buildroot.net/results/d27/d2781e70b04a207e2e9397d888032294c7285034/build-end.log
+
+Signed-off-by: Romain Naour <romain.naour@openwide.fr>
+---
+ genisoimage/sha256.h | 4 ++++
+ genisoimage/sha512.h | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/genisoimage/sha256.h b/genisoimage/sha256.h
+index e7f4cb9..bcae7ef 100644
+--- a/genisoimage/sha256.h
++++ b/genisoimage/sha256.h
+@@ -29,6 +29,10 @@
+ #include <stdint.h>
+ #include <stdio.h>
+
++/* define __THROW to avoid build issue when it's not available from the libc */
++#ifndef __THROW
++# define __THROW
++#endif
+
+ /* Structure to save state of computation between the single steps. */
+ struct sha256_ctx
+diff --git a/genisoimage/sha512.h b/genisoimage/sha512.h
+index 7298355..8cee8b0 100644
+--- a/genisoimage/sha512.h
++++ b/genisoimage/sha512.h
+@@ -29,6 +29,10 @@
+ #include <stdint.h>
+ #include <stdio.h>
+
++/* define __THROW to avoid build issue when it's not available from the libc */
++#ifndef __THROW
++# define __THROW
++#endif
+
+ /* Structure to save state of computation between the single steps. */
+ struct sha512_ctx
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-do-not-create-a-run-test-to-determine-order-of-bitfi.patch b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-do-not-create-a-run-test-to-determine-order-of-bitfi.patch
new file mode 100644
index 000000000..c9725cb06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-do-not-create-a-run-test-to-determine-order-of-bitfi.patch
@@ -0,0 +1,53 @@
+From a702cd1bb5eba5a05d1098862b5b863a3f6dd558 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Thu, 10 Sep 2015 09:39:13 +0200
+Subject: [PATCH] do not create a run test to determine order of bitfields
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+taken from [1]
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+[1] http://cgit.openembedded.org/openembedded/tree/recipes/cdrkit/cdrkit/xconfig.patch
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ include/CMakeLists.txt | 2 --
+ include/xconfig.h.in | 6 +++++-
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
+index 99a69fd..e5ba8a7 100644
+--- a/include/CMakeLists.txt
++++ b/include/CMakeLists.txt
+@@ -35,8 +35,6 @@ endif(VA_LIST_IS_ARRAY)
+ INCLUDE(TestBigEndian)
+ TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+
+-TRY_RUN(BITFIELDS_HTOL TEST_DUMMY ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/test_BITFIELDS_HTOL.c)
+-
+ INCLUDE(CheckIncludeFiles)
+
+ #SET(CMAKE_REQUIRED_INCLUDES "/usr/include;/usr/local/include")
+diff --git a/include/xconfig.h.in b/include/xconfig.h.in
+index c130600..476c00b 100644
+--- a/include/xconfig.h.in
++++ b/include/xconfig.h.in
+@@ -233,7 +233,11 @@
+ /* If using network byte order */
+ #cmakedefine WORDS_BIGENDIAN
+ /* If high bits come first in structures */
+-#cmakedefine BITFIELDS_HTOL
++#ifdef WORDS_BIGENDIAN
++#define BITFIELDS_HTOL
++#else
++#define BITFIELDS_LTOH
++#endif
+ #define HAVE_C_BIGENDIAN /* Flag that WORDS_BIGENDIAN test was done */
+ #define HAVE_C_BITFIELDS /* Flag that BITFIELDS_HTOL test was done */
+
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-genisoimage-Fix-fprintf-format-errors.patch b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-genisoimage-Fix-fprintf-format-errors.patch
new file mode 100644
index 000000000..f52f71b63
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0001-genisoimage-Fix-fprintf-format-errors.patch
@@ -0,0 +1,49 @@
+From 8547f23c4416ed98f585c53c62e7d8afd8edab36 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 21:05:31 -0700
+Subject: [PATCH] genisoimage: Fix fprintf format errors
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ genisoimage/genisoimage.c | 4 ++--
+ genisoimage/tree.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/genisoimage/genisoimage.c b/genisoimage/genisoimage.c
+index 46f0cb7..9089081 100644
+--- a/genisoimage/genisoimage.c
++++ b/genisoimage/genisoimage.c
+@@ -3406,7 +3406,7 @@ if (check_session == 0)
+ if (goof) {
+ fprintf(stderr, "ISO9660/Rock Ridge tree sort failed.\n");
+ if(merge_warn_msg)
+- fprintf(stderr, merge_warn_msg);
++ fprintf(stderr, "%s", merge_warn_msg);
+ exit(1);
+ }
+ #ifdef UDF
+@@ -3419,7 +3419,7 @@ if (check_session == 0)
+ if (goof) {
+ fprintf(stderr, "Joliet tree sort failed. The -joliet-long switch may help you.\n");
+ if(merge_warn_msg)
+- fprintf(stderr, merge_warn_msg);
++ fprintf(stderr, "%s", merge_warn_msg);
+ exit(1);
+ }
+ /*
+diff --git a/genisoimage/tree.c b/genisoimage/tree.c
+index 7805888..8412cc3 100644
+--- a/genisoimage/tree.c
++++ b/genisoimage/tree.c
+@@ -647,7 +647,7 @@ got_valid_name:
+ fprintf(stderr, "Unable to sort directory %s\n",
+ this_dir->whole_name);
+ if(merge_warn_msg)
+- fprintf(stderr, merge_warn_msg);
++ fprintf(stderr, "%s", merge_warn_msg);
+ exit(1);
+ }
+ /*
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0002-Do-not-use-rcmd-on-build-with-musl.patch b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0002-Do-not-use-rcmd-on-build-with-musl.patch
new file mode 100644
index 000000000..547a21c67
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/cdrkit/files/0002-Do-not-use-rcmd-on-build-with-musl.patch
@@ -0,0 +1,31 @@
+From 510838b2c96a9b097b3ee2694cba1c3623b0bac7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 21 Sep 2017 22:38:05 -0700
+Subject: [PATCH 2/2] Do not use rcmd on build with musl
+
+cdrkit unconditionally enables code using rcmd(3), which isn't available
+on musl.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ include/xconfig.h.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/include/xconfig.h.in b/include/xconfig.h.in
+index 476c00b..6b4b298 100644
+--- a/include/xconfig.h.in
++++ b/include/xconfig.h.in
+@@ -186,8 +186,9 @@
+ * Instead use the tests AC_SMALL_FSEEKO/AC_SMALL/STELLO and make sure
+ * they are placed before the large file tests.
+ */
+-
++#ifdef __GLIBC__
+ #define HAVE_RCMD 1 /* rcmd() is present in libc/libsocket */
++#endif
+ #define HAVE_SOCKET 1 /* socket() is present in libc/libsocket */
+ #define HAVE_SOCKETPAIR 1 /* socketpair() is present in libc/libsocket */
+ #define HAVE_GETSERVBYNAME 1 /* getservbyname() is present in libc/libsocket */
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0001-audio_alsa09.c-alsa-drain-fix.patch b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0001-audio_alsa09.c-alsa-drain-fix.patch
new file mode 100644
index 000000000..130f3c229
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0001-audio_alsa09.c-alsa-drain-fix.patch
@@ -0,0 +1,24 @@
+From 945df2da87a412758ceab4ac5711abbb269a47c1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 23:09:51 -0700
+Subject: [PATCH] audio_alsa09.c: alsa drain fix
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ audio_alsa09.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/audio_alsa09.c b/audio_alsa09.c
+index 534e3db..d9450e6 100644
+--- a/audio_alsa09.c
++++ b/audio_alsa09.c
+@@ -506,7 +506,7 @@ void esd_audio_flush(void)
+ }
+
+ if (alsa_playback_handle != NULL)
+- snd_pcm_drain( alsa_playback_handle );
++ snd_pcm_drop( alsa_playback_handle );
+
+ if (alsadbg)
+ print_state();
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0002-Undefine-open64-and-fopen64.patch b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0002-Undefine-open64-and-fopen64.patch
new file mode 100644
index 000000000..10a6ba03a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0002-Undefine-open64-and-fopen64.patch
@@ -0,0 +1,33 @@
+From e218d5a0a545ebb9623d62da5cfca478f9c90fce Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 23:11:31 -0700
+Subject: [PATCH] Undefine open64 and fopen64
+
+Since the signatures do not match with libc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ esddsp.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/esddsp.c b/esddsp.c
+index d3c6ea9..17b5949 100644
+--- a/esddsp.c
++++ b/esddsp.c
+@@ -290,6 +290,7 @@ open (const char *pathname, int flags, ...)
+ return open_wrapper(func, pathname, flags, mode);
+ }
+
++#undef open64
+ int
+ open64 (const char *pathname, int flags, ...)
+ {
+@@ -374,6 +375,7 @@ fopen (const char *path, const char *mode)
+ return fopen_wrapper(func, path, mode);
+ }
+
++#undef fopen64
+ FILE *
+ fopen64 (const char *path, const char *mode)
+ {
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0003-Use-I-path-in-configure.patch b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0003-Use-I-path-in-configure.patch
new file mode 100644
index 000000000..83365b4e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/0003-Use-I-path-in-configure.patch
@@ -0,0 +1,36 @@
+From 89c62db54716d514e639f9e1bfd3c1f7d82641dd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 23:12:36 -0700
+Subject: [PATCH] Use -I=<path> in configure
+
+This helps to use proper sysroot in
+cross build environment
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5645dce..d374cda 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -208,7 +208,7 @@ if test "x$enable_local_sound" = "xyes"; then
+ AC_CHECK_HEADERS(CoreAudio/CoreAudio.h)
+ # mme_api.h directly includes other files from the mme subdir
+ xCPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -I/usr/include/mme"
++ CPPFLAGS="$CPPFLAGS -I=/usr/include/mme"
+ AC_CHECK_HEADERS(mme/mme_api.h)
+ CPPFLAGS="$xCPPFLAGS"
+ AM_PATH_ARTS(, HAVE_ARTS=yes, HAVE_ARTS=no)
+@@ -269,7 +269,7 @@ if test "x$enable_local_sound" = "xyes"; then
+ osf*)
+ found_sound=yes
+ AC_DEFINE(DRIVER_OSF, 1, [Defined if OSF backend is enabled])
+- CPPFLAGS="$CPPFLAGS -I/usr/include/mme"
++ CPPFLAGS="$CPPFLAGS -I=/usr/include/mme"
+ SOUND_LIBS=-lmme
+ esac
+ fi
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/no-docs.patch b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/no-docs.patch
new file mode 100644
index 000000000..8a546e6db
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound/no-docs.patch
@@ -0,0 +1,19 @@
+From bfcaa9bdc70440db96f10afc0c2a792870f75acb Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 3 Jun 2011 19:39:02 +0200
+
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 08c4c94..ede9d26 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,5 +1,5 @@
+
+-SUBDIRS = docs
++SUBDIRS =
+
+ ACLOCAL_AMFLAGS = -I m4
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/esound/esound_0.2.41.bb b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound_0.2.41.bb
new file mode 100644
index 000000000..0ddf94f2d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/esound/esound_0.2.41.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Enlightened Sound Daemon"
+SECTION = "gpe/base"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605"
+DEPENDS = "audiofile"
+
+inherit gnome
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/esound/0.2/${P}.tar.bz2;name=archive \
+ file://no-docs.patch \
+ file://0001-audio_alsa09.c-alsa-drain-fix.patch \
+ file://0002-Undefine-open64-and-fopen64.patch \
+ file://0003-Use-I-path-in-configure.patch \
+ "
+SRC_URI[archive.md5sum] = "8d9aad3d94d15e0d59ba9dc0ea990c6c"
+SRC_URI[archive.sha256sum] = "5eb5dd29a64b3462a29a5b20652aba7aa926742cef43577bf0796b787ca34911"
+
+EXTRA_OECONF += " \
+ --disable-arts \
+ --disable-artstest \
+"
+EXTRA_OECONF_remove = "--disable-schemas-install"
+
+CFLAGS += "-lm"
+
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[libwrap] = "--with-libwrap,--without-libwrap,tcp-wrappers,"
+PACKAGECONFIG[alsa] = "--enable-alsa --disable-oss,--disable-alsa,alsa-lib,"
+
+PACKAGECONFIG ??= "libwrap alsa \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGES =+ "esddsp esd esd-utils"
+
+FILES_esddsp = "${bindir}/esddsp ${libdir}/libesddsp.so.*"
+FILES_esd = "${bindir}/esd"
+FILES_esd-utils = "${bindir}/*"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/faad2/faad2_2.7.bb b/meta-openembedded/meta-oe/recipes-multimedia/faad2/faad2_2.7.bb
new file mode 100644
index 000000000..63e590c9e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/faad2/faad2_2.7.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Library for reading some sort of media format"
+SECTION = "libs"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=381c8cbe277a7bc1ee2ae6083a04c958"
+
+PR = "r1"
+
+inherit autotools
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/faac/faad2-src/faad2-${PV}/${BP}.tar.bz2;name=faad2 \
+"
+
+SRC_URI[faad2.md5sum] = "4c332fa23febc0e4648064685a3d4332"
+SRC_URI[faad2.sha256sum] = "14561b5d6bc457e825bfd3921ae50a6648f377a9396eaf16d4b057b39a3f63b5"
+
+PACKAGES =+ "libfaad libfaad-dev libmp4ff libmp4ff-dev"
+
+FILES_${PN} = "${bindir}/faad"
+
+FILES_libfaad = "${libdir}/libfaad.so.*"
+FILES_libfaad-dev = "${libdir}/libfaad.so ${libdir}/libfaad.la ${includedir}/faad.h"
+FILES_libfaad-staticdev = "${libdir}/libfaad.a"
+
+FILES_libmp4ff = "${libdir}/libmp4ff.so.*"
+FILES_libmp4ff-dev = "${libdir}/libmp4ff.so ${libdir}/libmp4ff.la ${includedir}/mp4ff.h"
+FILES_libmp4ff-staticdev = "${libdir}/libmp4ff.a"
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib/acdefine.patch b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib/acdefine.patch
new file mode 100644
index 000000000..09edecc96
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib/acdefine.patch
@@ -0,0 +1,42 @@
+Add a description to the AC_DEFINE statements so that it appears in config.h and silences a fatal warning.
+
+Upstream-Status:Pending
+Signed-off-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com>
+---
+ configure.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index abfe4cd..ce0d380 100644
+--- a/configure.in
++++ b/configure.in
+@@ -168,7 +168,7 @@ if test $has_iconv = 1; then
+ iconv_oldstyle=1, iconv_oldstyle=0)
+ if test $iconv_oldstyle = 1; then
+ AC_MSG_RESULT(const char **)
+- AC_DEFINE(ID3LIB_ICONV_OLDSTYLE)
++ AC_DEFINE(ID3LIB_ICONV_OLDSTYLE,[1],[Old iconv prototype definition in iconv.h])
+ #we'll check out the need of
+ #typecast in the call of iconv_open
+ AC_MSG_CHECKING(whether to typecast in iconv)
+@@ -184,7 +184,7 @@ if test $has_iconv = 1; then
+ iconv_cast=0, iconv_cast=1)
+ if test $iconv_cast = 1; then
+ AC_MSG_RESULT(yes)
+- AC_DEFINE(ID3LIB_ICONV_CAST_OK)
++ AC_DEFINE(ID3LIB_ICONV_CAST_OK,[1],[Accepting const char ** in iconv prototype])
+ else
+ AC_MSG_RESULT(no)
+ fi
+@@ -206,7 +206,7 @@ if test $has_iconv = 1; then
+ iconv_cast=0, iconv_cast=1)
+ if test $iconv_cast = 1; then
+ AC_MSG_RESULT(yes)
+- AC_DEFINE(ID3LIB_ICONV_CAST_OK)
++ AC_DEFINE(ID3LIB_ICONV_CAST_OK,[1],[Accepting const char ** in iconv prototype])
+ else
+ AC_MSG_RESULT(no)
+ fi
+--
+2.0.0
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
new file mode 100644
index 000000000..fc80cc0ac
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Library for interacting with ID3 tags"
+SECTION = "libs/multimedia"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+DEPENDS = "zlib"
+
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/id3lib/id3lib-${PV}.tar.gz;name=archive \
+ http://ftp.de.debian.org/debian/pool/main/i/id3lib3.8.3/id3lib3.8.3_3.8.3-7.2.diff.gz;name=patch \
+ file://acdefine.patch \
+"
+SRC_URI[archive.md5sum] = "19f27ddd2dda4b2d26a559a4f0f402a7"
+SRC_URI[archive.sha256sum] = "2749cc3c0cd7280b299518b1ddf5a5bcfe2d1100614519b68702230e26c7d079"
+SRC_URI[patch.md5sum] = "805c0320a2efb21c40ce06fa13cd7c4b"
+SRC_URI[patch.sha256sum] = "9f03b59ccc8826a5be55a3dcde2f889067d58bdc72bf846416a198c9b933704c"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0001-wscript-add-pthread-library-dependency-to-fix-linkin.patch b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0001-wscript-add-pthread-library-dependency-to-fix-linkin.patch
new file mode 100644
index 000000000..d17d311bd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0001-wscript-add-pthread-library-dependency-to-fix-linkin.patch
@@ -0,0 +1,43 @@
+From 488dc9b00239976caac6bd9ed76b38d9d1659dd9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 4 Oct 2016 23:44:49 +0200
+Subject: [PATCH] wscript: add pthread library dependency to fix linking
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Stolen from [1]
+
+[1] http://pkgs.fedoraproject.org/cgit/rpms/a2jmidid.git/tree/a2jmidid-linking.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ wscript | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/wscript b/wscript
+index 664625b..66a532a 100644
+--- a/wscript
++++ b/wscript
+@@ -67,6 +67,7 @@ def configure(conf):
+ conf.env['DBUS_ENABLED'] = False
+
+ conf.env['LIB_DL'] = ['dl']
++ conf.env['LIB_PTHREAD'] = ['pthread']
+
+ #conf.check_header('expat.h', mandatory=True)
+ #conf.env['LIB_EXPAT'] = ['expat']
+@@ -152,7 +153,7 @@ def build(bld):
+
+ prog.includes = '.' # make waf dependency tracking work
+ prog.target = 'a2jmidid'
+- prog.uselib = 'ALSA JACK DL'
++ prog.uselib = 'ALSA JACK DL PTHREAD'
+ if bld.env()['DBUS_ENABLED']:
+ prog.uselib += " DBUS-1"
+ prog = bld.create_obj('cc', 'program')
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0002-aarch64.patch b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0002-aarch64.patch
new file mode 100644
index 000000000..b344f5427
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid/0002-aarch64.patch
@@ -0,0 +1,31 @@
+Consider compiler define for aarch64
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status:Pending
+
+Index: a2jmidid-8/sigsegv.c
+===================================================================
+--- a2jmidid-8.orig/sigsegv.c
++++ a2jmidid-8/sigsegv.c
+@@ -91,18 +91,18 @@ static void signal_segv(int signum, sigi
+ a2j_error("info.si_errno = %d", info->si_errno);
+ a2j_error("info.si_code = %d (%s)", info->si_code, si_codes[info->si_code]);
+ a2j_error("info.si_addr = %p", info->si_addr);
+-#if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__)
++#if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__) && !defined(__aarch64__)
+ for(i = 0; i < NGREG; i++)
+ a2j_error("reg[%02d] = 0x" REGFORMAT, i,
+ #if defined(__powerpc__)
+ ucontext->uc_mcontext.uc_regs[i]
+-#elif defined(__sparc__) && defined(__arch64__)
++#elif defined(__sparc__) || defined(__arch64__)
+ ucontext->uc_mcontext.mc_gregs[i]
+ #else
+ ucontext->uc_mcontext.gregs[i]
+ #endif
+ );
+-#endif /* alpha, ia64, kFreeBSD, arm, hppa */
++#endif /* alpha, ia64, kFreeBSD, arm, hppa aarch64 */
+
+ #if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64)
+ # if defined(SIGSEGV_STACK_IA64)
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid_8.bb b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid_8.bb
new file mode 100644
index 000000000..59b73f8e8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/a2jmidid_8.bb
@@ -0,0 +1,26 @@
+SUMMARY = "a2jmidid is daemon for exposing ALSA sequencer applications as JACK MIDI"
+SECTION = "libs/multimedia"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = " \
+ file://gpl2.txt;md5=751419260aa954499f7abaabaa882bbe \
+"
+
+DEPENDS = "alsa-lib jack dbus"
+DEPENDS_append_libc-musl = " libexecinfo"
+
+SRC_URI = " \
+ http://download.gna.org/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-wscript-add-pthread-library-dependency-to-fix-linkin.patch \
+ file://0002-aarch64.patch \
+"
+SRC_URI[md5sum] = "9cf4edbc3ad2ddeeaf6c8c1791ff3ddd"
+SRC_URI[sha256sum] = "2a9635f62aabc59edb54ada07048dd47e896b90caff94bcee710d3582606f55f"
+
+inherit waf pkgconfig
+
+LDFLAGS_append_libc-musl = " -lexecinfo"
+
+export LINKFLAGS="${LDFLAGS}"
+
+FILES_${PN} += "${datadir}/dbus-1/services"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_git.bb b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_git.bb
new file mode 100644
index 000000000..11da6b1be
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_git.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "jackdmp is a C++ version of the JACK low-latency audio \
+server for multi-processor machines. It is a new implementation of the \
+JACK server core features that aims in removing some limitations of \
+the JACK1 design. The activation system has been changed for a data \
+flow model and lock-free programming techniques for graph access have \
+been used to have a more dynamic and robust system."
+SECTION = "libs/multimedia"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = " \
+ file://common/jack/control.h;beginline=2;endline=21;md5=e6df0bf30cde8b3b825451459488195d \
+ file://common/jack/jack.h;beginline=1;endline=19;md5=6b736ed6b810592b135480a5e853392e \
+"
+
+DEPENDS = "libsamplerate0 libsndfile1 readline"
+
+SRC_URI = "git://github.com/jackaudio/jack2.git"
+SRCREV = "c1647819eed6d11f94b21981d9c869629299f357"
+PV = "1.9.12"
+S = "${WORKDIR}/git"
+
+inherit waf pkgconfig
+
+PACKAGECONFIG ??= "alsa"
+PACKAGECONFIG[alsa] = "--alsa=yes,--alsa=no,alsa-lib"
+PACKAGECONFIG[opus] = "--opus=yes,--opus=no,libopus"
+
+# portaudio is for windows builds only
+EXTRA_OECONF = "--portaudio=no"
+
+PACKAGES =+ "libjack jack-server jack-utils"
+
+RDEPENDS_jack-dev_remove = "${PN} (= ${EXTENDPKGV})"
+
+FILES_libjack = "${libdir}/*.so.* ${libdir}/jack/*.so"
+FILES_jack-server = "${bindir}/jackd"
+FILES_jack-utils = "${bindir}/*"
+FILES_${PN}-doc += " ${datadir}/jack-audio-connection-kit/reference/html/* "
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libass/libass_0.14.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/libass/libass_0.14.0.bb
new file mode 100644
index 000000000..3454a5c27
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libass/libass_0.14.0.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format. It is mostly compatible with VSFilter."
+HOMEPAGE = "https://github.com/libass/libass"
+SECTION = "libs/multimedia"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a42532a0684420bdb15556c3cdd49a75"
+
+DEPENDS = "enca fontconfig freetype libpng fribidi"
+
+SRC_URI = "git://github.com/libass/libass.git"
+SRCREV = "73284b676b12b47e17af2ef1b430527299e10c17"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[harfbuzz] = "--enable-harfbuzz,--disable-harfbuzz,harfbuzz"
+
+EXTRA_OECONF = " \
+ --enable-fontconfig \
+"
+
+# Disable compiling with ASM for x86 to avoid textrel
+EXTRA_OECONF_append_x86 = " --disable-asm"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests = " \
+ ${libdir}/test/test \
+"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libburn/libburn_1.4.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/libburn/libburn_1.4.0.bb
new file mode 100644
index 000000000..91fe69338
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libburn/libburn_1.4.0.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Library for reading, mastering and writing optical discs"
+HOMEPAGE = "http://libburnia-project.org/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
+
+SRC_URI = "http://files.libburnia-project.org/releases/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "82ff94bb04e78eac9b12c7546f005d6f"
+SRC_URI[sha256sum] = "6c975abae4ae1f80e47fc5d1e235f85157f73e954c84627a5ef85d8b1b95ae94"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio-paranoia_10.2+0.93+1.bb b/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio-paranoia_10.2+0.93+1.bb
new file mode 100644
index 000000000..82a16cc94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio-paranoia_10.2+0.93+1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "library to read digital audio CDs with error correction"
+HOMEPAGE = "http://www.gnu.org/software/libcdio/"
+SECTION = "libs"
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+DEPENDS = "libcdio"
+
+SRC_URI = "${GNU_MIRROR}/libcdio/${BP}.tar.bz2"
+SRC_URI[md5sum] = "0255aa50e660db7f2c39658b9c565814"
+SRC_URI[sha256sum] = "ec1d9b1d5a28cc042f2cb33a7cc0a2b5ce5525f102bc4c15db1fac322559a493"
+
+inherit autotools pkgconfig
+
+PACKAGES += "${PN}-utils"
+
+FILES_${PN} = "${libdir}/${BPN}${SOLIB}"
+FILES_${PN}-utils = "${bindir}/*"
+
+python libcdio_split_packages() {
+ libdir = d.expand('${libdir}')
+ do_split_packages(d, libdir, '^lib(.*)\.so\..*', 'lib%s', 'libcdio %s library', extra_depends='', allow_links=True)
+}
+
+PACKAGESPLITFUNCS =+ "libcdio_split_packages"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio_2.0.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio_2.0.0.bb
new file mode 100644
index 000000000..6bf64d663
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libcdio/libcdio_2.0.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "The GNU Compact Disc Input and Control library (libcdio) contains a library for CD-ROM and CD image access."
+HOMEPAGE = "http://www.gnu.org/software/libcdio/"
+SECTION = "libs"
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "0cb25905113b930e4539d2f4eb6574b0"
+SRC_URI[sha256sum] = "1b481b5da009bea31db875805665974e2fc568e2b2afa516f4036733657cf958"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "cdda-player"
+PACKAGECONFIG[cdda-player] = "--with-cdda-player,--without-cdda-player,ncurses"
+PACKAGECONFIG[cddb] = "--enable-cddb,--disable-cddb,libcddb"
+PACKAGECONFIG[vcd-info] = "--enable-vcd-info,--disable-vcd-info,vcdimager"
+
+PACKAGES += "${PN}-utils"
+
+FILES_${PN} = "${libdir}/${BPN}${SOLIB}"
+FILES_${PN}-utils = "${bindir}/*"
+
+python libcdio_split_packages() {
+ libdir = d.expand('${libdir}')
+ do_split_packages(d, libdir, '^lib(.*)\.so\..*', 'lib%s', 'libcdio %s library', extra_depends='', allow_links=True)
+}
+
+PACKAGESPLITFUNCS =+ "libcdio_split_packages"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_5.0.3.bb b/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_5.0.3.bb
new file mode 100644
index 000000000..050672599
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_5.0.3.bb
@@ -0,0 +1,13 @@
+SUMMARY = "DVD access multimeda library"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=64e753fa7d1ca31632bc383da3b57c27"
+SRC_URI = "http://download.videolan.org/pub/videolan/libdvdread/${PV}/libdvdread-${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "b7b7d2a782087ed2a913263087083715"
+SRC_URI[sha256sum] = "321cdf2dbdc83c96572bc583cd27d8c660ddb540ff16672ecb28607d018ed82b"
+
+inherit autotools lib_package binconfig pkgconfig
+
+CONFIGUREOPTS_remove = "--disable-silent-rules"
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/0004-Remove-clang-unsupported-compiler-flags.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/0004-Remove-clang-unsupported-compiler-flags.patch
new file mode 100644
index 000000000..5bfce4d90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/0004-Remove-clang-unsupported-compiler-flags.patch
@@ -0,0 +1,43 @@
+From 3d3fce9b8b927a817b89dd78a60b5cf7d978f64c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Tue, 16 Sep 2014 12:28:47 +0300
+Subject: [PATCH 4/4] Remove clang unsupported compiler flags
+
+---
+ configure.ac | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 4fcd48b..40302db 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -140,20 +140,20 @@ then
+ case "$optimize" in
+ -O|"-O "*)
+ optimize="-O"
+- optimize="$optimize -fforce-addr"
++ : #optimize="$optimize -fforce-addr"
+ : #x optimize="$optimize -finline-functions"
+ : #- optimize="$optimize -fstrength-reduce"
+- optimize="$optimize -fthread-jumps"
+- optimize="$optimize -fcse-follow-jumps"
+- optimize="$optimize -fcse-skip-blocks"
++ : #optimize="$optimize -fthread-jumps"
++ : #optimize="$optimize -fcse-follow-jumps"
++ : #optimize="$optimize -fcse-skip-blocks"
+ : #x optimize="$optimize -frerun-cse-after-loop"
+ : #x optimize="$optimize -frerun-loop-opt"
+ : #x optimize="$optimize -fgcse"
+ optimize="$optimize -fexpensive-optimizations"
+- optimize="$optimize -fregmove"
++ : #optimize="$optimize -fregmove"
+ : #* optimize="$optimize -fdelayed-branch"
+ : #x optimize="$optimize -fschedule-insns"
+- optimize="$optimize -fschedule-insns2"
++ : #optimize="$optimize -fschedule-insns2"
+ : #? optimize="$optimize -ffunction-sections"
+ : #? optimize="$optimize -fcaller-saves"
+ : #> optimize="$optimize -funroll-loops"
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/add-pkgconfig.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/add-pkgconfig.patch
new file mode 100644
index 000000000..b49dc8c98
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/add-pkgconfig.patch
@@ -0,0 +1,70 @@
+Here is a patch for adding pkg-config support to libmad.
+It would make life a bit easier for distro maintainers if this was applied.
+In case you didn't know, pkg-config is a tool for providing LDFLAGS and
+CFLAGS for packages using shared libraries. It's on freedesktop.org.
+Debian has already been distributing the pkg-config file mad.pc with
+libmad for some time, and people developing on debian (notably xmms2
+developers) have started relying on this support being present, causing
+some confusion for people installing from source and on some BSDs which
+do not provide mad.pc (google: pkgconfig libmad).
+
+EMH
+
+Upstream-Status: Inappropriate [configuration]
+
+--h31gzZEtNLTqOjlF
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename=&quot;libmad-0.15.1b-pkgconfig.patch&quot;
+
+diff -Naur libmad-0.15.1b.old/configure.ac libmad-0.15.1b/configure.ac
+--- libmad-0.15.1b.old/configure.ac 2004-01-23 10:41:32.000000000 +0100
++++ libmad-0.15.1b/configure.ac 2004-08-07 02:25:24.633462168 +0200
+@@ -429,5 +429,5 @@
+ dnl AC_SUBST(LTLIBOBJS)
+
+ AC_CONFIG_FILES([Makefile msvc++/Makefile \
+- libmad.list])
++ libmad.list mad.pc])
+ AC_OUTPUT
+diff -Naur libmad-0.15.1b.old/mad.pc.in libmad-0.15.1b/mad.pc.in
+--- libmad-0.15.1b.old/mad.pc.in 1970-01-01 01:00:00.000000000 +0100
++++ libmad-0.15.1b/mad.pc.in 2004-08-07 02:04:59.617692872 +0200
+@@ -0,0 +1,14 @@
++# libmad pkg-config source file
++
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: mad
++Description: MPEG Audio Decoder
++Version: @VERSION@
++Requires:
++Conflicts:
++Libs: -L${libdir} -lmad -lm
++Cflags: -I${includedir}
+diff -Naur libmad-0.15.1b.old/Makefile.am libmad-0.15.1b/Makefile.am
+--- libmad-0.15.1b.old/Makefile.am 2004-02-17 03:02:03.000000000 +0100
++++ libmad-0.15.1b/Makefile.am 2004-08-07 02:03:19.859858368 +0200
+@@ -24,6 +24,9 @@
+ SUBDIRS =
+ DIST_SUBDIRS = msvc++
+
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = mad.pc
++
+ lib_LTLIBRARIES = libmad.la
+ include_HEADERS = mad.h
+
+@@ -34,7 +37,8 @@
+ minimad_LDADD = libmad.la
+
+ EXTRA_DIST = mad.h.sed \
+- CHANGES COPYRIGHT CREDITS README TODO VERSION
++ CHANGES COPYRIGHT CREDITS README TODO VERSION \
++ mad.pc.in
+
+ exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \
+ synth.h decoder.h
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/automake-foreign.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/automake-foreign.patch
new file mode 100644
index 000000000..3e544248d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/automake-foreign.patch
@@ -0,0 +1,12 @@
+Pass foreign to AM_INIT_AUTOMAKE so it doesn't enforce GNU strictness.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/configure.ac b/configure.ac
+index e602fd3..e075b86 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -29 +29 @@ AC_CONFIG_SRCDIR([decoder.h])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch
new file mode 100644
index 000000000..01c7aa3c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch
@@ -0,0 +1,33 @@
+gcc 4.4 did this: The MIPS port no longer recognizes the h asm constraint. It was necessary to remove this constraint in order to avoid generating unpredictable code sequences.
+
+so the libmad build with gcc-4.5.0 was failing.
+
+Found a solution here:
+
+http://us.generation-nt.com/answer/bug-568418-libmad0-dev-mpg321-compilation-errors-mips-mipsel-architectures-help-169033451.html
+
+Upstream-Status: Pending
+
+2010/07/29
+Nitin A Kamble <nitin.a.kamble@intel.com>
+
+Index: libmad-0.15.1b/fixed.h
+===================================================================
+--- libmad-0.15.1b.orig/fixed.h
++++ libmad-0.15.1b/fixed.h
+@@ -297,6 +297,15 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t
+
+ /* --- MIPS ---------------------------------------------------------------- */
+
++# elif defined(FPM_MIPS) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
++ typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
++# define MAD_F_MLX(hi, lo, x, y) \
++ do { \
++ u64_di_t __ll = (u64_di_t) (x) * (y); \
++ hi = __ll >> 32; \
++ lo = __ll; \
++ } while (0)
++
+ # elif defined(FPM_MIPS)
+
+ /*
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/no-force-mem.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/no-force-mem.patch
new file mode 100644
index 000000000..d5e6d206e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/no-force-mem.patch
@@ -0,0 +1,18 @@
+This option no longer exists in gcc 3.4.1
+
+RP - 18/07/2008
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: libmad-0.15.1b/configure.ac
+===================================================================
+--- libmad-0.15.1b.orig/configure.ac 2008-07-18 15:45:30.000000000 +0100
++++ libmad-0.15.1b/configure.ac 2008-07-18 15:45:37.000000000 +0100
+@@ -140,7 +140,6 @@
+ case "$optimize" in
+ -O|"-O "*)
+ optimize="-O"
+- optimize="$optimize -fforce-mem"
+ optimize="$optimize -fforce-addr"
+ : #x optimize="$optimize -finline-functions"
+ : #- optimize="$optimize -fstrength-reduce"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch
new file mode 100644
index 000000000..cc87d299e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch
@@ -0,0 +1,14 @@
+Upstream-Status: Submitted [https://sourceforge.net/tracker/?group_id=12349&atid=112349]
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+diff -Nurd libmad-0.15.1b/configure.ac libmad-0.15.1b/configure.ac
+--- libmad-0.15.1b/configure.ac 2004-01-23 11:41:32.000000000 +0200
++++ libmad-0.15.1b/configure.ac 2013-01-03 08:28:23.718693697 +0200
+@@ -28,7 +28,7 @@
+
+ AM_INIT_AUTOMAKE
+
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+
+ dnl System type.
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad_0.15.1b.bb b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad_0.15.1b.bb
new file mode 100644
index 000000000..8d9246a5c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmad/libmad_0.15.1b.bb
@@ -0,0 +1,37 @@
+SUMMARY = "MPEG Audio Decoder library"
+HOMEPAGE = "http://sourceforge.net/projects/mad/"
+BUGTRACKER = "http://sourceforge.net/tracker/?group_id=12349&atid=112349"
+LICENSE = "GPLv2+"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYRIGHT;md5=8e55eb14894e782b84488d5a239bc23d \
+ file://version.h;beginline=1;endline=8;md5=aa07311dd39288d4349f28e1de516454"
+SECTION = "libs"
+DEPENDS = "libid3tag"
+PR = "r3"
+
+SRC_URI = "ftp://ftp.mars.org/pub/mpeg/libmad-${PV}.tar.gz \
+ file://no-force-mem.patch \
+ file://add-pkgconfig.patch \
+ file://fix_for_mips_with_gcc-4.5.0.patch \
+ file://obsolete_automake_macros.patch \
+ file://automake-foreign.patch \
+"
+SRC_URI_append_toolchain-clang = " file://0004-Remove-clang-unsupported-compiler-flags.patch "
+
+SRC_URI[md5sum] = "1be543bc30c56fb6bea1d7bf6a64e66c"
+SRC_URI[sha256sum] = "bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690"
+
+S = "${WORKDIR}/libmad-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "-enable-speed --enable-shared"
+EXTRA_OECONF_append_arm = " --enable-fpm=arm"
+
+do_configure_prepend () {
+# damn picky automake...
+ touch NEWS AUTHORS ChangeLog
+}
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmms/libmms_0.6.4.bb b/meta-openembedded/meta-oe/recipes-multimedia/libmms/libmms_0.6.4.bb
new file mode 100644
index 000000000..831394e5c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmms/libmms_0.6.4.bb
@@ -0,0 +1,12 @@
+SUMMARY = "MMS stream protocol library"
+HOMEPAGE = "http://sourceforge.net/projects/libmms/"
+SECTION = "libs/multimedia"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=fad9b3332be894bab9bc501572864b29"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}/${PV}/${BP}.tar.gz"
+SRC_URI[md5sum] = "d6b665b335a6360e000976e770da7691"
+SRC_URI[sha256sum] = "3c05e05aebcbfcc044d9e8c2d4646cd8359be39a3f0ba8ce4e72a9094bee704f"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libmodplug/libmodplug_0.8.8.5.bb b/meta-openembedded/meta-oe/recipes-multimedia/libmodplug/libmodplug_0.8.8.5.bb
new file mode 100644
index 000000000..1070246c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libmodplug/libmodplug_0.8.8.5.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Library for reading mod-like audio files"
+HOMEPAGE = "http://modplug-xmms.sf.net"
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c9182faa1f7c316f7b97d404bcbe3685"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/modplug-xmms/libmodplug-${PV}.tar.gz"
+SRC_URI[md5sum] = "5f30241db109d647781b784e62ddfaa1"
+SRC_URI[sha256sum] = "77462d12ee99476c8645cb5511363e3906b88b33a6b54362b4dbc0f39aa2daad"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-option-checking"
+
+# NOTE: autotools_stage_all does nothing here, we need to do it manually
+do_install_append() {
+ install -d ${D}${includedir}/libmodplug
+ install -m 0644 ${S}/src/modplug.h ${D}${includedir}/libmodplug
+ install -m 0644 ${S}/src/modplug.h ${D}${includedir}/
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libopus/libopus_1.1.3.bb b/meta-openembedded/meta-oe/recipes-multimedia/libopus/libopus_1.1.3.bb
new file mode 100644
index 000000000..a24f5e30b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libopus/libopus_1.1.3.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Opus Audio Codec"
+DESCRIPTION = "The Opus codec is designed for interactive \
+speech and audio transmission over the Internet. It is \
+designed by the IETF Codec Working Group and incorporates \
+technology from Skype's SILK codec and Xiph.Org's CELT codec."
+HOMEPAGE = "http://www.opus-codec.org/"
+SECTION = "libs/multimedia"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e304cdf74c2a1b0a33a5084c128a23a3"
+
+SRC_URI = "http://downloads.xiph.org/releases/opus/opus-${PV}.tar.gz"
+SRC_URI[md5sum] = "32bbb6b557fe1b6066adc0ae1f08b629"
+SRC_URI[sha256sum] = "58b6fe802e7e30182e95d0cde890c0ace40b6f125cffc50635f0ad2eef69b633"
+
+S = "${WORKDIR}/opus-${PV}"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[fixed-point] = "--enable-fixed-point,,"
+PACKAGECONFIG[float-approx] = "--enable-float-approx,,"
+
+EXTRA_OECONF = " \
+ --with-NE10-includes=${STAGING_DIR_TARGET}${includedir} \
+ --with-NE10-libraries=${STAGING_DIR_TARGET}${libdir} \
+ --enable-asm \
+ --enable-intrinsics \
+ --enable-custom-modes \
+"
+
+python () {
+ if d.getVar('TARGET_FPU') in [ 'soft' ]:
+ d.appendVar('PACKAGECONFIG', ' fixed-point')
+
+ # Ne10 is only available for armv7 and aarch64
+ if any((t.startswith('armv7') or t.startswith('aarch64')) for t in d.getVar('TUNE_FEATURES').split()):
+ d.appendVar('DEPENDS', ' ne10')
+}
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:389: Error: selected processor does not support Thumb mode `smull r5,r7,r1,r4'
+#| {standard input}:418: Error: selected processor does not support Thumb mode `smull r5,r6,r4,r1'
+#| {standard input}:448: Error: selected processor does not support Thumb mode `smull r4,r5,r1,r0'
+#| {standard input}:474: Error: selected processor does not support Thumb mode `smull r0,r4,r8,r1'
+#| {standard input}:510: Error: selected processor does not support Thumb mode `smull fp,r0,r10,r1'
+#| {standard input}:553: Error: selected processor does not support Thumb mode `smull fp,r1,r10,r3'
+#| {standard input}:741: Error: selected processor does not support Thumb mode `smull r3,r0,r6,r10'
+#| {standard input}:761: Error: selected processor does not support Thumb mode `smull fp,r2,r3,r9'
+#| {standard input}:773: Error: selected processor does not support Thumb mode `smull fp,r3,r5,r8'
+#| make[2]: *** [celt/celt.lo] Error 1
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image/configure.patch b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image/configure.patch
new file mode 100644
index 000000000..5299d378e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image/configure.patch
@@ -0,0 +1,43 @@
+Index: SDL_image-1.2.12/configure.in
+===================================================================
+--- SDL_image-1.2.12.orig/configure.in 2012-01-21 01:51:33.000000000 +0000
++++ SDL_image-1.2.12/configure.in 2014-07-18 06:56:56.853466678 +0000
+@@ -1,5 +1,4 @@
+ dnl Process this file with autoconf to produce a configure script.
+-AC_INIT(README)
+
+ dnl Set various version strings - taken gratefully from the GTk sources
+
+@@ -11,12 +10,19 @@
+ # if backwards compatibility has been broken,
+ # set BINARY_AGE and INTERFACE_AGE to 0.
+
+-MAJOR_VERSION=1
+-MINOR_VERSION=2
+-MICRO_VERSION=12
++m4_define([sdlimage_major_version],[1])
++m4_define([sdlimage_minor_version],[2])
++m4_define([sdlimage_micro_version],[12])
++m4_define([sdlimage_version], [sdlimage_major_version.sdlimage_minor_version.sdlimage_micro_version])
++
++AC_INIT([SDL_image], [sdlimage_version])
++
++MAJOR_VERSION=sdlimage_major_version
++MINOR_VERSION=sdlimage_minor_version
++MICRO_VERSION=sdlimage_micro_version
+ INTERFACE_AGE=4
+ BINARY_AGE=12
+-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
++VERSION=sdlimage_version
+
+ AC_SUBST(MAJOR_VERSION)
+ AC_SUBST(MINOR_VERSION)
+@@ -42,7 +48,7 @@
+ AC_CANONICAL_HOST
+
+ dnl Setup for automake
+-AM_INIT_AUTOMAKE(SDL_image, $VERSION)
++AM_INIT_AUTOMAKE([foreign])
+
+ dnl Check for tools
+ AC_PROG_LIBTOOL
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image_1.2.12.bb b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image_1.2.12.bb
new file mode 100644
index 000000000..ea8e9eaa3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl-image_1.2.12.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Simple DirectMedia Layer image library"
+SECTION = "libs"
+
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING;md5=613734b7586e1580ef944961c6d62227"
+
+DEPENDS = "tiff zlib libpng jpeg virtual/libsdl"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_image/release/SDL_image-${PV}.tar.gz \
+ file://configure.patch"
+SRC_URI[md5sum] = "a0f9098ebe5400f0bdc9b62e60797ecb"
+SRC_URI[sha256sum] = "0b90722984561004de84847744d566809dbb9daf732a9e503b91a1b5a84e5699"
+
+S = "${WORKDIR}/SDL_image-${PV}"
+
+inherit autotools pkgconfig
+
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+
+# Disable the run-time loading of the libs and bring back the soname dependencies.
+EXTRA_OECONF += "--disable-jpg-shared --disable-png-shared -disable-tif-shared"
+
+do_configure_prepend() {
+ # Removing these files fixes a libtool version mismatch.
+ rm -f ${S}/acinclude/libtool.m4
+ rm -f ${S}/acinclude/sdl.m4
+ rm -f ${S}/acinclude/pkg.m4
+ rm -f ${S}/acinclude/lt~obsolete.m4
+ rm -f ${S}/acinclude/ltoptions.m4
+ rm -f ${S}/acinclude/ltsugar.m4
+ rm -f ${S}/acinclude/ltversion.m4
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl2-image_2.0.1.bb b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl2-image_2.0.1.bb
new file mode 100644
index 000000000..1f9c794c7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-image/libsdl2-image_2.0.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Simple DirectMedia Layer image library v2"
+SECTION = "libs"
+
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=ec65b9778f5584a0bd8dfc17d6340ba0"
+
+DEPENDS = "tiff zlib libpng jpeg virtual/libsdl2 libwebp"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_image/release/SDL2_image-${PV}.tar.gz"
+SRC_URI[md5sum] = "d94b94555ba022fa249a53a021dc3606"
+SRC_URI[sha256sum] = "3a3eafbceea5125c04be585373bfd8b3a18f259bd7eae3efc4e6d8e60e0d7f64"
+
+S = "${WORKDIR}/SDL2_image-${PV}"
+
+inherit autotools pkgconfig
+
+# Disable the run-time loading of the libs and bring back the soname dependencies.
+EXTRA_OECONF += "--disable-jpg-shared --disable-png-shared -disable-tif-shared"
+
+do_configure_prepend() {
+ # make autoreconf happy
+ touch ${S}/NEWS ${S}/README ${S}/AUTHORS ${S}/ChangeLog
+ # Removing these files fixes a libtool version mismatch.
+ rm -f ${S}/acinclude/libtool.m4
+ rm -f ${S}/acinclude/sdl2.m4
+ rm -f ${S}/acinclude/pkg.m4
+ rm -f ${S}/acinclude/lt~obsolete.m4
+ rm -f ${S}/acinclude/ltoptions.m4
+ rm -f ${S}/acinclude/ltsugar.m4
+ rm -f ${S}/acinclude/ltversion.m4
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer/configure.patch b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer/configure.patch
new file mode 100644
index 000000000..4c9e8d094
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer/configure.patch
@@ -0,0 +1,21 @@
+diff -Nurd SDL_mixer-1.2.12/configure.in SDL_mixer-1.2.12/configure.in
+--- SDL_mixer-1.2.12/configure.in 2012-01-16 00:01:05.000000000 +0200
++++ SDL_mixer-1.2.12/configure.in 2012-12-15 04:08:04.627871456 +0200
+@@ -1,6 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(README)
+-AC_CONFIG_AUX_DIR(build-scripts)
+
+ dnl Set various version strings - taken gratefully from the GTk sources
+
+@@ -40,10 +39,6 @@
+ AC_SUBST(LT_REVISION)
+ AC_SUBST(LT_AGE)
+
+-dnl Detect the canonical build and host environments
+-AC_CONFIG_AUX_DIRS($srcdir/build-scripts)
+-dnl AC_CANONICAL_HOST
+-
+ dnl Check for tools
+ AC_PROG_LIBTOOL
+ AC_PROG_CC
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer_1.2.12.bb b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer_1.2.12.bb
new file mode 100644
index 000000000..c83fcc8da
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl-mixer_1.2.12.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Simple DirectMedia Layer mixer library"
+SECTION = "libs"
+DEPENDS = "virtual/libsdl flac libmikmod libvorbis"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a37a47a0e579e461474cd03b9e05199d"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-${PV}.tar.gz \
+ file://configure.patch \
+"
+
+SRC_URI[md5sum] = "e03ff73d77a55e3572ad0217131dc4a1"
+SRC_URI[sha256sum] = "1644308279a975799049e4826af2cfc787cad2abb11aa14562e402521f86992a"
+
+S = "${WORKDIR}/SDL_mixer-${PV}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_AUTORECONF += "--include=acinclude"
+EXTRA_OECONF = "--disable-music-mp3 --enable-music-ogg --enable-music-ogg-tremor LIBS=-L${STAGING_LIBDIR}"
+
+PACKAGECONFIG[mad] = "--enable-music-mp3-mad-gpl,--disable-music-mp3-mad-gpl,libmad"
+
+do_configure () {
+ # Remove old libtool macros.
+ MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
+ for i in ${MACROS}; do
+ rm -f acinclude/$i
+ done
+ cp build-scripts/* . || true
+ rm -rf build-scripts/
+ export SYSROOT=$PKG_CONFIG_SYSROOT_DIR
+
+ autotools_do_configure
+
+ rm config.log
+ for i in $(find -name "Makefile") ; do
+ sed -i -e 's:-L/usr/lib:-L${STAGING_LIBDIR}:g' $i
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl2-mixer_2.0.2.bb b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl2-mixer_2.0.2.bb
new file mode 100644
index 000000000..718f3f5fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libsdl-mixer/libsdl2-mixer_2.0.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Simple DirectMedia Layer mixer library V2"
+SECTION = "libs"
+DEPENDS = "virtual/libsdl2 flac libmikmod libvorbis"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=95e0c3cf63f71b950911e698a54b7fc5"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "aaa0551393993c14a13f72b339c0ed6c"
+SRC_URI[sha256sum] = "4e615e27efca4f439df9af6aa2c6de84150d17cbfd12174b54868c12f19c83bb"
+
+S = "${WORKDIR}/SDL2_mixer-${PV}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_AUTORECONF += "--include=acinclude"
+EXTRA_OECONF = "--disable-music-mp3 --enable-music-ogg --enable-music-ogg-tremor LIBS=-L${STAGING_LIBDIR}"
+
+PACKAGECONFIG[mad] = "--enable-music-mp3-mad-gpl,--disable-music-mp3-mad-gpl,libmad"
+
+do_configure_prepend () {
+ # Remove old libtool macros.
+ MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
+ for i in ${MACROS}; do
+ rm -f acinclude/$i
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/live555/files/config.linux-cross b/meta-openembedded/meta-oe/recipes-multimedia/live555/files/config.linux-cross
new file mode 100644
index 000000000..d1277da8d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/live555/files/config.linux-cross
@@ -0,0 +1,17 @@
+COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_STRSTREAM=1 -D_LARGEFILE_SOURCE=1
+C = c
+C_COMPILER = $(CC)
+C_FLAGS = $(COMPILE_OPTS)
+CPP = cpp
+CPLUSPLUS_COMPILER = $(CXX)
+CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1
+OBJ = o
+LINK = $(CXX) -o
+LINK_OPTS = -L.
+CONSOLE_LINK_OPTS = $(LINK_OPTS)
+LIBRARY_LINK = $(LD) -o
+LIBRARY_LINK_OPTS = $(LINK_OPTS) -r -Bstatic
+LIB_SUFFIX = a
+LIBS_FOR_CONSOLE_APPLICATION =
+LIBS_FOR_GUI_APPLICATION =
+EXE =
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/live555/live555.inc b/meta-openembedded/meta-oe/recipes-multimedia/live555/live555.inc
new file mode 100644
index 000000000..14ea66442
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/live555/live555.inc
@@ -0,0 +1,56 @@
+# live555 OE build file
+# Copyright (C) 2005, Koninklijke Philips Electronics NV. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION = "LIVE555 Streaming Media libraries"
+HOMEPAGE = "http://live.com/"
+LICENSE = "LGPLv3"
+SECTION = "devel"
+
+URLV = "${@d.getVar('PV')[0:4]}.${@d.getVar('PV')[4:6]}.${@d.getVar('PV')[6:8]}"
+SRC_URI = "http://www.live555.com/liveMedia/public/live.${URLV}.tar.gz \
+ file://config.linux-cross"
+# only latest live version stays on http://www.live555.com/liveMedia/public/, add mirror for older
+MIRRORS += "http://www.live555.com/liveMedia/public/ http://distcache.FreeBSD.org/ports-distfiles/ \n"
+
+S = "${WORKDIR}/live"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_configure() {
+ cp ${WORKDIR}/config.linux-cross .
+ echo "COMPILE_OPTS+=" -fPIC -DXLOCALE_NOT_USED"" >> config.linux-cross
+ ./genMakefiles linux-cross
+}
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${includedir}/BasicUsageEnvironment
+ install -d ${D}${includedir}/groupsock
+ install -d ${D}${includedir}/liveMedia
+ install -d ${D}${includedir}/UsageEnvironment
+ install -d ${D}${libdir}
+ cp -R --no-dereference --preserve=mode,links -v ${S}/BasicUsageEnvironment/include/*.hh ${D}${includedir}/BasicUsageEnvironment/
+ cp -R --no-dereference --preserve=mode,links -v ${S}/groupsock/include/*.h ${D}${includedir}/groupsock/
+ cp -R --no-dereference --preserve=mode,links -v ${S}/groupsock/include/*.hh ${D}${includedir}/groupsock/
+ cp -R --no-dereference --preserve=mode,links -v ${S}/liveMedia/include/*.hh ${D}${includedir}/liveMedia/
+ cp -R --no-dereference --preserve=mode,links -v ${S}/UsageEnvironment/include/*.hh ${D}${includedir}/UsageEnvironment/
+ # Find all the headers
+ for i in $(find . -name "*.hh") $(find . -name "*.h") ; do
+ install ${i} ${D}${includedir}
+ done
+ cp ${S}/*/*.a ${D}${libdir}
+ install -d ${D}${bindir}
+ for i in MPEG2TransportStreamIndexer openRTSP playSIP sapWatch testMPEG1or2ProgramToTransportStream testMPEG1or2Splitter testMPEG1or2VideoReceiver testMPEG2TransportStreamTrickPlay testOnDemandRTSPServer testRelay testAMRAudioStreamer testDVVideoStreamer testMP3Receiver testMP3Streamer testMPEG1or2AudioVideoStreamer testMPEG1or2VideoStreamer testMPEG2TransportStreamer testMPEG4VideoStreamer testWAVAudioStreamer vobStreamer; do
+ install -m 0755 ${S}/testProgs/${i} ${D}${bindir}/
+ done
+ install -m 0755 ${S}/mediaServer/live555MediaServer ${D}${bindir}/
+}
+
+PACKAGES =+ " live555-openrtsp live555-playsip live555-mediaserver"
+FILES_${PN} = "${bindir}/sapWatch ${bindir}/testMPEG1or2ProgramToTransportStream ${bindir}/testMPEG1or2Splitter ${bindir}/testMPEG1or2VideoReceiver ${bindir}/testMPEG2TransportStreamTrickPlay ${bindir}/testOnDemandRTSPServer ${bindir}/testRelay ${bindir}/testAMRAudioStreamer ${bindir}/testDVVideoStreamer ${bindir}/testMP3Receiver ${bindir}/testMP3Streamer ${bindir}/testMPEG1or2AudioVideoStreamer ${bindir}/testMPEG1or2VideoStreamer ${bindir}/testMPEG2TransportStreamer ${bindir}/testMPEG4VideoStreamer ${bindir}/testWAVAudioStreamer ${bindir}/vobStreamer ${bindir}/MPEG2TransportStreamIndexer"
+FILES_live555-openrtsp = "${bindir}/openRTSP"
+FILES_live555-playsip = "${bindir}/playSIP"
+FILES_live555-mediaserver = "${bindir}/live555MediaServer"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/live555/live555_20170410.bb b/meta-openembedded/meta-oe/recipes-multimedia/live555/live555_20170410.bb
new file mode 100644
index 000000000..27fc42987
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/live555/live555_20170410.bb
@@ -0,0 +1,9 @@
+require live555.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ "
+
+SRC_URI[md5sum] = "b7084a72aeb09549c8b248f8cc308841"
+SRC_URI[sha256sum] = "4c37d9c828f9028403997272e49968c260385dbbaef62e28ba24faef0dda868b"
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mikmod/libmikmod_3.3.6.bb b/meta-openembedded/meta-oe/recipes-multimedia/mikmod/libmikmod_3.3.6.bb
new file mode 100644
index 000000000..d53dff6a0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/mikmod/libmikmod_3.3.6.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "libmikmod is a module player library supporting many formats, including mod, s3m, it, and xm."
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "alsa-lib texinfo"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/project/mikmod/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+"
+SRC_URI[md5sum] = "9dd9bed30c6f7607a55480234606071b"
+SRC_URI[sha256sum] = "3f363e03f7b1db75b9b6602841bbd440ed275a548e53545f980df8155de4d330"
+
+inherit autotools binconfig lib_package
+
+EXTRA_OECONF = "\
+ --disable-af \
+ --enable-alsa \
+ --disable-esd \
+ --enable-oss \
+ --disable-sam9407 \
+ --disable-ultra \
+ --disable-esdtest \
+ --enable-threads \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)}"
+PACKAGECONFIG[pulseaudio] = "--enable-pulseaudio,--disable-pulseaudio,pulseaudio"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna-daemon.init.d b/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna-daemon.init.d
new file mode 100644
index 000000000..9e64a20fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna-daemon.init.d
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+NAME="minidlna"
+DAEMON=/usr/sbin/minidlnad
+SCRIPTNAME=/etc/init.d/$NAME
+PIDFILE=/var/run/$NAME.pid
+CONF=/etc/$NAME.conf
+ARGS="-f $CONF"
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+start_function() {
+
+ export PATH=$PWD:$PATH
+
+ if [ -f ${PIDFILE} ]; then
+ echo "$SCRIPTNAME already running with PID #`cat $PIDFILE` ( according to ${PIDFILE} )";
+ exit 0
+ fi
+
+ $DAEMON $ARGS
+
+ pid=$!
+
+ if [ "$pid" != "" ]; then
+ echo -n "$pid" > ${PIDFILE}
+ fi
+}
+
+stop_function() {
+
+ export PATH=$PWD:$PATH
+
+ if [ ! -e "${PIDFILE}" ]; then
+ echo "${SCRIPTNAME} not running ( according to ${PIDFILE} )";
+ exit 1;
+ fi
+ PID=`cat ${PIDFILE}`
+ kill -INT ${PID}
+ rm -f ${PIDFILE}
+}
+
+case $1 in
+ "start")
+ start_function
+ ;;
+ "stop")
+ stop_function
+ ;;
+ *)
+ echo "Usage: $0 {start | stop}"
+
+esac
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna.service b/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna.service
new file mode 100644
index 000000000..656100bb6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/minidlna/minidlna/minidlna.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Minidlna Daemon
+After=network.target
+
+[Service]
+Type=notify
+ExecStart=/usr/sbin/minidlnad -f /etc/minidlna.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common.bb b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common.bb
new file mode 100644
index 000000000..829c3b243
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common.bb
@@ -0,0 +1,23 @@
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: MIT (see COPYING.MIT)
+
+SUMMARY = "Preconfigured mplayer preferences"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PV = "0.0.1"
+PR = "r1"
+
+SRC_URI = "file://mplayer.conf"
+
+# Yes, really /usr/etc!!!
+do_install() {
+ install -d "${D}/usr${sysconfdir}/mplayer"
+
+ install -m 0644 ${WORKDIR}/mplayer.conf "${D}/usr${sysconfdir}/mplayer"
+}
+
+FILES_${PN} = "/usr${sysconfdir}/mplayer"
+
+inherit allarch
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf
new file mode 100644
index 000000000..37ad65fa2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mplayer-common/mplayer.conf
@@ -0,0 +1,15 @@
+
+# You probably shouldn't touch these
+ac=mad,
+ao=alsa,
+
+# Required on SL-Cxxxx for correct rotation in the *VT*,
+# breaks rotation in X!
+# vf=rotate=1
+
+# Enable fullscreen display by default
+# fs=true
+
+# Drop frames to keep audio and video in sync
+framedrop=true
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb
new file mode 100644
index 000000000..de78de27f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb
@@ -0,0 +1,73 @@
+SUMMARY = "Open Source multimedia player"
+DESCRIPTION = "mpv is a fork of mplayer2 and MPlayer. It shares some features with the former projects while introducing many more."
+SECTION = "multimedia"
+HOMEPAGE = "http://www.mpv.io/"
+DEPENDS = "zlib ffmpeg jpeg virtual/libx11 xsp libxv \
+ libxscrnsaver libv4l libxinerama \
+"
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=91f1cb870c1cc2d31351a4d2595441cb"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = " \
+ https://github.com/mpv-player/mpv/archive/v${PV}.tar.gz;name=mpv \
+ http://www.freehackers.org/~tnagy/release/waf-1.8.12;name=waf;downloadfilename=waf;subdir=${BPN}-${PV} \
+"
+SRC_URI[mpv.md5sum] = "038d0b660de07ff645ad6a741704ecab"
+SRC_URI[mpv.sha256sum] = "daf3ef358d5f260f2269f7caabce27f446c291457ec330077152127133b71b46"
+SRC_URI[waf.md5sum] = "cef4ee82206b1843db082d0b0506bf71"
+SRC_URI[waf.sha256sum] = "01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b"
+
+inherit waf pkgconfig pythonnative distro_features_check
+
+# Note: both lua and libass are required to get on-screen-display (controls)
+PACKAGECONFIG ??= " \
+ lua \
+ libass \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
+"
+PACKAGECONFIG[drm] = "--enable-drm,--disable-drm,libdrm"
+PACKAGECONFIG[gbm] = "--enable-gbm,--disable-gbm,virtual/mesa"
+PACKAGECONFIG[lua] = "--enable-lua,--disable-lua,lua luajit"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[libarchive] = "--enable-libarchive,--disable-libarchive,libarchive"
+PACKAGECONFIG[jack] = "--enable-jack, --disable-jack, jack"
+PACKAGECONFIG[vaapi] = "--enable-vaapi, --disable-vaapi,libva"
+PACKAGECONFIG[vdpau] = "--enable-vdpau, --disable-vdpau,libvdpau"
+PACKAGECONFIG[wayland] = "--enable-wayland, --disable-wayland,wayland libxkbcommon"
+
+SIMPLE_TARGET_SYS = "${@'${TARGET_SYS}'.replace('${TARGET_VENDOR}', '')}"
+
+EXTRA_OECONF = " \
+ --prefix=${prefix} \
+ --target=${SIMPLE_TARGET_SYS} \
+ --confdir=${sysconfdir} \
+ --datadir=${datadir} \
+ --disable-manpage-build \
+ --disable-gl \
+ --disable-libsmbclient \
+ --disable-encoding \
+ --disable-libbluray \
+ --disable-dvdread \
+ --disable-dvdnav \
+ --disable-cdda \
+ --disable-uchardet \
+ --disable-rubberband \
+ --disable-lcms2 \
+ --disable-vapoursynth \
+ --disable-vapoursynth-lazy \
+ ${PACKAGECONFIG_CONFARGS} \
+"
+
+adjust_waf_perms() {
+ chmod +x ${S}/waf
+}
+
+do_patch[postfuncs] += "adjust_waf_perms"
+
+FILES_${PN} += "${datadir}/icons"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/opus-tools/opus-tools_0.1.8.bb b/meta-openembedded/meta-oe/recipes-multimedia/opus-tools/opus-tools_0.1.8.bb
new file mode 100644
index 000000000..ff6311147
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/opus-tools/opus-tools_0.1.8.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Opus Audio Tools"
+HOMEPAGE = "http://www.opus-codec.org/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=843a066da9f1facfcc6ea6f616ffecb1"
+
+SRC_URI = "http://downloads.xiph.org/releases/opus/opus-tools-${PV}.tar.gz"
+SRC_URI[md5sum] = "b424790eda9357a4df394e2d7ca19eac"
+SRC_URI[sha256sum] = "e4e188579ea1c4e4d5066460d4a7214a7eafe3539e9a4466fdc98af41ba4a2f6"
+
+S = "${WORKDIR}/opus-tools-${PV}"
+
+DEPENDS = "libopus flac"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0001-build-sys-Use-C-11-for-building.patch b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0001-build-sys-Use-C-11-for-building.patch
new file mode 100644
index 000000000..b59569f2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0001-build-sys-Use-C-11-for-building.patch
@@ -0,0 +1,27 @@
+From 1f92aa5c8d910519e3a74b2e3a9199aa9026a16c Mon Sep 17 00:00:00 2001
+From: Arun Raghavan <git@arunraghavan.net>
+Date: Mon, 25 Jan 2016 08:41:42 +0530
+Subject: [PATCH 1/2] build-sys: Use C++11 for building
+
+This requirement was added by gtkmm at some point:
+
+http://www.murrayc.com/permalink/2015/07/31/gtkmm-now-uses-c11/
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 5b50e2d..8f28782 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -39,6 +39,7 @@ AC_PROG_CC
+ AC_PROG_LN_S
+ AC_TYPE_SIGNAL
+ AC_HEADER_STDC
++AX_CXX_COMPILE_STDCXX_11
+
+ AC_ARG_ENABLE(gtk3,
+ [AS_HELP_STRING([--disable-gtk3],
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0002-build-sys-Add-m4-file-for-AX_CXX_COMPILE_STDCXX_11.patch b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0002-build-sys-Add-m4-file-for-AX_CXX_COMPILE_STDCXX_11.patch
new file mode 100644
index 000000000..97ec37d4c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol/0002-build-sys-Add-m4-file-for-AX_CXX_COMPILE_STDCXX_11.patch
@@ -0,0 +1,624 @@
+From ccb3eb7b4ff65414a56e2294080885b8966da52b Mon Sep 17 00:00:00 2001
+From: Arun Raghavan <git@arunraghavan.net>
+Date: Tue, 2 Feb 2016 17:01:47 +0530
+Subject: [PATCH 2/2] build-sys: Add m4 file for AX_CXX_COMPILE_STDCXX_11
+
+---
+ m4/ax_cxx_compile_stdcxx.m4 | 558 +++++++++++++++++++++++++++++++++++++++++
+ m4/ax_cxx_compile_stdcxx_11.m4 | 39 +++
+ 2 files changed, 597 insertions(+)
+ create mode 100644 m4/ax_cxx_compile_stdcxx.m4
+ create mode 100644 m4/ax_cxx_compile_stdcxx_11.m4
+
+diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4
+new file mode 100644
+index 0000000..079e17d
+--- /dev/null
++++ b/m4/ax_cxx_compile_stdcxx.m4
+@@ -0,0 +1,558 @@
++# ===========================================================================
++# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
++#
++# DESCRIPTION
++#
++# Check for baseline language coverage in the compiler for the specified
++# version of the C++ standard. If necessary, add switches to CXXFLAGS to
++# enable support. VERSION may be '11' (for the C++11 standard) or '14'
++# (for the C++14 standard).
++#
++# The second argument, if specified, indicates whether you insist on an
++# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
++# -std=c++11). If neither is specified, you get whatever works, with
++# preference for an extended mode.
++#
++# The third argument, if specified 'mandatory' or if left unspecified,
++# indicates that baseline support for the specified C++ standard is
++# required and that the macro should error out if no mode with that
++# support is found. If specified 'optional', then configuration proceeds
++# regardless, after defining HAVE_CXX${VERSION} if and only if a
++# supporting mode is found.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
++# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
++# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
++# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
++# Copyright (c) 2015 Paul Norman <penorman@mac.com>
++# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
++#
++# Copying and distribution of this file, with or without modification, are
++# permitted in any medium without royalty provided the copyright notice
++# and this notice are preserved. This file is offered as-is, without any
++# warranty.
++
++#serial 1
++
++dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
++dnl (serial version number 13).
++
++AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
++ m4_if([$1], [11], [],
++ [$1], [14], [],
++ [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])],
++ [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
++ m4_if([$2], [], [],
++ [$2], [ext], [],
++ [$2], [noext], [],
++ [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
++ m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
++ [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
++ [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
++ [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
++ AC_LANG_PUSH([C++])dnl
++ ac_success=no
++ AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
++ ax_cv_cxx_compile_cxx$1,
++ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
++ [ax_cv_cxx_compile_cxx$1=yes],
++ [ax_cv_cxx_compile_cxx$1=no])])
++ if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
++ ac_success=yes
++ fi
++
++ m4_if([$2], [noext], [], [dnl
++ if test x$ac_success = xno; then
++ for switch in -std=gnu++$1 -std=gnu++0x; do
++ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
++ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
++ $cachevar,
++ [ac_save_CXXFLAGS="$CXXFLAGS"
++ CXXFLAGS="$CXXFLAGS $switch"
++ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
++ [eval $cachevar=yes],
++ [eval $cachevar=no])
++ CXXFLAGS="$ac_save_CXXFLAGS"])
++ if eval test x\$$cachevar = xyes; then
++ CXXFLAGS="$CXXFLAGS $switch"
++ ac_success=yes
++ break
++ fi
++ done
++ fi])
++
++ m4_if([$2], [ext], [], [dnl
++ if test x$ac_success = xno; then
++ dnl HP's aCC needs +std=c++11 according to:
++ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
++ dnl Cray's crayCC needs "-h std=c++11"
++ for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do
++ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
++ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
++ $cachevar,
++ [ac_save_CXXFLAGS="$CXXFLAGS"
++ CXXFLAGS="$CXXFLAGS $switch"
++ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
++ [eval $cachevar=yes],
++ [eval $cachevar=no])
++ CXXFLAGS="$ac_save_CXXFLAGS"])
++ if eval test x\$$cachevar = xyes; then
++ CXXFLAGS="$CXXFLAGS $switch"
++ ac_success=yes
++ break
++ fi
++ done
++ fi])
++ AC_LANG_POP([C++])
++ if test x$ax_cxx_compile_cxx$1_required = xtrue; then
++ if test x$ac_success = xno; then
++ AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
++ fi
++ else
++ if test x$ac_success = xno; then
++ HAVE_CXX$1=0
++ AC_MSG_NOTICE([No compiler with C++$1 support was found])
++ else
++ HAVE_CXX$1=1
++ AC_DEFINE(HAVE_CXX$1,1,
++ [define if the compiler supports basic C++$1 syntax])
++ fi
++
++ AC_SUBST(HAVE_CXX$1)
++ fi
++])
++
++
++dnl Test body for checking C++11 support
++
++m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
++ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
++)
++
++
++dnl Test body for checking C++14 support
++
++m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
++ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
++ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
++)
++
++
++dnl Tests for new features in C++11
++
++m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
++
++// If the compiler admits that it is not ready for C++11, why torture it?
++// Hopefully, this will speed up the test.
++
++#ifndef __cplusplus
++
++#error "This is not a C++ compiler"
++
++#elif __cplusplus < 201103L
++
++#error "This is not a C++11 compiler"
++
++#else
++
++namespace cxx11
++{
++
++ namespace test_static_assert
++ {
++
++ template <typename T>
++ struct check
++ {
++ static_assert(sizeof(int) <= sizeof(T), "not big enough");
++ };
++
++ }
++
++ namespace test_final_override
++ {
++
++ struct Base
++ {
++ virtual void f() {}
++ };
++
++ struct Derived : public Base
++ {
++ virtual void f() override {}
++ };
++
++ }
++
++ namespace test_double_right_angle_brackets
++ {
++
++ template < typename T >
++ struct check {};
++
++ typedef check<void> single_type;
++ typedef check<check<void>> double_type;
++ typedef check<check<check<void>>> triple_type;
++ typedef check<check<check<check<void>>>> quadruple_type;
++
++ }
++
++ namespace test_decltype
++ {
++
++ int
++ f()
++ {
++ int a = 1;
++ decltype(a) b = 2;
++ return a + b;
++ }
++
++ }
++
++ namespace test_type_deduction
++ {
++
++ template < typename T1, typename T2 >
++ struct is_same
++ {
++ static const bool value = false;
++ };
++
++ template < typename T >
++ struct is_same<T, T>
++ {
++ static const bool value = true;
++ };
++
++ template < typename T1, typename T2 >
++ auto
++ add(T1 a1, T2 a2) -> decltype(a1 + a2)
++ {
++ return a1 + a2;
++ }
++
++ int
++ test(const int c, volatile int v)
++ {
++ static_assert(is_same<int, decltype(0)>::value == true, "");
++ static_assert(is_same<int, decltype(c)>::value == false, "");
++ static_assert(is_same<int, decltype(v)>::value == false, "");
++ auto ac = c;
++ auto av = v;
++ auto sumi = ac + av + 'x';
++ auto sumf = ac + av + 1.0;
++ static_assert(is_same<int, decltype(ac)>::value == true, "");
++ static_assert(is_same<int, decltype(av)>::value == true, "");
++ static_assert(is_same<int, decltype(sumi)>::value == true, "");
++ static_assert(is_same<int, decltype(sumf)>::value == false, "");
++ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
++ return (sumf > 0.0) ? sumi : add(c, v);
++ }
++
++ }
++
++ namespace test_noexcept
++ {
++
++ int f() { return 0; }
++ int g() noexcept { return 0; }
++
++ static_assert(noexcept(f()) == false, "");
++ static_assert(noexcept(g()) == true, "");
++
++ }
++
++ namespace test_constexpr
++ {
++
++ template < typename CharT >
++ unsigned long constexpr
++ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
++ {
++ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
++ }
++
++ template < typename CharT >
++ unsigned long constexpr
++ strlen_c(const CharT *const s) noexcept
++ {
++ return strlen_c_r(s, 0UL);
++ }
++
++ static_assert(strlen_c("") == 0UL, "");
++ static_assert(strlen_c("1") == 1UL, "");
++ static_assert(strlen_c("example") == 7UL, "");
++ static_assert(strlen_c("another\0example") == 7UL, "");
++
++ }
++
++ namespace test_rvalue_references
++ {
++
++ template < int N >
++ struct answer
++ {
++ static constexpr int value = N;
++ };
++
++ answer<1> f(int&) { return answer<1>(); }
++ answer<2> f(const int&) { return answer<2>(); }
++ answer<3> f(int&&) { return answer<3>(); }
++
++ void
++ test()
++ {
++ int i = 0;
++ const int c = 0;
++ static_assert(decltype(f(i))::value == 1, "");
++ static_assert(decltype(f(c))::value == 2, "");
++ static_assert(decltype(f(0))::value == 3, "");
++ }
++
++ }
++
++ namespace test_uniform_initialization
++ {
++
++ struct test
++ {
++ static const int zero {};
++ static const int one {1};
++ };
++
++ static_assert(test::zero == 0, "");
++ static_assert(test::one == 1, "");
++
++ }
++
++ namespace test_lambdas
++ {
++
++ void
++ test1()
++ {
++ auto lambda1 = [](){};
++ auto lambda2 = lambda1;
++ lambda1();
++ lambda2();
++ }
++
++ int
++ test2()
++ {
++ auto a = [](int i, int j){ return i + j; }(1, 2);
++ auto b = []() -> int { return '0'; }();
++ auto c = [=](){ return a + b; }();
++ auto d = [&](){ return c; }();
++ auto e = [a, &b](int x) mutable {
++ const auto identity = [](int y){ return y; };
++ for (auto i = 0; i < a; ++i)
++ a += b--;
++ return x + identity(a + b);
++ }(0);
++ return a + b + c + d + e;
++ }
++
++ int
++ test3()
++ {
++ const auto nullary = [](){ return 0; };
++ const auto unary = [](int x){ return x; };
++ using nullary_t = decltype(nullary);
++ using unary_t = decltype(unary);
++ const auto higher1st = [](nullary_t f){ return f(); };
++ const auto higher2nd = [unary](nullary_t f1){
++ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
++ };
++ return higher1st(nullary) + higher2nd(nullary)(unary);
++ }
++
++ }
++
++ namespace test_variadic_templates
++ {
++
++ template <int...>
++ struct sum;
++
++ template <int N0, int... N1toN>
++ struct sum<N0, N1toN...>
++ {
++ static constexpr auto value = N0 + sum<N1toN...>::value;
++ };
++
++ template <>
++ struct sum<>
++ {
++ static constexpr auto value = 0;
++ };
++
++ static_assert(sum<>::value == 0, "");
++ static_assert(sum<1>::value == 1, "");
++ static_assert(sum<23>::value == 23, "");
++ static_assert(sum<1, 2>::value == 3, "");
++ static_assert(sum<5, 5, 11>::value == 21, "");
++ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
++
++ }
++
++ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
++ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
++ // because of this.
++ namespace test_template_alias_sfinae
++ {
++
++ struct foo {};
++
++ template<typename T>
++ using member = typename T::member_type;
++
++ template<typename T>
++ void func(...) {}
++
++ template<typename T>
++ void func(member<T>*) {}
++
++ void test();
++
++ void test() { func<foo>(0); }
++
++ }
++
++} // namespace cxx11
++
++#endif // __cplusplus >= 201103L
++
++]])
++
++
++dnl Tests for new features in C++14
++
++m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
++
++// If the compiler admits that it is not ready for C++14, why torture it?
++// Hopefully, this will speed up the test.
++
++#ifndef __cplusplus
++
++#error "This is not a C++ compiler"
++
++#elif __cplusplus < 201402L
++
++#error "This is not a C++14 compiler"
++
++#else
++
++namespace cxx14
++{
++
++ namespace test_polymorphic_lambdas
++ {
++
++ int
++ test()
++ {
++ const auto lambda = [](auto&&... args){
++ const auto istiny = [](auto x){
++ return (sizeof(x) == 1UL) ? 1 : 0;
++ };
++ const int aretiny[] = { istiny(args)... };
++ return aretiny[0];
++ };
++ return lambda(1, 1L, 1.0f, '1');
++ }
++
++ }
++
++ namespace test_binary_literals
++ {
++
++ constexpr auto ivii = 0b0000000000101010;
++ static_assert(ivii == 42, "wrong value");
++
++ }
++
++ namespace test_generalized_constexpr
++ {
++
++ template < typename CharT >
++ constexpr unsigned long
++ strlen_c(const CharT *const s) noexcept
++ {
++ auto length = 0UL;
++ for (auto p = s; *p; ++p)
++ ++length;
++ return length;
++ }
++
++ static_assert(strlen_c("") == 0UL, "");
++ static_assert(strlen_c("x") == 1UL, "");
++ static_assert(strlen_c("test") == 4UL, "");
++ static_assert(strlen_c("another\0test") == 7UL, "");
++
++ }
++
++ namespace test_lambda_init_capture
++ {
++
++ int
++ test()
++ {
++ auto x = 0;
++ const auto lambda1 = [a = x](int b){ return a + b; };
++ const auto lambda2 = [a = lambda1(x)](){ return a; };
++ return lambda2();
++ }
++
++ }
++
++ namespace test_digit_seperators
++ {
++
++ constexpr auto ten_million = 100'000'000;
++ static_assert(ten_million == 100000000, "");
++
++ }
++
++ namespace test_return_type_deduction
++ {
++
++ auto f(int& x) { return x; }
++ decltype(auto) g(int& x) { return x; }
++
++ template < typename T1, typename T2 >
++ struct is_same
++ {
++ static constexpr auto value = false;
++ };
++
++ template < typename T >
++ struct is_same<T, T>
++ {
++ static constexpr auto value = true;
++ };
++
++ int
++ test()
++ {
++ auto x = 0;
++ static_assert(is_same<int, decltype(f(x))>::value, "");
++ static_assert(is_same<int&, decltype(g(x))>::value, "");
++ return x;
++ }
++
++ }
++
++} // namespace cxx14
++
++#endif // __cplusplus >= 201402L
++
++]])
+diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
+new file mode 100644
+index 0000000..09db383
+--- /dev/null
++++ b/m4/ax_cxx_compile_stdcxx_11.m4
+@@ -0,0 +1,39 @@
++# ============================================================================
++# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
++# ============================================================================
++#
++# SYNOPSIS
++#
++# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional])
++#
++# DESCRIPTION
++#
++# Check for baseline language coverage in the compiler for the C++11
++# standard; if necessary, add switches to CXXFLAGS to enable support.
++#
++# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX
++# macro with the version set to C++11. The two optional arguments are
++# forwarded literally as the second and third argument respectively.
++# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for
++# more information. If you want to use this macro, you also need to
++# download the ax_cxx_compile_stdcxx.m4 file.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
++# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
++# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
++# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
++# Copyright (c) 2015 Paul Norman <penorman@mac.com>
++# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
++#
++# Copying and distribution of this file, with or without modification, are
++# permitted in any medium without royalty provided the copyright notice
++# and this notice are preserved. This file is offered as-is, without any
++# warranty.
++
++#serial 14
++
++include([ax_cxx_compile_stdcxx.m4])
++
++AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])])
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol_3.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol_3.0.bb
new file mode 100644
index 000000000..959068dd3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/pulseaudio/pavucontrol_3.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "PulseAudio Volume Control (pavucontrol) is a simple GTK based volume control tool ("mixer") for the PulseAudio sound server."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "intltool-native gtkmm libcanberra pulseaudio"
+
+inherit gnome distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://freedesktop.org/software/pulseaudio/${BPN}/${BP}.tar.xz \
+ file://0001-build-sys-Use-C-11-for-building.patch \
+ file://0002-build-sys-Add-m4-file-for-AX_CXX_COMPILE_STDCXX_11.patch \
+ "
+SRC_URI[md5sum] = "176308d2c03f8f3a7b2bd4f4d284fe71"
+SRC_URI[sha256sum] = "b3d2ea5a25fc88dcee80c396014f72df1b4742f8cfbbc5349c39d64a0d338890"
+
+EXTRA_OECONF = " --disable-gtk3 --disable-lynx "
+
+RDEPENDS_${PN} += "pulseaudio-server"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/sound-themes/sound-theme-freedesktop_0.8.bb b/meta-openembedded/meta-oe/recipes-multimedia/sound-themes/sound-theme-freedesktop_0.8.bb
new file mode 100644
index 000000000..098b08d47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/sound-themes/sound-theme-freedesktop_0.8.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Freedesktop sound theme"
+HOMEPAGE = "http://freedesktop.org/wiki/Specifications/sound-theme-spec"
+LICENSE = "GPLv2+ & CC-BY-3.0 & CC-BY-SA-3.0"
+LIC_FILES_CHKSUM = "file://CREDITS;md5=3213e601ce34bb42ddc3498903ac4e69"
+
+# glib-2.0 for glib-gettext.m4 which provides AM_GLIB_GNU_GETTEXT
+# intltool for intltool.m4 which provides IT_PROG_INTLTOOL
+DEPENDS = "glib-2.0 intltool-native"
+
+inherit autotools gettext
+
+DEPENDS += "glib-2.0-native intltool-native"
+
+SRC_URI = "http://people.freedesktop.org/~mccann/dist/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "d7387912cfd275282d1ec94483cb2f62"
+SRC_URI[sha256sum] = "cb518b20eef05ec2e82dda1fa89a292c1760dc023aba91b8aa69bafac85e8a14"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
new file mode 100644
index 000000000..eb294b3fb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
@@ -0,0 +1,43 @@
+From 67a6e919b8263d6d2b7150e62f26fb06bbc526ef Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 27 Feb 2015 21:55:36 +0000
+Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
+ libv4l2subdev"
+
+This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Conflicts:
+ utils/media-ctl/Makefile.am
+
+---
+ utils/media-ctl/Makefile.am | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index ee7dcc9..d11fa2e 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -1,8 +1,7 @@
+-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
+-
++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
+ libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
+-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
+-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
+
+ media-bus-format-names.h: ../../include/linux/media-bus-format.h
+ sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
+@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
+ nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
+ libv4l2subdev_la_SOURCES = libv4l2subdev.c
+ libv4l2subdev_la_LIBADD = libmediactl.la
+-libv4l2subdev_la_CFLAGS = -static
+-libv4l2subdev_la_LDFLAGS = -static
+-
+ mediactl_includedir=$(includedir)/mediactl
+ noinst_HEADERS = mediactl.h v4l2subdev.h
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-buildsystem-do-not-assume-building-in-source-tree.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-buildsystem-do-not-assume-building-in-source-tree.patch
new file mode 100644
index 000000000..12609d30e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-buildsystem-do-not-assume-building-in-source-tree.patch
@@ -0,0 +1,108 @@
+From 75372b8088c20474497b79ec6cf1e99f2d17f56d Mon Sep 17 00:00:00 2001
+From: Ismo Puustinen <ismo.puustinen@intel.com>
+Date: Mon, 3 Apr 2017 13:23:38 +0300
+Subject: [PATCH] buildsystem: do not assume building in source tree.
+
+Use $(top_srcdir) as reference for include paths and buildtime scripts.
+Otherwise compilation outside of project root directory will fail
+because header and script paths are wrong.
+
+To reproduce: mkdir b; cd b; ../configure; make
+
+Upstream-status: Accepted [https://git.linuxtv.org//v4l-utils.git/commit/?id=bd98c9a99bffc8d44c54859345e4dfee0ada4275]
+
+Signed-off-by: Ismo Puustinen <ismo.puustinen@intel.com>
+
+---
+ utils/cec-compliance/Makefile.am | 2 +-
+ utils/cec-ctl/Makefile.am | 2 +-
+ utils/cec-follower/Makefile.am | 4 ++--
+ utils/qv4l2/Makefile.am | 2 +-
+ utils/v4l2-compliance/Makefile.am | 2 +-
+ utils/v4l2-ctl/Makefile.am | 2 +-
+ 6 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/utils/cec-compliance/Makefile.am b/utils/cec-compliance/Makefile.am
+index f05fe6c..f7d1535 100644
+--- a/utils/cec-compliance/Makefile.am
++++ b/utils/cec-compliance/Makefile.am
+@@ -7,7 +7,7 @@ cec_compliance_LDFLAGS = -lrt
+ cec-compliance.cpp: cec-table.h
+
+ cec-table.h: ../cec-ctl/msg2ctl.pl ../../include/linux/cec.h ../../include/linux/cec-funcs.h
+- ../cec-ctl/msg2ctl.pl 2 ../../include/linux/cec.h ../../include/linux/cec-funcs.h >$@
++ $(top_srcdir)/utils/cec-ctl/msg2ctl.pl 2 $(top_srcdir)/include/linux/cec.h $(top_srcdir)/include/linux/cec-funcs.h >$@
+
+ cec-compliance.cpp: version.h
+
+diff --git a/utils/cec-ctl/Makefile.am b/utils/cec-ctl/Makefile.am
+index 4a6eae5..570a070 100644
+--- a/utils/cec-ctl/Makefile.am
++++ b/utils/cec-ctl/Makefile.am
+@@ -6,7 +6,7 @@ cec_ctl_SOURCES = cec-ctl.cpp
+ cec-ctl.cpp: cec-ctl-gen.h
+
+ cec-ctl-gen.h: msg2ctl.pl ../../include/linux/cec.h ../../include/linux/cec-funcs.h
+- ./msg2ctl.pl 0 ../../include/linux/cec.h ../../include/linux/cec-funcs.h >$@
++ $(top_srcdir)/utils/cec-ctl/msg2ctl.pl 0 $(top_srcdir)/include/linux/cec.h $(top_srcdir)/include/linux/cec-funcs.h >$@
+
+ clean-local:
+ -rm -vf cec-ctl-gen.h
+diff --git a/utils/cec-follower/Makefile.am b/utils/cec-follower/Makefile.am
+index d8ad292..e3553eb 100644
+--- a/utils/cec-follower/Makefile.am
++++ b/utils/cec-follower/Makefile.am
+@@ -7,12 +7,12 @@ cec_follower_LDFLAGS = -lrt
+ cec-log.cpp: cec-log.h
+
+ cec-log.h: ../cec-ctl/msg2ctl.pl ../../include/linux/cec.h ../../include/linux/cec-funcs.h
+- ../cec-ctl/msg2ctl.pl 1 ../../include/linux/cec.h ../../include/linux/cec-funcs.h >$@
++ $(top_srcdir)/utils/cec-ctl/msg2ctl.pl 1 $(top_srcdir)/include/linux/cec.h $(top_srcdir)/include/linux/cec-funcs.h >$@
+
+ cec-follower.cpp: cec-table.h version.h
+
+ cec-table.h: ../cec-ctl/msg2ctl.pl ../../include/linux/cec.h ../../include/linux/cec-funcs.h
+- ../cec-ctl/msg2ctl.pl 2 ../../include/linux/cec.h ../../include/linux/cec-funcs.h >$@
++ $(top_srcdir)/utils/cec-ctl/msg2ctl.pl 2 $(top_srcdir)/include/linux/cec.h $(top_srcdir)/include/linux/cec-funcs.h >$@
+
+ version.h:
+ @if git show-ref -s HEAD >/dev/null 2>&1; then \
+diff --git a/utils/qv4l2/Makefile.am b/utils/qv4l2/Makefile.am
+index fd58486..ccd1a2a 100644
+--- a/utils/qv4l2/Makefile.am
++++ b/utils/qv4l2/Makefile.am
+@@ -8,7 +8,7 @@ qv4l2_SOURCES = qv4l2.cpp general-tab.cpp ctrl-tab.cpp vbi-tab.cpp capture-win.c
+ nodist_qv4l2_SOURCES = moc_qv4l2.cpp moc_general-tab.cpp moc_capture-win.cpp moc_vbi-tab.cpp qrc_qv4l2.cpp
+ qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la \
+ ../libv4l2util/libv4l2util.la ../libmedia_dev/libmedia_dev.la
+-qv4l2_CPPFLAGS = -I../common
++qv4l2_CPPFLAGS = -I$(top_srcdir)/utils/common
+
+ if WITH_QTGL
+ qv4l2_CPPFLAGS += $(QTGL_CFLAGS)
+diff --git a/utils/v4l2-compliance/Makefile.am b/utils/v4l2-compliance/Makefile.am
+index c2b5919..fb8d12e 100644
+--- a/utils/v4l2-compliance/Makefile.am
++++ b/utils/v4l2-compliance/Makefile.am
+@@ -5,7 +5,7 @@ DEFS :=
+ v4l2_compliance_SOURCES = v4l2-compliance.cpp v4l2-test-debug.cpp v4l2-test-input-output.cpp \
+ v4l2-test-controls.cpp v4l2-test-io-config.cpp v4l2-test-formats.cpp v4l2-test-buffers.cpp \
+ v4l2-test-codecs.cpp v4l2-test-colors.cpp v4l2-compliance.h
+-v4l2_compliance_CPPFLAGS = -I../common
++v4l2_compliance_CPPFLAGS = -I$(top_srcdir)/utils/common
+
+ if WITH_V4L2_COMPLIANCE_LIBV4L
+ v4l2_compliance_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la -lrt -lpthread
+diff --git a/utils/v4l2-ctl/Makefile.am b/utils/v4l2-ctl/Makefile.am
+index 955647d..825e53f 100644
+--- a/utils/v4l2-ctl/Makefile.am
++++ b/utils/v4l2-ctl/Makefile.am
+@@ -7,7 +7,7 @@ v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cp
+ v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
+ v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp v4l2-ctl-modes.cpp \
+ v4l2-tpg-colors.c v4l2-tpg-core.c v4l-stream.c
+-v4l2_ctl_CPPFLAGS = -I../common
++v4l2_ctl_CPPFLAGS = -I$(top_srcdir)/utils/common
+
+ if WITH_V4L2_CTL_LIBV4L
+ v4l2_ctl_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la -lrt -lpthread
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-ir-ctl-Define-TEMP_FAILURE_RETRY-if-undefined.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-ir-ctl-Define-TEMP_FAILURE_RETRY-if-undefined.patch
new file mode 100644
index 000000000..82fc3e120
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0001-ir-ctl-Define-TEMP_FAILURE_RETRY-if-undefined.patch
@@ -0,0 +1,53 @@
+From b2efcc20617d6317f74c4acb2a6af5b765f20b34 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 13:11:25 -0700
+Subject: [PATCH] ir-ctl: Define TEMP_FAILURE_RETRY if undefined
+
+use strndup() instead of strndupa() which is not
+universally available in C libraries
+
+Taken from AlpineLinux
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ utils/ir-ctl/ir-ctl.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/utils/ir-ctl/ir-ctl.c b/utils/ir-ctl/ir-ctl.c
+index bc58cee..1a44011 100644
+--- a/utils/ir-ctl/ir-ctl.c
++++ b/utils/ir-ctl/ir-ctl.c
+@@ -42,6 +42,16 @@
+ # define _(string) string
+ #endif
+
++/* taken from glibc unistd.h */
++#ifndef TEMP_FAILURE_RETRY
++#define TEMP_FAILURE_RETRY(expression) \
++ (__extension__ \
++ ({ long int __result; \
++ do __result = (long int) (expression); \
++ while (__result == -1L && errno == EINTR); \
++ __result; }))
++#endif
++
+ # define N_(string) string
+
+
+@@ -344,12 +354,14 @@ static struct file *read_scancode(const char *name)
+ return NULL;
+ }
+
+- pstr = strndupa(name, p - name);
++ pstr = strndup(name, p - name);
+
+ if (!protocol_match(pstr, &proto)) {
+ fprintf(stderr, _("error: protocol '%s' not found\n"), pstr);
++ free(pstr);
+ return NULL;
+ }
++ free(pstr);
+
+ if (!strtoscancode(p + 1, &scancode)) {
+ fprintf(stderr, _("error: invalid scancode '%s'\n"), p + 1);
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0002-contrib-test-Link-mc_nextgen_test-with-libargp-if-ne.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0002-contrib-test-Link-mc_nextgen_test-with-libargp-if-ne.patch
new file mode 100644
index 000000000..a779a307d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0002-contrib-test-Link-mc_nextgen_test-with-libargp-if-ne.patch
@@ -0,0 +1,26 @@
+From 49f865a17d62db7bbd333a9b83fadeea55686e35 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 13:17:19 -0700
+Subject: [PATCH] contrib/test: Link mc_nextgen_test with libargp if needed
+
+musl depends on external argp implementation e.g.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ contrib/test/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/contrib/test/Makefile.am b/contrib/test/Makefile.am
+index 4641e21..e47b948 100644
+--- a/contrib/test/Makefile.am
++++ b/contrib/test/Makefile.am
+@@ -32,7 +32,7 @@ v4l2gl_LDFLAGS = $(X11_LIBS) $(GL_LIBS) $(GLU_LIBS) $(ARGP_LIBS)
+ v4l2gl_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la
+
+ mc_nextgen_test_CFLAGS = $(LIBUDEV_CFLAGS)
+-mc_nextgen_test_LDFLAGS = $(LIBUDEV_LIBS)
++mc_nextgen_test_LDFLAGS = $(ARGP_LIBS) $(LIBUDEV_LIBS)
+
+
+ ioctl_test_SOURCES = ioctl-test.c ioctl-test.h ioctl_32.h ioctl_64.h
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0003-v4l2-ctl-Do-not-use-getsubopt.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0003-v4l2-ctl-Do-not-use-getsubopt.patch
new file mode 100644
index 000000000..5b84af2c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/0003-v4l2-ctl-Do-not-use-getsubopt.patch
@@ -0,0 +1,47 @@
+From f7a4b79b3323534460a63b3e6c58ebaf06adf207 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 13:20:05 -0700
+Subject: [PATCH] v4l2-ctl: Do not use getsubopt
+
+POSIX says that behavior when subopts list is empty is undefined.
+musl libs will set value to NULL which leads to crash.
+
+Taken from AlpineLinux
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ utils/v4l2-ctl/v4l2-ctl-common.cpp | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+index 3ea6cd3..291fb3e 100644
+--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+@@ -692,16 +692,17 @@ static bool parse_subset(char *optarg)
+
+ static bool parse_next_subopt(char **subs, char **value)
+ {
+- static char *const subopts[] = {
+- NULL
+- };
+- int opt = getsubopt(subs, subopts, value);
++ char *p = *subs;
++ *value = *subs;
+
+- if (opt < 0 || *value)
+- return false;
+- fprintf(stderr, "No value given to suboption <%s>\n",
+- subopts[opt]);
+- return true;
++ while (*p && *p != ',')
++ p++;
++
++ if (*p)
++ *p++ = '\0';
++
++ *subs = p;
++ return false;
+ }
+
+ void common_cmd(int ch, char *optarg)
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/export-mediactl-headers.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/export-mediactl-headers.patch
new file mode 100644
index 000000000..55a5cdc8a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/export-mediactl-headers.patch
@@ -0,0 +1,23 @@
+From b82e509c10659a4647961a6da3adf4d285dea2dd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Mar 2015 22:25:07 +0000
+
+---
+ utils/media-ctl/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index 7c520a2..748353d 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
+ nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
+ libv4l2subdev_la_SOURCES = libv4l2subdev.c
+ libv4l2subdev_la_LIBADD = libmediactl.la
+-mediactl_includedir=$(includedir)/mediactl
+-noinst_HEADERS = mediactl.h v4l2subdev.h
++otherincludedir = $(includedir)/mediactl
++otherinclude_HEADERS = mediactl.h v4l2subdev.h
+
+ pkgconfig_DATA = libmediactl.pc
+ bin_PROGRAMS = media-ctl
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/mediactl-pkgconfig.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/mediactl-pkgconfig.patch
new file mode 100644
index 000000000..9fcf61165
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils/mediactl-pkgconfig.patch
@@ -0,0 +1,20 @@
+From 480c04ac6a9d11bfef9d4aca073052fdcee4fdea Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Mar 2015 22:25:07 +0000
+
+---
+ utils/media-ctl/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index d11fa2e..7c520a2 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
+ mediactl_includedir=$(includedir)/mediactl
+ noinst_HEADERS = mediactl.h v4l2subdev.h
+
++pkgconfig_DATA = libmediactl.pc
+ bin_PROGRAMS = media-ctl
+ media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
+ media_ctl_LDADD = libmediactl.la libv4l2subdev.la
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.12.3.bb b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.12.3.bb
new file mode 100644
index 000000000..57cfb1318
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.12.3.bb
@@ -0,0 +1,55 @@
+SUMMARY = "v4l2 and IR applications"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
+ file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
+PROVIDES = "libv4l media-ctl"
+
+DEPENDS = "jpeg \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11', '', d)}"
+DEPENDS_append_libc-musl = " argp-standalone"
+DEPENDS_append_class-target = " udev"
+LDFLAGS_append = " -pthread"
+
+inherit autotools gettext pkgconfig
+
+PACKAGECONFIG ??= "media-ctl"
+PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
+
+SRC_URI = "http://linuxtv.org/downloads/v4l-utils/v4l-utils-${PV}.tar.bz2 \
+ file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
+ file://0001-buildsystem-do-not-assume-building-in-source-tree.patch \
+ file://mediactl-pkgconfig.patch \
+ file://export-mediactl-headers.patch \
+ file://0001-ir-ctl-Define-TEMP_FAILURE_RETRY-if-undefined.patch \
+ file://0002-contrib-test-Link-mc_nextgen_test-with-libargp-if-ne.patch \
+ file://0003-v4l2-ctl-Do-not-use-getsubopt.patch \
+ "
+SRC_URI[md5sum] = "89e1ed6c69c94e0489dc0a638c7841aa"
+SRC_URI[sha256sum] = "5a47dd6f0e7dfe902d94605c01d385a4a4e87583ff5856d6f181900ea81cf46e"
+
+EXTRA_OECONF = "--disable-qv4l2 --enable-shared --with-udevdir=${base_libdir}/udev"
+
+VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
+
+PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dbg libv4l-dev"
+
+FILES_media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
+
+FILES_ir-keytable = "${bindir}/ir-keytable ${base_libdir}/udev/rules.d/*-infrared.rules"
+RDEPENDS_ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
+
+FILES_rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
+
+FILES_${PN} = "${bindir} ${sbindir}"
+
+FILES_libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so ${libdir}/libv4l/plugins/*.so \
+ ${libdir}/libdvbv5*${SOLIBS} \
+ ${libdir}/libv4l/*-decomp"
+
+FILES_libv4l-dbg += "${libdir}/libv4l/.debug ${libdir}/libv4l/plugins/.debug"
+FILES_libv4l-dev += "${includedir} ${libdir}/pkgconfig \
+ ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
+ ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la ${libdir}/libv4l/plugins/*.la"
+
+PARALLEL_MAKE_class-native = ""
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta/0001-Add-stdout-mode-to-allow-streaming-over-the-network-.patch b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta/0001-Add-stdout-mode-to-allow-streaming-over-the-network-.patch
new file mode 100644
index 000000000..41a5dbf4f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta/0001-Add-stdout-mode-to-allow-streaming-over-the-network-.patch
@@ -0,0 +1,961 @@
+From 141d3b3593722eb3d588e7c4b1542f810bc25853 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 5 Jun 2014 11:29:20 -0500
+Subject: [PATCH] Add stdout mode to allow streaming over the network with nc
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+Signed-off-by: Chase Maupin <Chase.Maupin@ti.com>
+---
+ yavta.c | 315 ++++++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 169 insertions(+), 146 deletions(-)
+
+diff --git a/yavta.c b/yavta.c
+index 32adc26..b398da0 100644
+--- a/yavta.c
++++ b/yavta.c
+@@ -309,7 +309,7 @@ static bool video_has_fd(struct device *dev)
+ static int video_set_fd(struct device *dev, int fd)
+ {
+ if (video_has_fd(dev)) {
+- printf("Can't set fd (already open).\n");
++ fprintf(stderr, "Can't set fd (already open).\n");
+ return -1;
+ }
+
+@@ -321,18 +321,18 @@ static int video_set_fd(struct device *dev, int fd)
+ static int video_open(struct device *dev, const char *devname)
+ {
+ if (video_has_fd(dev)) {
+- printf("Can't open device (already open).\n");
++ fprintf(stderr, "Can't open device (already open).\n");
+ return -1;
+ }
+
+ dev->fd = open(devname, O_RDWR);
+ if (dev->fd < 0) {
+- printf("Error opening device %s: %s (%d).\n", devname,
++ fprintf(stderr, "Error opening device %s: %s (%d).\n", devname,
+ strerror(errno), errno);
+ return dev->fd;
+ }
+
+- printf("Device %s opened.\n", devname);
++ fprintf(stderr, "Device %s opened.\n", devname);
+
+ dev->opened = 1;
+
+@@ -352,7 +352,7 @@ static int video_querycap(struct device *dev, unsigned int *capabilities)
+ *capabilities = cap.capabilities & V4L2_CAP_DEVICE_CAPS
+ ? cap.device_caps : cap.capabilities;
+
+- printf("Device `%s' on `%s' is a video %s (%s mplanes) device.\n",
++ fprintf(stderr, "Device `%s' on `%s' is a video %s (%s mplanes) device.\n",
+ cap.card, cap.bus_info,
+ video_is_capture(dev) ? "capture" : "output",
+ video_is_mplane(dev) ? "with" : "without");
+@@ -370,7 +370,7 @@ static int cap_get_buf_type(unsigned int capabilities)
+ } else if (capabilities & V4L2_CAP_VIDEO_OUTPUT) {
+ return V4L2_BUF_TYPE_VIDEO_OUTPUT;
+ } else {
+- printf("Device supports neither capture nor output.\n");
++ fprintf(stderr, "Device supports neither capture nor output.\n");
+ return -EINVAL;
+ }
+
+@@ -440,7 +440,7 @@ static int get_control(struct device *dev, unsigned int id, int type,
+ }
+ }
+
+- printf("unable to get control 0x%8.8x: %s (%d).\n",
++ fprintf(stderr, "unable to get control 0x%8.8x: %s (%d).\n",
+ id, strerror(errno), errno);
+ return -1;
+ }
+@@ -484,12 +484,12 @@ static void set_control(struct device *dev, unsigned int id, int type,
+ val = old.value;
+ }
+ if (ret == -1) {
+- printf("unable to set control 0x%8.8x: %s (%d).\n",
++ fprintf(stderr, "unable to set control 0x%8.8x: %s (%d).\n",
+ id, strerror(errno), errno);
+ return;
+ }
+
+- printf("Control 0x%08x set to %" PRId64 ", is %" PRId64 "\n",
++ fprintf(stderr, "Control 0x%08x set to %" PRId64 ", is %" PRId64 "\n",
+ id, old_val, val);
+ }
+
+@@ -504,7 +504,7 @@ static int video_get_format(struct device *dev)
+
+ ret = ioctl(dev->fd, VIDIOC_G_FMT, &fmt);
+ if (ret < 0) {
+- printf("Unable to get format: %s (%d).\n", strerror(errno),
++ fprintf(stderr, "Unable to get format: %s (%d).\n", strerror(errno),
+ errno);
+ return ret;
+ }
+@@ -514,7 +514,7 @@ static int video_get_format(struct device *dev)
+ dev->height = fmt.fmt.pix_mp.height;
+ dev->num_planes = fmt.fmt.pix_mp.num_planes;
+
+- printf("Video format: %s (%08x) %ux%u field %s, %u planes: \n",
++ fprintf(stderr, "Video format: %s (%08x) %ux%u field %s, %u planes: \n",
+ v4l2_format_name(fmt.fmt.pix_mp.pixelformat), fmt.fmt.pix_mp.pixelformat,
+ fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height,
+ v4l2_field_name(fmt.fmt.pix_mp.field),
+@@ -527,7 +527,7 @@ static int video_get_format(struct device *dev)
+ fmt.fmt.pix_mp.plane_fmt[i].bytesperline ?
+ fmt.fmt.pix_mp.plane_fmt[i].sizeimage : 0;
+
+- printf(" * Stride %u, buffer size %u\n",
++ fprintf(stderr, " * Stride %u, buffer size %u\n",
+ fmt.fmt.pix_mp.plane_fmt[i].bytesperline,
+ fmt.fmt.pix_mp.plane_fmt[i].sizeimage);
+ }
+@@ -539,7 +539,7 @@ static int video_get_format(struct device *dev)
+ dev->plane_fmt[0].bytesperline = fmt.fmt.pix.bytesperline;
+ dev->plane_fmt[0].sizeimage = fmt.fmt.pix.bytesperline ? fmt.fmt.pix.sizeimage : 0;
+
+- printf("Video format: %s (%08x) %ux%u (stride %u) field %s buffer size %u\n",
++ fprintf(stderr, "Video format: %s (%08x) %ux%u (stride %u) field %s buffer size %u\n",
+ v4l2_format_name(fmt.fmt.pix.pixelformat), fmt.fmt.pix.pixelformat,
+ fmt.fmt.pix.width, fmt.fmt.pix.height, fmt.fmt.pix.bytesperline,
+ v4l2_field_name(fmt.fmt.pix_mp.field),
+@@ -581,25 +581,25 @@ static int video_set_format(struct device *dev, unsigned int w, unsigned int h,
+
+ ret = ioctl(dev->fd, VIDIOC_S_FMT, &fmt);
+ if (ret < 0) {
+- printf("Unable to set format: %s (%d).\n", strerror(errno),
++ fprintf(stderr, "Unable to set format: %s (%d).\n", strerror(errno),
+ errno);
+ return ret;
+ }
+
+ if (video_is_mplane(dev)) {
+- printf("Video format set: %s (%08x) %ux%u field %s, %u planes: \n",
++ fprintf(stderr, "Video format set: %s (%08x) %ux%u field %s, %u planes: \n",
+ v4l2_format_name(fmt.fmt.pix_mp.pixelformat), fmt.fmt.pix_mp.pixelformat,
+ fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height,
+ v4l2_field_name(fmt.fmt.pix_mp.field),
+ fmt.fmt.pix_mp.num_planes);
+
+ for (i = 0; i < fmt.fmt.pix_mp.num_planes; i++) {
+- printf(" * Stride %u, buffer size %u\n",
++ fprintf(stderr, " * Stride %u, buffer size %u\n",
+ fmt.fmt.pix_mp.plane_fmt[i].bytesperline,
+ fmt.fmt.pix_mp.plane_fmt[i].sizeimage);
+ }
+ } else {
+- printf("Video format set: %s (%08x) %ux%u (stride %u) field %s buffer size %u\n",
++ fprintf(stderr, "Video format set: %s (%08x) %ux%u (stride %u) field %s buffer size %u\n",
+ v4l2_format_name(fmt.fmt.pix.pixelformat), fmt.fmt.pix.pixelformat,
+ fmt.fmt.pix.width, fmt.fmt.pix.height, fmt.fmt.pix.bytesperline,
+ v4l2_field_name(fmt.fmt.pix.field),
+@@ -619,16 +619,16 @@ static int video_set_framerate(struct device *dev, struct v4l2_fract *time_per_f
+
+ ret = ioctl(dev->fd, VIDIOC_G_PARM, &parm);
+ if (ret < 0) {
+- printf("Unable to get frame rate: %s (%d).\n",
++ fprintf(stderr, "Unable to get frame rate: %s (%d).\n",
+ strerror(errno), errno);
+ return ret;
+ }
+
+- printf("Current frame rate: %u/%u\n",
++ fprintf(stderr, "Current frame rate: %u/%u\n",
+ parm.parm.capture.timeperframe.numerator,
+ parm.parm.capture.timeperframe.denominator);
+
+- printf("Setting frame rate to: %u/%u\n",
++ fprintf(stderr, "Setting frame rate to: %u/%u\n",
+ time_per_frame->numerator,
+ time_per_frame->denominator);
+
+@@ -637,19 +637,19 @@ static int video_set_framerate(struct device *dev, struct v4l2_fract *time_per_f
+
+ ret = ioctl(dev->fd, VIDIOC_S_PARM, &parm);
+ if (ret < 0) {
+- printf("Unable to set frame rate: %s (%d).\n", strerror(errno),
++ fprintf(stderr, "Unable to set frame rate: %s (%d).\n", strerror(errno),
+ errno);
+ return ret;
+ }
+
+ ret = ioctl(dev->fd, VIDIOC_G_PARM, &parm);
+ if (ret < 0) {
+- printf("Unable to get frame rate: %s (%d).\n", strerror(errno),
++ fprintf(stderr, "Unable to get frame rate: %s (%d).\n", strerror(errno),
+ errno);
+ return ret;
+ }
+
+- printf("Frame rate set: %u/%u\n",
++ fprintf(stderr, "Frame rate set: %u/%u\n",
+ parm.parm.capture.timeperframe.numerator,
+ parm.parm.capture.timeperframe.denominator);
+ return 0;
+@@ -674,7 +674,7 @@ static int video_buffer_mmap(struct device *dev, struct buffer *buffer,
+ buffer->mem[i] = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED,
+ dev->fd, offset);
+ if (buffer->mem[i] == MAP_FAILED) {
+- printf("Unable to map buffer %u/%u: %s (%d)\n",
++ fprintf(stderr, "Unable to map buffer %u/%u: %s (%d)\n",
+ buffer->idx, i, strerror(errno), errno);
+ return -1;
+ }
+@@ -682,7 +682,7 @@ static int video_buffer_mmap(struct device *dev, struct buffer *buffer,
+ buffer->size[i] = length;
+ buffer->padding[i] = 0;
+
+- printf("Buffer %u/%u mapped at address %p.\n",
++ fprintf(stderr, "Buffer %u/%u mapped at address %p.\n",
+ buffer->idx, i, buffer->mem[i]);
+ }
+
+@@ -697,7 +697,7 @@ static int video_buffer_munmap(struct device *dev, struct buffer *buffer)
+ for (i = 0; i < dev->num_planes; i++) {
+ ret = munmap(buffer->mem[i], buffer->size[i]);
+ if (ret < 0) {
+- printf("Unable to unmap buffer %u/%u: %s (%d)\n",
++ fprintf(stderr, "Unable to unmap buffer %u/%u: %s (%d)\n",
+ buffer->idx, i, strerror(errno), errno);
+ }
+
+@@ -725,7 +725,7 @@ static int video_buffer_alloc_userptr(struct device *dev, struct buffer *buffer,
+ ret = posix_memalign(&buffer->mem[i], page_size,
+ length + offset + padding);
+ if (ret < 0) {
+- printf("Unable to allocate buffer %u/%u (%d)\n",
++ fprintf(stderr, "Unable to allocate buffer %u/%u (%d)\n",
+ buffer->idx, i, ret);
+ return -ENOMEM;
+ }
+@@ -734,7 +734,7 @@ static int video_buffer_alloc_userptr(struct device *dev, struct buffer *buffer,
+ buffer->size[i] = length;
+ buffer->padding[i] = padding;
+
+- printf("Buffer %u/%u allocated at address %p.\n",
++ fprintf(stderr, "Buffer %u/%u allocated at address %p.\n",
+ buffer->idx, i, buffer->mem[i]);
+ }
+
+@@ -809,12 +809,12 @@ static int video_alloc_buffers(struct device *dev, int nbufs,
+
+ ret = ioctl(dev->fd, VIDIOC_REQBUFS, &rb);
+ if (ret < 0) {
+- printf("Unable to request buffers: %s (%d).\n", strerror(errno),
++ fprintf(stderr, "Unable to request buffers: %s (%d).\n", strerror(errno),
+ errno);
+ return ret;
+ }
+
+- printf("%u buffers requested.\n", rb.count);
++ fprintf(stderr, "%u buffers requested.\n", rb.count);
+
+ buffers = malloc(rb.count * sizeof buffers[0]);
+ if (buffers == NULL)
+@@ -835,12 +835,12 @@ static int video_alloc_buffers(struct device *dev, int nbufs,
+
+ ret = ioctl(dev->fd, VIDIOC_QUERYBUF, &buf);
+ if (ret < 0) {
+- printf("Unable to query buffer %u: %s (%d).\n", i,
++ fprintf(stderr, "Unable to query buffer %u: %s (%d).\n", i,
+ strerror(errno), errno);
+ return ret;
+ }
+ get_ts_flags(buf.flags, &ts_type, &ts_source);
+- printf("length: %u offset: %u timestamp type/source: %s/%s\n",
++ fprintf(stderr, "length: %u offset: %u timestamp type/source: %s/%s\n",
+ buf.length, buf.m.offset, ts_type, ts_source);
+
+ buffers[i].idx = i;
+@@ -899,12 +899,12 @@ static int video_free_buffers(struct device *dev)
+
+ ret = ioctl(dev->fd, VIDIOC_REQBUFS, &rb);
+ if (ret < 0) {
+- printf("Unable to release buffers: %s (%d).\n",
++ fprintf(stderr, "Unable to release buffers: %s (%d).\n",
+ strerror(errno), errno);
+ return ret;
+ }
+
+- printf("%u buffers released.\n", dev->nbufs);
++ fprintf(stderr, "%u buffers released.\n", dev->nbufs);
+
+ free(dev->buffers);
+ dev->nbufs = 0;
+@@ -974,7 +974,7 @@ static int video_queue_buffer(struct device *dev, int index, enum buffer_fill_mo
+
+ ret = ioctl(dev->fd, VIDIOC_QBUF, &buf);
+ if (ret < 0)
+- printf("Unable to queue buffer: %s (%d).\n",
++ fprintf(stderr, "Unable to queue buffer: %s (%d).\n",
+ strerror(errno), errno);
+
+ return ret;
+@@ -987,7 +987,7 @@ static int video_enable(struct device *dev, int enable)
+
+ ret = ioctl(dev->fd, enable ? VIDIOC_STREAMON : VIDIOC_STREAMOFF, &type);
+ if (ret < 0) {
+- printf("Unable to %s streaming: %s (%d).\n",
++ fprintf(stderr, "Unable to %s streaming: %s (%d).\n",
+ enable ? "start" : "stop", strerror(errno), errno);
+ return ret;
+ }
+@@ -1009,10 +1009,10 @@ static void video_query_menu(struct device *dev, struct v4l2_queryctrl *query,
+ continue;
+
+ if (query->type == V4L2_CTRL_TYPE_MENU)
+- printf(" %u: %.32s%s\n", menu.index, menu.name,
++ fprintf(stderr, " %u: %.32s%s\n", menu.index, menu.name,
+ menu.index == value ? " (*)" : "");
+ else
+- printf(" %u: %lld%s\n", menu.index, menu.value,
++ fprintf(stderr, " %u: %lld%s\n", menu.index, menu.value,
+ menu.index == value ? " (*)" : "");
+ };
+ }
+@@ -1043,7 +1043,7 @@ static void video_list_controls(struct device *dev)
+ continue;
+
+ if (query.type == V4L2_CTRL_TYPE_CTRL_CLASS) {
+- printf("--- %s (class 0x%08x) ---\n", query.name, query.id);
++ fprintf(stderr, "--- %s (class 0x%08x) ---\n", query.name, query.id);
+ continue;
+ }
+
+@@ -1053,7 +1053,7 @@ static void video_list_controls(struct device *dev)
+ else
+ sprintf(value, "%" PRId64, val64);
+
+- printf("control 0x%08x `%s' min %d max %d step %d default %d current %s.\n",
++ fprintf(stderr, "control 0x%08x `%s' min %d max %d step %d default %d current %s.\n",
+ query.id, query.name, query.minimum, query.maximum,
+ query.step, query.default_value, value);
+
+@@ -1065,9 +1065,9 @@ static void video_list_controls(struct device *dev)
+ }
+
+ if (nctrls)
+- printf("%u control%s found.\n", nctrls, nctrls > 1 ? "s" : "");
++ fprintf(stderr, "%u control%s found.\n", nctrls, nctrls > 1 ? "s" : "");
+ else
+- printf("No control found.\n");
++ fprintf(stderr, "No control found.\n");
+ }
+
+ static void video_enum_frame_intervals(struct device *dev, __u32 pixelformat,
+@@ -1088,30 +1088,30 @@ static void video_enum_frame_intervals(struct device *dev, __u32 pixelformat,
+ break;
+
+ if (i != ival.index)
+- printf("Warning: driver returned wrong ival index "
++ fprintf(stderr, "Warning: driver returned wrong ival index "
+ "%u.\n", ival.index);
+ if (pixelformat != ival.pixel_format)
+- printf("Warning: driver returned wrong ival pixel "
++ fprintf(stderr, "Warning: driver returned wrong ival pixel "
+ "format %08x.\n", ival.pixel_format);
+ if (width != ival.width)
+- printf("Warning: driver returned wrong ival width "
++ fprintf(stderr, "Warning: driver returned wrong ival width "
+ "%u.\n", ival.width);
+ if (height != ival.height)
+- printf("Warning: driver returned wrong ival height "
++ fprintf(stderr, "Warning: driver returned wrong ival height "
+ "%u.\n", ival.height);
+
+ if (i != 0)
+- printf(", ");
++ fprintf(stderr, ", ");
+
+ switch (ival.type) {
+ case V4L2_FRMIVAL_TYPE_DISCRETE:
+- printf("%u/%u",
++ fprintf(stderr, "%u/%u",
+ ival.discrete.numerator,
+ ival.discrete.denominator);
+ break;
+
+ case V4L2_FRMIVAL_TYPE_CONTINUOUS:
+- printf("%u/%u - %u/%u",
++ fprintf(stderr, "%u/%u - %u/%u",
+ ival.stepwise.min.numerator,
+ ival.stepwise.min.denominator,
+ ival.stepwise.max.numerator,
+@@ -1119,7 +1119,7 @@ static void video_enum_frame_intervals(struct device *dev, __u32 pixelformat,
+ return;
+
+ case V4L2_FRMIVAL_TYPE_STEPWISE:
+- printf("%u/%u - %u/%u (by %u/%u)",
++ fprintf(stderr, "%u/%u - %u/%u (by %u/%u)",
+ ival.stepwise.min.numerator,
+ ival.stepwise.min.denominator,
+ ival.stepwise.max.numerator,
+@@ -1149,23 +1149,23 @@ static void video_enum_frame_sizes(struct device *dev, __u32 pixelformat)
+ break;
+
+ if (i != frame.index)
+- printf("Warning: driver returned wrong frame index "
++ fprintf(stderr, "Warning: driver returned wrong frame index "
+ "%u.\n", frame.index);
+ if (pixelformat != frame.pixel_format)
+- printf("Warning: driver returned wrong frame pixel "
++ fprintf(stderr, "Warning: driver returned wrong frame pixel "
+ "format %08x.\n", frame.pixel_format);
+
+ switch (frame.type) {
+ case V4L2_FRMSIZE_TYPE_DISCRETE:
+- printf("\tFrame size: %ux%u (", frame.discrete.width,
++ fprintf(stderr, "\tFrame size: %ux%u (", frame.discrete.width,
+ frame.discrete.height);
+ video_enum_frame_intervals(dev, frame.pixel_format,
+ frame.discrete.width, frame.discrete.height);
+- printf(")\n");
++ fprintf(stderr, ")\n");
+ break;
+
+ case V4L2_FRMSIZE_TYPE_CONTINUOUS:
+- printf("\tFrame size: %ux%u - %ux%u (",
++ fprintf(stderr, "\tFrame size: %ux%u - %ux%u (",
+ frame.stepwise.min_width,
+ frame.stepwise.min_height,
+ frame.stepwise.max_width,
+@@ -1173,11 +1173,11 @@ static void video_enum_frame_sizes(struct device *dev, __u32 pixelformat)
+ video_enum_frame_intervals(dev, frame.pixel_format,
+ frame.stepwise.max_width,
+ frame.stepwise.max_height);
+- printf(")\n");
++ fprintf(stderr, ")\n");
+ break;
+
+ case V4L2_FRMSIZE_TYPE_STEPWISE:
+- printf("\tFrame size: %ux%u - %ux%u (by %ux%u) (\n",
++ fprintf(stderr, "\tFrame size: %ux%u - %ux%u (by %ux%u) (\n",
+ frame.stepwise.min_width,
+ frame.stepwise.min_height,
+ frame.stepwise.max_width,
+@@ -1187,7 +1187,7 @@ static void video_enum_frame_sizes(struct device *dev, __u32 pixelformat)
+ video_enum_frame_intervals(dev, frame.pixel_format,
+ frame.stepwise.max_width,
+ frame.stepwise.max_height);
+- printf(")\n");
++ fprintf(stderr, ")\n");
+ break;
+
+ default:
+@@ -1211,19 +1211,19 @@ static void video_enum_formats(struct device *dev, enum v4l2_buf_type type)
+ break;
+
+ if (i != fmt.index)
+- printf("Warning: driver returned wrong format index "
++ fprintf(stderr, "Warning: driver returned wrong format index "
+ "%u.\n", fmt.index);
+ if (type != fmt.type)
+- printf("Warning: driver returned wrong format type "
++ fprintf(stderr, "Warning: driver returned wrong format type "
+ "%u.\n", fmt.type);
+
+- printf("\tFormat %u: %s (%08x)\n", i,
++ fprintf(stderr, "\tFormat %u: %s (%08x)\n", i,
+ v4l2_format_name(fmt.pixelformat), fmt.pixelformat);
+- printf("\tType: %s (%u)\n", v4l2_buf_type_name(fmt.type),
++ fprintf(stderr, "\tType: %s (%u)\n", v4l2_buf_type_name(fmt.type),
+ fmt.type);
+- printf("\tName: %.32s\n", fmt.description);
++ fprintf(stderr, "\tName: %.32s\n", fmt.description);
+ video_enum_frame_sizes(dev, fmt.pixelformat);
+- printf("\n");
++ fprintf(stderr, "\n");
+ }
+ }
+
+@@ -1241,13 +1241,13 @@ static void video_enum_inputs(struct device *dev)
+ break;
+
+ if (i != input.index)
+- printf("Warning: driver returned wrong input index "
++ fprintf(stderr, "Warning: driver returned wrong input index "
+ "%u.\n", input.index);
+
+- printf("\tInput %u: %s.\n", i, input.name);
++ fprintf(stderr, "\tInput %u: %s.\n", i, input.name);
+ }
+
+- printf("\n");
++ fprintf(stderr, "\n");
+ }
+
+ static int video_get_input(struct device *dev)
+@@ -1257,7 +1257,7 @@ static int video_get_input(struct device *dev)
+
+ ret = ioctl(dev->fd, VIDIOC_G_INPUT, &input);
+ if (ret < 0) {
+- printf("Unable to get current input: %s (%d).\n",
++ fprintf(stderr, "Unable to get current input: %s (%d).\n",
+ strerror(errno), errno);
+ return ret;
+ }
+@@ -1272,7 +1272,7 @@ static int video_set_input(struct device *dev, unsigned int input)
+
+ ret = ioctl(dev->fd, VIDIOC_S_INPUT, &_input);
+ if (ret < 0)
+- printf("Unable to select input %u: %s (%d).\n", input,
++ fprintf(stderr, "Unable to select input %u: %s (%d).\n", input,
+ strerror(errno), errno);
+
+ return ret;
+@@ -1291,14 +1291,14 @@ static int video_set_quality(struct device *dev, unsigned int quality)
+
+ ret = ioctl(dev->fd, VIDIOC_S_JPEGCOMP, &jpeg);
+ if (ret < 0) {
+- printf("Unable to set quality to %u: %s (%d).\n", quality,
++ fprintf(stderr, "Unable to set quality to %u: %s (%d).\n", quality,
+ strerror(errno), errno);
+ return ret;
+ }
+
+ ret = ioctl(dev->fd, VIDIOC_G_JPEGCOMP, &jpeg);
+ if (ret >= 0)
+- printf("Quality set to %u\n", jpeg.quality);
++ fprintf(stderr, "Quality set to %u\n", jpeg.quality);
+
+ return 0;
+ }
+@@ -1313,7 +1313,7 @@ static int video_load_test_pattern(struct device *dev, const char *filename)
+ if (filename != NULL) {
+ fd = open(filename, O_RDONLY);
+ if (fd == -1) {
+- printf("Unable to open test pattern file '%s': %s (%d).\n",
++ fprintf(stderr, "Unable to open test pattern file '%s': %s (%d).\n",
+ filename, strerror(errno), errno);
+ return -errno;
+ }
+@@ -1331,7 +1331,7 @@ static int video_load_test_pattern(struct device *dev, const char *filename)
+ if (filename != NULL) {
+ ret = read(fd, dev->pattern[plane], size);
+ if (ret != (int)size && dev->plane_fmt[plane].bytesperline != 0) {
+- printf("Test pattern file size %u doesn't match image size %u\n",
++ fprintf(stderr, "Test pattern file size %u doesn't match image size %u\n",
+ ret, size);
+ ret = -EINVAL;
+ goto done;
+@@ -1341,7 +1341,7 @@ static int video_load_test_pattern(struct device *dev, const char *filename)
+ unsigned int i;
+
+ if (dev->plane_fmt[plane].bytesperline == 0) {
+- printf("Compressed format detected for plane %u and no test pattern filename given.\n"
++ fprintf(stderr, "Compressed format detected for plane %u and no test pattern filename given.\n"
+ "The test pattern can't be generated automatically.\n", plane);
+ ret = -EINVAL;
+ goto done;
+@@ -1410,7 +1410,7 @@ static void video_verify_buffer(struct device *dev, struct v4l2_buffer *buf)
+
+ if (dev->plane_fmt[plane].sizeimage &&
+ dev->plane_fmt[plane].sizeimage != length)
+- printf("Warning: bytes used %u != image size %u for plane %u\n",
++ fprintf(stderr, "Warning: bytes used %u != image size %u for plane %u\n",
+ length, dev->plane_fmt[plane].sizeimage, plane);
+
+ if (buffer->padding[plane] == 0)
+@@ -1424,16 +1424,16 @@ static void video_verify_buffer(struct device *dev, struct v4l2_buffer *buf)
+ }
+
+ if (errors) {
+- printf("Warning: %u bytes overwritten among %u first padding bytes for plane %u\n",
++ fprintf(stderr, "Warning: %u bytes overwritten among %u first padding bytes for plane %u\n",
+ errors, dirty, plane);
+
+ dirty = (dirty + 15) & ~15;
+ dirty = dirty > 32 ? 32 : dirty;
+
+ for (i = 0; i < dirty; ++i) {
+- printf("%02x ", data[i]);
++ fprintf(stderr, "%02x ", data[i]);
+ if (i % 16 == 15)
+- printf("\n");
++ fprintf(stderr, "\n");
+ }
+ }
+ }
+@@ -1481,18 +1481,32 @@ static void video_save_image(struct device *dev, struct v4l2_buffer *buf,
+
+ ret = write(fd, dev->buffers[buf->index].mem[i], length);
+ if (ret < 0) {
+- printf("write error: %s (%d)\n", strerror(errno), errno);
++ fprintf(stderr, "write error: %s (%d)\n", strerror(errno), errno);
+ break;
+ } else if (ret != (int)length)
+- printf("write error: only %d bytes written instead of %u\n",
++ fprintf(stderr, "write error: only %d bytes written instead of %u\n",
+ ret, length);
+ }
+ close(fd);
+ }
+
++static void video_stdout_image(struct device *dev, struct v4l2_buffer *buf)
++{
++ int ret;
++
++ fprintf(stderr, "stdout");
++ ret = fwrite(dev->buffers[buf->index].mem, buf->bytesused, 1, stdout);
++
++ if (ret < 0)
++ fprintf(stderr, "write error: %s (%d)\n", strerror(errno), errno);
++ else if (ret != (int)buf->bytesused)
++ fprintf(stderr, "write error: only %d bytes written instead of %u\n",
++ ret, buf->bytesused);
++}
++
+ static int video_do_capture(struct device *dev, unsigned int nframes,
+ unsigned int skip, unsigned int delay, const char *pattern,
+- int do_requeue_last, enum buffer_fill_mode fill)
++ int do_requeue_last, enum buffer_fill_mode fill, int do_stdout)
+ {
+ struct v4l2_plane planes[VIDEO_MAX_PLANES];
+ struct v4l2_buffer buf;
+@@ -1529,7 +1543,7 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+ ret = ioctl(dev->fd, VIDIOC_DQBUF, &buf);
+ if (ret < 0) {
+ if (errno != EIO) {
+- printf("Unable to dequeue buffer: %s (%d).\n",
++ fprintf(stderr, "Unable to dequeue buffer: %s (%d).\n",
+ strerror(errno), errno);
+ goto done;
+ }
+@@ -1550,7 +1564,7 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ get_ts_flags(buf.flags, &ts_type, &ts_source);
+- printf("%u (%u) [%c] %s %u %u B %ld.%06ld %ld.%06ld %.3f fps ts %s/%s\n", i, buf.index,
++ fprintf(stderr, "%u (%u) [%c] %s %u %u B %ld.%06ld %ld.%06ld %.3f fps ts %s/%s\n", i, buf.index,
+ (buf.flags & V4L2_BUF_FLAG_ERROR) ? 'E' : '-',
+ v4l2_field_name(buf.field),
+ buf.sequence, buf.bytesused, buf.timestamp.tv_sec,
+@@ -1563,6 +1577,9 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+ if (video_is_capture(dev) && pattern && !skip)
+ video_save_image(dev, &buf, pattern, i);
+
++ if (video_is_capture(dev) && do_stdout && !skip)
++ video_stdout_image(dev, &buf);
++
+ if (skip)
+ --skip;
+
+@@ -1577,7 +1594,7 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+
+ ret = video_queue_buffer(dev, buf.index, fill);
+ if (ret < 0) {
+- printf("Unable to requeue buffer: %s (%d).\n",
++ fprintf(stderr, "Unable to requeue buffer: %s (%d).\n",
+ strerror(errno), errno);
+ goto done;
+ }
+@@ -1587,7 +1604,7 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+ video_enable(dev, 0);
+
+ if (nframes == 0) {
+- printf("No frames captured.\n");
++ fprintf(stderr, "No frames captured.\n");
+ goto done;
+ }
+
+@@ -1604,7 +1621,7 @@ static int video_do_capture(struct device *dev, unsigned int nframes,
+ bps = size/(ts.tv_nsec/1000.0+1000000.0*ts.tv_sec)*1000000.0;
+ fps = i/(ts.tv_nsec/1000.0+1000000.0*ts.tv_sec)*1000000.0;
+
+- printf("Captured %u frames in %lu.%06lu seconds (%f fps, %f B/s).\n",
++ fprintf(stderr, "Captured %u frames in %lu.%06lu seconds (%f fps, %f B/s).\n",
+ i, ts.tv_sec, ts.tv_nsec/1000, fps, bps);
+
+ done:
+@@ -1616,42 +1633,42 @@ done:
+
+ static void usage(const char *argv0)
+ {
+- printf("Usage: %s [options] device\n", argv0);
+- printf("Supported options:\n");
+- printf("-B, --buffer-type Buffer type (\"capture\", \"output\",\n");
+- printf(" \"capture-mplane\" or \"output-mplane\")\n");
+- printf("-c, --capture[=nframes] Capture frames\n");
+- printf("-C, --check-overrun Verify dequeued frames for buffer overrun\n");
+- printf("-d, --delay Delay (in ms) before requeuing buffers\n");
+- printf("-f, --format format Set the video format\n");
+- printf("-F, --file[=name] Read/write frames from/to disk\n");
+- printf("\tFor video capture devices, the first '#' character in the file name is\n");
+- printf("\texpanded to the frame sequence number. The default file name is\n");
+- printf("\t'frame-#.bin'.\n");
+- printf("-h, --help Show this help screen\n");
+- printf("-i, --input input Select the video input\n");
+- printf("-I, --fill-frames Fill frames with check pattern before queuing them\n");
+- printf("-l, --list-controls List available controls\n");
+- printf("-n, --nbufs n Set the number of video buffers\n");
+- printf("-p, --pause Pause before starting the video stream\n");
+- printf("-q, --quality n MJPEG quality (0-100)\n");
+- printf("-r, --get-control ctrl Get control 'ctrl'\n");
+- printf("-R, --realtime=[priority] Enable realtime RR scheduling\n");
+- printf("-s, --size WxH Set the frame size\n");
+- printf("-t, --time-per-frame num/denom Set the time per frame (eg. 1/25 = 25 fps)\n");
+- printf("-u, --userptr Use the user pointers streaming method\n");
+- printf("-w, --set-control 'ctrl value' Set control 'ctrl' to 'value'\n");
+- printf(" --enum-formats Enumerate formats\n");
+- printf(" --enum-inputs Enumerate inputs\n");
+- printf(" --fd Use a numeric file descriptor insted of a device\n");
+- printf(" --field Interlaced format field order\n");
+- printf(" --no-query Don't query capabilities on open\n");
+- printf(" --offset User pointer buffer offset from page start\n");
+- printf(" --requeue-last Requeue the last buffers before streamoff\n");
+- printf(" --timestamp-source Set timestamp source on output buffers [eof, soe]\n");
+- printf(" --skip n Skip the first n frames\n");
+- printf(" --sleep-forever Sleep forever after configuring the device\n");
+- printf(" --stride value Line stride in bytes\n");
++ fprintf(stderr, "Usage: %s [options] device\n", argv0);
++ fprintf(stderr, "Supported options:\n");
++ fprintf(stderr, "-B, --buffer-type Buffer type (\"capture\", \"output\",\n");
++ fprintf(stderr, " \"capture-mplane\" or \"output-mplane\")\n");
++ fprintf(stderr, "-c, --capture[=nframes] Capture frames\n");
++ fprintf(stderr, "-C, --check-overrun Verify dequeued frames for buffer overrun\n");
++ fprintf(stderr, "-d, --delay Delay (in ms) before requeuing buffers\n");
++ fprintf(stderr, "-f, --format format Set the video format\n");
++ fprintf(stderr, "-F, --file[=name] Read/write frames from/to disk\n");
++ fprintf(stderr, "\tFor video capture devices, the first '#' character in the file name is\n");
++ fprintf(stderr, "\texpanded to the frame sequence number. The default file name is\n");
++ fprintf(stderr, "\t'frame-#.bin'.\n");
++ fprintf(stderr, "-h, --help Show this help screen\n");
++ fprintf(stderr, "-i, --input input Select the video input\n");
++ fprintf(stderr, "-I, --fill-frames Fill frames with check pattern before queuing them\n");
++ fprintf(stderr, "-l, --list-controls List available controls\n");
++ fprintf(stderr, "-n, --nbufs n Set the number of video buffers\n");
++ fprintf(stderr, "-p, --pause Pause before starting the video stream\n");
++ fprintf(stderr, "-q, --quality n MJPEG quality (0-100)\n");
++ fprintf(stderr, "-r, --get-control ctrl Get control 'ctrl'\n");
++ fprintf(stderr, "-R, --realtime=[priority] Enable realtime RR scheduling\n");
++ fprintf(stderr, "-s, --size WxH Set the frame size\n");
++ fprintf(stderr, "-t, --time-per-frame num/denom Set the time per frame (eg. 1/25 = 25 fps)\n");
++ fprintf(stderr, "-u, --userptr Use the user pointers streaming method\n");
++ fprintf(stderr, "-w, --set-control 'ctrl value' Set control 'ctrl' to 'value'\n");
++ fprintf(stderr, " --enum-formats Enumerate formats\n");
++ fprintf(stderr, " --enum-inputs Enumerate inputs\n");
++ fprintf(stderr, " --fd Use a numeric file descriptor insted of a device\n");
++ fprintf(stderr, " --field Interlaced format field order\n");
++ fprintf(stderr, " --no-query Don't query capabilities on open\n");
++ fprintf(stderr, " --offset User pointer buffer offset from page start\n");
++ fprintf(stderr, " --requeue-last Requeue the last buffers before streamoff\n");
++ fprintf(stderr, " --timestamp-source Set timestamp source on output buffers [eof, soe]\n");
++ fprintf(stderr, " --skip n Skip the first n frames\n");
++ fprintf(stderr, " --sleep-forever Sleep forever after configuring the device\n");
++ fprintf(stderr, " --stride value Line stride in bytes\n");
+ }
+
+ #define OPT_ENUM_FORMATS 256
+@@ -1665,6 +1682,7 @@ static void usage(const char *argv0)
+ #define OPT_FD 264
+ #define OPT_TSTAMP_SRC 265
+ #define OPT_FIELD 266
++#define OPT_STDOUT 267
+
+ static struct option opts[] = {
+ {"buffer-type", 1, 0, 'B'},
+@@ -1677,6 +1695,7 @@ static struct option opts[] = {
+ {"field", 1, 0, OPT_FIELD},
+ {"file", 2, 0, 'F'},
+ {"fill-frames", 0, 0, 'I'},
++ {"stdout", 0, 0, OPT_STDOUT},
+ {"format", 1, 0, 'f'},
+ {"help", 0, 0, 'h'},
+ {"input", 1, 0, 'i'},
+@@ -1717,7 +1736,8 @@ int main(int argc, char *argv[])
+ int do_list_controls = 0, do_get_control = 0, do_set_control = 0;
+ int do_sleep_forever = 0, do_requeue_last = 0;
+ int do_rt = 0;
+- int no_query = 0;
++ int no_query = 0;
++ int do_stdout = 0;
+ char *endptr;
+ int c;
+
+@@ -1755,7 +1775,7 @@ int main(int argc, char *argv[])
+ case 'B':
+ ret = v4l2_buf_type_from_string(optarg);
+ if (ret == -1) {
+- printf("Bad buffer type \"%s\"\n", optarg);
++ fprintf(stderr, "Bad buffer type \"%s\"\n", optarg);
+ return 1;
+ }
+ video_set_buf_type(&dev, ret);
+@@ -1775,7 +1795,7 @@ int main(int argc, char *argv[])
+ do_set_format = 1;
+ info = v4l2_format_by_name(optarg);
+ if (info == NULL) {
+- printf("Unsupported video format '%s'\n", optarg);
++ fprintf(stderr, "Unsupported video format '%s'\n", optarg);
+ return 1;
+ }
+ pixelformat = info->fourcc;
+@@ -1812,7 +1832,7 @@ int main(int argc, char *argv[])
+ case 'r':
+ ctrl_name = strtol(optarg, &endptr, 0);
+ if (*endptr != 0) {
+- printf("Invalid control name '%s'\n", optarg);
++ fprintf(stderr, "Invalid control name '%s'\n", optarg);
+ return 1;
+ }
+ do_get_control = 1;
+@@ -1826,12 +1846,12 @@ int main(int argc, char *argv[])
+ do_set_format = 1;
+ width = strtol(optarg, &endptr, 10);
+ if (*endptr != 'x' || endptr == optarg) {
+- printf("Invalid size '%s'\n", optarg);
++ fprintf(stderr, "Invalid size '%s'\n", optarg);
+ return 1;
+ }
+ height = strtol(endptr + 1, &endptr, 10);
+ if (*endptr != 0) {
+- printf("Invalid size '%s'\n", optarg);
++ fprintf(stderr, "Invalid size '%s'\n", optarg);
+ return 1;
+ }
+ break;
+@@ -1839,12 +1859,12 @@ int main(int argc, char *argv[])
+ do_set_time_per_frame = 1;
+ time_per_frame.numerator = strtol(optarg, &endptr, 10);
+ if (*endptr != '/' || endptr == optarg) {
+- printf("Invalid time per frame '%s'\n", optarg);
++ fprintf(stderr, "Invalid time per frame '%s'\n", optarg);
+ return 1;
+ }
+ time_per_frame.denominator = strtol(endptr + 1, &endptr, 10);
+ if (*endptr != 0) {
+- printf("Invalid time per frame '%s'\n", optarg);
++ fprintf(stderr, "Invalid time per frame '%s'\n", optarg);
+ return 1;
+ }
+ break;
+@@ -1854,12 +1874,12 @@ int main(int argc, char *argv[])
+ case 'w':
+ ctrl_name = strtol(optarg, &endptr, 0);
+ if (*endptr != ' ' || endptr == optarg) {
+- printf("Invalid control name '%s'\n", optarg);
++ fprintf(stderr, "Invalid control name '%s'\n", optarg);
+ return 1;
+ }
+ ctrl_value = strtol(endptr + 1, &endptr, 0);
+ if (*endptr != 0) {
+- printf("Invalid control value '%s'\n", optarg);
++ fprintf(stderr, "Invalid control value '%s'\n", optarg);
+ return 1;
+ }
+ do_set_control = 1;
+@@ -1873,16 +1893,16 @@ int main(int argc, char *argv[])
+ case OPT_FD:
+ ret = atoi(optarg);
+ if (ret < 0) {
+- printf("Bad file descriptor %d\n", ret);
++ fprintf(stderr, "Bad file descriptor %d\n", ret);
+ return 1;
+ }
+- printf("Using file descriptor %d\n", ret);
++ fprintf(stderr, "Using file descriptor %d\n", ret);
+ video_set_fd(&dev, ret);
+ break;
+ case OPT_FIELD:
+ field = v4l2_field_from_string(optarg);
+ if (field == (enum v4l2_field)-1) {
+- printf("Invalid field order '%s'\n", optarg);
++ fprintf(stderr, "Invalid field order '%s'\n", optarg);
+ return 1;
+ }
+ break;
+@@ -1907,22 +1927,25 @@ int main(int argc, char *argv[])
+ } else if (!strcmp(optarg, "soe")) {
+ dev.buffer_output_flags |= V4L2_BUF_FLAG_TSTAMP_SRC_SOE;
+ } else {
+- printf("Invalid timestamp source %s\n", optarg);
++ fprintf(stderr, "Invalid timestamp source %s\n", optarg);
+ return 1;
+ }
+ break;
+ case OPT_USERPTR_OFFSET:
+ userptr_offset = atoi(optarg);
+ break;
++ case OPT_STDOUT:
++ do_stdout = 1;
++ break;
+ default:
+- printf("Invalid option -%c\n", c);
+- printf("Run %s -h for help.\n", argv[0]);
++ fprintf(stderr, "Invalid option -%c\n", c);
++ fprintf(stderr, "Run %s -h for help.\n", argv[0]);
+ return 1;
+ }
+ }
+
+ if ((fill_mode & BUFFER_FILL_PADDING) && memtype != V4L2_MEMORY_USERPTR) {
+- printf("Buffer overrun can only be checked in USERPTR mode.\n");
++ fprintf(stderr, "Buffer overrun can only be checked in USERPTR mode.\n");
+ return 1;
+ }
+
+@@ -1959,7 +1982,7 @@ int main(int argc, char *argv[])
+ ret = get_control(&dev, ctrl_name,
+ get_control_type(&dev, ctrl_name), &val);
+ if (ret >= 0)
+- printf("Control 0x%08x value %" PRId64 "\n", ctrl_name, val);
++ fprintf(stderr, "Control 0x%08x value %" PRId64 "\n", ctrl_name, val);
+ }
+
+ if (do_set_control)
+@@ -1970,7 +1993,7 @@ int main(int argc, char *argv[])
+ video_list_controls(&dev);
+
+ if (do_enum_formats) {
+- printf("- Available formats:\n");
++ fprintf(stderr, "- Available formats:\n");
+ video_enum_formats(&dev, V4L2_BUF_TYPE_VIDEO_CAPTURE);
+ video_enum_formats(&dev, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+ video_enum_formats(&dev, V4L2_BUF_TYPE_VIDEO_OUTPUT);
+@@ -1979,14 +2002,14 @@ int main(int argc, char *argv[])
+ }
+
+ if (do_enum_inputs) {
+- printf("- Available inputs:\n");
++ fprintf(stderr, "- Available inputs:\n");
+ video_enum_inputs(&dev);
+ }
+
+ if (do_set_input) {
+ video_set_input(&dev, input);
+ ret = video_get_input(&dev);
+- printf("Input %d selected\n", ret);
++ fprintf(stderr, "Input %d selected\n", ret);
+ }
+
+ /* Set the video format. */
+@@ -2028,7 +2051,7 @@ int main(int argc, char *argv[])
+ }
+
+ if (do_pause) {
+- printf("Press enter to start capture\n");
++ fprintf(stderr, "Press enter to start capture\n");
+ getchar();
+ }
+
+@@ -2037,12 +2060,12 @@ int main(int argc, char *argv[])
+ sched.sched_priority = rt_priority;
+ ret = sched_setscheduler(0, SCHED_RR, &sched);
+ if (ret < 0)
+- printf("Failed to select RR scheduler: %s (%d)\n",
++ fprintf(stderr, "Failed to select RR scheduler: %s (%d)\n",
+ strerror(errno), errno);
+ }
+
+ if (video_do_capture(&dev, nframes, skip, delay, filename,
+- do_requeue_last, fill_mode) < 0) {
++ do_requeue_last, fill_mode, do_stdout) < 0) {
+ video_close(&dev);
+ return 1;
+ }
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta_git.bb b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta_git.bb
new file mode 100644
index 000000000..a192d1a3b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/v4l2apps/yavta_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Yet Another V4L2 Test Application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "git://git.ideasonboard.org/yavta.git \
+ file://0001-Add-stdout-mode-to-allow-streaming-over-the-network-.patch"
+SRCREV = "7e9f28bedc1ed3205fb5164f686aea96f27a0de2"
+
+PV = "0.0"
+PR = "r2"
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+# The yavta sources include copies of the headers required to build in the
+# include directory. The Makefile uses CFLAGS to include these, but since
+# we override the CFLAGS then we need to add this include path back in.
+CFLAGS += "-I${S}/include"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 yavta ${D}${bindir}
+}
+
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/wavpack/wavpack_4.60.1.bb b/meta-openembedded/meta-oe/recipes-multimedia/wavpack/wavpack_4.60.1.bb
new file mode 100644
index 000000000..cc5b84489
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/wavpack/wavpack_4.60.1.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "WavPack is a completely open audio compression format providing lossless, high-quality lossy, and a unique hybrid compression mode."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://license.txt;md5=f596650807588c61fcab60bec8242df8"
+
+SRC_URI = "http://wavpack.com/wavpack-${PV}.tar.bz2"
+SRC_URI[md5sum] = "7bb1528f910e4d0003426c02db856063"
+SRC_URI[sha256sum] = "175ee4f2effd6f51e6ec487956f41177256bf892c2e8e07de5d27ed4ee6888c5"
+
+inherit autotools lib_package
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx/libvpx-configure-support-blank-prefix.patch b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx/libvpx-configure-support-blank-prefix.patch
new file mode 100644
index 000000000..6ad7f2b47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx/libvpx-configure-support-blank-prefix.patch
@@ -0,0 +1,52 @@
+From dc0a5c3d2dd4e79d12a150a246a95c4dc88326f1 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 16 Aug 2011 16:04:35 +0200
+Subject: [PATCH] Upstream: not yet
+
+Fix configure to accept "--prefix=" (a blank prefix).
+
+---
+ build/make/configure.sh | 20 ++++++++++++++++----
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/build/make/configure.sh b/build/make/configure.sh
+index 007e020..04d5cbf 100644
+--- a/build/make/configure.sh
++++ b/build/make/configure.sh
+@@ -581,6 +581,8 @@ process_common_cmdline() {
+ ;;
+ --prefix=*)
+ prefix="${optval}"
++ # Distinguish between "prefix not set" and "prefix set to ''"
++ prefixset=1
+ ;;
+ --libdir=*)
+ libdir="${optval}"
+@@ -614,13 +616,23 @@ process_cmdline() {
+ }
+
+ post_process_common_cmdline() {
+- prefix="${prefix:-/usr/local}"
++ if [ "$prefixset" != "1" ]
++ then
++ prefix=/usr/local
++ fi
++
++ # Strip trailing slash
+ prefix="${prefix%/}"
++
+ libdir="${libdir:-${prefix}/lib}"
+ libdir="${libdir%/}"
+- if [ "${libdir#${prefix}}" = "${libdir}" ]; then
+- die "Libdir ${libdir} must be a subdirectory of ${prefix}"
+- fi
++
++ case "$libdir" in
++ "${prefix}/"*) ;;
++ *)
++ die "Libdir ${libdir} must be a subdirectory of ${prefix}"
++ ;;
++ esac
+ }
+
+ post_process_cmdline() {
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.6.1.bb b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.6.1.bb
new file mode 100644
index 000000000..e17cda1a9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.6.1.bb
@@ -0,0 +1,49 @@
+SUMMARY = "VPX multi-format codec"
+DESCRIPTION = "The BSD-licensed libvpx reference implementation provides en- and decoders for VP8 and VP9 bitstreams."
+HOMEPAGE = "http://www.webmproject.org/code/"
+BUGTRACKER = "http://code.google.com/p/webm/issues/list"
+SECTION = "libs/multimedia"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d5b04755015be901744a78cc30d390d4"
+
+SRC_URI += "http://storage.googleapis.com/downloads.webmproject.org/releases/webm/${BP}.tar.bz2 \
+ file://libvpx-configure-support-blank-prefix.patch \
+ "
+SRC_URI[md5sum] = "a19518c8111fa93bdabdd85259162611"
+SRC_URI[sha256sum] = "1c2c0c2a97fba9474943be34ee39337dee756780fc12870ba1dc68372586a819"
+
+# ffmpeg links with this and fails
+# sysroots/armv4t-oe-linux-gnueabi/usr/lib/libvpx.a(vpx_encoder.c.o)(.text+0xc4): unresolvable R_ARM_THM_CALL relocation against symbol `memcpy@@GLIBC_2.4'
+ARM_INSTRUCTION_SET = "arm"
+
+CFLAGS += "-fPIC"
+
+export CC
+export LD = "${CC}"
+
+VPXTARGET_armv5te = "armv5te-linux-gcc"
+VPXTARGET_armv6 = "armv6-linux-gcc"
+VPXTARGET_armv7a = "armv7-linux-gcc"
+VPXTARGET ?= "generic-gnu"
+
+CONFIGUREOPTS = " \
+ --target=${VPXTARGET} \
+ --enable-vp9 \
+ --enable-libs \
+ --disable-install-docs \
+ --disable-static \
+ --enable-shared \
+ --prefix=${prefix} \
+ --libdir=${libdir} \
+ --size-limit=16384x16384 \
+"
+
+do_configure() {
+ ${S}/configure ${CONFIGUREOPTS}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+ chown -R root:root ${D}
+}
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext/auxdir.patch b/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext/auxdir.patch
new file mode 100644
index 000000000..da5841a13
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext/auxdir.patch
@@ -0,0 +1,13 @@
+--- configure.ac.old 2005-06-03 12:53:28.000000000 +0200
++++ configure.ac 2005-06-03 12:54:29.000000000 +0200
+@@ -25,9 +25,9 @@
+
+ AC_PREREQ([2.57])
+ AC_INIT([spext], [1.0], [lauri.leukkunen@nokia.com], spext)
++AC_CONFIG_AUX_DIR(.)
+ AM_INIT_AUTOMAKE([dist-bzip2])
+ AM_MAINTAINER_MODE
+-AC_CONFIG_AUX_DIR(.)
+
+ dnl PKG_CHECK_MODULES(FIXESEXT, fixesext)
+
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext_1.0-5.bb b/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext_1.0-5.bb
new file mode 100644
index 000000000..526659e45
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/xpext/xpext_1.0-5.bb
@@ -0,0 +1,20 @@
+LICENSE= "MIT"
+SUMMARY = "X Server Nokia 770 extensions library"
+SECTION = "x11/libs"
+DEPENDS = "virtual/libx11 libxext"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=db043791349ba57ad1169e1c92477cb6"
+
+SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/x/${BPN}/${BPN}_${PV}.tar.gz \
+ file://auxdir.patch;striplevel=0"
+S = "${WORKDIR}/xpext-1.0"
+
+inherit autotools pkgconfig distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# Remove runtime dependency on empty package ${PN}
+RDEPENDS_${PN}-dev = ""
+
+SRC_URI[md5sum] = "1b0cb67b6f2bd7c4abef17648b062896"
+SRC_URI[sha256sum] = "a3b06f5188fd9effd0799ae31352b3cd65cb913b964e2c1a923ffa9d3c08abbe"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp/xsp-fix-pc.patch b/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp/xsp-fix-pc.patch
new file mode 100644
index 000000000..18bc67cdd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp/xsp-fix-pc.patch
@@ -0,0 +1,10 @@
+--- Xsp/xsp.pc.in~ 2009-01-07 13:06:07.000000000 +0100
++++ Xsp/xsp.pc.in 2009-01-07 13:06:07.000000000 +0100
+@@ -6,5 +6,5 @@
+ Name: Xsp
+ Description: X Sputnik Library
+ Version: @PACKAGE_VERSION@
+-Cflags: -I${includedir} @XSP_CFLAGS@ @X_CFLAGS@
+-Libs: -L${libdir} -lXsp @XSP_LIBS@ @X_LIBS@
++Cflags: -I${includedir}
++Libs: -L${libdir} -lXsp -lX11
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp_1.0.0-8.bb b/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp_1.0.0-8.bb
new file mode 100644
index 000000000..c7a068df3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/xsp/xsp_1.0.0-8.bb
@@ -0,0 +1,15 @@
+LICENSE= "MIT"
+SUMMARY = "X Server Nokia 770 extensions library"
+SECTION = "x11/libs"
+DEPENDS = "virtual/libx11 libxext xpext"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea2bda168c508c7cd8afa567b2fcc549"
+SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/x/xsp/${BPN}_${PV}.tar.gz \
+ file://xsp-fix-pc.patch"
+S = "${WORKDIR}/Xsp"
+
+inherit autotools pkgconfig distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "2a0d8d02228d4cbd28b6e07bb7c17cf5"
+SRC_URI[sha256sum] = "8b722b952b64841d996c70c3278499886c81bb5012991beed5f66f4158418f59"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.4.4.bb b/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.4.4.bb
new file mode 100644
index 000000000..b31d8eb4e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.4.4.bb
@@ -0,0 +1,53 @@
+SUMMARY = "The Geolocation Service"
+DESCRIPTION = "Geoclue is a D-Bus service that provides location information. \
+The primary goal of the Geoclue project is to make creating location-aware applications \
+as simple as possible, while the secondary goal is to ensure that no application \
+can access location information without explicit permission from user."
+LICENSE = "GPLv2.0+"
+SECTION = "console/network"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8114b83a0435d8136b47bd70111ce5cd"
+
+DEPENDS = "glib-2.0 dbus json-glib libsoup-2.4 intltool-native"
+
+inherit autotools pkgconfig gtk-doc gobject-introspection
+
+SRC_URI = " \
+ http://www.freedesktop.org/software/geoclue/releases/2.4/geoclue-${PV}.tar.xz \
+"
+
+SRC_URI[md5sum] = "d2a5b05f4bad032673fe23afbce27926"
+SRC_URI[sha256sum] = "9c43fb9d0c12067ea64400500abb0640194947d4c2c55e38545afe5d9c5c315c"
+
+export BUILD_SYS
+export HOST_SYS
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+# Without this line, package is delcared a library and named libgeoclue*
+AUTO_LIBNAME_PKGS = ""
+
+PACKAGECONFIG ??= "3g modem-gps cdma nmea lib"
+PACKAGECONFIG[3g] = "--enable-3g-source,--disable-3g-source,modemmanager"
+PACKAGECONFIG[modem-gps] = "--enable-modem-gps-source,--disable-modem-gps-source,modemmanager"
+PACKAGECONFIG[cdma] = "--enable-cdma-source,--disable-cdma-source,modemmanager"
+PACKAGECONFIG[nmea] = "--enable-nmea-source,--disable-nmea-source,avahi"
+PACKAGECONFIG[lib] = "--enable-libgeoclue,--disable-libgeoclue,gobject-introspection"
+
+EXTRA_OECONF += " \
+ --with-dbus-service-user=root \
+ --with-dbus-sys-dir=${sysconfdir}/dbus-1/system.d \
+ --enable-demo-agent=no \
+"
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1/system-services \
+ ${libdir} \
+ ${systemd_unitdir} \
+ ${prefix}/libexec \
+"
+
+FILES_${PN}-dev += " \
+ ${datadir}/dbus-1/interfaces \
+ ${datadir}/gir-1.0 \
+"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/files/fix-gcc6-isnan.patch b/meta-openembedded/meta-oe/recipes-navigation/geos/files/fix-gcc6-isnan.patch
new file mode 100644
index 000000000..5c5fbd1d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/files/fix-gcc6-isnan.patch
@@ -0,0 +1,22 @@
+--- geos-3.4.2/configure.in.orig 2016-06-08 17:46:43.002250304 +0000
++++ geos-3.4.2/configure.in 2016-06-08 17:57:36.342241606 +0000
+@@ -197,7 +197,7 @@
+ AC_LANG_PUSH([C++])
+ AC_CACHE_CHECK([for isnan], ac_cv_isnan,
+ [AC_TRY_LINK([#include <cmath>],
+- [double x; int y; y = isnan(x);],
++ [double x; int y; y = std::isnan(x);],
+ ac_cv_isnan=yes,
+ ac_cv_isnan=no
+ )])
+--- geos-3.4.2/include/geos/platform.h.in.orig 2016-06-08 14:06:53.910234182 -0400
++++ geos-3.4.2/include/geos/platform.h.in 2016-06-08 14:07:19.298233844 -0400
+@@ -84,7 +84,7 @@
+ #endif
+
+ #if defined(HAVE_ISNAN)
+-# define ISNAN(x) (isnan(x))
++# define ISNAN(x) (std::isnan(x))
+ #else
+ # if defined(_MSC_VER)
+ # define ISNAN(x) _isnan(x)
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/files/geos-config-Add-includedir-variable.patch b/meta-openembedded/meta-oe/recipes-navigation/geos/files/geos-config-Add-includedir-variable.patch
new file mode 100644
index 000000000..645e6f62a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/files/geos-config-Add-includedir-variable.patch
@@ -0,0 +1,39 @@
+From 9d51027c228dafd7db2d0cffca1f0fc695e950fd Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Mon, 2 Dec 2013 11:33:26 -0200
+Subject: [PATCH] geos-config: Add includedir variable
+
+This fixes cross-compile as it is easier to mangle the includedir
+during sysroot generation.
+
+Upstream-Status: Pending
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ tools/geos-config.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/geos-config.in b/tools/geos-config.in
+index 9b45b5f..1749892 100644
+--- a/tools/geos-config.in
++++ b/tools/geos-config.in
+@@ -1,6 +1,7 @@
+ #!/bin/sh
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
++includedir=@includedir@
+ libdir=@libdir@
+
+ usage()
+@@ -38,7 +39,7 @@ case $1 in
+ echo @VERSION@
+ ;;
+ --cflags)
+- echo -I${prefix}/include
++ echo -I${includedir}
+ ;;
+ --libs)
+ # TODO: make an alias for --clibs
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/geos.inc b/meta-openembedded/meta-oe/recipes-navigation/geos/geos.inc
new file mode 100644
index 000000000..2e308b488
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/geos.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "GEOS - Geometry Engine, Open Source"
+HOMEPAGE = "http://trac.osgeo.org/geos/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "http://download.osgeo.org/geos/geos-${PV}.tar.bz2"
+
+inherit autotools pkgconfig binconfig
+
+PACKAGES =+ "geoslib ${PN}-c1"
+
+DESCRIPTION_${PN}lib = "Geometry engine for Geographic Information Systems - C++ Library"
+FILES_${PN}lib += "${libdir}/libgeos-${PV}.so"
+
+DESCRIPTION_${PN}-c1 = "Geometry engine for Geographic Information Systems - C Library"
+FILES_${PN}-c1 += "${libdir}/libgeos_c.so.*"
+
+ALLOW_EMPTY_${PN} = "1"
+RDEPENDS_${PN} += "geoslib ${PN}-c1"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.4.2.bb b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.4.2.bb
new file mode 100644
index 000000000..7193f8fb5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.4.2.bb
@@ -0,0 +1,7 @@
+require geos.inc
+
+SRC_URI += "file://geos-config-Add-includedir-variable.patch \
+ file://fix-gcc6-isnan.patch"
+
+SRC_URI[md5sum] = "fc5df2d926eb7e67f988a43a92683bae"
+SRC_URI[sha256sum] = "15e8bfdf7e29087a957b56ac543ea9a80321481cef4d4f63a7b268953ad26c53"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch
new file mode 100644
index 000000000..1fa27c210
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch
@@ -0,0 +1,81 @@
+From 1e2cea8945bc2183fbe1a012dcd633a352125952 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 24 Apr 2012 18:45:14 +0200
+Subject: [PATCH] SConstruct: prefix includepy with sysroot and drop sysroot
+ from python_lib_dir
+
+* without PYTHONPATH, distutil's sysconfig returns INCLUDEPY without sysroot prefix
+ and with PYTHONPATH from OE it's pointing to native python dir
+
+ $ export PYTHONPATH=/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/lib/python2.7/
+ $ python
+ Python 2.7.2 (default, Apr 18 2012, 09:19:59)
+ [GCC 4.6.2] on linux2
+ Type "help", "copyright", "credits" or "license" for more information.
+ >>> from distutils import sysconfig
+ >>> sysconfig.get_config_vars('INCLUDEPY')
+ ['/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/include/python2.7']
+ >>>
+ $ unset PYTHONPATH
+ $ python
+ Python 2.7.2 (default, Apr 18 2012, 09:19:59)
+ [GCC 4.6.2] on linux2
+ Type "help", "copyright", "credits" or "license" for more information.
+ >>> from distutils import sysconfig
+ >>> sysconfig.get_config_vars('INCLUDEPY')
+ ['/python2.7']
+ >>> import sysconfig
+ >>> sysconfig.get_config_vars('INCLUDEPY')
+ ['/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/include/python2.7']
+* python_lib_dir = python_lib_dir.replace(env['sysroot'], '')
+ returns path to target sysroot
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+Signed-off-by: Peter A. Bigot <pab@pabigot.com>
+---
+ SConstruct | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/SConstruct b/SConstruct
+index 3318bb48..e1c4f963 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -934,7 +934,7 @@ else:
+
+ # Set up configuration for target Python
+
+-PYTHON_LIBDIR_CALL = 'sysconfig.get_python_lib()'
++PYTHON_LIBDIR_CALL = 'sysconfig.get_python_lib(plat_specific=1)'
+
+ PYTHON_CONFIG_NAMES = ['CC', 'CXX', 'OPT', 'BASECFLAGS',
+ 'CCSHARED', 'LDSHARED', 'SO', 'INCLUDEPY', 'LDFLAGS']
+@@ -1364,7 +1364,7 @@ else:
+ LINK=ldshared,
+ SHLIBPREFIX="",
+ SHLIBSUFFIX=python_config['SO'],
+- CPPPATH=[python_config['INCLUDEPY']],
++ CPPPATH=[os.path.normpath("%s/%s/%s/%s" % (env['sysroot'], env['prefix'], env['includedir'], python_config['INCLUDEPY']))] if env['sysroot'] else [python_config['INCLUDEPY']],
+ CPPFLAGS=python_config['OPT'],
+ CFLAGS=python_config['BASECFLAGS'],
+ CXXFLAGS=python_config['BASECFLAGS'])
+@@ -1662,12 +1662,15 @@ if ((not env['debug'] and not env['profiling'] and not env['nostrip']
+ if not env['python']:
+ python_install = []
+ else:
++ python_libdir = python_libdir.replace(env['sysroot'], '')
+ python_module_dir = python_libdir + os.sep + 'gps'
+ python_extensions_install = python_env.Install(DESTDIR + python_module_dir,
+ python_built_extensions)
+ if ((not env['debug'] and not env['profiling']
+ and not env['nostrip'] and not sys.platform.startswith('darwin'))):
+ python_env.AddPostAction(python_extensions_install, '$STRIP $TARGET')
++ env.AddPostAction(python_extensions_install, '$CHRPATH -r "%s" "$TARGET"' \
++ % (python_libdir, ))
+
+ python_modules_install = python_env.Install(DESTDIR + python_module_dir,
+ python_modules)
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-include-sys-ttydefaults.h.patch b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-include-sys-ttydefaults.h.patch
new file mode 100644
index 000000000..e91e4e9fb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0001-include-sys-ttydefaults.h.patch
@@ -0,0 +1,35 @@
+From f221fa959c80b43c65426500a6836a1b5cf6fe0c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 17 Aug 2016 02:16:12 +0000
+Subject: [PATCH] include sys/ttydefaults.h
+
+This is needed for CTRL definition, as exposed by musl on glibc
+this include file gets pulled indirectly.
+
+/usr/src/debug/gpsd/3.14-r0/gpsd-3.14/gpsmon.c:605: undefined reference to `CTRL'
+clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)
+scons: *** [gpsmon] Error 1
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Foreward port to gpsd 3.16
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+---
+ gpsmon.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/gpsmon.c b/gpsmon.c
+index 89c43ee2..5cc0dabd 100644
+--- a/gpsmon.c
++++ b/gpsmon.c
+@@ -24,6 +24,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/select.h>
++#include <sys/ttydefaults.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0004-SConstruct-disable-html-and-man-docs-building-becaus.patch b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0004-SConstruct-disable-html-and-man-docs-building-becaus.patch
new file mode 100644
index 000000000..ba3d205d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-3.17/0004-SConstruct-disable-html-and-man-docs-building-becaus.patch
@@ -0,0 +1,51 @@
+From 697e2e9ff97487266d817cdd41bacc83f681e3d7 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sun, 29 Apr 2012 00:05:59 +0200
+Subject: [PATCH 4/4] SConstruct: disable html and man docs building because
+ xmlto-native from OE is broken
+
+It will try to load dtd and fail:
+| xmlto man gpsctl.xml; mv `basename gpsctl.1` gpsctl.1
+| xmlto: /var/lib/jenkins/jobs/shr-core-branches/workspace/shr-core/tmp-eglibc/work/armv4t-oe-linux-gnueabi/gpsd-3.4-r2/gpsd-3.4/gpsctl.xml does not validate (status 3)
+| xmlto: Fix document syntax or use --skip-validation option
+| I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+| /var/lib/jenkins/jobs/shr-core-branches/workspace/shr-core/tmp-eglibc/work/armv4t-oe-linux-gnueabi/gpsd-3.4-r2/gpsd-3.4/gpsctl.xml:8: warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
+| "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+| ^
+| I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+| warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
+| validity error : Could not load the external subset "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
+| Document /var/lib/jenkins/jobs/shr-core-branches/workspace/shr-core/tmp-eglibc/work/armv4t-oe-linux-gnueabi/gpsd-3.4-r2/gpsd-3.4/gpsctl.xml does not validate
+| mv: cannot stat `gpsctl.1': No such file or directory
+| scons: *** [gpsctl.1] Error 1
+| scons: building terminated because of errors.
+
+Upstream-Status: Inappropriate [disable feature]
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+Signed-off-by: Peter A. Bigot <pab@pabigot.com>
+---
+ SConstruct | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 3318bb48..a5bb756d 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -889,11 +889,11 @@ else:
+
+ manbuilder = htmlbuilder = None
+ if env['manbuild']:
+- if config.CheckXsltproc():
++ if False and config.CheckXsltproc():
+ build = "xsltproc --nonet %s $SOURCE >$TARGET"
+ htmlbuilder = build % docbook_html_uri
+ manbuilder = build % docbook_man_uri
+- elif WhereIs("xmlto"):
++ elif False and WhereIs("xmlto"):
+ xmlto = "xmlto %s $SOURCE || mv `basename $TARGET` " \
+ "`dirname $TARGET`"
+ htmlbuilder = xmlto % "html-nochunks"
+--
+1.8.5.5
+
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bb b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bb
new file mode 100644
index 000000000..d2058ba57
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bb
@@ -0,0 +1,7 @@
+SUMMARY = "Machine specific gpsd config"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb"
+
+# empty by default
+# BSP layers can add stuff like meta-openmoko example:
+#
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.17.bb b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.17.bb
new file mode 100644
index 000000000..d526db2be
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.17.bb
@@ -0,0 +1,137 @@
+SUMMARY = "A TCP/IP Daemon simplifying the communication with GPS devices"
+SECTION = "console/network"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d217a23f408e91c94359447735bc1800"
+DEPENDS = "dbus dbus-glib ncurses python libusb1 chrpath-replacement-native pps-tools"
+PROVIDES = "virtual/gpsd"
+
+EXTRANATIVEPATH += "chrpath-native"
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch \
+ file://0004-SConstruct-disable-html-and-man-docs-building-becaus.patch \
+ file://0001-include-sys-ttydefaults.h.patch \
+"
+SRC_URI[md5sum] = "e0cfadcf4a65dfbdd2afb11c58f4e4a1"
+SRC_URI[sha256sum] = "68e0dbecfb5831997f8b3d6ba48aed812eb465d8c0089420ab68f9ce4d85e77a"
+
+inherit scons update-rc.d python-dir pythonnative systemd bluetooth update-alternatives
+
+INITSCRIPT_PACKAGES = "gpsd-conf"
+INITSCRIPT_NAME = "gpsd"
+INITSCRIPT_PARAMS = "defaults 35"
+
+SYSTEMD_OESCONS = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false',d)}"
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)}"
+PACKAGECONFIG[bluez] = "bluez='true',bluez='false',${BLUEZ}"
+PACKAGECONFIG[qt] = "qt='yes',qt='no',qt4-x11-free"
+EXTRA_OESCONS = " \
+ sysroot=${STAGING_DIR_TARGET} \
+ libQgpsmm='false' \
+ debug='true' \
+ strip='false' \
+ chrpath='yes' \
+ systemd='${SYSTEMD_OESCONS}' \
+ libdir='${libdir}' \
+ ${PACKAGECONFIG_CONFARGS} \
+"
+# this cannot be used, because then chrpath is not found and only static lib is built
+# target=${HOST_SYS}
+
+do_compile_prepend() {
+ export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
+ export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config"
+ export STAGING_PREFIX="${STAGING_DIR_HOST}/${prefix}"
+ export LINKFLAGS="${LDFLAGS}"
+}
+
+do_install() {
+ export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
+ export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config"
+ export STAGING_PREFIX="${STAGING_DIR_HOST}/${prefix}"
+ export LINKFLAGS="${LDFLAGS}"
+
+ export DESTDIR="${D}"
+ # prefix is used for RPATH and DESTDIR/prefix for instalation
+ ${STAGING_BINDIR_NATIVE}/scons prefix=${prefix} install ${EXTRA_OESCONS}|| \
+ bbfatal "scons install execution failed."
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${S}/packaging/deb/etc_init.d_gpsd ${D}/${sysconfdir}/init.d/gpsd
+ install -d ${D}/${sysconfdir}/default
+ install -m 0644 ${S}/packaging/deb/etc_default_gpsd ${D}/${sysconfdir}/default/gpsd.default
+
+ #support for udev
+ install -d ${D}/${sysconfdir}/udev/rules.d
+ install -m 0644 ${S}/gpsd.rules ${D}/${sysconfdir}/udev/rules.d/
+ install -d ${D}${base_libdir}/udev/
+ install -m 0755 ${S}/gpsd.hotplug ${D}${base_libdir}/udev/
+
+ #support for python
+ install -d ${D}/${PYTHON_SITEPACKAGES_DIR}/gps
+ install -m 755 ${S}/gps/*.py ${D}/${PYTHON_SITEPACKAGES_DIR}/gps
+
+ #support for systemd
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${S}/systemd/${BPN}.service ${D}${systemd_unitdir}/system/${BPN}.service
+ install -m 0644 ${S}/systemd/${BPN}ctl@.service ${D}${systemd_unitdir}/system/${BPN}ctl@.service
+ install -m 0644 ${S}/systemd/${BPN}.socket ${D}${systemd_unitdir}/system/${BPN}.socket
+}
+
+PACKAGES =+ "libgps libgpsd python-pygps-dbg python-pygps gpsd-udev gpsd-conf gpsd-gpsctl gps-utils"
+
+FILES_${PN}-dev += "${libdir}/pkgconfdir/libgpsd.pc ${libdir}/pkgconfdir/libgps.pc \
+ ${libdir}/libQgpsmm.prl"
+
+FILES_python-pygps-dbg += " ${libdir}/python*/site-packages/gps/.debug"
+
+RDEPENDS_${PN} = "gpsd-gpsctl"
+RRECOMMENDS_${PN} = "gpsd-conf gpsd-udev gpsd-machine-conf"
+
+SUMMARY_gpsd-udev = "udev relevant files to use gpsd hotplugging"
+FILES_gpsd-udev = "${base_libdir}/udev ${sysconfdir}/udev/*"
+RDEPENDS_gpsd-udev += "udev gpsd-conf"
+
+SUMMARY_libgpsd = "C service library used for communicating with gpsd"
+FILES_libgpsd = "${libdir}/libgpsd.so.*"
+
+SUMMARY_libgps = "C service library used for communicating with gpsd"
+FILES_libgps = "${libdir}/libgps.so.*"
+
+SUMMARY_gpsd-conf = "gpsd configuration files and init scripts"
+FILES_gpsd-conf = "${sysconfdir}"
+CONFFILES_gpsd-conf = "${sysconfdir}/default/gpsd.default"
+
+SUMMARY_gpsd-gpsctl = "Tool for tweaking GPS modes"
+FILES_gpsd-gpsctl = "${bindir}/gpsctl"
+
+SUMMARY_gps-utils = "Utils used for simulating, monitoring,... a GPS"
+FILES_gps-utils = "${bindir}/*"
+RDEPENDS_gps-utils = "python-pygps"
+
+SUMMARY_python-pygps = "Python bindings to gpsd"
+FILES_python-pygps = "${PYTHON_SITEPACKAGES_DIR}/*"
+RDEPENDS_python-pygps = " \
+ python-core \
+ python-io \
+ python-threading \
+ python-terminal \
+ python-curses \
+ gpsd \
+ python-json"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "${BPN}.socket ${BPN}ctl@.service"
+
+
+ALTERNATIVE_${PN} = "gpsd-defaults"
+ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
+ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.default"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite-4.2.0/geos-config.patch b/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite-4.2.0/geos-config.patch
new file mode 100644
index 000000000..28bd7dad8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite-4.2.0/geos-config.patch
@@ -0,0 +1,17 @@
+https://www.gaia-gis.it/fossil/libspatialite/tktview?name=abeeaad448
+
+Upstream-Status: Submitted [rpm5-devel@rpm5.org]
+
+Index: libspatialite-4.2.0/configure.ac
+===================================================================
+--- libspatialite-4.2.0.orig/configure.ac
++++ libspatialite-4.2.0/configure.ac
+@@ -260,7 +260,7 @@ if test x"$enable_geos" != "xno"; then
+ fi
+ # Extract the linker and include flags
+ GEOS_LDFLAGS=`$GEOSCONFIG --ldflags`
+- GEOS_CFLAGS=-I`$GEOSCONFIG --includes`
++ GEOS_CFLAGS=`$GEOSCONFIG --cflags`
+ AC_SUBST([GEOS_LDFLAGS])
+ AC_SUBST([GEOS_CFLAGS])
+ # Ensure that we can parse geos_c.h
diff --git a/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite_4.2.0.bb b/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite_4.2.0.bb
new file mode 100644
index 000000000..d66dc875b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/libspatialite/libspatialite_4.2.0.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Library extending the SQLite core to support fully fledged Spatial SQL capabilities"
+HOMEPAGE = "https://www.gaia-gis.it/fossil/libspatialite/"
+SECTION = "libs"
+DEPENDS = "proj geos sqlite3 libxml2 zlib"
+
+LICENSE = "MPLv1.1 & GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0e92e1a36cc384b60f5b31dde0bdd39e"
+
+SRC_URI = "http://www.gaia-gis.it/gaia-sins/libspatialite-sources/libspatialite-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-freexl=no"
+
+# package plugins for SQLite3
+PACKAGES += "${PN}-plugin"
+INSANE_SKIP_${PN}-plugin = "dev-so"
+FILES_${PN}-plugin += "${libdir}/mod_*"
+
+SRC_URI[md5sum] = "83305ed694a77152120d1f74c5151779"
+SRC_URI[sha256sum] = "9f138a6854740c7827fdee53845eb1485fce3e805a7aa9fc9151f8046ebd312d"
+
+SRC_URI += "file://geos-config.patch"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/0001-orrery-Fix-sprintf-format.patch b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/0001-orrery-Fix-sprintf-format.patch
new file mode 100644
index 000000000..eb6241fdd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/0001-orrery-Fix-sprintf-format.patch
@@ -0,0 +1,26 @@
+From e600d3c09d2f97a197f86e6987d44d142e7b7cdf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 21:12:17 -0700
+Subject: [PATCH] orrery: Fix sprintf format
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ orrery.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/orrery.c b/orrery.c
+index e3a1f6d..1b31a9f 100644
+--- a/orrery.c
++++ b/orrery.c
+@@ -3767,7 +3767,7 @@ static void drawOptsScreens(void)
+ displayWidth/2 - gdk_string_width(smallFont, scratchString)/2,
+ 12, scratchString);
+ for (day = 0; day < 7; day++) {
+- sprintf(scratchString, dayName[day]);
++ sprintf(scratchString, "%s", dayName[day]);
+ gdk_draw_string(pixmap, smallFont, blueGC,
+ CAL_DAY_WIDTH/2 + day*CAL_DAY_WIDTH + CAL_LEFT_OFFSET -
+ gdk_string_width(smallFont, scratchString)/2,
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/orrery.png b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/orrery.png
new file mode 100644
index 000000000..d9865b70c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/orrery.png
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/use.GdkPixbuf.patch b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/use.GdkPixbuf.patch
new file mode 100644
index 000000000..92d194de0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery/use.GdkPixbuf.patch
@@ -0,0 +1,59 @@
+From: Benjamin Deering
+Subject: orrery crashing X
+Date: Thursday, September 2, 2010 - 5:25 pm
+Link: http://kerneltrap.org/mailarchive/openmoko-community/2010/9/3/13218
+
+diff -uNr orrery.orig//orrery.c orrery/orrery.c
+--- orrery.orig//orrery.c 2009-11-30 06:59:44.000000000 +0100
++++ orrery/orrery.c 2010-11-15 22:33:17.000000000 +0100
+@@ -1238,12 +1238,44 @@
+ }
+ currentEntry = currentEntry->forwardPointer;
+ }
+- if (nDarkGreyPoints > 0)
+- gdk_draw_points(pixmap, darkGreyGC, darkGreyPoints, nDarkGreyPoints);
+- if (nGreyPoints > 0)
+- gdk_draw_points(pixmap, greyGC, greyPoints, nGreyPoints);
+- if (nWhitePoints > 0)
+- gdk_draw_points(pixmap, whiteGC, whitePoints, nWhitePoints);
++ GdkPixbuf* starDrawingBuf = gdk_pixbuf_get_from_drawable( NULL,
++ pixmap,
++ gdk_colormap_get_system()
++ , 0, 0, 0, 0, displayWidth, displayHeight);
++ g_assert (gdk_pixbuf_get_bits_per_sample (starDrawingBuf) == 8);
++ guchar* p;
++ int rowstride = gdk_pixbuf_get_rowstride (starDrawingBuf);
++ guchar* pixels = gdk_pixbuf_get_pixels (starDrawingBuf);
++ int n_channels = gdk_pixbuf_get_n_channels (starDrawingBuf);
++ GdkGCValues starGCval;
++ GdkColor starColor;
++ int pointNum;
++ gdk_gc_get_values(darkGreyGC, &starGCval);
++ gdk_colormap_query_color( gdk_gc_get_colormap(darkGreyGC),starGCval.foreground.pixel, &starColor );
++ for( pointNum = 0; pointNum < nDarkGreyPoints; pointNum++) {
++ p = pixels + darkGreyPoints[pointNum].y * rowstride + darkGreyPoints[pointNum].x * n_channels;
++ p[0] = starColor.red & 0xff;
++ p[1] = starColor.green & 0xff;
++ p[2] = starColor.blue & 0xff;
++ }
++ gdk_gc_get_values(greyGC, &starGCval);
++ gdk_colormap_query_color( gdk_gc_get_colormap(greyGC), starGCval.foreground.pixel, &starColor );
++ for( pointNum = 0; pointNum < nGreyPoints; pointNum++) {
++ p = pixels + greyPoints[pointNum].y * rowstride + greyPoints[pointNum].x * n_channels;
++ p[0] = starColor.red & 0xff;
++ p[1] = starColor.green & 0xff;
++ p[2] = starColor.blue & 0xff;
++ }
++ gdk_gc_get_values(whiteGC, &starGCval);
++ gdk_colormap_query_color( gdk_gc_get_colormap(whiteGC), starGCval.foreground.pixel, &starColor );
++ for( pointNum = 0; pointNum < nWhitePoints; pointNum++) {
++ p = pixels + whitePoints[pointNum].y * rowstride + whitePoints[pointNum].x * n_channels;
++ p[0] = starColor.red & 0xff;
++ p[1] = starColor.green & 0xff;
++ p[2] = starColor.blue & 0xff;
++ }
++ gdk_draw_pixbuf ( pixmap , NULL , starDrawingBuf,
++ 0, 0, 0, 0, displayWidth, displayHeight, GDK_RGB_DITHER_NORMAL, 0, 0 ) ;
+ }
+
+ void makeTimeString(char *string)
diff --git a/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery_2.7.bb b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery_2.7.bb
new file mode 100644
index 000000000..010f65fb9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/orrery/orrery_2.7.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Astronomical application which displays the night sky"
+HOMEPAGE = "http://projects.openmoko.org/projects/orrery/"
+SECTION = "x11/scientific"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://orrery.c;endline=25;md5=d792bdf2b591972da175aecc38d88cfe"
+DEPENDS = "gtk+"
+
+inherit distro_features_check autotools-brokensep pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://projects.openmoko.org/frs/download.php/923/orrery_2.7_clean.tar.gz \
+ file://orrery.png \
+ file://use.GdkPixbuf.patch \
+ file://0001-orrery-Fix-sprintf-format.patch \
+ "
+
+SRC_URI[md5sum] = "bd62a33e7554ee1030313dfcdefcda8b"
+SRC_URI[sha256sum] = "645166a5e05b2064ab630534a514697fc47b681951e7fe1d635c259cbdf7a5e6"
+
+S = "${WORKDIR}/${BPN}"
+
+do_configure_prepend() {
+ # fix DSO issue with binutils-2.22
+ sed -i 's/ -lrt/ -lrt -lm/g' ${S}/Makefile.am
+}
+do_install_append() {
+ install -d ${D}${datadir}/orrery
+ cp -R --no-dereference --preserve=mode,links -v ${S}/data/* ${D}${datadir}/orrery
+ chown -R root:root ${D}${datadir}/orrery
+ install -d ${D}${datadir}/icons
+ install -m 0755 ${WORKDIR}/orrery.png ${D}${datadir}/icons
+}
+
+FILES_${PN} += "${datadir}/icons/orrery.png"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_4.9.3.bb b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_4.9.3.bb
new file mode 100644
index 000000000..f45f8948d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_4.9.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "PROJ.4 - Cartographic Projections library"
+HOMEPAGE = "http://trac.osgeo.org/proj/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=74d9aaec5fa0cd734341e8c4dc91b608"
+
+SRC_URI = "http://download.osgeo.org/proj/proj-${PV}.tar.gz"
+SRC_URI[md5sum] = "d598336ca834742735137c5674b214a1"
+SRC_URI[sha256sum] = "6984542fea333488de5c82eea58d699e4aff4b359200a9971537cd7e047185f7"
+
+inherit autotools pkgconfig lib_package
+
+FILES_${PN} += "${datadir}/proj"
diff --git a/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc/makefile-add-ldflags.patch b/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc/makefile-add-ldflags.patch
new file mode 100644
index 000000000..e9023492e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc/makefile-add-ldflags.patch
@@ -0,0 +1,31 @@
+Add LDFLAGS variable to Makefile so that extra linker flags can be sent via this variable.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 49d622d..cd17334 100644
+--- a/Makefile
++++ b/Makefile
+@@ -48,18 +48,17 @@ CFLAGS = -Wall -W -O2
+ CFLAGS_lib = $(CFLAGS) -fPIC
+ CFLAGS_bin = $(CFLAGS) -fomit-frame-pointer
+
+-LDFLAGS =
+ LDFLAGS_shared = --shared
+ LDFLAGS_shared_LINUX = --shared
+ LDFLAGS_shared_SUN = -G
+ LDFLAGS_shared_HP = -b
+ LDFLAGS_lib = $(LDFLAGS_shared)
+-LDFLAGS_lib_LINUX = $(LDFLAGS_shared_LINUX) \
++LDFLAGS_lib_LINUX = $(LDFLAGS) $(LDFLAGS_shared_LINUX) \
+ -Wl,--soname,$(SHARED_LIB),--version-script,$(MAP_LIB)
+ LDFLAGS_lib_SUN = $(LDFLAGS_shared_SUN)
+ LDFLAGS_lib_HP = $(LDFLAGS_shared_HP)
+ LDFLAGS_pam = $(LDFLAGS_shared)
+-LDFLAGS_pam_LINUX = $(LDFLAGS_shared_LINUX) \
++LDFLAGS_pam_LINUX = $(LDFLAGS) $(LDFLAGS_shared_LINUX) \
+ -Wl,--version-script,$(MAP_PAM)
+ LDFLAGS_pam_SUN = $(LDFLAGS_shared_SUN)
+ LDFLAGS_pam_HP = $(LDFLAGS_shared_HP)
diff --git a/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc_1.3.1.bb b/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc_1.3.1.bb
new file mode 100644
index 000000000..8fc0b3591
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/passwdqc/passwdqc_1.3.1.bb
@@ -0,0 +1,66 @@
+SUMMARY = "A password/passphrase strength checking and enforcement toolset"
+DESCRIPTION = "\
+passwdqc is a password/passphrase strength checking and policy enforcement \
+toolset, including an optional PAM module (pam_passwdqc), command-line \
+programs (pwqcheck and pwqgen), and a library (libpasswdqc). \
+pam_passwdqc is normally invoked on password changes by programs such as \
+passwd(1). It is capable of checking password or passphrase strength, \
+enforcing a policy, and offering randomly-generated passphrases, with \
+all of these features being optional and easily (re-)configurable. \
+\
+pwqcheck and pwqgen are standalone password/passphrase strength checking \
+and random passphrase generator programs, respectively, which are usable \
+from scripts. \
+\
+libpasswdqc is the underlying library, which may also be used from \
+third-party programs. \
+"
+
+HOMEPAGE = "http://www.openwall.com/passwdqc"
+SECTION = "System Environment/Base"
+
+DEPENDS += "libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1b4af6f3d4ee079a38107366e93b334d"
+
+SRC_URI = "http://www.openwall.com/${BPN}/${BP}.tar.gz \
+ file://makefile-add-ldflags.patch \
+ "
+SRC_URI[md5sum] = "3878b57bcd3fdbcf3d4b362dbc6228b9"
+SRC_URI[sha256sum] = "d1fedeaf759e8a0f32d28b5811ef11b5a5365154849190f4b7fab670a70ffb14"
+
+# explicitly define LINUX_PAM in case DISTRO_FEATURES no pam
+# this package's pam_passwdqc.so needs pam
+CFLAGS_append += "-Wall -fPIC -DHAVE_SHADOW -DLINUX_PAM"
+
+# -e is no longer default setting in bitbake.conf
+EXTRA_OEMAKE = "-e"
+
+do_compile() {
+ # make sure sub make use environment to override variables in Makefile
+ # Linux) $(MAKE), there is a tab between
+ sed -i -e 's/Linux) $(MAKE) CFLAGS_lib/Linux) $(MAKE) -e CFLAGS_lib/' ${S}/Makefile
+
+ # LD_lib and LD must be CC because of Makefile
+ oe_runmake LD="${CC}"
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} SHARED_LIBDIR=${base_libdir} \
+ DEVEL_LIBDIR=${libdir} SECUREDIR=${base_libdir}/security \
+ INSTALL="install -p"
+}
+
+PROVIDES += "pam-${BPN}"
+PACKAGES =+ "lib${BPN} pam-${BPN}"
+
+FILES_lib${BPN} = "${base_libdir}/libpasswdqc.so.0"
+FILES_pam-${BPN} = "${base_libdir}/security/pam_passwdqc.so"
+FILES_${PN}-dbg += "${base_libdir}/security/.debug"
+
+RDEPENDS_${PN} = "lib${BPN} pam-${BPN}"
+RDEPENDS_pam-${BPN} = "lib${BPN}"
diff --git a/meta-openembedded/meta-oe/recipes-security/tomoyo-tools/tomoyo-tools_2.5.0.bb b/meta-openembedded/meta-oe/recipes-security/tomoyo-tools/tomoyo-tools_2.5.0.bb
new file mode 100644
index 000000000..f36277599
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/tomoyo-tools/tomoyo-tools_2.5.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "TOMOYO Linux tools"
+DESCRIPTION = "TOMOYO Linux is a Mandatory Access Control (MAC) implementation \
+for Linux that can be used to increase the security of a system, while also \
+being useful purely as a system analysis tool."
+HOMEPAGE = "http://tomoyo.sourceforge.jp/"
+SECTION = "System Environment/Kernel"
+
+SRC_URI = "http://jaist.dl.sourceforge.jp/tomoyo/53357/${BP}-20170102.tar.gz"
+SRC_URI[md5sum] = "888804d58742452fe213a68f7eadd0ad"
+SRC_URI[sha256sum] = "00fedfac5e514321250bbe69eaccc732c8a8158596f77a785c2e3ae9f9968283"
+
+S = "${WORKDIR}/${BPN}"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.tomoyo;md5=751419260aa954499f7abaabaa882bbe"
+
+FILES_${PN} += "${libdir}/tomoyo"
+FILES_${PN}-dbg += "${libdir}/tomoyo/.debug"
+
+DEPENDS = "linux-libc-headers ncurses"
+
+EXTRA_OEMAKE = "-e USRLIBDIR=${libdir}"
+
+do_compile () {
+ oe_runmake 'CC=${CC}'
+}
+
+do_install() {
+ oe_runmake install INSTALLDIR=${D}
+}
diff --git a/meta-openembedded/meta-oe/recipes-shells/dash/dash/0001-Fix-printf-format-errors-with-clang.patch b/meta-openembedded/meta-oe/recipes-shells/dash/dash/0001-Fix-printf-format-errors-with-clang.patch
new file mode 100644
index 000000000..b3991faa8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/dash/dash/0001-Fix-printf-format-errors-with-clang.patch
@@ -0,0 +1,28 @@
+From 3ddf397febf47f8de9ca2805e92355ecb3ba0e9f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 8 Apr 2017 12:37:54 -0700
+Subject: [PATCH] Fix printf format errors with clang
+
+error: format string is not a string literal (potentially insecure)
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/jobs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/jobs.c b/src/jobs.c
+index c2c2332..dcb81c1 100644
+--- a/src/jobs.c
++++ b/src/jobs.c
+@@ -427,7 +427,7 @@ sprint_status(char *s, int status, int sigonly)
+ goto out;
+ #endif
+ }
+- col = fmtstr(s, 32, strsignal(st));
++ col = fmtstr(s, 32, "%s", strsignal(st));
+ #ifdef WCOREDUMP
+ if (WCOREDUMP(status)) {
+ col += fmtstr(s + col, 16, " (core dumped)");
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.9.1.bb b/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.9.1.bb
new file mode 100644
index 000000000..6dee66f69
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.9.1.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Small and fast POSIX-compliant shell"
+HOMEPAGE = "http://gondor.apana.org.au/~herbert/dash/"
+SECTION = "System Environment/Shells"
+
+LICENSE = "BSD & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b5262b4a1a1bff72b48e935531976d2e"
+
+inherit autotools update-alternatives
+
+SRC_URI = "http://gondor.apana.org.au/~herbert/${BPN}/files/${BP}.tar.gz \
+ file://0001-Fix-printf-format-errors-with-clang.patch \
+ "
+SRC_URI[md5sum] = "6472702a8d9760d166ef8333dcb527a6"
+SRC_URI[sha256sum] = "5ecd5bea72a93ed10eb15a1be9951dd51b52e5da1d4a7ae020efd9826b49e659"
+
+EXTRA_OECONF += "--bindir=${base_bindir}"
+
+ALTERNATIVE_${PN} = "sh"
+ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh"
+ALTERNATIVE_TARGET[sh] = "${base_bindir}/dash"
+ALTERNATIVE_PRIORITY = "10"
+
+pkg_postinst_${PN} () {
+ grep -q "^${base_bindir}/dash$" $D${sysconfdir}/shells || echo ${base_bindir}/dash >> $D${sysconfdir}/shells
+}
+
+pkg_postrm_${PN} () {
+ printf "$(grep -v "^${base_bindir}/dash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
+}
diff --git a/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0001-Enable-system-malloc-on-all-linux.patch b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0001-Enable-system-malloc-on-all-linux.patch
new file mode 100644
index 000000000..ff2f6a3b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0001-Enable-system-malloc-on-all-linux.patch
@@ -0,0 +1,30 @@
+From 0553455813a1f717ef50cc911e4db73da3d23c32 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 22 Mar 2017 18:47:40 -0700
+Subject: [PATCH 1/2] Enable system malloc on all linux
+
+Dont trigger on being just android or glibc
+internal malloc falls flat on musl based systems
+as well. So switch to using system malloc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ config_f.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/config_f.h b/config_f.h
+index 6a632a5..0a66960 100644
+--- a/config_f.h
++++ b/config_f.h
+@@ -139,7 +139,7 @@
+ * This can be much slower and no memory statistics will be
+ * provided.
+ */
+-#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__GLIBC__) || defined(__OpenBSD__) || defined(__APPLE__) || defined (__ANDROID__)
++#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__linux__) || defined(__OpenBSD__) || defined(__APPLE__)
+ # define SYSMALLOC
+ #else
+ # undef SYSMALLOC
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0002-Add-debian-csh-scripts.patch b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0002-Add-debian-csh-scripts.patch
new file mode 100644
index 000000000..e4de6f7fe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh/0002-Add-debian-csh-scripts.patch
@@ -0,0 +1,60 @@
+From 60271713025f6b17dda29721be012a8428e77185 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 22 Mar 2017 18:56:49 -0700
+Subject: [PATCH 2/2] Add debian csh scripts
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ csh.cshrc | 15 +++++++++++++++
+ csh.login | 8 ++++++++
+ csh.logout | 1 +
+ 3 files changed, 24 insertions(+)
+ create mode 100644 csh.cshrc
+ create mode 100644 csh.login
+ create mode 100644 csh.logout
+
+diff --git a/csh.cshrc b/csh.cshrc
+new file mode 100644
+index 0000000..29c934a
+--- /dev/null
++++ b/csh.cshrc
+@@ -0,0 +1,15 @@
++# /etc/csh.cshrc: system-wide .cshrc file for csh(1) and tcsh(1)
++
++if ($?tcsh && $?prompt) then
++
++ bindkey "\e[1~" beginning-of-line # Home
++ bindkey "\e[7~" beginning-of-line # Home rxvt
++ bindkey "\e[2~" overwrite-mode # Ins
++ bindkey "\e[3~" delete-char # Delete
++ bindkey "\e[4~" end-of-line # End
++ bindkey "\e[8~" end-of-line # End rxvt
++
++ set autoexpand
++ set autolist
++ set prompt = "%U%m%u:%B%~%b%# "
++endif
+diff --git a/csh.login b/csh.login
+new file mode 100644
+index 0000000..2455c3c
+--- /dev/null
++++ b/csh.login
+@@ -0,0 +1,8 @@
++# /etc/csh.login: system-wide .login file for csh(1) and tcsh(1)
++
++# allow for other packages/system admins to customize the shell environment
++if (-e /etc/csh/login.d && `/bin/ls /etc/csh/login.d` != "") then
++ foreach FILE (`/bin/ls /etc/csh/login.d/*`)
++ source $FILE;
++ end;
++endif
+diff --git a/csh.logout b/csh.logout
+new file mode 100644
+index 0000000..a207eba
+--- /dev/null
++++ b/csh.logout
+@@ -0,0 +1 @@
++# /etc/csh.logout: system-wide .logout file for csh(1) and tcsh(1)
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.20.00.bb b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.20.00.bb
new file mode 100644
index 000000000..b59d88f5d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.20.00.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "TENEX C Shell, an enhanced version of Berkeley csh \
+ The TENEX C Shell is an enhanced version of the Berkeley Unix C shell. \
+ It includes all features of 4.4BSD C shell, plus a command-line editor, \
+ programmable word completion, spelling correction and more."
+
+HOMEPAGE = "http://www.tcsh.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://Copyright;md5=575cf2715c3bf894e1f79aec1d4eaaf5"
+SECTION = "base"
+DEPENDS = "ncurses gettext-native"
+SRC_URI = " \
+ http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/${BP}.tar.gz \
+ file://0001-Enable-system-malloc-on-all-linux.patch \
+ file://0002-Add-debian-csh-scripts.patch \
+"
+SRC_URI[md5sum] = "59d40ef40a68e790d95e182069431834"
+SRC_URI[sha256sum] = "b89de7064ab54dac454a266cfe5d8bf66940cb5ed048d0c30674ea62e7ecef9d"
+
+EXTRA_OEMAKE += "CC_FOR_GETHOST='${BUILD_CC}'"
+inherit autotools
+
+do_compile_prepend() {
+ oe_runmake CC_FOR_GETHOST='${BUILD_CC}' CFLAGS='${BUILD_CFLAGS}' gethost
+}
+
+do_install_append () {
+ oe_runmake install.man DESTDIR=${D}
+
+ install -d ${D}${base_bindir}
+ ln -s /usr/bin/tcsh ${D}${base_bindir}/tcsh
+ ln -s /usr/bin/tcsh ${D}${base_bindir}/csh
+ install -d ${D}${sysconfdir}/csh/login.d
+ install -m 0644 ${S}/csh.cshrc ${S}/csh.login ${S}/csh.logout ${S}/complete.tcsh ${D}${sysconfdir}
+ install -D -m 0644 ${S}/csh-mode.el ${D}${datadir}/emacs/site-lisp/csh-mode.el
+}
+
+FILES_${PN} += "${datadir}/emacs/site-lisp/csh-mode.el"
+
+
+pkg_postinst_${PN} () {
+#!/bin/sh -e
+echo /usr/bin/tcsh >> $D/etc/shells
+echo /usr/bin/csh >> $D/etc/shells
+}
diff --git a/meta-openembedded/meta-oe/recipes-shells/zsh/zsh_5.4.2.bb b/meta-openembedded/meta-oe/recipes-shells/zsh/zsh_5.4.2.bb
new file mode 100644
index 000000000..100c449f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-shells/zsh/zsh_5.4.2.bb
@@ -0,0 +1,64 @@
+SUMMARY = "UNIX Shell similar to the Korn shell"
+DESCRIPTION = "Zsh is a shell designed for interactive use, although it is also a \
+ powerful scripting language. Many of the useful features of bash, \
+ ksh, and tcsh were incorporated into zsh; many original features were added."
+HOMEPAGE = "http://www.zsh.org"
+SECTION = "base/shell"
+
+LICENSE = "zsh"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=1a4c4cda3e8096d2fd483ff2f4514fec"
+
+DEPENDS = "ncurses bison-native libcap libpcre gdbm groff-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "dfe156fd69b0d8d1745ecf6d6e02e047"
+SRC_URI[sha256sum] = "957bcdb2c57f64c02f673693ea5a7518ef24b6557aeb3a4ce222cefa6d74acc9"
+
+inherit autotools gettext update-alternatives
+
+EXTRA_OECONF = " \
+ --bindir=${base_bindir} \
+ --enable-etcdir=${sysconfdir} \
+ --enable-fndir=${datadir}/${PN}/${PV}/functions \
+ --enable-site-fndir=${datadir}/${PN}/site-functions \
+ --with-term-lib='ncursesw ncurses' \
+ --with-tcsetpgrp \
+ --enable-cap \
+ --enable-multibyte \
+ --disable-gdbm \
+ --disable-dynamic \
+ zsh_cv_shared_environ=yes \
+"
+
+# Configure respects --bindir from EXTRA_OECONF, but then Src/Makefile will read bindir from environment
+export bindir="${base_bindir}"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+ALTERNATIVE_${PN} = "sh"
+ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh"
+ALTERNATIVE_TARGET[sh] = "${base_bindir}/${BPN}"
+ALTERNATIVE_PRIORITY = "100"
+
+export AUTOHEADER = "true"
+
+do_configure () {
+ gnu-configize --force ${S}
+ oe_runconf
+}
+
+do_install_append () {
+ rm -fr ${D}/usr/share
+}
+
+pkg_postinst_${PN} () {
+ touch $D${sysconfdir}/shells
+ grep -q "bin/zsh" $D${sysconfdir}/shells || echo /bin/zsh >> $D${sysconfdir}/shells
+ grep -q "bin/sh" $D${sysconfdir}/shells || echo /bin/sh >> $D${sysconfdir}/shells
+}
+
+FILES_${PN}-dbg += "\
+ ${libdir}/${PN}/${PV}/${PN}/.debug/*.so \
+ ${libdir}/${PN}/${PV}/${PN}/db/.debug/*.so \
+ ${libdir}/${PN}/${PV}/${PN}/net/.debug/*.so \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/anthy/anthy/2ch_t.patch b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/2ch_t.patch
new file mode 100644
index 000000000..bf9bdb63d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/2ch_t.patch
@@ -0,0 +1,5062 @@
+source: shamelessly stolen from debian ;-)
+purpose: add some entries particularly useful in Japanese 2channel anonymous website
+ (at least that is my understanding ;-))
+
+--- anthy-5414.orig/mkanthydic/2ch.t
++++ anthy-5414/mkanthydic/2ch.t
+@@ -0,0 +1,5055 @@
++# 2chÍѸì¤ÎCanna·Á¼°¼­½ñ
++# HARUYAMA Seigo haruyama@unixuser.org
++# ¸í¤ê¤äÉÊ»ì¤Ï¤³¤¦¤¹¤Ù¤­ ¤Ê¤É ¤¤¤Ã¤Ñ¤¤¤¢¤ë¤Ï¤º¤Ê¤Î¤Ç
++# ¤´»ØŦ¤è¤í¤·¤¯
++# »²¹Í: http://freezone.kakiko.com/jiten/index.html
++# http://members.tripod.co.jp/maruheso/aadic/index.html
++# http://isweb33.infoseek.co.jp/computer/gikosite/ (403 Forbidden)
++# http://cannadic.oucrc.org/
++# http://www.kyoto.trans-nt.com/anthy/
++# http://www.media-k.co.jp/jiten/
++# »²¹Í¤Ë¤·¤Æ¤¤¤ë¼­½ñ¤ÎÇÛÉե饤¥»¥ó¥¹¤¬¤Ï¤Ã¤­¤ê¤·¤Þ¤»¤ó¤¬
++# ¼ýÏ¿¤µ¤ì¤¿¸ì¤Ë´Ø¤·¤Æ¤Ï¥Ñ¥Ö¥ê¥Ã¥¯¥É¥á¥¤¥ó¤È²ò¤·¤ÆÌäÂê¤Ê¤¤
++# ¤ÈȽÃǤ·¤Æ¤¤¤Þ¤¹.
++#
++# ¤³¤Î¼­½ñ¤Ï̵ÊݾڤǤ¹¡£
++#
++# 2004/5/19ÈÇ
++#
++1¤Î¤¤¤·¤å¤¦¤«¤ó #T35 >>1¤Î°ì½µ´Ö
++1¤Î¤¤¤Ã¤·¤å¤¦¤«¤ó #JN >>1¤Î°ì½µ´Ö
++1¤Î¤ª¤µ¤Ê¤Ê¤¸¤ß #JN 1¤ÎÍĤʤ¸¤ß
++2¤Á¤ã¤ó¤»¤¤¤·¤ó¤Ó¤ç¤¦¤¤¤ó #JN 2chÀº¿Àɱ¡
++911¤¸¤±¤ó #T35 911»ö·ï
++¤¢¡¼¤¦¡¼ #CJ ¤¢¡Á¤¦¡Á
++¤¢¡¼¤¸¤å #KK ¥¢¡¼¥¸¥å
++¤¢¡¼¤¸¤å #T35 ¥¢¡¼¥¸¥å
++¤¢¡¼¤ë¤¢¡¼¤ë #T35 RR
++¤¢¡¼¤í¤ó¤â¤é¤é¡¼ #JN ¥¢¡¼¥í¥ó¥â¥é¥é¡¼
++¤¢¤¢¤¤¤¨¤Ð¤¸¤ç¤¦¤æ¤¦ #CJ ¤¢¤¢¸À¤¨¤Ð¾åÍ´
++¤¢¤¢¤¦¤¦ #CJ ¤¢¡Á¤¦¡Á
++¤¢¤¢¤¬¤à¤ä¤ë¤è #CJ ¤¢¤¢¡¢¥¬¥à¤ä¤ë¤è¡£
++¤¢¤¢¤¸¤å #T35 ¥¢¡¼¥¸¥å
++¤¢¤¢¤Ï¤Ï #CJ ¥¢¡¼¥Ï¥Ï
++¤¢¤¢¤Ï¤Ï #CJ Ž±Ž°ŽÊŽÊ
++¤¢¤¢¤ë¤¢¤¢¤ë #T35 RR
++¤¢¤¢¤ë¤¨¤¤¤¢¤¢¤ë #T35 RAR
++¤¢¤¤ #JN ¤¢¤¤
++¤¢¤¤¤¢¡¼¤ë #T35 IR
++¤¢¤¤¤³¤é #T35 ¥¢¥¤¥³¥é
++¤¢¤¤¤´ #T35 °¦¸í
++¤¢¤¤¤´¡¼ #CJ ¥¢¥¤¥´¡Á¡ª
++¤¢¤¤¤»¤ó #T35 ¤¢¤¤¤»¤ó
++¤¢¤¤¤Æ¤£¡¼¤Ñ¤ï¡¼ #T35 £É£Ô¥Ñ¥ï¡¼
++¤¢¤¤¤Ç¤£¡¼ #T35 £É£Ä
++¤¢¤¤¤É¤ë #T35 °¥¡ð
++¤¢¤¤¤Ê¤Ö¤ê¤Ã¤¸ #T35 ¥¢¥¤¥Ê¥Ö¥ê¥Ã¥¸
++¤¢¤¤¤Ë¤Á¤ã¤ó¤Í¤ë #T35 i¡Ý2¤Á¤ã¤ó¤Í¤ë
++¤¢¤¤¤Î¤¿¤Í #CN °¦¤Î¼ï
++¤¢¤¤¤Î¤¿¤Í #T35 °¦¤Î¼ï
++¤¢¤¤¤Ô¡¼ #T35 £É£Ð
++¤¢¤¤¤Ô¤¤ #T35 ip!
++¤¢¤¤¤Ö #KK °¦Éï
++¤¢¤¤¤Ö #T35 °¦Éï
++¤¢¤¤¤Ü¤ó #JN ¤¢¤¤¤Ü¤ó
++¤¢¤¤¤Ü¤ó #T35 ¤¢¤¤¤Ü¤ó
++¤¢¤¤¤á¤Ë¤å¤¦¤Ï¤¸¤­ #T35 ime.nuÃƤ­
++¤¢¤¤¤â¤Ê #T35 iMona
++¤¢¤¤¤â¤Ê¡¼ #JN ¥¢¥¤¥â¥Ê¡¼
++¤¢¤¤¤â¤Ê¡¼ #JN ¥¢¥¤¥â¥Ê¡¼
++¤¢¤¤¤é¤ó¤É #T35 °¥¤é¤ó¤É
++¤¢¤¤¤ë #KK ¥¢¥¤¥ë
++¤¢¤¤¤ë #T35 ¥¢¥¤¥ë
++¤¢¤¤¤ï¤¤¤æ¡¼¤¼¤í¤ï¤ó #JN IYU-01
++¤¢¤¦ #KK ¤¢¤¦
++¤¢¤¦ #T35 ¤¢¤¦
++¤¢¤¦¡¼ #JN ¥¢¥¦¡¼
++¤¢¤¦¤È¤í¡¼ #T35 ¥¢¥¦¥È¥í¡¼
++¤¢¤¦¤È¤í¤¦ #T35 ¥¢¥¦¥È¥í¡¼
++¤¢¤¦¤ò¤¿ #T35 ¤¢¤¦¥ò¥¿
++¤¢¤ª #R5r Àú
++¤¢¤ª¤¹¤® #KSr ÀĤ¹¤®
++¤¢¤ª¤¹¤® #T35 ÀĤ¹¤®
++¤¢¤ª¤¾¤é #KK ÀĶõ
++¤¢¤ª¤¾¤é #T35 ÀĶõ
++¤¢¤ª¤Ð #T35 ÀÄ»õ
++¤¢¤ª¤ê #T35 Àú¤ê
++¤¢¤ª¤ê¤³¤Æ¤¤ #T35 Àú¤ê¸ÇÄê
++¤¢¤ª¤ê¤³¤Ô¤Ú #T35 Àú¤ê¥³¥Ô¥Ú
++¤¢¤ª¤ê¤ó #JN ¥¢¥ª¥ê¥ó
++¤¢¤« #T35 ¹¤
++¤¢¤«¤¤¤¯¤Ë¤ß¤Á #T35 ÀÖ°æˮƻ
++¤¢¤«¤¤¤Û¤¦¤É¤¦ #T35 ÀÖ°æˮƻ
++¤¢¤«¤­¤ã¤Ã¤× #T35 ÀÖ¥­¥ã¥Ã¥×
++¤¢¤«¤À¤ó¤·¤ã¤¯ #T35 ÀÖÃ˼ß
++¤¢¤«¤Ò #KK ¥¢¥«Æü
++¤¢¤«¤Ò #T35 ¥¢¥«Æü
++¤¢¤«¤Þ¤Õ¤é¡¼ #T35 À֥ޥե顼
++¤¢¤«¤Þ¤Õ¤é¤¢ #T35 À֥ޥե顼
++¤¢¤¬ #R5 aga
++¤¢¤¬¤È¤¦ #CJ ¤¢¤¬¤È¤¦
++¤¢¤­¤·¤Î¤Î¤ß¤ä¤«¤³¤Ê¤¤¤·¤ó¤Î¤¦ #JN ½©¼ÄµÜ²Â»ÒÆâ¿Æ²¦
++¤¢¤­¤Ï¤Ð¤é¤Ò¤ç¤¦¤¸¤å¤ó¤·¤è¤¦ #T35 ½©ÍÕ¸¶É¸½à»ÅÍÍ
++¤¢¤­¤Ò¤í¤â¤Ê¡¼ #JN ¥¢¥­¥Ò¥í¥â¥Ê¡¼
++¤¢¤­¤Ò¤í¤â¤Ê¡¼ #T35 ¥¢¥­¥Ò¥í¥â¥Ê¡¼
++¤¢¤­¤Ò¤í¤â¤Ê¤¢ #T35 ¥¢¥­¥Ò¥í¥â¥Ê¡¼
++¤¢¤­¤ì¤¹ #JN ¥¢¥­¥ì¥¹
++¤¢¤¯¤­¤ó #T35 ¥¢¥¯¶Ø
++¤¢¤¯¤»¤¹¤­¤»¤¤ #T30 ¥¢¥¯¥»¥¹µ¬À©
++¤¢¤¯¤»¤¹¤­¤»¤¤ #T35 ¥¢¥¯¥»¥¹µ¬À©
++¤¢¤¯¤Þ #JN °­Ëâ
++¤¢¤¯¤Þ #T35 °­Ëâ
++¤¢¤°¤Í¤¹¤¹¤Ú¤·¤ã¤ë #T35 ¥¢¥°¥Í¥¹¥¹¥Ú¥·¥ã¥ë
++¤¢¤±¤¤¤¿ #CN ¥¢¥±ÈÄ
++¤¢¤±¤¤¤¿ #T35 ¥¢¥±ÈÄ
++¤¢¤² #CJ ¤¢¤²
++¤¢¤² #CN ¾å¥²
++¤¢¤² #KSr ¤¢¤²
++¤¢¤² #R5 age
++¤¢¤² #T35 age
++¤¢¤² #T35 ¤¢¤²
++¤¢¤² #T35 ¾å¤²
++¤¢¤² #T35 ¾å¥²
++¤¢¤²¤¢¤é¤· #T35 age¹Ó¤é¤·
++¤¢¤²¤¢¤é¤· #T35 ¤¢¤²¹Ó¤é¤·
++¤¢¤²¤Á¤å¤¦ #T35 ¤¢¤²¿ß
++¤¢¤²¤Ñ¤½¤Þ¤½ #JN ageŽÊŽßŽ¿ŽÏŽ¿
++¤¢¤²¤Ö¤é¤¶¡¼¤º #JN age¥Ö¥é¥¶¡¼¥º
++¤¢¤²¤â¤Ê¡¼ #JN age¥â¥Ê¡¼
++¤¢¤²¤ì #CJ age¤ì
++¤¢¤²¤ì¤¹ #T35 age¥ì¥¹
++¤¢¤²¤ó¤Ê¤Ü¤± #CJ ¤¢¤²¤ó¤Ê¥Ü¥±¡ª
++¤¢¤´ #JN ¥¢¥´
++¤¢¤´ #T35 ¥¢¥´
++¤¢¤´¤¢¤Ë¤á #T35 ¥¢¥´¥¢¥Ë¥á
++¤¢¤´¤ª¤¿ #JN ¥¢¥´¥ª¥¿
++¤¢¤´¤ª¤¿ #T35 ¥¢¥´¥ª¥¿
++¤¢¤´¤Ï¤º¤·¤â¤Á #T30 ¤¢¤´¥Ï¥º¥·»ý¤Á
++¤¢¤´¤Ï¤º¤·¤â¤Á #T35 ¤¢¤´¥Ï¥º¥·»ý¤Á
++¤¢¤µ¤Á¤å¤ó #T35 Ä«¥Á¥å¥ó
++¤¢¤µ¤Ì¤Þ¤Ê¤ß¤»¤ó¤»¤¤ #JN Àõ¾ÂÆàÈþÀèÀ¸
++¤¢¤µ¤Ï¤é¡¼ #JN ¥¢¥µ¥Ï¥é¡¼
++¤¢¤µ¤Ò¤¤¤Á¤Ë¤¤¤Á¤¼¤í #T35 Ä«Æü12.10
++¤¢¤µ¤Ô¡¼ #JN ¥¢¥µ¥Ô¡¼¡¡
++¤¢¤¸¤Ý¤ó #T35 Ì£¥Ý¥ó
++¤¢¤¹¤«¤â¤Ê¡¼ #JN ÈôÄ»¥â¥Ê¡¼
++¤¢¤¹¤­¡¼¤¢¡¼¤È #T35 ¥¢¥¹¥­¡¼¥¢¡¼¥È
++¤¢¤¹¤­¡¼¤¢¡¼¤È¤«¤¤¤»¤­ #JN £Á£Á²òÀÏ
++¤¢¤¹¤­¤¤¤¢¤¢¤È #T35 ¥¢¥¹¥­¡¼¥¢¡¼¥È
++¤¢¤º¤Þ¤ó¤¬¤À¤¤¤ª¤¦ #T35 ¤¢¤º¤Þ¤ó¤¬Â粦
++¤¢¤½¤¦ #JN Ž±Ž¿Ž³
++¤¢¤½¤Ñ¤½¤Þ¤½ #JN ¥¢¥½¥Ñ¥½¥Þ¥½
++¤¢¤½¤Ñ¤½¤ï¤Ã¤·¤ç¤¤ #JN ¥¢¥½¥Ñ¥½¥ï¥Ã¥·¥ç¥¤
++¤¢¤½¤Þ¤½¤Ñ¤½¤Ô¡¼¤·¡¼ #JN Ž±Ž¿ŽÊŽßŽ¿ŽÏŽ¿PC
++¤¢¤Ã¤­¤¤ #JN ¥¢¥Ã¥­¡¼
++¤¢¤Ã¤¶¤à #JN ¥¢¥Ã¥¶¥à
++¤¢¤Ã¤½ #JN ¤¢¤Ã¤½
++¤¢¤Ã¤½¡¼ #CJ ¤¢¤Ã¤½¡¼
++¤¢¤Ã¤½¡¼ #JN ¤¢¤Ã¤½¡¼
++¤¢¤Ã¤Á¤³¤Ã¤Á¤¤¤¤¤È¤â #JN ¥¢¥Ã¥Á¥³¥Ã¥Á¥¤¥¤¥È¥â
++¤¢¤Ã¤×¤·¤ç¤¯¤Ë¤ó #T35 ¤¦£ð¿¦¿Í
++¤¢¤Ã¤×¤·¤ç¤¯¤Ë¤ó #T35 ¤¦£ð¿¦¿Í
++¤¢¤Ã¤×¤º #T35 Appz
++¤¢¤Ã¤×¤ë¤ª¤ä¤¸ #T35 ¥¢¥Ã¥×¥ë¥ª¥ä¥¸
++¤¢¤Ã¤×¤ë¤­¤Ã¤É #JN ¥¢¥Ã¥×¥ë¥­¥Ã¥É
++¤¢¤Ã¤×¤í¡¼¤À¡¼ #T35 ¥¢¥Ã¥×¥í¡¼¥À¡¼
++¤¢¤Ä¡¼ #JN (ŽßAŽß;)Ž±ŽÂŽ°
++¤¢¤Ä¡¼ #JN Ž±ŽÂŽ°
++¤¢¤Ä¤²¤·¤ç¤¦¤¸¤µ¤¯¤¸¤¨¤ó #JN ¡ÚŽ¥¢ÏŽ¥¡Û
++¤¢¤Ä¤²¤·¤ç¤¦¤¸¤µ¤¯¤¸¤¨¤ó #JN Ž±ŽÂŽ¹ŽÞŽ¼Ž®Ž³Ž¼ŽÞŽ»Ž¸Ž¼ŽÞŽ´ŽÝ
++¤¢¤È¤Ô¡¼ #T35 @p
++¤¢¤Ê¤¶¡¼¤¢¤®¤³ #JN ¥¢¥Ê¥¶¡¼¥¢¥®¥³
++¤¢¤Ê¤¿¤ò¤Ï¤ó¤Ë¤ó¤Ç¤¹ #CJ ¤¢¤Ê¤¿¤ò¡¢ÈȿͤǤ¹
++¤¢¤Ê¤¿¤ò¤Ï¤ó¤Ë¤ó¤Ç¤¹ #JN ¡Ê'¢Ï`¡Ë¡ã¤¢¤Ê¤¿¤ò¡¢ÈȿͤǤ¹
++¤¢¤Ê¤¿¤ò¤Ï¤ó¤Ë¤ó¤Ç¤¹ #JN ¤¢¤Ê¤¿¤ò¡¢ÈȿͤǤ¹
++¤¢¤Ê¤í¤°¤Õ¤¡¤¯¤È¤ê¤¤ #T35 ¥¢¥Ê¥í¥°¥Õ¥¡¥¯¥È¥ê¡¼
++¤¢¤Ê¤ò¤¿ #T35 ¥¢¥Ê¥ò¥¿
++¤¢¤Ë #T35 ·»
++¤¢¤Ë¤ª¤¿ #T35 ¥¢¥Ë¥ª¥¿
++¤¢¤Ë¤­ #T35 ¥¢¥Ë¥­
++¤¢¤Ë¤¸¤ã #T35 ·»¼Ô
++¤¢¤Ë¤×¤ê #T35 ¥¢¥Ë¥×¥ê
++¤¢¤Ë¤ò¤¿ #T35 ¥¢¥Ë¥ò¥¿
++¤¢¤Î¤¯¤Ë #T35 ¤¢¤Î¹ñ
++¤¢¤Î¤¯¤Ë¤Î¤¢¤Î¤Û¤¦¤½¤¯ #T35 ¤¢¤Î¹ñ¤Î¤¢¤Îˡ§
++¤¢¤Ï¤¡ #JN (*¡­§Õ`*)Ž±ŽÊŽ§&#9829;
++¤¢¤Ï¤¡ #JN (*¡­§Õ`;)¡Ä
++¤¢¤Ï¤¡ #JN ¡Ä(*¡­§Õ`)Ž±ŽÊŽ§¡Ä&#9829;
++¤¢¤Ï¤¡ #JN ¦²(*Žß§¥`;)Ž±¡ÄŽ±¡ÄŽ±Ž¯ŽÊŽ§Ž§Ž§Ž§Ž§Ž§Ž§Ž§&#9829;!!!!
++¤¢¤Ï¤¡ #JN ¦²(Žß§Õ`*;)Ž±Ž¯,Ž±ŽÊŽ§&#9829;
++¤¢¤Ï¤¡ #JN Ž±ŽÊŽ§&#9829;
++¤¢¤Ñ¤à #T35 ¥¢¥Ñ¥à
++¤¢¤Ñ¤à¤¿¤Þ¤â¤Ã¤Æ¤³¤¤ #JN ¥¢¥Ñ¥à¡ªÃÆ»ý¤Ã¤Æ¤³¤¤
++¤¢¤Ò¤ã #CJ ¥¢¥Ò¥ã
++¤¢¤Ò¤ã #CJ Ž±ŽËŽ¬
++¤¢¤Ò¤ã #JN ¥¢¥Ò¥ã
++¤¢¤Ò¤ã #JN Ž±ŽËŽ¬
++¤¢¤Ò¤ã¤¢¤¶¤é¤· #JN ¥¢¥Ò¥ã¥¢¥¶¥é¥·¡¡
++¤¢¤Ò¤ã¤¬¤ß¤Ï¤«¤» #JN ¥¢¥Ò¥ã¿ÀÇî»Î
++¤¢¤Ó¤ã #CJ ¤¢¤Ó¤ã
++¤¢¤Ô¤Ã¤·¤ã¡¼ #JN ¥¢¥Ô¥Ã¥·¥ã¡¼
++¤¢¤Õ¤¡¡¼¤à¤É¤¨¤Ã¤¯¤¹ #JN ¥¢¥Õ¥¡¡¼¥à¥É£Ø
++¤¢¤Õ¤© #T35 ¥¢¥Õ¥©
++¤¢¤Õ¤¬¤ó¤³¤¦¤¯¤¦¤º¤â¤¦ #T35 ¥¢¥Õ¥¬¥ó¹Ò¶õÁêËÐ
++¤¢¤Õ¤í¤Ë¤À¡¼ #JN ¥¢¥Õ¥í¥Ë¥À¡¼
++¤¢¤Ö¤¤¤¿ #T35 ¥¢¥ÖÈÄ
++¤¢¤Ö¤¥¤ë¤â¤Ê¡¼ #JN ¥¢¥ô¥É¥¥¥ë¥â¥Ê¡¼
++¤¢¤× #T30 ¤¢¤×
++¤¢¤× #T30 ¥¢¥×
++¤¢¤×¤í¤À #T35 ¤¢¤×¤í¤À
++¤¢¤Ù #JN ¤Ê¤Ã¤Á
++¤¢¤Ù #JN °ÂÇÜ
++¤¢¤Û¤¹¤± #T35 ¤¢¤Û½õ
++¤¢¤Û¤¿¤ó #JN ¤¢¤Û¤¿¤ó
++¤¢¤Û¤ë¤À¡¼ #T35 ¥¢¥Û¥ë¥À¡¼
++¤¢¤Û¤ë¤À¤¢ #T35 ¥¢¥Û¥ë¥À¡¼
++¤¢¤Ü¡¼¤ó #JN ¤¢¤Ü¡¼¤ó
++¤¢¤Ü¡¼¤ó #T30 ¤¢¤Ü¡¼¤ó
++¤¢¤Ü¡¼¤ó #T30 ¤¢¤Ü¡Á¤ó
++¤¢¤Ü¡¼¤ó¤Í¤Ã¤È¤ï¡¼¤¯ #T35 ¥¢¥Ü¡¼¥ó¥Í¥Ã¥È¥ï¡¼¥¯
++¤¢¤Ü¡¼¤ó¤Ð¤¯¤é¤¤ #JN Ž±ŽÎŽÞŽ°ŽÝÇúÍë
++¤¢¤Ü¤ª¤·¤ç¤ó #T35 ¥¢¥Ü¡¼¥·¥ç¥ó
++¤¢¤Ü¤ª¤ó #T35 ¤¢¤Ü¡Á¤ó
++¤¢¤Ü¤ª¤ó¤Í¤Ã¤È¤ï¤¢¤¯ #T35 ¥¢¥Ü¡¼¥ó¥Í¥Ã¥È¥ï¡¼¥¯
++¤¢¤Ý¡¼ #KK ¥¢¥Ý¡¼
++¤¢¤Ý¡¼ #T35 ¥¢¥Ý¡¼
++¤¢¤Ý¤ª #T35 ¥¢¥Ý¡¼
++¤¢¤Þ¡¼ #JN ¡Ê&hearts;¢Ï;&hearts;¡ËŽ±ŽÏŽ°
++¤¢¤Þ¡¼ #JN ¥¢¥Þ¡¼
++¤¢¤ß #T35 ÌÖ
++¤¢¤à¤í¤Ë¤ã¤ß¤¨ #JN °Â¼¼ŽÆŽ¬ŽÐŽ´
++¤¢¤á¤¶¡¼ #T35 ¤¢¤á¤¶¡¼
++¤¢¤á¤¶¡¼¤Í¤Ã¤È¤Ä¡¼ #CN ¤¢¤á¤¶¡¼¤Í¤Ã¤È£²
++¤¢¤á¤¶¡¼¤Í¤Ã¤È¤Ä¡¼ #T35 ¤¢¤á¤¶¡¼¤Í¤Ã¤È£²
++¤¢¤á¤¶¤¢ #T35 ¤¢¤á¤¶¡¼
++¤¢¤á¤¶¤¢¤Í¤Ã¤È¤Ä¤¦ #T35 ¤¢¤á¤¶¡¼¤Í¤Ã¤È£²
++¤¢¤á¤¾¤¦ #CN ¤¢¤á¤¾¤¦
++¤¢¤á¤¾¤¦ #JN ¤¢¤á¤¾¤¦
++¤¢¤á¤¾¤¦ #T35 ¤¢¤á¤¾¤¦
++¤¢¤á¤¾¤¦¤«¤ê #JN ¤¢¤á¤¾¤¦¡Ê²¾¡Ë
++¤¢¤á¤¾¤¦¤«¤ê #T35 ¤¢¤á¤¾¤¦¡Ê²¾¡Ë
++¤¢¤á¤Ë¤â¤Þ¤±¤Æ #T35 ¥¢¥á¥Ë¥â¥Þ¥±¥Æ
++¤¢¤á¤Í¤³ #JN ¤¢¤á¤Í¤³
++¤¢¤ä¤·¤£¤ï¡¼¤ë¤É #CN ¤¢¤ä¤·¤£¤ï¡¼¤ë¤É
++¤¢¤ä¤·¤¤ #T35 ¤¡¤ã¦É¤£
++¤¢¤ä¤·¤¤¤¸¤å¤¦¤Ë¤ó #T35 ¤¡¤ã¦É¤£½»¿Í
++¤¢¤ä¤·¤¤¤ï¡¼¤ë¤É #CN ¤¡¤ã¦É¤£¤ï¡¼¤ë¤É
++¤¢¤ä¤·¤¤¤ï¡¼¤ë¤É #T35 ¤¡¤ã¦É¤£¤ï¡¼¤ë¤É
++¤¢¤ä¤·¤¤¤ï¤¢¤ë¤É #T35 ¤¡¤ã¦É¤£¤ï¡¼¤ë¤É
++¤¢¤ä¤Ê¤ß¤ì¤¤ #JN ¤¡¤ã¤Ê¤ß¥ì¥¤
++¤¢¤æ #JN ¤¢¤æ
++¤¢¤æ #T35 ¤¢¤æ
++¤¢¤æ #T35 °¾
++¤¢¤æ¤â¤Ê¡¼ #JN ¤¢¤æ¥â¥Ê¡¼
++¤¢¤è¤Í #T35 ¤¢¤è¤Í
++¤¢¤é #S5r ¹Ó¤é
++¤¢¤é¤¢¤­¤¤ #T35 ¥¢¥é¡¼¥­¡¼
++¤¢¤é¤¯¤ì #JN ¤¢¤é¤¯¤ì
++¤¢¤é¤¯¤ì¤ï¤Ã¤·¤ç¤¤ #JN ¤¢¤é¤¯¤ì¥ï¥Ã¥·¥ç¥¤
++¤¢¤é¤µ¡¼ #T35 ¹Ó¤µ¡¼
++¤¢¤é¤µ¤¢ #T35 ¹Ó¤µ¡¼
++¤¢¤é¤· #T35 ¹Ó¤é¤·
++¤¢¤é¤· #T35 ¹Ó¤é»á
++¤¢¤é¤· #T35 ¹Ó»á
++¤¢¤é¤· #T35 ¿·»á
++¤¢¤é¤· #T35 Íò
++¤¢¤é¤·¤¤¤é¤¤ #T30 ¹Ó¤é¤·°ÍÍê
++¤¢¤é¤·¤¤¤é¤¤ #T35 ¹Ó¤é¤·°ÍÍê
++¤¢¤é¤·¤³¤Æ¤¤ #T30 ¹Ó¤é¤·¸ÇÄê
++¤¢¤é¤·¤³¤Æ¤¤ #T35 ¹Ó¤é¤·¸ÇÄê
++¤¢¤é¤·¤½¤¦¤´¤¦¤»¤ó¤¿¡¼ #JN ¹Ó¤é¤·Áí¹ç¥»¥ó¥¿¡¼
++¤¢¤é¤¹ #S5r ¹Ó¤é
++¤¢¤é¤Ó¤¢¤´¤¢¤é¤· #T35 ¥¢¥é¥Ó¥¢¸ì¹Ó¤é¤·
++¤¢¤é¤ä¤À #CJ ¤¢¤é¤ä¤À
++¤¢¤é¤ä¤À #JN (¡¬§Õ¡¬)¡ã¤¢¤é¤ä¤À¡ª
++¤¢¤é¤ä¤À #JN ¤¢¤é¤ä¤À
++¤¢¤é¤ä¤À¤«¤ó¤¼¤ó¤¿¤¤ #JN ¤¢¤é¤ä¤À´°Á´ÂÎ
++¤¢¤ê¤¨¡¼¤ë #CJ ¥¢¥ê¥¨¡¼¥ë
++¤¢¤ê¤¨¡¼¤ë #T35 ¥¢¥ê¥¨¡¼¥ë
++¤¢¤ê¤¨¡¼¤ë #T35 Ž±ŽØŽ´Ž°ŽÙ
++¤¢¤ê¤¨¤¨¤ë #T35 ¥¢¥ê¥¨¡¼¥ë
++¤¢¤ê¤¨¤¨¤ë #T35 Ž±ŽØŽ´Ž°ŽÙ
++¤¢¤ê¤¬¤È¤¦ #JN ¤¢¤ê¤¬¤È¤¦
++¤¢¤ê¤¹ #JN ¤¢¤ê¤¹
++¤¢¤ë¤«¤â¤Ê¤º¤±¤¤¤à¤·¤ç #JN ¥¢¥ë¥«¥â¥Ê¥º·ºÌ³½ê
++¤¢¤ë¤¯¤­¤Î¤³ #JN Ê⤯¥­¥Î¥³
++¤¢¤ë¤¯¤á #JN Ê⤯²ê
++¤¢¤ì¤ó¤¸ #JN ¥¢¥ì¥ó¥¸
++¤¢¤í¤¨¤ê¡¼¤Ê #JN ¥¢¥í¥¨¥ê¡¼¥Ê
++¤¢¤ó¤¬¤È¤Ê¤â¡¼ #JN ¤¢¤ó¤¬¤È¥Ê¥â¡¼
++¤¢¤ó¤°¤é #T35 ¥¢¥ó¥°¥é
++¤¢¤ó¤±¤ó¤µ¤Ä #JN °Å¡¦·õ¡¦»¦
++¤¢¤ó¤·¤ã¤¹¤Í¤³ #JN ¥¢¥ó¥·¥ã¥¹Ç­
++¤¢¤ó¤¿¤¬¤Ê¡¼ #JN ¥¢¥ó¥¿¥¬¥Ê¡¼
++¤¢¤ó¤¿¤â¤Í¡¼ #JN ¥¢¥ó¥¿¥â¥Í¡¼
++¤¢¤ó¤À¡¼¤°¤é¤¦¤ó¤É #T35 ¥¢¥ó¥À¡¼¥°¥é¥¦¥ó¥É
++¤¢¤ó¤Á¤Ç¤£¤¤¤Æ¤£¤¤ #T35 ¥¢¥ó¥ÁDT
++¤¢¤ó¤Ê¤«¤Ï¤ë¤Ê #CN °ÂÃ濺̾
++¤¢¤ó¤Ê¤«¤Ï¤ë¤Ê #T35 °ÂÃ濺̾
++¤£¤ç¤¥ #JN ¤£¤ç¤¥
++¤¤ #C5r ÀÂ
++¤¤¡¼¤¸¤¤ #T35 £ÅÌì
++¤¤¡¼¤Ú¡¼¤³¡¼ #JN ¥¤¡¼¥Ú¡¼¥³¡¼
++¤¤¡¼¤ó¤¸¤ã¤Ê¤¤¤Î #JN ¤¤¡¼¤ó¤¸¤ã¤Ê¤¤¤Î
++¤¤¤¤ #CJ (Ž¥¢ÏŽ¥)Ž²Ž²!!
++¤¤¤¤ #CJ ¡Ê¡¦¢Ï¡¦¡Ë¥¤¥¤!!
++¤¤¤¤ #CJ ¡Ê¡¦¢Ï¡¦¡ËŽ²Ž²!!
++¤¤¤¤ #CJ ¥¤¥¤
++¤¤¤¤¤¢¤¸¤ã¤ó #JN ¤¤¤¤¤¢¤¸¤ã¤ó
++¤¤¤¤¤¸¤Þ #T35 ÈÓÅè
++¤¤¤¤¤¿¤¤¤À¤±¤Á¤ã¤¦¤ó¤«¤È #CJ ¸À¤¤¤¿¤¤¤À¤±¤Á¤ã¤¦¤ó¤«¤È¡£
++¤¤¤¤¤À #T35 ÈÓÅÄ
++¤¤¤¨¤¤¤³¤é #T35 °ä±Æ¥³¥é
++¤¤¤¨¤Ï¤ä¤É¤Ç¤â¤¬¤Ã¤·¤å¤¯¤¸¤ç¤Ç¤â¤Í¤§¤¾ #T35 ²È¤Ï½É¤Ç¤â¹ç½É½ê¤Ç¤â¤Í¤§¤¾¡ª
++¤¤¤« #T35 ¤¤¤«
++¤¤¤«¤¬¤Ê¤â¤Î¤« #JN Ž²Ž¶Ž¶ŽÞŽÅŽÓŽÉŽ¶
++¤¤¤«¤¯¤»¤¨ #CJ ¤¤¤«¤¯¤»¡¼
++¤¤¤«¤·¤ç¤¦¤ê¤ã¤¯ #CJ ¡Ê°Ê²¼¾Êά
++¤¤¤«¤·¤ç¤¦¤ê¤ã¤¯ #CJ °Ê²¼¾Êά
++¤¤¤«¤ê¤Î¤¤¤Þ¤Î¤¦¤Á #JN Åܤê¤Î¥¤¥Þ¥Î¥¦¥Á
++¤¤¤«¤ê¤ò¤Ö¤Ä¤±¤ë¤â¤Ê¡¼ #JN Åܤê¤ò¤Ö¤Ä¤±¤ë¥â¥Ê¡¼
++¤¤¤­¤¸¤ë¤·¤®¤å¤¦¤Ë¤å¤¦ #JN À°õµíÆý
++¤¤¤­¤Î¤¤¤¤¤®¤³¤¦¤ê #JN À¤­¤Î¤¤¤¤¥®¥³Çä¤ê
++¤¤¤­¤Î¤¤¤¤¤Ë¤»¤®¤³ #JN À¤­¤ÎÎɤ¤µ¶¥®¥³
++¤¤¤¯ #C5r À¤¯
++¤¤¤¯¤Ê¤¤ #CJ ¥¤¥¯¥Ê¥¤¡ª¡ª
++¤¤¤¯¤Ê¤¤ #CJ Ž²Ž¸ŽÅŽ²!!
++¤¤¤±¤Ì¤Þ #T35 ÃÓ¾Â
++¤¤¤±¤Í¡¼¤è #JN ¥¤¥±¥Í¡¼¥è
++¤¤¤±¤á¤ó #T35 ÃÓÌÍ
++¤¤¤±¤á¤ó¤¦¤ó¤³ #JN ¤¤¤±¤á¤ó¥¦¥ó¥³
++¤¤¤³¡¼¤¯¤³¤Æ¤Ê¡¼¤³¤â¤Ò¤ã #JN ¥¤¥³¡¼¥¯¡¦¥³¥Æ¥Ê¡¼¡¦¥³¥â¥Ò¥ã
++¤¤¤³¤ª¤ë¤Ð¤« #T35 ¥¤¥³¡¼¥ë¥Ð¥«
++¤¤¤³¤¯¤®¤³ #JN °Û¹ñµ¼¸Å
++¤¤¤·¤«¤ï #T35 ÀÐÀî
++¤¤¤·¤«¤ï¤Ã¤Æ¤¦¤ó¤³¤¹¤ë¤Î #CJ ÀÐÀî¤Ã¤Æ¥¦¥ó¥³¤¹¤ë¤Î¡©
++¤¤¤·¤ã #T35 °å¼Ô
++¤¤¤·¤ä¤­¤¤¤â¤¦¤ê #JN ÀоƤ¤¤âÇä¤ê
++¤¤¤¸¤á¤Ê¤¤¡¼¤Ç¤Í #JN ¥¤¥¸¡¦¥á¡¦¥Ê¥¤¥Ç¡¼¥Í
++¤¤¤¸¤ç¤¦¤¸¤µ¤¯¤¸¤¨¤ó¤Ç¤·¤¿ #CJ (Ž¥¢ÏŽ¥)Ž²Ž¼ŽÞŽ®Ž³Ž¼ŽÞŽ»Ž¸Ž¼ŽÞŽ´ŽÝŽÃŽÞŽ¼ŽÀ
++¤¤¤¸¤ç¤¦¤¸¤µ¤¯¤¸¤¨¤ó¤Ç¤·¤¿ #CJ ¡Ê¡¦¢Ï¡¦¡ËŽ²Ž¼ŽÞŽ®Ž³Ž¼ŽÞŽ»Ž¸Ž¼ŽÞŽ´ŽÝŽÃŽÞŽ¼ŽÀ
++¤¤¤¹ #T35 °Ø»Ò
++¤¤¤¹¤É¤ó #T35 ¥¤¥¹¥É¥ó
++¤¤¤¿ #T35 ÈÄ
++¤¤¤¿¤¤ #T35 °äÂÎ
++¤¤¤¿¤«¤ó #T35 ÄË´É
++¤¤¤¿¤¬¤ª¤Á¤ë #CJ ÈĤ¬Íî¤Á¤ë
++¤¤¤¿¤¬¤­ #KK Ä˲
++¤¤¤¿¤¬¤­ #T35 Ä˲
++¤¤¤¿¤¬¤È¤Ö #CJ ÈĤ¬Èô¤Ö
++¤¤¤¿¤¯¤Í¡¼¤è #JN ¥¤¥¿¥¯¥Í¡¼¥è
++¤¤¤¿¤³¤¦¤¿¤¤¤¹¤± #T35 ÈűÂà½õ
++¤¤¤¿¤´¤Ð¤¯ #T30 ÈĸíÇú
++¤¤¤¿¤Á¤¬ #W5r ÈÄ°ã
++¤¤¤¿¤Á¤¬¤¤ #T35 Èİ㤤
++¤¤¤¿¤È¤Ð¤· #T35 ÈĤȤФ·
++¤¤¤¿¤Ë¤¤¤± #CJ ÈĤËÀ¤±¡ª
++¤¤¤¿¤á¤¤ #T35 ÈÄ̾
++¤¤¤¿¤ë¤ê¤¢¤ê¤Æ¤£ #T35 ¤¤¤¿¤ë¥ê¥¢¥ê¥Æ¥£
++¤¤¤Á #T35 1
++¤¤¤Á¤¤ #JNS »Ô°æ
++¤¤¤Á¤¤ #T35 »Ô°æ
++¤¤¤Á¤´¤»¤ó¤½¤¦ #T35 çõÀïÁè
++¤¤¤Á¤´¤Þ¤«¤¤ #T35 çõË⳦
++¤¤¤Á¤µ¤ó #JN £±¤µ¤ó
++¤¤¤Á¤µ¤ó¤Î¤ª¤«¤¢¤µ¤Þ¤Ø #CJ 1¤µ¤ó¤Î¤ªÊìÍͤØ
++¤¤¤Á¤µ¤ó¤Î¤´¤¦¤«¤¯¤Ï¤Ã¤Ô¤ç¤¦ #JN £±¤µ¤ó¤Î¹ç³Êȯɽ
++¤¤¤Á¤µ¤ó¤ò¤È¤ê¤Þ¤¯¤½¤¦¤«¤ó¤º #JN £±¤µ¤ó¤ò¼è¤ê´¬¤¯Áê´Ø¿Þ
++¤¤¤Á¤µ¤ó¤ò¤È¤ê¤Þ¤¯¤½¤¦¤«¤ó¤º #T35 £±¤µ¤ó¤ò¼è¤ê´¬¤¯Áê´Ø¿Þ
++¤¤¤Á¤Ã¤Æ¤¦¤¶¤¤¤è¤Í #JN £±¤Ã¤Æ¤¦¤¶¤¤¤è¤Í¡Á
++¤¤¤Á¤Î¤Ä¤¦¤Á¤Ò¤ç¤¦ #JN £±¤ÎÄÌÃÎɽ
++¤¤¤Á¤Î¤Ï¤« #JN £±¤ÎÊè
++¤¤¤Á¤Ï¤Ï¤ä¤¯¤·¤Í #JN £±¤ÏÁ᤯»à¤Í¡ª¡ª
++¤¤¤Á¤Ó¤Ã¤È¤µ¤Ð #T35 1bit»ª
++¤¤¤Á¤â¤¸¤Å¤Ä¤Ä¤¯¤Ã¤Æ¤Õ¤ä¤·¤¿¤¢¤¹¤­¡¼¤¢¡¼¤È #JN °ìʸ»ú¤º¤Ä¤Õ¤ä¤·¤Æºî¤Ã¤¿£Á£Á
++¤¤¤Ã¤­¤³¤¦ #T35 °ì´ü¹»
++¤¤¤Ã¤¿¤ó¤³¤ê¤ó¤º #JN Ž²Ž¯ŽÀŽÝŽºŽØŽÝŽ½ŽÞ
++¤¤¤Ã¤Á¤ã¤Ã¤Æ¤¯¤À¤µ¤¤ #JN À¤äÁ¤ã¤Ã¤Æ¤¯¤À¤µ¤¤
++¤¤¤Ã¤Á¤ã¤ó #CJ 1ch
++¤¤¤Ã¤Á¤ã¤ó #CJ 1ch.tv
++¤¤¤Ã¤Á¤ã¤ó #CJ £±¤Á¤ã¤ó
++¤¤¤Ã¤Á¤ã¤ó #T35 1ch
++¤¤¤Ã¤Á¤ã¤ó #T35 1ch.tv
++¤¤¤Ã¤Á¤ã¤ó #T35 £±¤Á¤ã¤ó
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #CJ 1ch
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #CJ 1ch.tv
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #CJ £±¤Á¤ã¤ó
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #T35 1ch
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #T35 1ch.tv
++¤¤¤Ã¤Á¤ã¤ó¤Í¤ë #T35 £±¤Á¤ã¤ó
++¤¤¤Ã¤Æ¤¯¤ë #CJ À¤äƤ¯¤ë
++¤¤¤Ã¤Æ¤¯¤ë #kxuru À¤äƤ¯¤ë
++¤¤¤Ã¤Æ¤è¤· #CJ ¤£¤Ã¦Ó¤ç¦É
++¤¤¤Ã¤Æ¤è¤· #CJ À¤äƤ褷
++¤¤¤Ã¤Æ¤è¤·¤³¤¬¤¿¤Ò¤³¤¦¤Æ¤¤ #JN À¤äƤ褷¾®·¿Èô¹ÔÄú
++¤¤¤Ã¤Æ¤è¤·¤Ë¤ó¤Æ¤¤¤¤¤¤¤ó¤«¤¤ #JN À¤äƤ褷ǧÄê°Ñ°÷²ñ
++¤¤¤Ã¤Æ¤è¤·¤Ë¤ó¤Æ¤¤¤¤¤¤¤ó¤«¤¤ #JN À¤äƤ褷ǧÄê°Ñ°÷²ñ
++¤¤¤Ã¤Æ¤è¤¹ #CJ À¤äƥ襹
++¤¤¤Ã¤È¤¦¤¸¤ç¤æ¤¦ #T35 °ìÅù½÷Í¥
++¤¤¤Ã¤Ñ¤Ä¤À¤±¤Ê¤é¤´¤·¤ã #CJ °ìȯ¤À¤±¤Ê¤é¸í¼Í
++¤¤¤Ã¤Ñ¤ó¤­¤ã¤¯ #T35 °ìÈ̵Ò
++¤¤¤Ã¤Ñ¤ó¤¸¤ó #T35 °ìÈÌ¿Í
++¤¤¤Ä¤â¤³¤³¤«¤é #JN ¤¤¤Ä¤â¤³¤³¤«¤é
++¤¤¤Æ¤ó¤·¤Þ¤·¤¿ #CJ °Üž¤·¤Þ¤·¤¿
++¤¤¤Æ¤ó¤·¤Þ¤·¤¿ #T35 °Üž¤·¤Þ¤·¤¿
++¤¤¤Ç¤Û¤½ #JN ÅÁÀâµð¿ÀŽ²ŽÃŽÞŽÎŽ¿
++¤¤¤Ç¤Û¤½ #JN Ž²ŽÃŽÞŽÎŽ¿
++¤¤¤È¤¦¤¯¤ó #JN °ËÆ£·¯
++¤¤¤È¤¦¤¯¤ó #JN °ËÆ£·¯
++¤¤¤Ê¤«¤â¤Ê¡¼ #JN Åļ˥â¥Ê¡¼
++¤¤¤Ê¤¬¤­¤á¤ó¤Ð¡¼ #T35 °ð³À¥á¥ó¥Ð¡¼
++¤¤¤Ê¤¬¤­¤á¤ó¤Ð¤¢ #T35 °ð³À¥á¥ó¥Ð¡¼
++¤¤¤Ê¤´ #T35 175
++¤¤¤Ê¤´ #T35 ¥¤¥Ê¥´
++¤¤¤Ê¤´ #T35 éû
++¤¤¤Ë¤Í¤³ #JN ini¤Í¤³
++¤¤¤Ì #CN ¸¤
++¤¤¤Ì #KK ¸¤
++¤¤¤Ì #T35 ¸¤
++¤¤¤Ì¤³¤¦¤Ü¤¦ #JN ¸¤¸ø˾
++¤¤¤Ì¤»¤ó¤»¤¤ #T35 ¸¤ÀèÀ¸
++¤¤¤Ì¤Á¤å¤¦ #T35 ¸¤¿ß
++¤¤¤Ì¤ä¤Þ¤Ð¤· #JN ¸¤»³¶¶
++¤¤¤Î¤¨¤â¤ó #T35 ¤¤¤Î¤¨¤â¤ó
++¤¤¤Î¤¬¤·¤é¡¼ #JN ¥¤¥Î¥¬¥·¥é¡¼
++¤¤¤Î¤­¤¹¤ì #T35 ÃöÌÚ¥¹¥ì
++¤¤¤Î¤­¤Î¤Ç¤ó¤ï #JN ¤¤¤Î¤­¤ÎÅÅÏÃ
++¤¤¤Î¤±¤ó #JN ¥¤¥Î¥±¥ó
++¤¤¤Î¤Á¤Î¤Ç¤ó¤ï #JN ¤¤¤Î¤Á¤ÎÅÅÏÃ
++¤¤¤Ð¤·¤ç¤Í¡¼¤è #JN µï¾ì½ê¥Í¡¼¥è
++¤¤¤Ñ¡¼¤¤ #T15 ¥¤¥Ñ¡¼¥¤
++¤¤¤Ñ¡¼¤¤ #T35 ¥¤¥Ñ¡¼¥¤
++¤¤¤Þ¤¤¤°¤ó¤À¤ó #JN º£°æ·³ÃÄ
++¤¤¤Þ¤¤¤â¤Ê¡¼ #JN º£°æ¥â¥Ê¡¼
++¤¤¤Þ¤ª¤«¤â¤Ê¡¼ #JN ¥¤¥Þ¥ª¥«¥â¥Ê¡¼
++¤¤¤Þ¤ª¤«¤â¤Ê¡¼ #T35 ¥¤¥Þ¥ª¥«¥â¥Ê¡¼
++¤¤¤Þ¤ª¤«¤â¤Ê¤¢ #T35 ¥¤¥Þ¥ª¥«¥â¥Ê¡¼
++¤¤¤Þ¤½¤«¤ê #CJ ¤¤¤Þ¤½¤«¤ê
++¤¤¤Þ¤Î¤¦¤Á #JN ¥¤¥Þ¥Î¥¦¥Á
++¤¤¤Þ¤Î¤¦¤Á¤ª¤Ë¤®¤ê¤Ð¡¼¤¸¤ç¤ó #JN ¥¤¥Þ¥Î¥¦¥Á¡¦¤ª¤Ë¤®¤ê¥Ð¡¼¥¸¥ç¥ó
++¤¤¤Þ¤Î¤¦¤Á¤Ô¤«¤¡ #JN Ž²ŽÏŽÉŽ³ŽÁ¥Ô¥«¥¡!
++¤¤¤á¤Ì¤Ï¤¸¤­ #T35 ime.nuÃƤ­
++¤¤¤â #CN °ò
++¤¤¤â #T35 °ò
++¤¤¤â¤¦¤È #T35 Ëå
++¤¤¤ä¤·¤±¤¤ #JN Ìþ¤··Ï
++¤¤¤ä¤É¤ó #CJ ¡Ê¡¦£Á¡¦¡ËŽ²ŽÔŽÄŽÞŽÝ!!
++¤¤¤ä¤Þ¤Ã¤¿¤¯ #JN ¨¬Ï¯À¸
++¤¤¤ä¤Þ¤Ã¤¿¤¯ #JN Ž¨Ž¬ŽÏŽ¯ŽÀŽ¸
++¤¤¤è¤¦ #JN ¤£¤ç¤¥
++¤¤¤è¤¦ #JN ¥¤¤ç¤¥
++¤¤¤é¤Ê¤¤¤ï #JN ¥¤¥é¥Ê¥¤¥ï
++¤¤¤é¤Í #JN ¡ÊŽß­ùŽß¡ËŽ²Ž×ŽÈ
++¤¤¤é¤Í #JN Ž²Ž×ŽÈ
++¤¤¤é¤Í¡¼¤è #JN ¥¤¥é¥Í¡¼¥è
++¤¤¤é¤Í¡¼¤è¤«¤¹¤¿¤à #JN ¥¤¥é¥Í¡¼¥è¥«¥¹¥¿¥à
++¤¤¤é¤Í¡¼¤ë #JN ¥¤¥é¥Í¡¼¥ë
++¤¤¤é¤Í¤¸¤å¤Ë¤¢ #JN ¥¤¥é¥Í¥¸¥å¥Ë¥¢
++¤¤¤ê¤¢¤µ¤ó #JN Iria¤µ¤ó
++¤¤¤ë¤Í #JN ¡ÊŽß§ØŽß)Ž²ŽÙŽÈ
++¤¤¤ë¤Í #JN Ž²ŽÙŽÈ
++¤¤¤ë¤Ó¤Í #T35 ¤¤¤ë¤Ó¤Í
++¤¤¤ì¤°¤¤ #T35 Æþ¤ì¶ô¤¤
++¤¤¤í¤Á¤ó¤À¤ó #T35 ¿§ÄÁÃÄ
++¤¤¤ó¤³¤«¤¤¤¸¤ó #JN ¥¤¥ó¥³²ø¿Í
++¤¤¤ó¤³¤«¤¤¤¸¤ó #T35 ¥¤¥ó¥³²ø¿Í
++¤¤¤ó¤· #T35 °ü»à
++¤¤¤ó¤Ô¤ª #T35 ¥¤¥ó¥Ô¥ª
++¤¤¤ó¤Ü¤¦ #T35 ±¢ËÅ
++¤¦¡«¤¡¡¼ #CJ ¥ô¥¡¡¼
++¤¦¡«¤¡¡¼ #CJ ¥ô¥¢¡¼
++¤¦¡«¤¡¤¤¤é¤¹ #T35 ¥ô¥¡¥¤¥é¥¹
++¤¦¡«¤¡¤« #T35 ¥ô¥¡¥«
++¤¦¡«¤¡¤«¤À #KK ¥ô¥¡¥«ÂÌ
++¤¦¡«¤¡¤«¤À #T35 ¥ô¥¡¥«ÂÌ
++¤¦¡«¤£ #JN £Ö
++¤¦¡«¤£¤¯¤È¤ê¡¼¤¾¤Ë¤Ã¤¯ #JN ¥ô¥£¥¯¥È¥ê¡¼¥¾¥Ë¥Ã¥¯
++¤¦¡«¤£¤¸¤å¤¤¤¿ #T35 ¥ô¥£¥¸¥åÈÄ
++¤¦¡«¤£¤ê¤¤ #T35 virii
++¤¦¤£¤Ê #T35 ¥¦¥£¥Ê
++¤¦¤£¤ó¤¨¤à¤¨¤Ã¤¯¤¹ #T35 WinMX
++¤¦¤£¤ó¤Ç¤£ #T35 Windy
++¤¦¤£¤ó¤É¤¥¡¼¤¯ #T35 winduke
++¤¦¤£¤ó¤É¤¦¤º #T35 Windoz
++¤¦¤§ #JN ³ª
++¤¦¤§ #JN Ž³Žª
++¤¦¤§¤¤¤È #T35 wait
++¤¦¤§¤¨¤Ï¤Ã¤Ï¤Ã¤Ï #CJ ¥¦¥§¡¼¡¢¥Ï¥Ã¥Ï¥Ã¥Ï
++¤¦¤§¤¶¡¼¤ê¤Ý¡¼¤È #JN ¥¦¥§¥¶¡¼¡¦¥ê¥Ý¡¼¥È
++¤¦¤¨¤Î¤¯¤ê¤Ë¤Ã¤¯¤Î¤ª¤È¤³ #T35 ¾åÌ¥ê¥Ë¥Ã¥¯¤ÎÃË
++¤¦¤©¤¬ #T35 ¥¦¥©¥¬
++¤¦¤ª¡¼¤ó #T35 ¤¦¤ª¡¼¤ó
++¤¦¤ª¤ª¤ó #T35 ¤¦¤ª¡¼¤ó
++¤¦¤ª¤Ê¤ó¤«¤¹¤´¤¤¤È¤³¤í¤Ë¤Þ¤è¤¤¤³¤ó¤¸¤Þ¤Ã¤¿¤¾¤´¤ë¤¡ #JN ¤¦¤ª¡ª¤Ê¤ó¤«¤¹¤´¤¤¤È¤³¤í¤Ë̤¤¹þ¤ó¤¸¤Þ¤Ã¤¿¤¾¥´¥ë¥¡¡ª
++¤¦¤ª¤Ê¤ó¤«¤¹¤´¤¤¤È¤³¤í¤Ë¤Þ¤è¤¤¤³¤ó¤¸¤Þ¤Ã¤¿¤¾¤´¤ë¤¡ #JN ¤¦¤ª¡ª¤Ê¤ó¤«¤¹¤´¤¤¤È¤³¤í¤Ë̤¤¹þ¤ó¤¸¤Þ¤Ã¤¿¤¾ŽºŽÞŽÙŽ§¡ª
++¤¦¤µ¤Þ¡¼ #JN (Žß§ÕŽß)Ž³Ž»ŽÏŽ°
++¤¦¤µ¤Þ¡¼ #JN ³»|
++¤¦¤µ¤Þ¡¼ #JN Ž³Ž»ŽÏ¡Ý
++¤¦¤¶ #KYT ¤¦¤¶
++¤¦¤¶¤¬¤­ #T35 ¥¦¥¶¥¬¥­
++¤¦¤·¤ª¤ó¤Ê #JN µí½÷
++¤¦¤¼¡¼ #JN (`»®¡­)Ž³Ž¾ŽÞŽ°
++¤¦¤¼¡¼ #JN ¥¦¥¼¡¼
++¤¦¤¼¡¼ #JN Ž³Ž¾ŽÞŽ°
++¤¦¤¼¡¼¤è #JN ¥¦¥¼¡¼¥è
++¤¦¤¼¤§ #CJ ¤¦¤¼¤§
++¤¦¤¼¤§¡¼ #CJ uzeeee!
++¤¦¤¼¤§¤­¤¨¤í #JN ¥¦¥¼¥§¤­¤¨¤í¡¦¡¦¡¦
++¤¦¤½¤³¡¼ #JN ¥¦¥½¥³¡¼!
++¤¦¤½¤³¡¼ #JN Ž³Ž¿ŽºŽ°!
++¤¦¤½¤Ï¤¦¤½¤Ç¤¢¤ë¤È¤ß¤Ì¤±¤ë¤Ò¤È¤Ç¤Ê¤¤¤È #CJ ¤¦¤½¤Ï¤¦¤½¤Ç¤¢¤ë¤È¸«È´¤±¤ë¿Í¤Ç¤Ê¤¤¤È
++¤¦¤½¤ä #T35 ±³²°
++¤¦¤¿¤Ë¤Ä¤Ã¤³¤ó¤Ç¤¯¤ì #JN ²Î¤Ë¥Ä¥Ã¥³¤ó¤Ç¤¯¤ì
++¤¦¤Á¤å¤¦¤«¤¤¤Ï¤Ä #T30 ±§Ã賫ȯ
++¤¦¤Á¤å¤¦¤«¤¤¤Ï¤Ä #T35 ±§Ã賫ȯ
++¤¦¤Á¤å¤¦¤ä¤Ð¤¤ #CJ ±§Ãè¥ä¥Ð¥¤
++¤¦¤Ã¤µ¤¤ #JN ¥¦¥Ã¥µ¥¤
++¤¦¤Ã¤µ¤¤¤Ï¤² #CJ ¤¦¤Ã¤µ¤¤¥Ï¥²
++¤¦¤Ã¤¿¤¨¤ë¤ê¤¢¤ë¤â¤Ê¡¼ #JN Áʤ¨¤ë¥ê¥¢¥ë¥â¥Ê¡¼
++¤¦¤Ä¤¦¤¿ #T35 ݵ²Î
++¤¦¤Ä¤¨¤â¤ó #JN ¤¦¤Ä¥¨¥â¥ó
++¤¦¤Ä¤À #KK ݵÂÇ
++¤¦¤Ä¤À #T35 ݵÂÇ
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ¤¦¤Ä¤À¤·¤Î¤¦
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ¤óÂǤĤÀ»áǾ
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ݵ¤À»á¤Î¤¦
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ݵ¤À½ÁÇ»
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ݵÂÇ»íǹ
++¤¦¤Ä¤À¤·¤Î¤¦ #CJ ݵÂÌ»áǾ
++¤¦¤Ä¤ä¤­ #JN ݵ¾Æ¤­
++¤¦¤Æ¤· #T35 ¥¦¥Æ¥·
++¤¦¤È #T35 ¥¦¥È
++¤¦¤Ê¡¼ #JN ¢º(Žß¡ýŽß)¢»Ž³ŽÅŽ°
++¤¦¤Ê¡¼ #JN Ž³ŽÅŽ°
++¤¦¤Ë #T35 ¥¦¥Ë
++¤¦¤Ë¤¯¤í #T35 ¥¦¥Ë¥¯¥í
++¤¦¤Ë¤¯¤í #T35 ¥¦¥Ë¹õ
++¤¦¤Ë¤ã¡¼ #JN ¤¦¤Ë¤ã¡Á
++¤¦¤Ë¤å¤¦ #JN ¤¦¤Ë¤å¤¦
++¤¦¤Ò¤ç¡¼ #JN ¥¦¥Ò¥ç¡¼
++¤¦¤Ò¤ç¤¹¤ì #T35 ¥¦¥Ò¥ç¥¹¥ì
++¤¦¤× #T30 ¤¦£ð
++¤¦¤× #T30 ¤¦¤×
++¤¦¤× #T35 up
++¤¦¤× #T35 ¤¦¤×
++¤¦¤×¤·¤ç¤¯¤Ë¤ó #T35 ¤¦£ð¿¦¿Í
++¤¦¤Ü¤¡¡¼ #JN ¡ÊŽß§¥Žß¡ËŽ³ŽÎŽÞŽ§Ž°
++¤¦¤Ü¤¡¡¼ #JN ¥¦¥Ü¥¡¡¼
++¤¦¤Þ¡¼ #CJ (Žß§ÕŽß)Ž³ŽÏŽ°
++¤¦¤Þ¡¼ #CJ ¡Ê¡¬§Õ¡¬¡Ë¥¦¥Þ¡¼
++¤¦¤Þ¡¼ #CJ ¡Ê¡¬§Õ¡¬¡ËŽ³ŽÏŽ°
++¤¦¤Þ¡¼ #CJ ¥¦¥Þ¡¼
++¤¦¤Þ¡¼ #JN (Žß§ÕŽß)Ž³ŽÏŽ°
++¤¦¤Þ¡¼ #JN Ž³ŽÏŽ°
++¤¦¤Þ¤¢ #CJ ¥¦¥Þ¡¼
++¤¦¤Þ¤¤¤Ü¤¦ #JN ¤¦¤Þ¤¤¤Ü¤¦
++¤¦¤Þ¤¤¤Ü¤¦ #KK ¤¦¤Þ¤¤ËÀ
++¤¦¤Þ¤¤¤Ü¤¦ #T35 ¤¦¤Þ¤¤ËÀ
++¤¦¤Þ¤Ê¤ê #T35 ÇÏÌé
++¤¦¤â¤¦¤è¤ê¤â¤«¤ë¤¯¤Á¤â¤«¤è¤Ã¤Æ¤¤¤Ê¤¤ #CJ ±©ÌÓ¤è¤ê¤â·Ú¤¯¡¢·ì¤âÄ̤äƤ¤¤Ê¤¤
++¤¦¤â¤©¡¼ #JN ¥¦¥â¥©¡¼
++¤¦¤â¤©¡¼ #JN Ž³ŽÓŽ«Ž°
++¤¦¤è #T35 ¥¦¥è
++¤¦¤è¤Ã¤Æ¤ë #T35 ±¦Íã¤Ã¤Æ¤ë
++¤¦¤é¤¢¤ª #T35 ΢ÀÄ
++¤¦¤é¤¢¤¯¤Þ¤Á¤ç¤¦¤¸¤ó #T35 ΢°­ËâĶ¿Í
++¤¦¤é¤¨¤í #T35 ¥¦¥é¥¨¥í
++¤¦¤é¤Ë¤Á¤ã¤ó #KK ΢£²¤Á¤ã¤ó
++¤¦¤é¤Ë¤Á¤ã¤ó #T35 ΢2¤Á¤ã¤ó
++¤¦¤é¤Ë¤Á¤ã¤ó #T35 ΢£²¤Á¤ã¤ó
++¤¦¤é¤Ï¤é #T35 ΢ʢ
++¤¦¤é¤Ü¤ó #T35 ΢ËÞ
++¤¦¤é¤Ü¤ó #T35 ΢Ëß
++¤¦¤é¤Ü¤ó #T35 â³ÍöËß
++¤¦¤é¤é¡¼ #JN ¥¦¥é¥é¡¼
++¤¦¤ê¤¸¤Ê¤ë #T35 ¥¦¥ê¥¸¥Ê¥ë
++¤¦¤ê¤Ê¤é #T35 ¥¦¥ê¥Ê¥é
++¤¦¤ê¤Ê¤é¤µ¤¤¤Ð¡¼¤Æ¤í¤À¤ó #JN ¥¦¥ê¥Ê¥é¥µ¥¤¥Ð¡¼¥Æ¥íÃÄ
++¤¦¤ê¤Ê¤é¤µ¤¤¤Ð¡¼¤Æ¤í¤À¤ó #JN Ž³ŽØŽÅŽ×Ž»Ž²ŽÊŽÞŽ°ŽÃŽÛÃÄ
++¤¦¤ê¤Ê¤é¤µ¤¤¤Ð¡¼¤Æ¤í¤À¤ó #JN Ž³ŽØŽÅŽ×Ž»Ž²ŽÊŽÞŽ°ŽÃŽÛÃÄ¡¡
++¤¦¤ë¤µ¤¤¤Ï¤¨¤À¤Ê¤¢ #JN ¤¦¤ë¤µ¤¤Çè¤À¤Ê¤¡
++¤¦¤ë¤»¡¼¤Ð¤« #JN ¤¦¤ë¤»¡¼Çϼ¯¡ª
++¤¦¤ë¤»¤¨¤Ð¤« #CJ ¤¦¤ë¤»¡¼Çϼ¯
++¤¦¤ë¤È¤é¤Þ¤½ #JN Ž³ŽÙŽÄŽ×ŽÏŽ¿
++¤¦¤ë¤Þ¤é¤Þ¤ó #JN ¥¦¥ë¥Þ¥é¥Þ¥ó
++¤¦¤ë¤â¤é¤Þ¤ó #JN ¥¦¥ë¥â¥é¥Þ¥ó
++¤¦¤í¡¼¤ó #JN ¥¦¥í¡¼¥ó
++¤¦¤ï¤¡¤¡¤ó #CJ ¥¦¥ï¥¡¥¡¥ó
++¤¦¤ï¤¡¤¡¤ó #CJ Ž³ŽÜŽ§Ž§ŽÝ
++¤¦¤ï¤Ê¤Ë #CJ ¤¦¤ï¡¢¤Ê¤Ë¡©
++¤¦¤ó¤³ #T35 ¥¦¥ó»Ò
++¤¦¤ó¤³¡¼ #JN ¥¦¥ó¥³¡¼!
++¤¦¤ó¤³¡¼ #JN Ž³ŽÝŽºŽ°!
++¤¦¤ó¤³¤¤¤¿ #CN ¥¦¥ó¥³ÈÄ
++¤¦¤ó¤³¤¤¤¿ #T35 ¥¦¥ó¥³ÈÄ
++¤¦¤ó¤³¤Ç¤­¤¿¤è¡¼ #JN ¥¦¥ó¥³¤Ç¤­¤¿¤è¡¼¡ª¡ª
++¤¨¡¼ #JN ¥¨¡¼
++¤¨¡¼¤¨¡¼ #T35 £Á£Á
++¤¨¡¼¤¸¤ã¤Ê¤¤¤« #T35 ¤ñ~¤Â¤ã¤Ê¤ð¤«
++¤¨¤¢¤¨¤Ã¤¸¤¬¤á #JN airH"Ž¶ŽÞŽÒ
++¤¨¤¢¤À¤ó #T35 ¥¨¥¢¥À¥ó
++¤¨¤¤¤¨¤ó #T35 ¤¨¤¤¤¨¤ó
++¤¨¤¤¤®¤ç¤¦¤â¤Ê¡¼ #JN ±Ä¶È¥â¥Ê¡¼
++¤¨¤¤¤±¤Ë¤¹¤È #T35 ¥¨¥¤¥±¥Ë¥¹¥È
++¤¨¤¤¤»¤¤ #T35 ±ÊÀÂ
++¤¨¤¤¤Á¤Æ¤£¡¼¤¨¤à¤¨¤ë¤« #T30 html²½
++¤¨¤¤¤Á¤Æ¤£¤Æ¤£¤Ô¤£¤ì¡¼¤¶¡¼ #JN http¥ì¡¼¥¶¡¼
++¤¨¤¤¤Ù¤Ã¤¯¤½ #KK ¥¨¥¤¥Ù¥Ã¥¯¥½
++¤¨¤¤¤Ù¤Ã¤¯¤½ #KK ¥¨¥¤¥Ù¥Ãʵ
++¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN ¥¨¥¤¥ê¥¦¥ï¥¢¥¡¥ó
++¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN Ž´Ž²ŽØŽ³ŽÜŽ±Ž§ŽÝ
++¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN Ž´Ž²ŽØŽ³ŽÜŽ±Ž§ŽÝ
++¤¨¤¨¤¸¤ã¤Ê¤¤¤« #T35 ¤ñ~¤Â¤ã¤Ê¤ð¤«
++¤¨¤­¤Ù¤½ #CN ¥¨¥­¥Ù¥½
++¤¨¤­¤Ù¤½ #T35 ¥¨¥­¥Ù¥½
++¤¨¤­¤Ù¤ó #CN ±ÕÊØ
++¤¨¤­¤Ù¤ó #CN ±ÖÊØ
++¤¨¤­¤Ù¤ó #CN ±ØÊÛ
++¤¨¤­¤Ù¤ó #T35 ±ÕÊØ
++¤¨¤­¤Ù¤ó #T35 ±ÖÊØ
++¤¨¤­¤Ù¤ó #T35 ±ØÊÛ
++¤¨¤­¤Ù¤ó¤À¤¤¤¬¤¯ #CN ±ØÊÛÂç³Ø
++¤¨¤­¤Ù¤ó¤À¤¤¤¬¤¯ #T35 ±ØÊÛÂç³Ø
++¤¨¤¯¤·¡¼¤É¤®¤ë¤¹ #JN ¥¨¥¯¥·¡¼¥É¥®¥ë¥¹
++¤¨¤¯¤¹¤×¤í¤¤¤Æ¤Ã¤É #JN exploited
++¤¨¤°¤¼¤Í¤³ #JN exe¤Í¤³
++¤¨¤¸¤ê¤¿¤ó #JN ¥¨¥Â¥ê¤¿¤ó
++¤¨¤¹¤¨¤à¤¤¤¤ #T35 $ME
++¤¨¤¹¤«¤ì¤¿¡¼ #T35 ¥¨¥¹¥«¥ì¥¿¡¼
++¤¨¤¹¤È¤·¡¼¤â¤¢¤¢¤é¤· #JN ¥¨¥¹¥È¥·¡¼¥â¥¢¹Ó¤é¤·
++¤¨¤À¤²¤ó¤Ê #CJ »ÞÌÓ¤ó¤Ê
++¤¨¤Ã¤¯¤¹¤®¤³ #JN X¥®¥³¡¡
++¤¨¤Ä¤³ #JN ¥¨¥Ä¥³
++¤¨¤È¤¦ #JN ¹¾ÆÚ
++¤¨¤È¤¦ #JNS ¹¾ÆÚ
++¤¨¤È¤ó #JN ¹¾ÆÚ
++¤¨¤È¤ó #JNS ¹¾ÆÚ
++¤¨¤Ê¤ê #JN ¤¨¤Ê¤ê
++¤¨¤Ê¤ê¤«¤º¤­ #JN ¤¨¤Ê¤ê¤«¤º¤­
++¤¨¤Ë¤¯¤½ #KK ¥¨¥Ë¥¯¥½
++¤¨¤Ë¤¯¤½ #T35 ¥¨¥Ë¥¯¥½
++¤¨¤Ì¤¸¤¤¤ï¤¢¤É #T35 NG¥ï¡¼¥É
++¤¨¤Ì¤¹¤Æ #T35 £Î¥¹¥Æ
++¤¨¤Ì¤Ë¤Á¤ë¤¦¤ë #T35 nÆü¥ë¡¼¥ë
++¤¨¤Ì¤ï¤¤¤Á¤å¤¦ #T35 ny¿ß
++¤¨¤Ò¤á #CN °¦É²
++¤¨¤Ó¤Õ¤é¤¤¤ï¤Ã¤·¤ç¤¤ #JN ¥¨¥Ó¥Õ¥é¥¤¥ï¥Ã¥·¥ç¥¤¡ª¡ª
++¤¨¤Õ¤¨¤¤ #CJ FA
++¤¨¤Õ¤¨¤¤ #CJ FA?
++¤¨¤Õ¤é¤ó¤¯ #T35 F¥é¥ó¥¯
++¤¨¤Ö¡¼¤¤ #T35 ¤¨¤Ö¡¼¤¤
++¤¨¤Ö¤¦¤¤ #T35 ¤¨¤Ö¡¼¤¤
++¤¨¤ß¤å #T35 ¤¨¤ß¤å
++¤¨¤à¤¨¤¨¤¯¤¹ #KK ¥¨¥à¥¨¡¼¥¯¥¹
++¤¨¤à¤¨¤¨¤¯¤¹ #KK Ž´ŽÑŽ´Ž°Ž¸Ž½
++¤¨¤à¤¨¤Ã¤¯¤¹ #T35 MX
++¤¨¤à¤¨¤Ã¤¯¤¹¤µ¤ó #JN £Í£Ø¤µ¤ó
++¤¨¤à¤¨¤Ã¤¯¤¹¤µ¤ó¤È¤³¤Þ¤ë #JN £Í£Ø¤µ¤ó¤È¥³¥Þ¥ë
++¤¨¤à¤¨¤Ã¤¯¤¹¤Á¤å¤¦ #T35 MX¿ß
++¤¨¤à¤¨¤à¤¢¤¢¤ë #T35 MMR
++¤¨¤à¤¨¤à¤¢¤¢¤ë¤³¤Ô¤Ú #CJ MMR¥³¥Ô¥Ú
++¤¨¤à¤¹¤Æ #T35 M¥¹¥Æ
++¤¨¤à¤Ö¤Á¤ç¤¦ #JN £ÍÉôĹ
++¤¨¤â¤é #JN ¥ñ¥â¥é
++¤¨¤ê #JN ¶ß
++¤¨¤ê #T35 ¶ß
++¤¨¤ê¤Á¤ó #JN ¥¨¥ê¥Ä¥£¥ó
++¤¨¤ê¤Ä¤£¤ó #JN ¤¨¤êÄÁ
++¤¨¤ì¤¯¤½ #T35 ¥¨¥ìʵ
++¤¨¤ì¤¯¤½ #T35 ¥¨¥ìʵ¡¼¥ó
++¤¨¤ì¤¯¤½¤ª¤ó #T35 ¥¨¥ìʵ
++¤¨¤ì¤¯¤½¤ª¤ó #T35 ¥¨¥ìʵ¡¼¥ó
++¤¨¤í¤¨¤í¤»¤ó¤¿¤¤¤º¤ê¤»¤ó¤¸¤ã¤¢ #T35 ¥¨¥í¥¨¥íÀïÂ⥺¥ê¥»¥ó¥¸¥ã¡¼
++¤¨¤í¤² #T30 ¥¨¥í¥²
++¤¨¤í¤² #T35 ¥¨¥í¥²
++¤¨¤í¤²¤ª¤¿¤¤¤Ä¤Ä¤Î¤Á¤«¤¤ #T35 ¥¨¥í¥²¥ª¥¿£µ¤Ä¤ÎÀÀ¤¤
++¤¨¤í¤²¤ò¤¿¤Ü¤¯¤á¤Ä¤¦¤ó¤É¤¦¤« #KK ¥¨¥í¥²¥ò¥¿ËÐÌDZ¿Æ°²È
++¤¨¤í¤²¤ó¤¬¡¼ #T35 ¥¨¥í¥²¥ó¥¬¡¼
++¤¨¤í¤²¤ó¤¬¤¢ #T35 ¥¨¥í¥²¥ó¥¬¡¼
++¤¨¤í¤º¤ê¡¼ #JN ¥¨¥í¥º¥ê¡¼
++¤¨¤í¤Ã¤¯¤¹ #T35 erox
++¤¨¤í¤Ü¤¯ #KK ¥¨¥íËÐ
++¤¨¤ó¤¤¡¼ #T30 ¤¨¤ó¤¤¡¼
++¤¨¤ó¤¤¡¼ #T35 ¤¨¤ó¤¤¡¼
++¤¨¤ó¤¤¤¤ #T35 ¤¨¤ó¤¤¡¼
++¤¨¤ó¤«¤«¤·¤å¤·¤£¤Á¤ã¤ó #JN ±é²Î²Î¼ê¤·¤£¤Á¤ã¤ó
++¤¨¤ó¤³¤¦¤É #T35 ±ç¸ò¡î
++¤¨¤ó¤¸¤ó¤ª¤¦ #JN ¥¨¥ó¥¸¥ó²¦
++¤ª¡¼¤¨¤¤¤Á¤Ô¡¼ #T35 £Ï£È£Ð
++¤ª¤¢¤¤¤½¤æ¡¼¤Û¡¼ #JN ¤ª¤¢¤¤¤½¥æ¡¼¥Û¡¼
++¤ª¤¤¤ª¤¤¤Ë¤å¡¼¤¹¤ß¤¿ #CJ ¤ª¤¤¤ª¤¤¡¢¥Ë¥å¡¼¥¹¸«¤¿¡©
++¤ª¤¤¤ª¤Þ¤¨¤é #CJ ¤ª¤¤¡¢¤ªÁ°¤é
++¤ª¤¤¤¹¤¿¡¼¤µ¤¯¤»¤ó #T35 ¥ª¥¤¥¹¥¿¡¼ºîÀï
++¤ª¤¤¤¹¤¿¤¢¤µ¤¯¤»¤ó #T35 ¥ª¥¤¥¹¥¿¡¼ºîÀï
++¤ª¤¤¤Ê¤ê¤â¤Ê¡¼ #JN ¤ª¤¤¤Ê¤ê¥â¥Ê¡¼
++¤ª¤¤¤à #T35 ¥ª¥¤¥à
++¤ª¤¤¤é #T35 ¤ª¤¤¤é
++¤ª¤¦¤´¤ó¤Á¤å¤¦ #T35 ²«¶â¿ß
++¤ª¤¦¤É¤¦¤á¤¬¤ß #KK ²¦Æ»½÷¿À
++¤ª¤ª¤®¤³¤Ö¤Á¤ç¤¦ #JN Â祮¥³ÉôĹ
++¤ª¤ª¤³¤ß¤ß¤Ï¤ó¤Æ¤ó #JN Âç¾®¼ªÈÓŹ
++¤ª¤ª¤Ã #JN ŽµŽµ¥Ã¡ª
++¤ª¤ª¤Ä¤­ #JN ¥ª¥ª¥Ä¥­
++¤ª¤ª¤Ä¤­ #JN ŽµŽµŽÂŽ·
++¤ª¤ª¤Ç¤£¤¨¤ó¤¹ #T35 ¥ª¡¼¥Ç¥£¥¨¥ó¥¹
++¤ª¤ª¤È¤³¤ó¤×¤ê¤¤¤È #T35 ¥ª¡¼¥È¥³¥ó¥×¥ê¡¼¥È
++¤ª¤ª¤È¤ê #KK ˱
++¤ª¤ª¤È¤ê #T35 ˱
++¤ª¤ª¤ß¤ß¤â¤Ê¡¼ #JN Â缪¥â¥Ê¡¼
++¤ª¤ª¤ß¤ß¤â¤Ê¤ß #JN Â缪˨ÆàÈþ
++¤ª¤ª¤ß¤ß¤â¤é¤é¡¼ #JN Â缪¥â¥é¥é¡¼
++¤ª¤ª¤â¤ê¤³¤¤¤ó #T35 Â翹¥³¥¤¥ó
++¤ª¤«¤®¤³¤­¤ç¤¦¤¸¤å #JN ¥ª¥«¥®¥³¶µ¼ø
++¤ª¤«¤·¤¤¤Ç¤¹¤è¤«¤Æ¤¸¤Ê¤µ¤ó #CJ ¤ª¤«¤·¤¤¤Ç¤¹¤è¡ª¥«¥Æ¥¸¥Ê¤µ¤ó¡ª¡ª
++¤ª¤«¤ß #JN ¤ª¤«¤ß
++¤ª¤«¤ä¤ó #JN µ¶ÔÝ¡¡
++¤ª¤«¤ä¤ó #JN ŽµŽ¶ŽÔŽÝ¡¡
++¤ª¤«¤ì¤¹ #T35 ²¬¥ì¥¹
++¤ª¤¬¤ï #T35 ¾®Àî
++¤ª¤¯ #T35 ±ü
++¤ª¤¯¤ì¤¹ #T35 Ã٥쥹
++¤ª¤°¤ê #T35 ¾®·ª
++¤ª¤±¤¤¤Ï¤ó #JN ¤ª¤±¤¤¤Ï¤ó
++¤ª¤±¤¤¤Ï¤ó #T35 ¤ª¤±¤¤¤Ï¤ó
++¤ª¤²¤Þ¤ó #T35 ¥ª¥²¥Þ¥ó
++¤ª¤³¤Î¤ß¤¸¤ç¤¦¤æ #JN ¤ª¹¥¤ß¾ßÌý
++¤ª¤µ¤·¤ß¤â¤Ê¡¼ #JN ¤ª¤µ¤·¤ß¥â¥Ê¡¼
++¤ª¤µ¤Õ¤Í¡¼¤è¤«¤Ã¤³¤¦¤£¤º¤â¤Æ¤Í¡¼¤è¤È¤¸¤«¤Ã¤³ #JN ¥ª¥µ¥Õ¥Í¡¼¥è¡Êwith¡¡¥â¥Æ¥Í¡¼¥è¡Ë
++¤ª¤µ¤Þ¤Ó¤ó¤é¤Ç¤£¤ó #JN ¥ª¥µ¥Þ¥Ó¥ó¥é¥Ç¥£¥ó
++¤ª¤µ¤é¡¼ #JN ¤ª»®¡¼
++¤ª¤µ¤é¡¼ #JN ¤ª»®¡¼
++¤ª¤µ¤ì #T30 ¥ª¥µ¥ì
++¤ª¤¶¤ï¤â¤Ê¤« #JN ¾®Âô¥â¥Ê¥«
++¤ª¤·¤¨¤Æ¤¯¤ó #T35 ¶µ¤¨¤Æ·¯
++¤ª¤·¤ª #JN ¤ª±ö
++¤ª¤·¤ª #T35 ¤ª±ö
++¤ª¤·¤ê¤¹ #JN ¥ª¥·¥ê¥¹
++¤ª¤·¤ê¤Ú¤ó¤Ú¤ó #CJ ¥ª¥·¥ê¥Ú¥ó¥Ú¥ó!
++¤ª¤·¤ê¤Ú¤ó¤Ú¤ó #CJ ŽµŽ¼ŽØŽÍŽßŽÝŽÍŽßŽÝ!
++¤ª¤·¤ê¤ò¤ª¤¬¤à¤¤¤¤¤ó¤«¤¤ #JN ¡ú¡ú¡ú¤ª¿¬¤òÇÒ¤à°Ñ°÷²ñ¡ú¡ú¡ú
++¤ª¤·¤ê¤ò¤ª¤¬¤à¤¤¤¤¤ó¤«¤¤ #JN ¡ú¡ú¡ú¤ª¿¬¤òÇÒ¤à°Ñ°÷²ñ¡ú¡ú¡ú
++¤ª¤¸¤ã¤Þ¤¸¤ç #JN ¤ª¥¸¥ãËâ½÷
++¤ª¤¸¤ó¤¬¡¼¤¼¤Ã¤È #JN ¥ª¥¸¥ó¥¬¡¼Z
++¤ª¤¸¤ó¤¬¤¢¤¼¤Ã¤È #JN ¥ª¥¸¥ó¥¬¡¼Z
++¤ª¤¹¤® #T35 ¤ª¿ù
++¤ª¤»¡¼¤í #CJ ¤ª¤»¡¼¤í
++¤ª¤»¤¨¤í #CJ ¤ª¤»¡¼¤í
++¤ª¤»¤í¤Ç¤â¤·¤è¤¦¤è #CJ ¥ª¥»¥í¤Ç¤â¤·¤è¤¦¤è
++¤ª¤½¤ì¤¹ #T35 Ã٥쥹
++¤ª¤¿¤¬¤ê #T35 ¥ª¥¿¼í¤ê
++¤ª¤¿¤­¤å¤¦ #KK ¥ò¥¿µÞ
++¤ª¤¿¤­¤å¤¦ #T35 ¥ò¥¿µÞ
++¤ª¤¿¤·¤å¤¦ #T35 ¥ª¥¿½­
++¤ª¤¿¤À¤¤¤·¤å¤¦¤´¤¦ #JN ¥ª¥¿Â罸¹ç
++¤ª¤¿¤ë¤Ã¤¯ #T35 ¥ª¥¿¥ë¥Ã¥¯
++¤ª¤À¤®¤ê¤â¤Ê¡¼ #JN ¥ª¥À¥®¥ê¥â¥Ê¡¼
++¤ª¤Á¤ã¤Î¤Þ #JN ¤ªÃã¤Î´Ö
++¤ª¤Ã¤È¡¼¤Á¤ã¤ó #JN ¥ª¥Ã¥È¡¼¤Á¤ã¤ó
++¤ª¤Ä #T35 ²µ
++¤ª¤Ä¤«¤¤ #KK ²µ²ñ
++¤ª¤Ä¤«¤ì¡¼ #CJ ²µ¥«¥ì¡¼
++¤ª¤Ä¤«¤ì¡¼ #T35 ²µ¥«¥ì¡¼
++¤ª¤Ä¤«¤ì¤¨ #T35 ²µ¥«¥ì¡¼
++¤ª¤Ä¤È¤«¤¤¤Ã¤¿¤ä¤Ä¤·¤Í #CJ ²µ¤È¤«¸À¤Ã¤¿ÅÛ»à¤Í
++¤ª¤Å¤é #JN ¥ª¥Å¥é
++¤ª¤Ç¤¸¡¼¤É #JN ¥ª¥Ç¥¸¡¼¥É
++¤ª¤Ç¤ó #T35 ¤ª¤Ç¤ó
++¤ª¤Ç¤ó¤Þ¤ó #JN ¤ª¤Ç¤ó¥Þ¥ó
++¤ª¤Ç¤ó¤Þ¤ó #T35 ¤ª¤Ç¤ó¤Þ¤ó
++¤ª¤È¡¼¤Á¤ã¤ó¤Ü¤Ã¤­¤·¤ç¤¦¤¬¤¤ #JN ¤ª¤È¡¼¤Á¤ã¤óËÖµ¯¾ã³²
++¤ª¤È¤¦¤Õ #JN ¤ª¤È¤¦¤Õ
++¤ª¤È¤³¤É¤ó #T35 ´ÁЧ
++¤ª¤È¤¸¤ã #T35 Äï¼Ô
++¤ª¤È¤¿¤± #JN £ÚÉð
++¤ª¤È¤¿¤± #JNS ¥ª¥È¥¿¥±
++¤ª¤È¤¿¤± #T35 £Ú¼°
++¤ª¤È¤¿¤± #T35 £ÚÉð
++¤ª¤È¤¿¤±¤¤ #JN ¥ª¥È¥¿·º
++¤ª¤È¤¿¤±¤¤ #T30 ¥ª¥È¥¿·º
++¤ª¤È¤¿¤±¤¤ #T35 ¥ª¥È¥¿·º
++¤ª¤È¤¿¤±¤²¤ó¤¹¤¤ #JN ¥ª¥È¥¿¥±¸µ¿ã
++¤ª¤È¤Ê #T35 ¤ò¤È¤Ê
++¤ª¤È¤Ê¤Î¤®¤³¤®¤³¤¿ #JN Âç¿Í¤Îµ¼¸Å¥®¥³ÂÀ
++¤ª¤È¤Þ¤ë #JN £Ú´Ý
++¤ª¤È¤á #T35 ´Á½÷
++¤ª¤É¤ê #T35 ¤ª¤É¤ê
++¤ª¤Ê #CJ ¤ª¤Ê
++¤ª¤Ê¡¼¤Ë #T30 ¥ª¥Ê¡¼¥Ë
++¤ª¤Ê¡¼¤Ë #T30 ŽµŽÅŽ°ŽÆ
++¤ª¤Ê¤¬¤¤¤·¤Þ¤¹ #CJ ¤ª¤Ê¤¬¤¤¤·¤Þ¤¹
++¤ª¤Ê¤¬¤¤¤·¤Þ¤¹ #JN ¤ª¤Ê¤¬¤¤¤·¤Þ¤¹¡¡
++¤ª¤Ê¤·¤å¤ß #CJ ¤ª¤Ê¼ñÌ£
++¤ª¤Ê¤·¤å¤ß #T35 ¤ª¤Ê¼ñÌ£
++¤ª¤Ê¤Ë¡¼ #T30 ¥ª¥Ê¥Ë¡¼
++¤ª¤Ê¤Ë¤¤¤¹¤ì #T35 ¥ª¥Ê¥Ë¡¼¥¹¥ì
++¤ª¤Ê¤Ë¤¹¤È #T35 ¥ª¥Ê¥Ë¥¹¥È
++¤ª¤Ê¤Ì¡¼ #T30 ¥ª¥Ê¥Ì¡¼
++¤ª¤Ê¤Ì¡¼ #T30 ŽµŽÅŽÇŽ°
++¤ª¤Ë¤¤¤Ë¤ï¤Ã¤Á¤ç¤¤ #JN ¤ª¤Ë¡¼¤Ë¥ï¥Ã¥Á¥ç¥¤
++¤ª¤Ë¤®¤ê #JN ¤ª¤Ë¤®¤ê
++¤ª¤Ë¤®¤ê¤¦¤À¤¤¤¸¤ó #JN ¤ª¤Ë¤®¤ê±¦Âç¿Ã
++¤ª¤Ë¤®¤ê¤¬¤Ê¡¼ #JN ¤ª¤Ë¤®¤ê¥¬¥Ê¡¼
++¤ª¤Ë¤®¤ê¤¸¤¤¤µ¤ó #JN ¤ª¤Ë¤®¤ê¤¸¤¤¤µ¤ó
++¤ª¤Ë¤®¤ê¤¸¤ã¤® #JN ¤ª¤Ë¤®¤ê¥¸¥ã¥®
++¤ª¤Ë¤®¤ê¤¹¤é¤¤¤à #JN ¤ª¤Ë¤®¤ê¥¹¥é¥¤¥à
++¤ª¤Ë¤®¤ê¤»¤¤¤È #JN ¤ª¤Ë¤®¤êÀ¸ÅÌ
++¤ª¤Ë¤®¤ê¤»¤ó¤è¤¦¤¢¤Ã¤¬¤¤ #JN ¤ª¤Ë¤®¤êÀìÍÑ¥¢¥Ã¥¬¥¤
++¤ª¤Ë¤®¤ê¤¿¤â¤ê #JN ¤ª¤Ë¤®¤ê¥¿¡û¥ê
++¤ª¤Ë¤®¤ê¤À¤ó #JN ¤ª¤Ë¤®¤êÃÄ
++¤ª¤Ë¤®¤ê¤Æ¤ó¤· #JN ¤ª¤Ë¤®¤êÅ·»È
++¤ª¤Ë¤®¤ê¤È¤¦ #JN ¤ª¤Ë¤®¤êÅÞ
++¤ª¤Ë¤®¤ê¤È¤¦ #JN ¤ª¤Ë¤®¤êÅÞ
++¤ª¤Ë¤®¤ê¤Ð¤ó¤É #JN ¤ª¤Ë¤®¤ê¥Ð¥ó¥É
++¤ª¤Ë¤®¤ê¤Ò¤Ã¤­¡¼ #JN ¤ª¤Ë¤®¤ê¥Ò¥Ã¥­¡¼
++¤ª¤Ë¤®¤ê¤Û¤ó¤Ý #JN ¤ª¤Ë¤®¤êËÜÊÞ
++¤ª¤Ë¤®¤ê¤à¤­¤à¤­ #JN ¤ª¤Ë¤®¤ê¥à¥­¥à¥­
++¤ª¤Ë¤®¤ê¤â¤Ê¡¼ #JN ¤ª¤Ë¤®¤ê¥â¥Ê¡¼
++¤ª¤Ë¤®¤ê¤ï¤Ã¤Á¤ç¤¤ #JN ¥ª¥Ë¥®¥ê¥ï¥Ã¥Á¥ç¥¤
++¤ª¤Ë¤ï¤ê¡¼¤Ê #T35 ¥ª¥Ë¥ï¥ê¡¼¥Ê
++¤ª¤Ë¤ï¤ê¤¤¤Ê #T35 ¥ª¥Ë¥ï¥ê¡¼¥Ê
++¤ª¤Í #T35 ¤ª¤Í
++¤ª¤Í¤¤¤µ¤ó #T35 ¤ª¤Í¤¤¤µ¤ó
++¤ª¤Ï¤Ê¤Ð¤¿¤± #T35 ¤ª²ÖȪ
++¤ª¤Ï¤è¤¦¤¸¤ç #T35 ¤ª¤Ï¤ç¤¥¦É¡«¤ç
++¤ª¤Ð¤Á¤ã¤ó #T35 ŽµŽÊŽÞŽÁŽ¬ŽÝ
++¤ª¤Ð¤Á¤ã¤ó #T35 ¥ª¥Ð¥Á¥ã¥ó
++¤ª¤Ð¤Á¤å¤¦ #T35 ¤ª¤Ð¿ß
++¤ª¤Ð¤Á¤å¤¦ #T35 ¥ª¥Ð¿ß
++¤ª¤Ñ¡¼¤¤ #T35 ¥ª¥Ñ¡¼¥¤
++¤ª¤Ñ¤¢¤¤ #T35 ¥ª¥Ñ¡¼¥¤
++¤ª¤Ó¤¿¤Ë¤Ý¤Ã¤È #JN ÂÓë¥Ý¥Ã¥È
++¤ª¤Õ¤«¤¤ #T30 ¥ª¥Õ²ñ
++¤ª¤Õ¤é¤¤¤ó¤Ó¤å¡¼¤ï #KK ¥ª¥Õ¥é¥¤¥ó¥Ó¥å¡¼¥ï
++¤ª¤Ö¤Ä #T35 ±øʪ
++¤ª¤Ù¤ä¤ê¡¼¤Ê #T35 ¥ª¥Ù¥ä¥ê¡¼¥Ê
++¤ª¤Ù¤ä¤ê¤¤¤Ê #T35 ¥ª¥Ù¥ä¥ê¡¼¥Ê
++¤ª¤Ù¤é¤ê¡¼¤Ê #T35 ¥ª¥Ù¥é¥ê¡¼¥Ê
++¤ª¤Ù¤é¤ê¤¤¤Ê #T35 ¥ª¥Ù¥é¥ê¡¼¥Ê
++¤ª¤Ù¤ó¤È¤¦¤¦¤¤¤ó¤Ê¤¢ #T35 ¤ªÊÛÅö¥¦¥¤¥ó¥Ê¡¼
++¤ª¤Þ¡¼¤é #T35 ¤ª¤Þ¡¼¤é
++¤ª¤Þ¤¤¤ê #JN ¤ª»²¤ê
++¤ª¤Þ¤¨¤«¤Ë¡¼ #JN ¥ª¥Þ¥¨¥«¥Ë¡¼
++¤ª¤Þ¤¨¤¬¤Æ¤Û¤ó¤ò¤ß¤»¤í¤è #CJ ¤ªÁ°¤¬¼êËܤò¸«¤»¤í¤è¡Ê¡÷£÷¹Ó
++¤ª¤Þ¤¨¤¬¤Ê¡¼ #JN ¥ª¥Þ¥¨¥¬¥Ê¡¼
++¤ª¤Þ¤¨¤¯¤Þ¡¼ #JN ¥ª¥Þ¥¨¥¯¥Þ¡¼
++¤ª¤Þ¤¨¤·¤Í¡¼ #JN ¥ª¥Þ¥¨¥·¥Í¡¼
++¤ª¤Þ¤¨¤¸¤ã¤¬¡¼ #JN ¥ª¥Þ¥¨¥¸¥ã¥¬¡¼
++¤ª¤Þ¤¨¤¸¤ã¤¬¡¼ #JN ¥ª¥Þ¥¨¥¸¥ã¥¬¡¼
++¤ª¤Þ¤¨¤¸¤ã¤Í¡¼¤¾ #JN ¥ª¥Þ¥¨¥¸¥ã¥Í¡¼¥¾
++¤ª¤Þ¤¨¤À¤± #JN ¥ª¥Þ¥¨¥À¥±
++¤ª¤Þ¤¨¤À¤± #JN ¥ª¥Þ¥¨¥À¥±(¸æÁ°Âû)
++¤ª¤Þ¤¨¤À¤± #JN ¸æÁ°Âû
++¤ª¤Þ¤¨¤À¤Ê¡¼ #JN ¤ª¤Þ¤¨¤À¤Ê¡¼
++¤ª¤Þ¤¨¤À¤Ë #JN ¥ª¥Þ¥¨Ã«
++¤ª¤Þ¤¨¤Ï¤¿¤ó¤í¤ó¤« #CJ ¤ªÁ°¤Ï¥¿¥ó¡¦¥í¥ó¤«¡©
++¤ª¤Þ¤¨¤â¤«¡¼ #JN ¥ª¥Þ¥¨¥â¥«¡¼
++¤ª¤Þ¤¨¤â¤Â¤ã¡¼ #JN ¥ª¥Þ¥¨¥â¥Â¥ã¡¼
++¤ª¤Þ¤¨¤â¤Ê¡¼ #CJ ¥ª¥Þ¥¨¥â¥Ê¡¼
++¤ª¤Þ¤¨¤â¤Ê¡¼¤Ï¤ó #JN ¥ª¥Þ¥¨¥â¥Ê¡¼´À
++¤ª¤Þ¤¨¤â¤Ê¤¢ #CJ ¥ª¥Þ¥¨¥â¥Ê¡¼
++¤ª¤Þ¤¨¤â¤Ê¤´¤¦ #JN OMAEMONA¹æ
++¤ª¤Þ¤¨¤â¤Ë¤ã¡¼ #JN ¤ª¤Þ¤¨¤â¤Ë¤ã¡¼
++¤ª¤Þ¤¨¤â¤Ò¤ã #JN ¥ª¥Þ¥¨¥â¥Ò¥ã
++¤ª¤Þ¤ó¤¸¤å¤¦ #T35 ¤ªñ½Æ¬
++¤ª¤ß¤¢¤¤¤¹¤ë¤â¤é¤é¡¼ #JN ¤ª¸«¹ç¤¤¤¹¤ë¥â¥é¥é¡¼
++¤ª¤ß¤È¤í¤ó #T35 ¥ª¥ß¥È¥í¥ó
++¤ª¤à¤¹¤Ó #JN ¤ª¤à¤¹¤Ó
++¤ª¤á¡¼¤é #T35 ¤ª¤á¡¼¤é
++¤ª¤á¤¤¤Ð¤ó¤«¤¤ #CJ ±ø̾ÈÔ²ó
++¤ª¤á¤¬ #T35 ¥ª¥á¥¬
++¤ª¤á¤¬¤¢¤é¤· #T35 ¦Ø¹Ó¤é¤·
++¤ª¤á¤¬¤Á¤ó #T35 ¦ØÄÁ
++¤ª¤â¤Õ #CJ »×¤Õ
++¤ª¤â¤é¤¿¤«¤Ò¤í #JN Èø¥â¥éδ¹°
++¤ª¤â¤ï¤ì #CJ »×¤ï¤ì¡£
++¤ª¤â¤ï¤ì #T35 »×¤ï¤ì
++¤ª¤ä¤³¤Ú¤ó¤®¤ó #JN ¿Æ»Ò¥Ú¥ó¥®¥ó
++¤ª¤ê #KK Ý£
++¤ª¤ê #T35 Ý£
++¤ª¤ê¤­ #T35 ¥ª¥ê¥­
++¤ª¤ê¤Å¤ë14¤Þ¤ó¤Ð¤×¤í¤¸¤§¤¯¤È #CJ ÀÞ¤êÄá14Ëü±©¥×¥í¥¸¥§¥¯¥È
++¤ª¤ê¤Ï¤é¤Ö¤é #T35 ÀÞ¸¶¥Ö¥é
++¤ª¤ê¤Ù¤í¤Ó¡¼ #T35 ¿¥Éô¥í¥Ó¡¼
++¤ª¤ê¤Ù¤í¤Ó¤¤ #T35 ¿¥Éô¥í¥Ó¡¼
++¤ª¤ê¤ç¤¦¤ê¤ª¤Í¤¨¤µ¤ó #JN ¤ªÎÁÍý¤ª»Ð¤µ¤ó
++¤ª¤ë¤¹¤Æ¤Ã¤É #JN ¥ª¥ë¥¹¥Æ¥Ã¥É
++¤ª¤ì¤ª¤ó¤Ê #T35 ²¶½÷
++¤ª¤ì¤µ¤Þ #T35 ²¶ÍÍ
++¤ª¤ì¤µ¤Þ¤è¤¦¤·¤ª¤ê #T35 ²¶ÍÍÍѤ·¤ª¤ê
++¤ª¤ì¤À¡¼ #JN ²¶¤À¡¼
++¤ª¤ì¤Ë¤µ¤ï¤°¤ª¤Õ #T35 ²¶¤ËÁû¤°¥ª¥Õ
++¤ª¤ì¤Ï¤Þ¤Á¤¬¤¤¤Ê¤¯¤¤¤Ã¤Ñ¤ó¤¸¤ó #T35 ²¶¤Ï´Ö°ã¤¤¤Ê¤¯°ìÈÌ¿Í
++¤ª¤ì¤â¤Ê¡¼ #CJ ¥ª¥ì¥â¥Ê¡¼
++¤ª¤ì¤â¤ì¤â #T35 ²¶Ï³¤ì¤â
++¤ª¤ï¤Ã¤¿¤Ê #JN (¡¦¡¼¡¦¡ËŽµŽÜŽ¯ŽÀŽÅŽ¥Ž¥Ž¥
++¤ª¤ï¤Ã¤¿¤Ê #JN ¥ª¥ï¥Ã¥¿¥Ê¡¦¡¦¡¦
++¤ª¤ï¤Ã¤¿¤Ê #JN ŽµŽÜŽ¯ŽÀŽÅŽ¥Ž¥Ž¥
++¤ª¤ó¤¿¤¤ #T35 ²¹ÂÓ
++¤ª¤ó¤¿¤¤ #T35 ¸æÂç
++¤ª¤ó¤ß¤ç¤¦¤¸ #JN ±¢ÍÛ»Õ
++¤ª¤ó¤ê¤¨¤ó #T35 Onlien
++¤« #R5r ¼í
++¤«¡¼¤É¤­¤ã¤×¤¿¡¼¤â¤Ê¡¼ #JN CC¥â¥Ê¡¼
++¤«¤¤¤³¤·¤å¤® #T35 ²û¸Å¼çµÁ
++¤«¤¤¤»¤ó #T35 áÎáý
++¤«¤¤¤»¤ó¤­¤Ã¤Æ¤¯¤Ó¤Ä¤Ã¤Æ¤·¤Í #CJ ²óÀþÀڤäƼóÄߤäƻá¤Í
++¤«¤¤¤»¤ó¤­¤Ã¤Æ¤¯¤Ó¤Ä¤Ã¤Æ¤·¤Í #JN ²óÀþÀڤäƼóÄߤäƻá¤Í
++¤«¤¤¤Æ¤­¤Ö¤é¤¦¤¶¡¼ #KK ²÷Ŭ¥Ö¥é¥¦¥¶¡¼
++¤«¤¤¤É¤¦ #KK ²ñƱ
++¤«¤¤¤É¤¦ #KK ²øƸ
++¤«¤¤¤É¤¦ #KK ³¹Æ»
++¤«¤¤¤É¤¦ #T35 ²ñƱ
++¤«¤¤¤É¤¦ #T35 ²øƸ
++¤«¤¤¤É¤¦ #T35 ³¹Æ»
++¤«¤¤¤Õ¤¯¤¹¤Ñ¤¹¤Ñ¤â¤Ê¡¼¤¬¤¯ #JN ²óÉü¥¹¥Ñ¥¹¥Ñ¥â¥Ê¡¼³Ø
++¤«¤¤¤Ø¤¤¤µ¤ó #JN ³«ÊĤµ¤ó
++¤«¤¤¤ï¤ì #T35 ¥«¥¤¥ï¥ì
++¤«¤¨ #CJ ¤«¤¨
++¤«¤¨¤Ç¤ä¤Ä¤é #T35 ¤«¤¨¤Ç¤ä¤Ä¤é
++¤«¤¨¤ì #CJ (Ž¥¢ÏŽ¥)Ž¶Ž´ŽÚ!
++¤«¤¨¤ì #CJ ¡Ê¡¦¢Ï¡¦¡ËŽ¶Ž´ŽÚ!
++¤«¤¨¤ì #CJ ¥«¥¨¥ì
++¤«¤¨¤ì #CJ ¥«¥¨¥ì!
++¤«¤¨¤ì #CJ Ž¶Ž´ŽÚ!
++¤«¤¨¤ì #T35 ¥«¥¨¥ì
++¤«¤ª¤â¤¸ #T35 ´éʸ»ú
++¤«¤ª¤â¤¸¤µ¤¯¤»¤¤¤¤¤é¤¤ #T30 ´éʸ»úºîÀ®°ÍÍê
++¤«¤¬¤ä #K5r µ±
++¤«¤¬¤ä¤± #CJ µ±¤±
++¤«¤¬¤ä¤± #T35 µ±¤±
++¤«¤¬¤ï #T35 ¹áÀî
++¤«¤­¤³ #M5r ½ñ¤­¹þ
++¤«¤­¤³ #T30 ¥«¥­¥³
++¤«¤­¤ç¤¦¤¤¤ó¤Î¤ê¤¢¤­¤È¤Ï¤ó¤«¤Á¤Î¤Á¤ç¤¦¤»¤ó¤¸¤ç¤¦ #JN ²Öµþ±¡ÅµÌÀ¤È¥Ï¥ó¥«¥Á¤ÎÄ©Àï¾õ
++¤«¤® #KK ¸°
++¤«¤® #T35 ¸°
++¤«¤®¤Ã¤³ #T35 ¸°¤Ã»Ò
++¤«¤¯¤É¤È¤« #CJ ³ÑÅ٤Ȥ«
++¤«¤¯¤Ë¤¤¤¿ #CN ³Ñ¼ÑÈÄ
++¤«¤¯¤Ø¤ó #T30 ³ÎÊÑ
++¤«¤¯¤Ø¤ó #T35 ³ÎÊÑ
++¤«¤¯¤è¤¦ #T35 ÄáÂë
++¤«¤¯¤ê #T30 ³ÖÎ¥
++¤«¤¯¤ê¤¤¤¿ #CN ³ÖÎ¥ÈÄ
++¤«¤¯¤ê¤¤¤¿ #T35 ³ÖÎ¥ÈÄ
++¤«¤¯¤ê¤¤¤¿¤Î¤«¤¯¤ê¤¤¤¿ #T35 ³ÖÎ¥ÈĤγÖÎ¥ÈÄ
++¤«¤°¤· #T35 ¹á¶ñ»Õ
++¤«¤² #T35 kage
++¤«¤³¤¤ #KY ¥«¥³¥¤
++¤«¤³¤¤¤¤ #T35 ¥«¥³¥¤¥¤
++¤«¤³¤í¤° #T35 ²áµî¥í¥°
++¤«¤³¤ï¤ë #KY ¥«¥³¥ï¥ë
++¤«¤³¤ï¤ë¤¤ #T35 ¥«¥³¥ï¥ë¥¤
++¤«¤´ #JN ¤¢¤¤¤Ü¤ó
++¤«¤´ #JN ²Ã¸î
++¤«¤µ #JN »±
++¤«¤µ #T35 »±
++¤«¤µ¡¼¤ê #JN ¥«¥µ¡¼¥ê
++¤«¤µ¤«¤µ #JN ¥«¥µ¥«¥µ
++¤«¤·¤ï¤â¡¼¤Á #JN ¥«¥·¥ï¥â¡¼¥Á
++¤«¤¹¤Æ¤ë #KK ¥«¥¹¥Æ¥ë
++¤«¤¹¤Æ¤ë #T35 ¥«¥¹¥Æ¥ë
++¤«¤º #T35 ¿ô¢ª
++¤«¤º¤¸¤µ¤ó #T35 ¿ô»ú¤µ¤ó
++¤«¤º¤ä¤¸¤ë¤· #T35 ¿ô¢ª
++¤«¤»¤­¤¹¤ì #T35 ²½ÀÐ¥¹¥ì
++¤«¤½¤¤¤¿ #T35 ²áÁÂÈÄ
++¤«¤½¤¦¤â¤Ê¡¼ #JN ²ÐÁò¥â¥Ê¡¼
++¤«¤¿ #R5 ñÙ
++¤«¤¿ #R5r ñÙ
++¤«¤¿¤¬¤Á #T30 ÊÒ¥¬¥Á
++¤«¤¿¤ä¤ª #T30 Êҥ䥪
++¤«¤¿¤ê #T35 ñÙ¤ê
++¤«¤¿¤ï¤é¡¼ #JN ¥«¥¿¥ï¥é¡¼
++¤«¤Á¤°¤ß¤é¤¤¤ó #T35 ¾¡ÁȤߥ饤¥ó
++¤«¤Á¤å¡¼¤·¤ã #KK ¤«¤Á¤å¡Á¤·¤ã
++¤«¤Á¤å¡¼¤·¤ã #T35 ¤«¤Á¤å¡Á¤·¤ã
++¤«¤Á¤å¡¼¤·¤ã¤µ¤ó #JN ¤«¤Á¤å¡Á¤·¤ã¤µ¤ó
++¤«¤Á¤å¤¦¤·¤ã #T35 ¤«¤Á¤å¡Á¤·¤ã
++¤«¤Á¤ç¤¦ #T35 ²ÝĹ
++¤«¤Ã¤±¡¼ #CJ ¤«¤Ã¤±¡¼
++¤«¤Ã¤±¡¼ #T35 ¤«¤Ã¤±¡¼
++¤«¤Ã¤±¤¨ #CJ ¤«¤Ã¤±¡¼
++¤«¤Ã¤³¤¤¤¤ #T35 ¥«¥Ã¥³¥¤¥¤
++¤«¤Ã¤È¤â¤Ê¡¼ #JN ¥«¥Ã¥È¥â¥Ê¡¼
++¤«¤Ã¤Ñ #KK ²ÏƸ
++¤«¤Ã¤Ñ #T35 ²ÏƸ
++¤«¤Ã¤Ñ¤¸¤ã¤Ê¤¤¤è #JN ¥«¥Ã¥Ñ¤¸¤ã¤Ê¤¤¤è
++¤«¤Ã¤Ñ¤Ã¤Ñ¡¼ #JN ¥«¥Ã¥Ñ¥Ã¥Ñ¡¼
++¤«¤Ä #JN ¹î
++¤«¤Ä #T35 ¹î
++¤«¤Ä¤Þ¤¿ #T35 ¾¡Ëó
++¤«¤Ä¤ó #T35 ¥«¥Ä¥ó
++¤«¤Æ¤´¤ê #T35 ¥«¥Æ¥´¥ê
++¤«¤È¤¦¤¸¤å¤ê #JN ²ÃÆ£¥¸¥å¥ê
++¤«¤È¤¦¤¸¤ç¤æ¤¦ #T35 ²¼Åù½÷Í¥
++¤«¤È¤¦¤æ¤« #JN ²Ãƣͳ¹á
++¤«¤É¤Þ¤ï¤ó #KK ¥«¥É¥Þ¥ï¥ó
++¤«¤É¤Þ¤ï¤ó #T35 ¥«¥É¥Þ¥ï¥ó
++¤«¤Ê¡¼ #JN ¥«¥Ê¡¼
++¤«¤Ë #KK ³ª
++¤«¤Ë #T35 ³ª
++¤«¤Ë¤Ð¤ë #JN (¡¦Æù¡¦)
++¤«¤Ë¤Ð¤ë #JN ¥«¥Ë¥Ð¥ë
++¤«¤Í¤Í¡¼¤è #JN ¥«¥Í¥Í¡¼¥è
++¤«¤Ó¤ª¤Ë¤®¤ê #KK ¥«¥Ó¥ª¥Ë¥®¥ê
++¤«¤Ó¤ª¤Ë¤®¤ê #T35 ¥«¥Ó¥ª¥Ë¥®¥ê
++¤«¤Ó¤ó¤¿¤ó #JN ²ÖÉÓ¤¿¤ó
++¤«¤Õ¤§¡¼ #JN ¥«¥Õ¥§¡¼
++¤«¤Ö #R5 ¤«¤Ö
++¤«¤Ö¤·¤­¤¬¤¤¤·¤ã¤ä¤ª¤­¤ó #KK ³ô¼°²ñ¼Ò¥ä¥ª¥­¥ó
++¤«¤Ö¤·¤­¤¬¤¤¤·¤ã¤ä¤ª¤­¤ó #T35 ³ô¼°²ñ¼Ò¥ä¥ª¥­¥ó
++¤«¤Ö¤È¤à¤· #T35 ¥«¥Ö¥È¥à¥·
++¤«¤×¡¼¤ë¤¤¤¿ #CN ¥«¥×¡¼¥ëÈÄ
++¤«¤×¡¼¤ë¤¤¤¿ #T35 ¥«¥×¡¼¥ëÈÄ
++¤«¤×¡¼¤ë¤¤¤¿ #T35 Ž¶ŽÌŽßŽ°ŽÙÈÄ
++¤«¤×¤¦¤ë¤¤¤¿ #T35 ¥«¥×¡¼¥ëÈÄ
++¤«¤×¤¦¤ë¤¤¤¿ #T35 Ž¶ŽÌŽßŽ°ŽÙÈÄ
++¤«¤×¤ó¤³ #JN (Ž¥¢ÏŽ¥)¥Î¡¡
++¤«¤×¤ó¤³ #JN ¥«¥×¥ó¥³¡ª
++¤«¤Ù #T35 ÊÉ
++¤«¤Þ¤É¤¦¤Þ¤¢¤é¤· #JN ¥«¥Þ¥É¥¦¥Þ¹Ó¤é¤·
++¤«¤ß #JN »æ
++¤«¤ß #T35 ¿À
++¤«¤ß¤«¤¼¤È¤Ã¤³¤¦¤¿¤¤ #JN ¿ÀÉ÷Æù¶Ââ
++¤«¤ß¤³¤¦¤ê¤ó #T35 ¿À¹ßÎ×
++¤«¤ß¤µ¤¯¤¬ #T35 ¿Àºî²è
++¤«¤ß¤Ê¤ê¤°¤ë¡¼¤× #JN Í륰¥ë¡¼¥×
++¤«¤ß¤Ê¤ê¤°¤ë¡¼¤× #T35 Í륰¥ë¡¼¥×
++¤«¤ß¤Ê¤ê¤°¤ë¤¦¤× #T35 Í륰¥ë¡¼¥×
++¤«¤ß¤Î¤¸¤¤¤Æ¤£¤¤¤ª¤¦ #T35 ¿À¤ÎGTO
++¤«¤ß¤Î¤Ê¤ä¤ß¤Ï¤ê¡¼¤Ö¤Ë¤¸¤å¤¦¤¤¤Á #JN ȱ¤ÎǺ¤ß¤Ï¥ê¡¼¥Ö£²£±
++¤«¤á #T35 µµ
++¤«¤á #T35 µµ¥Þ¥Þ
++¤«¤á¤Þ¤Þ #T35 µµ¥Þ¥Þ
++¤«¤á¤â¤Ê¡¼ #JN ¥«¥á¥â¥Ê¡¼
++¤«¤á¤â¤Ê¡¼¤°¤ì¡¼¤È #JN ¥«¥á¥â¥Ê¡¼¥°¥ì¡¼¥È
++¤«¤á¤ì¤¹ #T35 µµ¥ì¥¹
++¤«¤á¤ó¤é¤¤¤À¡¼¤¢¤®¤³ #JN ²¾Ì̥饤¥À¡¼¥¢¥®¥³
++¤«¤á¤ó¤é¤¤¤À¡¼¤¢¤®¤³ #JN ²¾Ì̥饤¥À¡¼¥¢¥®¥³
++¤«¤á¤ó¤é¤¤¤À¡¼¤¢¤Þ¤¾¤ó #JN ²¾Ì̥饤¥À¡¼¥¢¥Þ¥¾¥ó
++¤«¤á¤ó¤é¤¤¤À¡¼¤®¤ë¤¹ #JN ²¾Ì̥饤¥À¡¼¥®¥ë¥¹
++¤«¤á¤ó¤é¤¤¤À¡¼¤®¤ë¤¹ #JN ²¾Ì̥饤¥À¡¼¥®¥ë¥¹
++¤«¤á¤ó¤é¤¤¤À¡¼¤´¤ë¤¡¤Ã¤¯ #JN ²¾Ì̥饤¥À¡¼GOLACK
++¤«¤á¤ó¤é¤¤¤À¡¼¤·¤£¤¹¤ê¡¼ #JN ²¾Ì̥饤¥À¡¼¤·¤££³
++¤«¤á¤ó¤é¤¤¤À¡¼¤·¤£¤¹¤ê¡¼ #JN ²¾Ì̥饤¥À¡¼¤·¤££³
++¤«¤á¤ó¤é¤¤¤À¡¼¤·¤£¤¹¤ê¡¼¤¨¤Ã¤¯¤¹ #JN ²¾Ì̥饤¥À¡¼¤·¤££³¡Ý£Ø
++¤«¤á¤ó¤é¤¤¤À¡¼¤·¤£¤¹¤ê¡¼¤¨¤Ã¤¯¤¹ #JN ²¾Ì̥饤¥À¡¼¤·¤££³¡Ý£Ø
++¤«¤á¤ó¤é¤¤¤À¡¼¤¹¤È¤í¤ó¤¬¡¼ #JN ²¾Ì̥饤¥À¡¼¥¹¥È¥í¥ó¥¬¡¼
++¤«¤á¤ó¤é¤¤¤À¡¼¤â¤¦¤Ê #JN ²¾Ì̥饤¥À¡¼¥â¥¦¥Ê
++¤«¤â¤¹ #S5 ¾ú¤¹
++¤«¤â¤á #T35 ²ª
++¤«¤é¤¢¤®¤ã¤ó¤° #T35 ¥«¥é¡¼¥®¥ã¥ó¥°
++¤«¤é¤¢¤² #T35 ÅâÍȤ²
++¤«¤é¤­¤Þ¤·¤¿ #CJ ¤«¤éÍè¤Þ¤·¤¿
++¤«¤é¤¹ #JN ±¨
++¤«¤ë¤¿¤ó #JN ¥«¥ë¥¿¥ó
++¤«¤ì¡¼¤Ñ¤½¤Þ¤½ #JN ¥«¥ì¡¼¥Ñ¥½¥Þ¥½
++¤«¤ì¡¼¤Ñ¤ó¤Þ¤ó #JN ¥«¥ì¡¼¥Ñ¥ó¥Þ¥ó
++¤«¤ì¡¼¤Ñ¤ó¤Þ¤ó #JN Ž¶ŽÚŽ°ŽÊŽßŽÝŽÏŽÝ
++¤«¤ì¤¤¤·¤å¤¦¤¿¤À¤è¤¦ #CJ ²ÃÎð½­Éº¤¦
++¤«¤ì¤Ï #T35 ¸ÏÍÕ
++¤«¤ï¤µ¤® #T35 Àµ½
++¤«¤ï¤·¤Þ¤¢¤Å¤ß #JN ÀîÅçÏÂÄżÂ
++¤«¤ó #T35 ´°
++¤«¤ó¤«¤ó¤É¤¦¤ê¤Ä #KK ´Ø´ØƱΩ
++¤«¤ó¤«¤ó¤É¤¦¤ê¤Ä #T35 ´Ø´ØƱΩ
++¤«¤ó¤¬¤¯¤´¤­¤Ö¤ê #JN ´Ø³Ø¥´¥­¥Ö¥ê
++¤«¤ó¤¬¤ë¡¼¤â¤Ê¡¼ #JN ¥«¥ó¥¬¥ë¡¼¥â¥Ê¡¼
++¤«¤ó¤¯¤í¤¦ #JN ¥«¥ó£¹£¶
++¤«¤ó¤¯¤í¤¦ #JN ´ª¶ìÏ«
++¤«¤ó¤¯¤í¤¦ #T35 ¥«¥ó£¹£¶
++¤«¤ó¤¯¤í¤¦ #T35 ´ª¶ìÏ«
++¤«¤ó¤³ #R5 ¥«¥ó¥³
++¤«¤ó¤³ #R5r ¥«¥ó¥³
++¤«¤ó¤³¤¯ #KK ´¯¹ñ
++¤«¤ó¤³¤¯ #KK ´¯¹ó
++¤«¤ó¤³¤¯ #KK Õ¡¹ñ
++¤«¤ó¤³¤¯ #T35 ´¯¹ñ
++¤«¤ó¤³¤¯ #T35 ´¯¹ó
++¤«¤ó¤³¤¯ #T35 Õ¡¹ñ
++¤«¤ó¤³¤¯¤È¤ê #T35 ´Ú¹ñ¤È¤ê
++¤«¤ó¤³¤¯¤È¤ê #T35 ´Ú¹ñ¤È¤ê
++¤«¤ó¤³¤Ã¤¯ #KK ¥«¥ó¥³¥Ã¥¯
++¤«¤ó¤³¤Ã¤¯ #T35 ¥«¥ó¥³¥Ã¥¯
++¤«¤ó¤³¤É¤ê #JN ´×¸ÅÄ»
++¤«¤ó¤µ¤¤¤Õ¤¡¤¤¤Ö¤¹¤¿¤¢ #T35 ´ØÀ¾¥Õ¥¡¥¤¥Ö¥¹¥¿¡¼
++¤«¤ó¤µ¤ó¤È¤·¤¿¤Ç¤ó¤·¤ã #JN ´×»¶¤È¤·¤¿ÅżÖ
++¤«¤ó¤·¤ã¤Ï¤à¤Ë¤À #CJ ´¶¼Õ¥Ï¥à¥Ë¥À
++¤«¤ó¤¸¤ï¤ë¤¤ #T35 ´¶¤¸°­¤¤
++¤«¤ó¤Á¤ç¤¯¤Ë¤ó #T35 ´Éľ¿Í
++¤«¤ó¤Æ¤¤¤· #T35 ´ÕÄê»Î
++¤«¤ó¤Æ¤¤¤¹¤ì #T35 ´ÕÄꥹ¥ì
++¤«¤ó¤Æ¤¤¤È¤ê¤ª #T35 ´ÕÄê¥È¥ê¥ª
++¤«¤ó¤Æ¤¤¤Ë¤ó¤¯¤ß¤¢¤¤ #T35 ´ÕÄê¿ÍÁȹç
++¤«¤ó¤Æ¤¤¤è¤¦¤´ #T35 ´ÕÄêÍѸì
++¤«¤ó¤È¤¦¤Ï¤À¤«¤«¤¤ #JN ´ØÅìÍç²ñ
++¤«¤ó¤È¤ó #KK ¥«¥ó¥È¥ó
++¤«¤ó¤È¤ó #T35 ¥«¥ó¥È¥ó
++¤«¤ó¤Ê¤ª¤È #JN ´¯Ä¾¿Í
++¤«¤ó¤Ê¤ª¤È #JN ´¯Ì¾²»
++¤«¤ó¤Ê¤ª¤È #JN ´Úľ¿Í
++¤«¤ó¤Ê¤ª¤È #JN ¿ûľ¿Í
++¤«¤ó¤Ê¤ª¤È #T35 ´¯Ä¾¿Í
++¤«¤ó¤Ê¤ª¤È #T35 ´¯Ì¾²»
++¤«¤ó¤Ê¤ª¤È #T35 ´Úľ¿Í
++¤«¤ó¤Ê¤ª¤È #T35 ¿ûľ¿Í
++¤«¤ó¤Í¤¤¤³¤¦¤Ï #JN ´ÅÇ«¶½ÇÆ
++¤«¤ó¤Þ¤ó¤»¤¤¤È #JN ´³ËþÀ¸ÅÌ
++¤«¤ó¤ê¤·¤ã¤µ¤ó¤Ç¤¹¤« #CJ ´ÉÍý¼Ô¤µ¤ó¤Ç¤¹¤«¡©£÷
++¤«¤ó¤ê¤Ë¤ó¤Õ¤¡¤ä¤ä #T35 &quot;´ÉÍý&quot;¿Í¥Õ¥¡¥ä¥ä
++¤«¤ó¤ì¤ó¤¹¤ì¤Ã¤É #T35 ´ØÏ¢¥¹¥ì¥Ã¥É
++¤«¤ó¤ì¤ó¤ê¤ó¤¯ #T35 ´ØÏ¢¥ê¥ó¥¯
++¤¬¡¼¤ó #CJ ¥¬¨¬¨¬¨¬¡Ê_§¥_;¡Ë¨¬¨¬¥ó¡ª
++¤¬¡¼¤ó #JN ¥¬¡¼¥ó
++¤¬¡¼¤ó #JN ¥¬¨¬¨¬¡ÊŽß§¥Žß;)¨¬¨¬¥ó¡ª
++¤¬¡¼¤ó #JN ¦²¡ÊŽß§ÕŽßlll¡ËŽ¶ŽÞŽ°ŽÝ
++¤¬¤¤¤¤¤³¤È¤ò¤¤¤Ã¤¿ #CJ ¤¬¤¤¤¤¤³¤È¤ò¸À¤Ã¤¿
++¤¬¤¤¤­¤Á #T35 ¥¬¥¤¥­¥Á
++¤¬¤¤¤·¤å¤Ä #T35 ¤¬¤¤¤·¤å¤Ä
++¤¬¤¤¤·¤å¤Ä #T35 ³°½Ð
++¤¬¤¤¤·¤å¤Ä¤­¤Ã¤É #JN ´û½Ð¥­¥Ã¥É
++¤¬¤¤¤·¤å¤Ä¤¯¤ó #JN ¥¬¥¤¥·¥å¥Ä·¯
++¤¬¤¤¤¿ #T35 ¥¬ÈÄ
++¤¬¤¤¤É¤é¤¤¤Ê¤¢ #T35 ¥¬¥¤¥É¥é¥¤¥Ê¡¼
++¤¬¤¤¤É¤é¤¤¤ó¤¤¤¿ #T35 ¥¬¥¤¥É¥é¥¤¥óÈÄ
++¤¬¤¯¤¬¤¯¤Ö¤ë¤Ö¤ë #CJ ¥¬¥¯¥¬¥¯¥Ö¥ë¥Ö¥ë
++¤¬¤¯¤¬¤¯¤Ö¤ë¤Ö¤ë #CJ Ž¶ŽÞŽ¸Ž¶ŽÞŽ¸ŽÌŽÞŽÙŽÌŽÞŽÙ
++¤¬¤¯¤¬¤¯¤Ö¤ë¤Ö¤ë #T30 ¥¬¥¯¥¬¥¯¥Ö¥ë¥Ö¥ë
++¤¬¤¯¤¬¤¯¤Ö¤ë¤Ö¤ë¤­¤ç¤¦¤³¤¦¤ê¤ó #T30 ¥¬¥¯¥¬¥¯¥Ö¥ë¥Ö¥ë¶µ¹ßÎ×
++¤¬¤¯¤ì¤­¤¢¤¶¤é¤· #T35 ³ØÎò¥¢¥¶¥é¥·
++¤¬¤¯¤ì¤­¤¸¤å¤ó¤¤ #T35 ³ØÎò½ç°Ì
++¤¬¤¯¤ì¤­¤Á¤å¤¦¤É¤¯¤·¤ã #T35 ³ØÎòÃæÆǼÔ
++¤¬¤¯¤ì¤­¤í¤ó¤À¤ê¤ó¤° #T35 ³ØÎò¥í¥ó¥À¥ê¥ó¥°
++¤¬¤³¤Î¤¹¤ì¤Ë¤­¤ç¤¦¤ß¤ò¤â¤Ã¤¿¤è¤¦¤Ç¤¹ #CJ ¤¬¤³¤Î¥¹¥ì¤Ë¶½Ì£¤ò»ý¤Ã¤¿¤è¤¦¤Ç¤¹
++¤¬¤¾¤¦¤¢¤Ã¤×¤í¡¼¤À #T35 ²èÁü¥¢¥Ã¥×¥í¡¼¥À
++¤¬¤Á #T30 ¥¬¥Á
++¤¬¤Á #T35 ¥¬¥Á
++¤¬¤Á¤ã¤Ô¤ó #JN ¥¬¥Á¥ã¥Ô¥ó
++¤¬¤Ã¤¯¤· #CJ ¡²|¡±|¡û
++¤¬¤Ã¤¯¤· #CJ orz
++¤¬¤Ã¤¯¤· #CJ _no
++¤¬¤Ã¤¯¤· #CJ OTL
++¤¬¤Ã¤¯¤· #CJ OTZ
++¤¬¤Ã¤¯¤· #CJ JTO
++¤¬¤Ã¤· #JN ¥¬¥Ã¥·
++¤¬¤Ã¤·¤å¤¯¤¸¤ç #T35 ¹ç½É½ê
++¤¬¤Ã¤Á¤å¤ó #T35 ¤¬¤Ã¤Á¤å¤ó¡ù
++¤¬¤Ã¤Ä #KK ¥¬¥Ã¥Ä
++¤¬¤Ã¤Ä #T35 ¥¬¥Ã¥Ä
++¤¬¤Ê¡¼ #JN ¥¬¥Ê¡¼
++¤¬¤Ê¡¼¤«¤Ã¤³¤¸¤Ä¤è¤¦¤¬¤¿¤«¤Ã¤³¤È¤¸¤ë #JN ¥¬¥Ê¡¼¡Ê¼ÂÍÑ·¿¡Ë
++¤¬¤Ê¡¼¤¿¤¤¤Æ¤¤ #JN ¥¬¥Ê¡¼ÂçÄë
++¤¬¤Ê¡¼¤¿¤¤¤Æ¤¤ #JN ¥¬¥Ê¡¼ÂçÄë
++¤¬¤Ê¤² #CJ ¥¬¥Ê¥²
++¤¬¤Ê¤² #CJ Ž¶ŽÞŽÅŽ¹ŽÞ
++¤¬¤Î¤¿ #T35 ¥¬¥Î¥¿
++¤¬¤Ï¤¯ #T35 ²èÇì
++¤¬¤á¤µ¤Ð #KK µµ»ª
++¤¬¤á¤µ¤Ð #T35 µµ»ª
++¤¬¤ê¤¬¤ê¤¯¤ó #T35 ¥¬¥ê¥¬¥ê·¯
++¤¬¤ê¤Ù¤ó #JN ¥¬¥êÊÙ
++¤¬¤ê¤Ù¤ó¤â¤é¤é¡¼ #JN ¤¬¤êÊÙ¥â¥é¥é¡¼
++¤¬¤ó¤¬¤ë #R5r ¤¬¤ó¤¬¤ë
++¤¬¤ó¤¬¤ë #T35 ¥¬¥ó¥¬¥ë
++¤¬¤ó¤Ð¤ë¤â¤Ê¡¼ #JN ¥¬¥ó¥Ð¥ë¥â¥Ê¡¼
++¤¬¤ó¤Ü #R5 ¤¬¤ó¤Ü
++¤¬¤ó¤Ü #R5r ¤¬¤ó¤Ü
++¤¬¤ó¤à¤Ï¤ó¤É¤ë¤Í¤¨¤à¤â¤ó¤À¤¤ #T35 ½ÆÌ´HNÌäÂê
++¤­¤¤ #KK ¸°
++¤­¤¤¤Æ¤¢¤í¤¨¤ê¡¼¤Ê #CJ ¤­¤¤¤Æ¥¢¥í¥¨¥ê¡¼¥Ê¢ö
++¤­¤¤¤Æ¤¢¤í¤¨¤ê¡¼¤Ê #T35 ¤­¤¤¤Æ¥¢¥í¥¨¥ê¡¼¥Ê¢ö
++¤­¤¤¤Ë¤·¤­ #T35 ¥­¡¼¥Ë¥·¥­
++¤­¤¤¤í #T35 ²«¿§
++¤­¤¦¤¤ #T35 ¥­¥¦¥¤
++¤­¤¨¤¤¤Ü¤¹¤ì¤¸¤±¤ó #T35 ¥­¥¨¡¼¥Ü¥¹¥ì»ö·ï
++¤­¤« #JN µ¢²½
++¤­¤«¤¤¤«¤±¤¤¤Û¤¦ #JN µ¡³£²½·ÙÊó
++¤­¤¬¡¼ #JN ¥­¥¬¡¼
++¤­¤­¡¼¤ó #JN ¥­¥­¡¼¥ó
++¤­¤¯ #T35 µÆ
++¤­¤±¤¤¤ª¤Ë¤®¤ê #JN ´ñ·Á¤ª¤Ë¤®¤ê
++¤­¤±¤¤¤â¤é¤é¡¼ #JN ´ñ·Á¥â¥é¥é¡¼
++¤­¤´¤Ê¤Ó #KK ¥®¥³¥Ê¥Ó
++¤­¤µ¤Þ¤´¤È¤­¤¬¤È¤Ê¤ß¤ò¤«¤¿¤ë¤Ê #JN µ®ÍÍÇ¡¤­¤¬¥È¥Ê¥ß¤ò¸ì¤ë¤Ê
++¤­¤µ¤Þ¤¸¤ã¤Ê¡¼ #JN ¥­¥µ¥Þ¥¸¥ã¥Ê¡¼
++¤­¤·¤ã #T35 µ­¼Ô
++¤­¤·¤å¤¤¤½¤ó¤â¤¸ #T35 µ¡¼ï°Í¸ʸ»ú
++¤­¤·¤å¤¤¤¾¤ó¤â¤¸ #T35 µ¡¼ï°Í¸ʸ»ú
++¤­¤·¤å¤¦ #T30 ´ñ½±
++¤­¤·¤å¤¦ #T35 ´ñ½±
++¤­¤·¤å¤Ä #T35 ´û½Ð
++¤­¤·¤ç #CJ ¥­¥·¥ç
++¤­¤·¤ç #KYT ¥­¥·¥ç
++¤­¤·¤ç¤¤ #T35 ¥­¥·¥ç¥¤
++¤­¤·¤ç¤ª¤¿ #T35 ¥­¥·¥ç¥ª¥¿
++¤­¤·¤ç¤ò¤¿ #T35 ¥­¥·¥ç¥ò¥¿
++¤­¤¿¡¼ #CJ ¥­¥¿¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬(¡¬¢Ï¡¬)¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¡ª¡ª
++¤­¤¿¡¼ #CJ ¥­¥¿¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬(Žß¢ÏŽß)¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¡ª¡ª
++¤­¤¿¡¼ #CJ Ž·ŽÀ¨¬¨¬¨¬¨¬(¡¬¢Ï¡¬¢á(¡¬¢Ï¡¬¢á¡¬¢Ï¡¬)¢á¡¬¢Ï¡¬)¨¬¨¬¨¬¨¬!!!
++¤­¤¿¡¼ #CJ Ž·ŽÀ¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬(Žß¢ÏŽß)¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬!!!
++¤­¤¿¡¼ #JN ¥­¥¿¡¼!!!!
++¤­¤¿¡¼ #JN Ž·ŽÀ¨¬¨¬¨¬¨¬¨¬(Žß¢ÏŽß)¨¬¨¬¨¬¨¬¨¬!!!!
++¤­¤¿¤¢ #CJ ¥­¥¿¡¼
++¤­¤¿¤¢ #CJ Ž·ŽÀŽ°
++¤­¤¿¤¤¤¢¤² #T35 ´üÂÔage
++¤­¤¿¤­¤å¤¦ #T35 ËÌ£Ñ
++¤­¤¿¤µ¤Ð¤¸¤À¤¤ #T35 ËÌ»ª»þÂå
++¤­¤¿¤Á¤ç¤ó #T35 ËÌ¥Á¥ç¥ó
++¤­¤¿¤Í¡¼¤è #JN ¥­¥¿¥Í¡¼¥è
++¤­¤¿¤Í¡¼¤ó¤À¤è #JN ¥­¥¿¥Í¡¼¥ó¥À¥è
++¤­¤¿¤Í¤Ã¤È #KK Ë̥ͥåÈ
++¤­¤¿¤â¤ê #KK ËÌ¿¹
++¤­¤¿¤â¤ê #T35 ËÌ¿¹
++¤­¤À #KK ÌÚÅÄ
++¤­¤À #T35 ÌÚÅÄ
++¤­¤Á #T35 ¥­¥Á
++¤­¤Á #T35 ´ðÃÏ
++¤­¤Á¡¼¤ê #JN ¥­¥Á¡¼¥ê
++¤­¤Á¡¼¤ê #JN ¥à¥«¡¼¥Ç¡Ú¤à¤«¡¼¤Ç¡ÛÊÌ̾¥­¥Á¡¼¥ê
++¤­¤Á¤¬¤¤ #T35 ¥­¥Á¥¬¥¤
++¤­¤Á¤¬¤¤ #T35 ´ðÃϳ°
++¤­¤Á¤¬¤¤ #T35 ´ðÃϳ²
++¤­¤Á¤¬¤¤¤±¤¤¤Û¤¦ #JN ´ðÃϳ°·ÙÊó
++¤­¤Á¤¬¤¤¤±¤¤¤Û¤¦ #T35 ¥­¥Á¥¬¥¤·ÙÊó
++¤­¤Ã¤³¡¼¤Þ¤½ #JN ¥­¥Ã¥³¡¼¥Þ¥½
++¤­¤Ã¤Á¤ó #T35 ¥­¥Ã¥Á¥ó
++¤­¤Æ¤£ #T35 ¥­¥Æ¥£
++¤­¤Æ¤£¤­¤å¤¦ #T35 ¥­¥Æ¥£µÞ
++¤­¤Æ¤Ê¤¤ #JN Ž·ŽÃŽÅŽ²
++¤­¤Æ¤Ê¤¤ #JN Ž·ŽÃŽÅŽ²¨¬¨¬¨¬¨¬¨¬¨¬¡ÊŽß_Žß¡Ë¨¬¨¬¨¬¨¬¨¬¨¬!!!!!
++¤­¤È¡¼ #JN ¥­¥È¡¼
++¤­¤Ë¤¤¤é¤Í¡¼¤è #JN ¥­¥Ë¥¤¥é¥Í¡¼¥è
++¤­¤Ë¤·¤Ê¤¤ #JN ¡ÊŽß¦ÅŽß¡ËŽ·ŽÆŽ¼ŽÅŽ²!!
++¤­¤Ë¤·¤Ê¤¤ #JN ¥­¥Ë¥·¥Ê¥¤!!
++¤­¤Ë¤·¤Ê¤¤ #JN Ž·ŽÆŽ¼ŽÅŽ²!!
++¤­¤Ì¤¦¤é¤ê¤ó¤«¤¤¤Æ¤Ä¤É¤¦ #JN °á±ºÎ׳¤Å´Æ»
++¤­¤Í¤ó¤«¤­¤³ #T30 µ­Ç°¥«¥­¥³
++¤­¤Í¤ó¤«¤­¤³ #T35 µ­Ç°¥«¥­¥³
++¤­¤Í¤ó¤Ñ¤Ô¤³ #T35 µ­Ç°¥Ñ¥Ô¥³
++¤­¤Í¤ó¤Þ¤­¤³ #T35 µ­Ç°âõª»Ò
++¤­¤Î¤³ #T35 ¥­¥Î¥³
++¤­¤Î¤³ #T35 Âû
++¤­¤Î¤»¡¼¤Ë¤ã #JN ¡¡¡¡(¡¼§×°ì)
++¤­¤Î¤»¡¼¤Ë¤ã #JN ¥­¥Î¥»¡¼¥Ë¥ã
++¤­¤Ï¤Ò¤ã¤¯¤Ë¤¸¤å¤¦ #JN ¥­¥Ï£±£²£°
++¤­¤Ð¤ó #T35 ÌÚÈÖ
++¤­¤Ü¡¼¤ó #CJ ¤­¤Ü¡¼¤ó
++¤­¤Ü¡¼¤ó #T35 ¤­¤Ü¡¼¤ó
++¤­¤Ü¤ó #CJ ¤­¤Ü¤ó
++¤­¤Ü¤ó #CJ ¥­¥Ü¥ó
++¤­¤Ü¤ó¤Ì #CJ ¤­¤Ü¤ó¤Ì
++¤­¤Ü¤ó¤Ì #CJ ¥­¥Ü¥ó¥Ì
++¤­¤ß¤Ï¤ï¤À¤µ¤ó¤´¤Î¤ß #CJ ·¯¤Ï¥ï¥À¥µ¥ó¹¥¤ß
++¤­¤à #KK ¤­¤à
++¤­¤à #KY ¤­¤à
++¤­¤à¤³ #T35 ¥­¥à¥³
++¤­¤à¤µ¤ï #KK ¥­¥àÂô
++¤­¤à¤µ¤ï #T35 ¥­¥àÂô
++¤­¤à¤µ¤ï #T35 ʧÂô
++¤­¤à¤Á #JN ¥­¥à¥Á
++¤­¤à¤Á #T35 ¥­¥à¥Á
++¤­¤à¤Á¤â¤ó #JN ¥­¥à¥Á¥â¥ó
++¤­¤à¤è¤ó¤¸¤ó #JN ¶â±Ëï¯
++¤­¤à¤è¤ó¤¸¤ó #T35 ¶â±Ëï¯
++¤­¤â #KYT ¥­¥â
++¤­¤â¤¤ #T35 ¥­¥â¥¤
++¤­¤â¤Á¤¤¤¤¤³¤È¤·¤è¤¦ #CJ µ¤»ý¤Á¤¤¤¤¤³¤È¤·¤è¤¦
++¤­¤ã¤Ã¤È¤­¤é¡¼ #JN ¥­¥ã¥Ã¥È¥­¥é¡¼
++¤­¤ã¤Ã¤È¤­¤é¡¼ #T35 ¥­¥ã¥Ã¥È¥­¥é¡¼
++¤­¤ã¤Ã¤È¤­¤é¤¢ #T35 ¥­¥ã¥Ã¥È¥­¥é¡¼
++¤­¤ã¤Ã¤Ï¤º¤«¤· #JN ¥­¥ã¥Ã¡¢¥Ï¥º¥«¥·
++¤­¤ã¤Ã¤Ï¤º¤«¤· #JN Ž·Ž¬Ž¯¡¢ŽÊŽ½ŽÞŽ¶Ž¼¡Ê-ŽÉŽÉ¡Ë
++¤­¤ã¤Ã¤× #T35 ¥­¥ã¥Ã¥×
++¤­¤ã¤Ã¤×¤â¤ì #T35 ¥­¥ã¥Ã¥×ϳ¤ì
++¤­¤ã¤Ï #T35 ¡ù
++¤­¤ã¤Ô¤¤ #CJ ¥­¥ã¥Ô¡¼
++¤­¤ã¤×¤Æ¤½ #JN ¥­¥ã¥×¥Æ¥½
++¤­¤ã¤×¤Æ¤½ #T35 ¥­¥ã¥×¥Æ¥½
++¤­¤ã¤×¤Æ¤½ #T35 Ž·Ž¬ŽÌŽßŽÃŽ¿
++¤­¤ã¤é¤Ï¤ó #T35 ¥­¥ã¥é¥Ï¥ó
++¤­¤å¤¦ #T35 Q
++¤­¤å¤¦¤µ¤¤¤«¤¤ #T35 µßºÑ²ñ
++¤­¤å¤¦¤· #JN µë»Å
++¤­¤å¤¦¤·¤å¤¦ #T35 µÛ¼ý
++¤­¤å¤¦¤·¤å¤¦ #T35 µÞ½±
++¤­¤å¤¦¤¹¤ì #T35 µì¥¹¥ì
++¤­¤å¤¦¤À¤¤ #T35 QÂç
++¤­¤å¤¦¤Á¤ã¤ó¤Í¤ë #T35 ¶å¥Á¥ã¥ó¥Í¥ë
++¤­¤å¤¦¤Æ¤£¤¤ #T35 QT
++¤­¤å¤¦¤Æ¤¤ #KK µìÄë
++¤­¤å¤¦¤Æ¤¤ #T35 µÜÄî
++¤­¤å¤¦¤Æ¤¤ #T35 µìÄë
++¤­¤å¤¦¤Æ¤ó¤¤¤Á¤´¤¸¤±¤ó #T35 9¡¦15»ö·ï
++¤­¤å¤¦¤Æ¤ó¤­¤å¤¦¤Ô¤ó¤¯¤¬¤Ø¤ó #T35 9¡¦9pink¤¬ÊÑ
++¤­¤å¤¦¤Ë¤­¤Î¤­¤ç¤¦¤¤¤¯¤é¤ó¤¾¤¦ #T35 µìÆó´ü¤Î¶µ°é¡¦Íô¤¸øΩ¡¦¹ñ¸øΩÌë´ÖÉô
++¤­¤å¤¦¤Þ¤Ã¤¯¤¤¤¿ #CN µì£Í£á£ãÈÄ
++¤­¤å¤¦¤Þ¤Ã¤¯¤¤¤¿ #T35 µì£Í£á£ãÈÄ
++¤­¤å¤¦¤í¤¯ #KK µìÏ»
++¤­¤å¤¦¤í¤¯ #T35 µìÏ»
++¤­¤æ #JN ¥­¥æ
++¤­¤æ #T35 ¥­¥æ
++¤­¤æ¤á¤¤¤²¤ó #JN ¥­¥æ̸À
++¤­¤ç¤¦ #T35 ¶§
++¤­¤ç¤¦¤®¤å¤¦¤Ó¤ç¤¦¤·¤ó¤¸¤ã #T35 ¶¸µíÉ¿®¼Ô
++¤­¤ç¤¦¤µ¤ó #T35 ¶¯»À
++¤­¤ç¤¦¤µ¤ó¤·¤å¤® #T35 ¶¸»´¼çµÁ
++¤­¤ç¤¦¤µ¤ó¤·¤å¤® #T35 ¶¸»º¼çµÁ
++¤­¤ç¤¦¤»¤¤¤¢¤¤¤Ç¤£¤¤ #T35 ¶¯À©ID
++¤­¤ç¤¦¤»¤¤¤·¤å¤¦¤ê¤ç¤¦ #JN ¶¯À©½ªÎ»
++¤­¤ç¤¦¤À¤¤¤Î¤Û¤´¤·¤ã #JN ¡Ê¡¦¡¼¡¦¡ËŽÝ¡£
++¤­¤ç¤¦¤À¤¤¤Î¤Û¤´¤·¤ã #JN ·»Äï¤ÎÊݸî¼Ô
++¤­¤ç¤¦¤À¤¤¤â¤Ê¡¼ #JN ·»Äï¥â¥Ê¡¼
++¤­¤ç¤¦¤À¤¤¤â¤Ê¡¼¤Î¤Ï¤Ï #JN ·»Äï¥â¥Ê¡¼¤ÎÊì
++¤­¤ç¤¦¤È¤¦¤»¤ó¤»¤¤ #JN ¶µÆ¬ÀèÀ¸
++¤­¤ç¤¦¤È¤±¤ó #CN µþÅÔ¸©
++¤­¤ç¤¦¤È¤±¤ó #CNS µþÅÔ¸©
++¤­¤ç¤¦¤È¤±¤ó #T35 µþÅÔ¸©
++¤­¤ç¤¦¤È¤·¤ª¤ª¤Ä¤¯ #CN µþÅÔ»ÔÂçÄŶè
++¤­¤ç¤¦¤È¤·¤ª¤ª¤Ä¤¯ #CNS µþÅÔ»ÔÂçÄŶè
++¤­¤ç¤¦¤È¤·¤ª¤ª¤Ä¤¯ #T35 µþÅÔ»ÔÂçÄŶè
++¤­¤ç¤¦¤È¤ì¤ó¤¸¤ã¡¼ #JN µþÅÔ¥ì¥ó¥¸¥ã¡¼
++¤­¤ç¤¦¤Ï¤ó #T35 ¶¦¥Ï¥ó
++¤­¤ç¤¦¤æ¤¦¤­¤ã¤Ã¤× #T35 ¶¦Í­¥­¥ã¥Ã¥×
++¤­¤ç¤¦¤æ¤¦¤³¤Æ¤Ï¤ó #T35 ¶¦Í­¥³¥Æ¥Ï¥ó
++¤­¤ç¤¦¤æ¤¦¤È¤ê¤Ã¤× #T35 ¶¦Í­¥È¥ê¥Ã¥×
++¤­¤ç¤¸¤ó #T35 µõ¿Ð
++¤­¤ç¤À¤¤¤±¤¤¤¸¤Ð¤ó #T35 µðÂç·Ç¼¨ÈÄ
++¤­¤ç¤À¤¤¤±¤¤¤¸¤Ð¤ó¤°¤ó #T35 µðÂç·Ç¼¨ÈÄ·²
++¤­¤ç¤ß¤ß¤â¤Ê¡¼ #JN µð¼ª¥â¥Ê¡¼
++¤­¤é¤ê #JN ¡Ê¡±¡¼+¡±¡ËŽ·Ž×ŽØ
++¤­¤é¤ê #JN ¥­¥é¥ê
++¤­¤é¤ê #JN Ž·Ž×ŽØ
++¤­¤ê¤³¤ß¤¿¤¤¤Á¤ç¤¦ #JN ÀÚ¹þÂâĹ
++¤­¤ê¤³¤ß¤¿¤¤¤Á¤ç¤¦¤È¤Ò¤í¤æ¤­ #JN ÀÚ¹þÂâĹ¤È¤Ò¤í¤æ¤­
++¤­¤ê¤Ð¤ó #T35 ¥­¥ê¥Ð¥ó
++¤­¤ê¤Ð¤ó #T35 ¥­¥êÈÖ
++¤­¤ê¤Ð¤ó¤²¤Ã¤¿¡¼ #T35 ¥­¥êÈÖ¥²¥Ã¥¿¡¼
++¤­¤ê¤Ð¤ó¤²¤Ã¤¿¤¢ #T35 ¥­¥êÈÖ¥²¥Ã¥¿¡¼
++¤­¤ó #T35 ¶â
++¤­¤ó¤­¤¸¤É¤¦ #JN ¶áµ¦»ùƸ
++¤­¤ó¤­¤¸¤É¤¦ #T35 ¶áµ¦»ùƸ
++¤­¤ó¤°¤â¤Ê¤ê¤¾¤ó #JN ¥­¥ó¥°¥â¥Ê¥ê¥¾¥ó
++¤­¤ó¤°¤ì¤ª¤â¤ê¤è¤·¤í¤¦ #JN ¥­¥ó¥°¥ì¥ª¿¹Á±Ï¯
++¤­¤ó¤À¤¤ #T35 ¶áÂå
++¤­¤ó¤Þ¤ó¤³ #JN ¥­¥ó¥Þ¥ó¥³
++¤­¤ó¤Þ¤ó¤³ #T35 ¥­¥ó¥Þ¥ó¥³
++¤­¤ó¤Þ¤ó¤³¤­¤ç¤¦ #KK ¥­¥ó¥Þ¥ó¥³¶µ
++¤­¤ó¤Þ¤ó¤³¤­¤ç¤¦ #T35 ¥­¥ó¥Þ¥ó¥³¶µ
++¤®¤¬ #JN ¥®¥¬
++¤®¤¬¤á¤¹ #JN ¥®¥¬¥á¥¹
++¤®¤³ #CJ ¥®¥³
++¤®¤³ #JN ¥®¥³
++¤®¤³¡¼¤° #JN ¥®¥³¡¼¥°
++¤®¤³¤¢¤¤¤¹ #JN ¥®¥³¥¢¥¤¥¹
++¤®¤³¤¤¤Ì #JN ¥®¥³¸¤
++¤®¤³¤¦¤µ #JN ¥®¥³¥¦¥µ
++¤®¤³¤¨¤â¤ó #JN ¥®¥³¤¨¤â¤ó
++¤®¤³¤¨¤ë #JN ¥®¥³¥¨¥ë
++¤®¤³¤«¤ï¤À¤ó¤· #JN ¥®¥³ÀîÃÌ»Ö
++¤®¤³¤¬¤¨¤ë #JN ¥®¥³¥¬¥¨¥ë
++¤®¤³¤­¤ç¤¦¤¸¤å #JN ¥®¥³¶µ¼ø
++¤®¤³¤®¤³ #CJ ¥®¥³¥®¥³
++¤®¤³¤®¤³¤¹¤± #JN µ¼¸Å¥®¥³½õ
++¤®¤³¤®¤³¤¿ #JN µ¼¸Å¥®¥³ÂÀ
++¤®¤³¤¯¤µ #JN ¥®¥³Áð
++¤®¤³¤±¤ó¤­¤å¤¦¤¤¤ó #JN ¥®¥³¸¦µæ°÷
++¤®¤³¤³ #JN ¡¡¡¡¢¬¥â¥Ê»Ò¡Ú¤â¤Ê¤³¡Û¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¢¬¥®¥³»Ò
++¤®¤³¤³ #JN ¥®¥³»Ò
++¤®¤³¤¸¤É¤¦¤·¤ã¤¬¤Ã¤³¤¦ #JN ¥®¥³¼«Æ°¼Ö³Ø¹»
++¤®¤³¤¹¤¿¡¼¤°¤ó #JN ¥®¥³¥¹¥¿¡¼·³
++¤®¤³¤¹¤¿¡¼¤°¤ó #JN Ž·ŽÞŽºŽ½ŽÀŽ°·³
++¤®¤³¤¹¤¿¡¼¤°¤ó #JN ŽÓŽÅŽ°ŽÑŽ°ŽÝ·³
++¤®¤³¤»¤ó¤È¤¦¤¤¤ó #JN ¥®¥³ÀïÆ®°÷
++¤®¤³¤¿¤¯ #JN ¥®¥³¥¿¥¯
++¤®¤³¤¿¤Þ¤³ #JN µ¼¸Å¶Ì»Ò
++¤®¤³¤Á¤ã¤ó¤â¤Ê¤Á¤ã¤ó #JN ¥®¥³¤Á¤ã¤ó¥â¥Ê¤Á¤ã¤ó
++¤®¤³¤Á¤å¤¦ #JN ¥®¥³¥Á¥å¥¦
++¤®¤³¤Á¤å¤¦ #JN ¥®¥³¿ß
++¤®¤³¤Ä¤ê¡¼ #JN ¥®¥³¥Ä¥ê¡¼
++¤®¤³¤Æ¤ó¤ª¤ª¤®¤ê #JN ¥®¥³ÅÀ¡¡Âç´îÍø¡¡
++¤®¤³¤Ê¤Ó #KK ¥®¥³¥Ê¥Ó
++¤®¤³¤Ê¤Ó #T35 ¥®¥³¥Ê¥Ó
++¤®¤³¤Í¤³ #JN ¥®¥³¥Í¥³
++¤®¤³¤Í¤³ #JN ¥®¥³Ç­
++¤®¤³¤Í¤³ #JN ¥®¥³Ç­¡¡
++¤®¤³¤Í¤³ #T35 ¥®¥³Ç­
++¤®¤³¤Í¤³¤ê¤ç¤À¤ó¤¢¤Ã¤È¤À¤ó¤Á¤ç¡¼ #JN ¥®¥³Ç­Î¹ÃÄ¡÷ÃÄĹ
++¤®¤³¤Î¤»¤ó¤¾ #JN ¥®¥³¤ÎÀèÁÄ
++¤®¤³¤Ï¤Á #JN ¥®¥³È­
++¤®¤³¤Ï¤Ë¤ã¡¼¤ó #CJ ¥®¥³¥Ï¥Ë¥ã¡¼¥ó
++¤®¤³¤Ï¤Ë¤ã¡¼¤ó #JN ¥®¥³¥Ï¥Ë¥ã¡¼¥ó
++¤®¤³¤Ï¤Ï¤Ï #CJ ¥®¥³¥Ï¥Ï¥Ï
++¤®¤³¤Ñ¤í #JN ¥®¥³¥Ñ¥í
++¤®¤³¤Ñ¤í #KK ¥®¥³¥Ñ¥í
++¤®¤³¤Ñ¤í #T35 ¥®¥³¥Ñ¥í
++¤®¤³¤Õ¤¦¤Õ #JN µ¼¸ÅÉ×ÉØ
++¤®¤³¤Õ¤µ¤ê¤ª¤ë¤·¤ç¤¦¤°¤ó #JN ¥®¥³¡¦¥Õ¥µ¥ê¥ª¥ë¾­·³
++¤®¤³¤Ù¡¼¤À¡¼ #JN ¥®¥³¥Ù¡¼¥À¡¼
++¤®¤³¤Ú #KK ¥®¥³¥Ú
++¤®¤³¤Ú #T35 ¥®¥³¥Ú
++¤®¤³¤Þ¤ë¤µ¤ó¤¢¤¤¤¨¤¹ #JN G503is
++¤®¤³¤ß #JN ¥®¥³¥ß
++¤®¤´¤Á¤ã¤ó¤â¤Ê¤Á¤ã¤ó #JN ¥®¥³¤Á¤ã¤ó¥â¥Ê¤Á¤ã¤ó
++¤®¤¸¤ó¤«¤£¤ç¤¥ #JN µ¼¿Í²½¤£¤ç¤¥
++¤®¤¸¤ó¤«¤¸¤µ¤¯¤¸¤¨¤ó #JN µ¼¿Í²½¥¸¥µ¥¯¥¸¥¨¥ó
++¤®¤¸¤ó¤«¤â¤é¤é¡¼ #JN µ¼¿Í²½¥â¥é¥é¡¼
++¤®¤Ã¤³¤·¤§¤ë¤Õ #KK ¥®¥Ã¥³¥·¥§¥ë¥Õ
++¤®¤Ã¤³¤ê #CJ ¥®¥Ã¥³¥ê
++¤®¤Î¤³ #JN ¥®¥Î¥³
++¤®¤Î¤³ #JN ¥®¥Î¥³
++¤®¤ã¤¯¤®¤ì¤ß¤º¤«¤±¤â¤Ê¡¼ #JN µÕ¥®¥ì¿å³Ý¤±¥â¥Ê¡¼
++¤®¤ã¤¯¤®¤ì¤ß¤º¤«¤±¤â¤Ê¡¼¤Ñ¡¼¤Õ¤§¤¯¤È¤Ð¤ó #JN µÕ¥®¥ì¿å³Ý¤±¥â¥Ê¡¼¥Ñ¡¼¥Õ¥§¥¯¥ÈÈÇ
++¤®¤ã¤¯¤µ¤Ä¤Á¤å¤¦ #T35 µÔ»¦¿ß
++¤®¤ã¤¯¤µ¤Ä¤Á¤ó #T35 µÔ»¦ÄÁ
++¤®¤ã¤¯¤¿¤¤¤®¤ã¤¯¤µ¤Ä¤¢¤¹¤­¤¤¤¢¤¢¤È #T35 µÔÂÔ¡¦µÔ»¦AA
++¤®¤ã¤¯¤¿¤¤¤·¤ç¤¯¤Ë¤ó #T35 µÔÂÔ¿¦¿Í
++¤®¤ã¤¯¤¿¤¤¤¹¤ì #T35 µÔÂÔ¥¹¥ì
++¤®¤ã¤¯¤Ï¤Ä¤É¤¦ #T30 µÕȯư
++¤®¤ã¤ó #JN ¥®¥ã¥ó
++¤®¤ç¤¯¤ä¤í¤¦ #T35 ¥®¥ç¥¯ÌîϺ
++¤®¤ë¤¡¤â¤Ê #JN ¥®¥ë¥¡¥â¥Ê
++¤®¤ë¤Ë¤ã¡¼¤Î #JN ¥®¥ë¥Ë¥ã¡Á¥Î
++¤®¤í¤ó¤«¤ó¤½¤¦¤¹¤ì¤Ã¤É #T35 µÄÏÀ¡¦´¶ÁÛ¥¹¥ì¥Ã¥É
++¤®¤í¤ó¤¹¤­¡¼ #T35 ¥®¥í¥ó¥¹¥­¡¼
++¤®¤í¤ó¤¹¤­¤¤ #T35 ¥®¥í¥ó¥¹¥­¡¼
++¤®¤ó¤¨¤ó¤Þ¤ó¤»¤¨ #T35 ¶ä±öËüºÐ
++¤¯¤¤¤º¤ß¤ê¤â¤Í¤¢ #JN ¡ð¡ð¡ð¡ð¥¯¥¤¥º¡¦¥ß¥ê¥â¥Í¥¢¡ð¡ð¡ð¡ð
++¤¯¤¦¤­ #T35 ¶õµ¤
++¤¯¤¦¤­¤³¤Æ¤¤ #T35 ¶õµ¤¸ÇÄê
++¤¯¤¦¤­¤è¤á¤Æ¤Í¡¼¤è #JN ¥¯¥¦¥­¥è¥á¥Æ¥Í¡¼¥è
++¤¯¤¦¤¸¤ç¤¦¤â¤Ê¤¿¤í¤¦ #JN ¶õ¾ò¥â¥ÊÂÀϺ
++¤¯¤¦¤¸¤ç¤¦¤â¤Ê¤ê¡¼¤ó #JN ¶õ¾ò¥â¥Ê¥ê¡¼¥ó
++¤¯¤¦¤Æ¤¤¤â¤Ê¡¼ #JN ¶õÄò¥â¥Ê¡¼
++¤¯¤ª¤© #CJ ¤¯¤ª¤©
++¤¯¤µ #T35 ¥¯¥µ
++¤¯¤µ #T35 Áð
++¤¯¤µ¡¼ #JN ¡ÊŽß§×Žß¡ËŽ¸Ž»Ž°
++¤¯¤µ¡¼ #JN ¥¯¥µ¡¼
++¤¯¤µ¡¼ #JN Ž¸Ž»Ž°
++¤¯¤µ¤¤¤¿¤Þ #T35 ¥¯¥µ¥¤¥¿¥Þ
++¤¯¤µ¤Á¤å¡¼¤´ #KK ¥¯¥µ¥Á¥å¡¼¸ì
++¤¯¤µ¤Á¤å¡¼¤´ #T35 ¥¯¥µ¥Á¥å¡¼¸ì
++¤¯¤µ¤Á¤å¤¦¤´ #T35 ¥¯¥µ¥Á¥å¡¼¸ì
++¤¯¤· #T35 ¶ú
++¤¯¤·¤¶¤·¤ª¤Í¤¨¤µ¤ó #JN ¶ú»É¤·¤ª»Ð¤µ¤ó
++¤¯¤»¤¤¤¸¤¤¤¤¤Á¤¾¤¯ #T35 ¥¯¥»¥¤¥¸¡¼°ì²
++¤¯¤½¤²¡¼¤â¤Ê¡¼ #JN ¥¯¥½¥²¡¼¥â¥Ê¡¼
++¤¯¤½¤³¤Æ #T35 ʵ¥³¥Æ
++¤¯¤½¤µ¤ó¤Ó¤ã¤¯¤È¤ó #JN KuSo300t
++¤¯¤½¤¹¤ì #T35 ¥¯¥½¥¹¥ì
++¤¯¤½¤¹¤ì #T35 ʵ¥¹¥ì
++¤¯¤½¤¹¤ì¤ª¤È¤³ #JN ¥¯¥½¥¹¥ìÃË
++¤¯¤½¤¹¤ì¤«¤¤¤·¤å¤¦¤®¤ç¤¦¤·¤ã #JN ʵ¥¹¥ì²ó¼ý¶È¼Ô
++¤¯¤½¤¹¤ì¤±¤ó¤»¤Ä¤¤¤¤¤ó¤«¤¤ #T35 ʵ¥¹¥ì·úÀß°Ñ°÷²ñ
++¤¯¤½¤¹¤ì¤·¤¹¤¦¤Û¤¦¤³¤¯¤¤¤¤¤ó¤«¤¤ #JN ʵ¥¹¥ì»Ø¿ôÊó¹ð°Ñ°÷²ñ
++¤¯¤½¤¹¤ì¤·¤ó #JN ¥¯¥½¥¹¥ì¿À
++¤¯¤½¤¹¤ì¤Ï #JN ʵ¥¹¥ì¤ÏΩ¤Æ¤ó¤Ê¤Ã¤Æ¸À¤Ã¤¿¤í¤¦¤¬¥ô¥©¥±¤¬¡¼¡¼¡ª
++¤¯¤½¤¹¤ì¤â¤Ê¡¼ #JN ¥¯¥½¥¹¥ì¥â¥Ê¡¼
++¤¯¤½¤¹¤ì¤ï¤Ã¤·¤ç¤¤ #JN ¥¯¥½¥¹¥ì¥ï¥Ã¥·¥ç¥¤
++¤¯¤½¤Á¤å¤¦¤Ü¤¦¤Ç¤ó¤Ñ¤À¤³¤ê¤ã #JN ʵ¿ß˼ÅÅÇȤÀ¤³¤ê¤ã¡ª
++¤¯¤½¤Ç¤«¤¤¤¢¤¹¤­¡¼¤¢¡¼¤È #JN ʵ¤Ç¤«¤¤£Á£Á
++¤¯¤½¤Ð¤³ #T35 ʵȢ
++¤¯¤½¤Ü¤Ã¤¯¤¹ #T35 ʵ¥Ü¥Ã¥¯¥¹
++¤¯¤½¤ê¤×¤È #T35 ¥¯¥½¥ê¥×¥È
++¤¯¤½¤ì¤¹ #T30 ʵ¥ì¥¹
++¤¯¤½¤ì¤¹ #T35 ʵ¥ì¥¹
++¤¯¤À¤·¤Ä #T35 ¤¯¤À¼Á
++¤¯¤À¤é¤Ê¤¤¤·¤Ä¤â¤ó #T35 ¤¯¤À¤é¤Ê¤¤¼ÁÌä
++¤¯¤À¤é¤Ê¤¤¤·¤Ä¤â¤ó¤¹¤ì #T35 ¤¯¤À¤é¤Ê¤¤¼ÁÌ䥹¥ì
++¤¯¤À¤é¤Í¡¼¤è #JN ¥¯¥À¥é¥Í¡¼¥è
++¤¯¤Á¤¯¤Á #T35 ¸ý¸ý
++¤¯¤Á¤Ó¤ë¤² #T35 ¥¯¥Á¥Ó¥ë¥²
++¤¯¤Ã¤­¡¼ #T35 ¥¯¥Ã¥­¡¼
++¤¯¤Ã¤­¤¤ #T35 ¥¯¥Ã¥­¡¼
++¤¯¤Ã¤¯¤ë¤É¤¥¤É¤¥¤É¤¥ #JN Ž¸Ž¯Ž¸ŽÙŽÄŽÞŽ©ŽÄŽÞŽ©ŽÄŽÞŽ©
++¤¯¤É¤¦¤â¤Ê #JN ¹©Æ£¥â¥Ê
++¤¯¤Ë¤ª #JNM ¥¯¥Ë¥ò
++¤¯¤Ë¤ª #T35 ¥¯¥Ë¥ò
++¤¯¤Ë¤ª¤¯¤ó¤¯¤í¤¹¤«¤ó¤È¤ê¡¼¤Ø¤ó #JN ¤¯¤Ë¤ª¤¯¤ó¥¯¥í¥¹¥«¥ó¥È¥ê¡¼ÊÔ¡¡
++¤¯¤Ë¤µ¤ï¤Í¤Ã¤È¤Ë¤¤¤± #CJ kunisawa.net¤ËÀ¤±
++¤¯¤Ó¤Ä¤ê¤®¤³ #JN ¼óÄߤꥮ¥³
++¤¯¤Þ¤µ¤ó¤³¤ª¤¹ #T35 ¤¯¤Þ¤µ¤ó¥³¡¼¥¹
++¤¯¤á¡¼¤ë #T35 ·©¡¼¥ë
++¤¯¤á¤¨¤ë #T35 ·©¡¼¥ë
++¤¯¤á¤â¤Ê¡¼ #JN ·©¥â¥Ê¡¼
++¤¯¤é #T35 ÁÒ
++¤¯¤é #T35 ¢
++¤¯¤é¤¤¤¿ #T35 ¥¯¥éÈÄ
++¤¯¤é¤¨¤Ï¤¤¤Ö¤ê¤¹ #JN ¤¯¤é¤¨¥Ï¥¤¥Ö¥ê¥¹
++¤¯¤é¤¯ #T30 ¥¯¥é¥¯
++¤¯¤é¤² #T35 ¥¯¥é¥²
++¤¯¤é¤² #T35 ³¤·î
++¤¯¤é¤Ã¤«¡¼ #T35 ¥¯¥é¥Ã¥«¡¼
++¤¯¤é¤Ã¤«¤¢ #T35 ¥¯¥é¥Ã¥«¡¼
++¤¯¤é¤Ã¤¯ #T30 ¥¯¥é¥Ã¥¯
++¤¯¤é¤é¤¬¤¿¤Ã¤¿ #JN ¥¯¥é¥é¤¬Î©¤Ã¤¿
++¤¯¤é¤ò¤¿ #T35 ¥¯¥é¥ò¥¿
++¤¯¤ê¡¼¤ó¤Ò¤Ã¤È #T30 ¥¯¥ê¡¼¥ó¥Ò¥Ã¥È
++¤¯¤ê¤³ #JN ¤¯¤ê»Ò
++¤¯¤ê¤Á¤å¤¦ #T35 ·ª¿ß
++¤¯¤ì¤¢¤é¤·¤ë #KK ¥¯¥ì¥¢¥é¥·¥ë
++¤¯¤ì¤¤¤¸¤¤¤´¤¦¤¹¤È #T35 ¥¯¥ì¥¤¥¸¡¼¥´¡¼¥¹¥È
++¤¯¤ì¤¯¤ì¤¯¤ó #T35 ¤¯¤ì¤¯¤ì·¯
++¤¯¤ì¤¯¤ì¤Á¤å¤¦¤Ü¤¦¤Ü¤¯¤á¤Ä¤¹¤¤¤·¤ó¤¤¤¤¤ó¤«¤¤ #JN ¤¯¤ì¤¯¤ì¿ß˼ËÐÌÇ¿ä¿Ê°Ñ°÷²ñ
++¤¯¤í¤·¤ç¤¦¤¾¤¯ #T35 ¹õÁõ«
++¤¯¤í¤·¤ç¤¦¤¾¤¯¤ª¤Õ #T35 ¹õÁõ«OFF
++¤¯¤í¤Þ¤é¤é¡¼ #JN ¹õ¥Þ¥é¥é¡¼
++¤¯¤í¤ß¤ß¤â¤Ê¡¼ #JN ¹õ¼ª¥â¥Ê¡¼
++¤¯¤í¤à¤Ä #T35 ¹õ¥à¥Ä
++¤¯¤ï¤é #CJ ¥¯¥ï¥é
++¤¯¤ï¤é #CJ Ž¸ŽÜŽ×
++¤° #T35 ¶ñ
++¤°¤¢¤ï¤» #T35 ¶ñ¹ç¤ï¤»
++¤°¤Ã¤¸¤ç¤Ö #CJ ¥°¥Ã¥¸¥ç¥Ö
++¤°¤Ã¤¸¤ç¤Ö #CJ Ž¸ŽÞŽ¯Ž¼ŽÞŽ®ŽÌŽÞ
++¤°¤Ã¤É¤Õ¤£¤¤¤ê¤ó¤° #CJ ¥°¥Ã¥É¥Õ¥£¡¼¥ê¥ó¥°
++¤°¤â¤Ã¤Á¤å¤¤¤¤¤ó #T35 ¥°¥â¥Ã¥Á¥å¥¤¡¼¥ó
++¤°¤ê¡¼¤ó #T35 ¥°¥ê¡¼¥½
++¤°¤ê¡¼¤ó #T35 ¥°¥ê¡¼¥ó
++¤°¤ê¤¤¤ó¤Í¤¨¤µ¤ó #T35 ¥°¥ê¡¼¥ó°¹¤µ¤ó
++¤°¤ê¤¤¤ó¤Í¤¨¤µ¤ó #T35 ¥°¥ê¡¼¥ó»Ð¤µ¤ó
++¤°¤ì¡¼¤È¤¬¤ó¤Ð¤ë¤â¤Ê¡¼ #JN ¥°¥ì¡¼¥È¥¬¥ó¥Ð¥ë¥â¥Ê¡¼
++¤°¤ì¤Á¤ã¤ó #JN ¥°¥ì¤Á¤ã¤ó
++¤°¤í #T35 ¥°¥í
++¤°¤ó¤È¤¦¤®¤³ #JN ·³Å᥮¥³
++¤°¤ó¤Þ¤±¤ó #CN ·²Çϸ©
++¤±¡¼ #T35 £Ë
++¤±¡¼¤­¤ä¤Ý¤ó¤É #JN ¥±¡¼¥­²°¡ò
++¤±¤¤¤ª¤¦ #T35 KO
++¤±¤¤¤­¤å¤¦ #T35 KQ
++¤±¤¤¤³¤¯¤Ö¤ó #T35 ·Ù¹ðʸ
++¤±¤¤¤·¤Á¤ç¤¦ #JN ·Ù»ëÄ£
++¤±¤¤¤¸¤Ð¤ó #T35 ·Ç¼¨ÈÄ
++¤±¤¤¤¸¤Ð¤ó¤¤¤Á¤é¤ó #T35 ·Ç¼¨ÈÄ°ìÍ÷
++¤±¤¤¤¸¤Ð¤ó¤È¤Ã¤×¤Ø #CJ ·Ç¼¨ÈĥȥåפØ
++¤±¤¤¤¿¤¤¤Ç¤ó¤ï¤â¤Ê¡¼ #JN ·ÈÂÓÅÅÏÃ¥â¥Ê¡¼
++¤±¤¬¤Ë #JN ÌÓ¤¬¤Ë
++¤±¤³¡¼¤ó #T30 ¥±¥³¡¼¥ó
++¤±¤³¡¼¤ó #T30 Ž¹ŽºŽ°ŽÝ
++¤±¤Ã¤³¤ó #T30 ·ëº§
++¤±¤Ã¤Ú¤­ #T35 ·éÊÊ
++¤±¤Ã¤Ú¤­¤¯¤ó #T35 ·éÊÊ·¯
++¤±¤Ä¤¬¤ó #T35 ÊÇ´ä
++¤±¤Ä¤² #T35 ¤±¤ÄÌÓ
++¤±¤Æ¤ë #CJ ¤±¤Æ¤ë
++¤±¤í¤Ô¡¼ #JN ¥±¥í¤Ô¡¼
++¤±¤í¤ê¤ó¤²¤ë¤Ó¤È¤¦ #T35 ¥±¥í¥ê¥ó¥²¥ëÈøÆ£
++¤±¤ó #JNM ¤±¤ó
++¤±¤ó¤«¤Ï¤ä¤á¤Æ #JN ¤±¤ó¤«¤Ï¤ä¤á¤Æ¡Ê¡ü¡­¡¼¡®¡ü¡Ë
++¤±¤ó¤«¤ó¤Á¤å¤¦ #T35 ·ù´Ú¿ß
++¤±¤ó¤±¤ó¤«¤ó¤Á¤å¤¦ #T35 ·ù·ù´Ú¿ß
++¤²¡¼¤Ï¡¼¤¤¤¿ #CN ¥²¡¼¥Ï¡¼ÈÄ
++¤²¤­¤¦¤é¤¸¤ç¤¦¤Û¤¦ #T35 ·ã΢¾ðÊó
++¤²¤­¤¸¤ç¤¦ #T35 ·à¾ì
++¤²¤¹¤È¤²¤¹¤È #CJ guestguest
++¤²¤½¤ª¤½ #T35 ¥²¥½¥ª¥½
++¤²¤½¤ª¤½ #T35 Ž¹ŽÞŽ¿ŽµŽ¿
++¤²¤Ã¤³¤¦ #T35 ·î¸÷
++¤²¤Ã¤¿¡¼¤â¤Ê¤Þ¤Þ #JN ¥²¥Ã¥¿¡¼¥â¥Ê¥Þ¥Þ
++¤²¤Ã¤Ä #T35 ¥²¥Ã¥Ä
++¤²¤Ã¤×¡¼ #JN ¥²¥Ã¥×¡¼
++¤²¤É¤¦¤»¤ó¤»¤¤ #JN ³°Æ»ÀèÀ¸
++¤²¤é #JN ¥²¥é
++¤²¤é #JN ¥²¥é¥é¡¼
++¤²¤é¤é¡¼ #JN ¥²¥é
++¤²¤é¤é¡¼ #JN ¥²¥é¥é¡¼
++¤²¤í¤¤¤¿ #CN ¥²¥íÈÄ
++¤²¤í¤¤¤¿ #T35 ¥²¥íÈÄ
++¤²¤í¤â¤Ê¡¼ #JN ¥²¥í¥â¥Ê¡¼
++¤²¤ó¤ª¤ó #T35 ¥²¥½¥ª¥½
++¤²¤ó¤ª¤ó #T35 Ž¹ŽÞŽ¿ŽµŽ¿
++¤²¤ó¤·¤ª¤¦ #JN ¸¶»Ò²¦
++¤²¤ó¤·¤Ð¤¯¤À¤ó #JN ¸¶»ÒÇúÃÆ
++¤²¤ó¤¸¤ó #T35 ¸¶¿Í
++¤³¡¼¤Û¡¼ #T35 ¥³¡¼¥Û¡¼
++¤³¡¼¤Û¡¼ #T35 ¹ªÊò
++¤³¡¼¤Û¡¼ #T35 ¹âÊò
++¤³¤¢¤ê #T35 »ÒµÂ
++¤³¤¤¤Á¤¸¤«¤ó¤È¤¤¤Ä¤á¤¿¤¤ #CJ ¾®°ì»þ´ÖÌ䤤¤Ä¤á¤¿¤¤
++¤³¤¦¡«¤¡ #T35 ¥³¥ô¥¡
++¤³¤¦¡«¤¡¤¤¤¿ #CN ¥³¥ô¥¡ÈÄ
++¤³¤¦¡«¤¡¤¤¤¿ #T35 ¥³¥ô¥¡ÈÄ
++¤³¤¦¤¨¤¤¤Ø¤¤ #JN ¹È±Òʼ
++¤³¤¦¤«¤¤¤·¤ç¤±¤¤ #T35 ¸ø³«½è·º
++¤³¤¦¤«¤ó¤Á¤å¤¦ #T35 ¹¥´Ú¿ß
++¤³¤¦¤°¤· #T35 ¹©¶ñ»Õ
++¤³¤¦¤°¤· #T35 ¹á¶ñ»Õ
++¤³¤¦¤³¤¯¤Á¤å¤¦¤Ü¤¦ #T35 ¹­¹ð¿ß˼
++¤³¤¦¤³¤¯¤è¤± #T35 ¹­¹ð½ü¤±
++¤³¤¦¤µ¤¯¤¤¤ó #T35 ¹©ºî°÷
++¤³¤¦¤·¤­¤»¤Ã¤Æ¤¤ #T35 ¸ø¼°ÀßÄê
++¤³¤¦¤¿¤¤¤·¤µ¤Þ #JN ¹ÄÂÀ»ÒÍÍ
++¤³¤¦¤À¤ó¤®¤³ #JN ¹ÖÃ̵¼¸Å
++¤³¤¦¤Á¤ç¤¦¤· #T35 ¤³¤¦¤Á¤ç¤¦¤·
++¤³¤¦¤Ä¤¦¤¤¤Ï¤ó¤Î¤â¤ß¤±¤·¤«¤¿ #KK ¸òÄÌ°ãÈ¿¤ÎÙæ¤ß¾Ã¤·Êý
++¤³¤¦¤Ê¤Ã¤Æ¤ë¤Ï¤º¤¬¤³¤¦¤Ê¤Ã¤Æ¤ë¤ó¤Ç¤¹ #CJ ¤³¤¦¤Ê¤Ã¤Æ¤ë¤Ï¤º¤¬¡¢¤³¤¦¤Ê¤Ã¤Æ¤ë¤ó¤Ç¤¹¡£
++¤³¤¦¤Î¤è¤¦¤Ø¤¤ #JN ¹¾¤ÎÍÃʼ
++¤³¤¦¤Î¤è¤¦¤Ø¤¤ #T35 ¹¾¤ÎÍÃʼ
++¤³¤¦¤Ð¤· #KY ¹á¤Ð¤·
++¤³¤¦¤Ð¤· #KYmi ¹á¤Ð¤·
++¤³¤¦¤Ù #KK ¼ó
++¤³¤¦¤Ù #T35 ¼ó
++¤³¤¦¤Û¤¦ #T35 ¥³¡¼¥Û¡¼
++¤³¤¦¤Û¤¦ #T35 ¹ªÊò
++¤³¤¦¤Û¤¦ #T35 ¹âÊò
++¤³¤¦¤Ü¤¦ #T35 ¹©Ë¼
++¤³¤¦¤â¤ê¤â¤Ê¡¼ #JN ¥³¥¦¥â¥ê¥â¥Ê¡¼
++¤³¤¦¤â¤ó¤¤¤Ã¤Æ¤è¤· #CJ æêÌçÀ¤äƤ褷
++¤³¤¦¤ê¤Ä¤Á¤å¤¦ #T35 ¸øΩÃî
++¤³¤¦¤ê¤ó #T30 ¸÷Î×
++¤³¤¦¤ê¤ó #T30 ¹ßÎ×
++¤³¤¯¤ê¤Ä¤¨¤­¤Ù¤ó¤«¤Ö #T35 ¹ñΩ±ØÊۡʳô¡Ë
++¤³¤¯¤ê¤Ä¤Ï¤¦¤Ä¤¯¤·¤¤¤·¤ê¤Ä¤Ï¤ß¤Ë¤¯¤¤ #CJ ¹ñΩ¤ÏÈþ¤·¤¤¡¢¿¬ÄŤϽ¹¤¤
++¤³¤¯¤ì¤ó¤Ê¤Ê¤·¤µ¤ó #T35 ¹ñÏ¢¤ÊÀ®¤·¤µ¤ó
++¤³¤³¤Ç¤¢¤² #CJ ¤³¤³¤Ç¤¢¤²
++¤³¤³¤Ï¤´¤¸¤ã¡¼¤¹¤Ê¤¹¤ì¤Ã¤É¤À¤è #JN (¡¦¢Ï¡¦)ŽºŽºŽÊŽºŽÞŽ¼ŽÞŽ¬Ž°Ž½ŽÅŽ½ŽÚŽ¯ŽÄŽÞŽÀŽÞŽÖ
++¤³¤³¤Ï¤´¤¸¤ã¡¼¤¹¤Ê¤¹¤ì¤Ã¤É¤À¤è #JN ¥³¥³¥Ï¥´¥¸¥ã¡¼¥¹¥Ê¥¹¥ì¥Ã¥É¥À¥è
++¤³¤³¤Ï¤´¤¸¤ã¡¼¤¹¤Ê¤¹¤ì¤Ã¤É¤À¤è #JN ŽºŽºŽÊŽºŽÞŽ¼ŽÞŽ¬Ž°Ž½ŽÅŽ½ŽÚŽ¯ŽÄŽÞŽÀŽÞŽÖ
++¤³¤³¤Ï¤É¤³¤¸¤ã #JN ¤³¤³¤Ï¤É¤³¤¸¤ã
++¤³¤³¤Ï¤É¤³¤¸¤ã #JN ¥³¥³¥Ï¥É¥³¥¸¥ã
++¤³¤³¤Ï¤É¤³¤¸¤ã #JN ŽºŽºŽÊŽÄŽÞŽºŽ¼ŽÞŽ¬
++¤³¤³¤Ï¤Ò¤É¤¤¤¤¤ó¤¿¤¢¤Í¤Ã¤È¤Ç¤¹¤Í #CJ ¤³¤³¤Ï¤Ò¤É¤¤¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ç¤¹¤Í
++¤³¤³¤Ï¤ï¤»¤À¤¸¤ã¤Ê¤¤¤è #CJ ¤³¤³¤ÏÁá°ðÅĤ¸¤ã¤Ê¤¤¤è
++¤³¤³¤Ï¤ï¤ë¤¤¤¤¤ó¤¿¤¢¤Í¤Ã¤È¤Ç¤¹¤Í #CJ ¤³¤³¤Ï°­¤¤¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ç¤¹¤Í
++¤³¤³¤Þ¤Ç¤è¤ó¤À #CJ --------¤³¤³¤Þ¤ÇÆɤó¤À-------
++¤³¤·¤ª #T35 ¾®±ö
++¤³¤·¤Ì¤± #KK ¹øÈ´¤±
++¤³¤·¤Ì¤± #T35 ¹øÈ´¤±
++¤³¤¸¤­¤â¤Ê¡¼ #JN ¸ð¿©¥â¥Ê¡¼
++¤³¤¹¤×¤ì¤Æ¤ó #T35 ¥³¥¹¥×¥ìŹ
++¤³¤¾¤¦ #JN ¾®ÁÎ
++¤³¤¾¤¦ #T35 ¾®ÁÎ
++¤³¤Ã¤¯¤â¤é¤é¡¼ #JN ¥³¥Ã¥¯¥â¥é¥é¡¼
++¤³¤Ã¤½¤ê¤µ¤ó #JN ¤³¤Ã¤½¤ê¤µ¤ó
++¤³¤Æ #T35 ¥³¥Æ
++¤³¤Æ¤¤ #T35 ¸ÇÄê
++¤³¤Æ¤¤¤¿¤¿¤­ #T30 ¸ÇÄê᤭
++¤³¤Æ¤¤¤Ï¤ó¤É¤ë #T35 ¸ÇÄê¥Ï¥ó¥É¥ë
++¤³¤Æ¤¤¤Ï¤ó¤É¤ë¤¹¤ì¤Ã¤É #T35 ¸ÇÄê¥Ï¥ó¥É¥ë¥¹¥ì¥Ã¥É
++¤³¤Æ¤¤¤Õ¤¡¤ó #T35 ¸ÇÄê¥Õ¥¡¥ó
++¤³¤Æ¤Ï¤ó #T35 ¥³¥Æ¥Ï¥ó
++¤³¤Æ¤Ï¤ó¤«¡¼¤Ë¤Ð¤ë #T35 ¥³¥Æ¥Ï¥ó¥«¡¼¥Ë¥Ð¥ë
++¤³¤Æ¤Ï¤ó¤«¤¢¤Ë¤Ð¤ë #T35 ¥³¥Æ¥Ï¥ó¥«¡¼¥Ë¥Ð¥ë
++¤³¤Æ¤Ï¤ó¤¹¤ì¤Ã¤É #T35 ¥³¥Æ¥Ï¥ó¥¹¥ì¥Ã¥É
++¤³¤É¤â¤Ê¡¼ #JN ¤³¤É¥â¥Ê¡¼
++¤³¤Ê¤· #T35 »ÒÍü
++¤³¤Ë¡¼ #T35 ¥³¥Ë¡¼
++¤³¤Ë¤¤ #T35 ¥³¥Ë¡¼
++¤³¤Î¤¦¤Ã¤¿¤¨¤Ï¤Þ¤¤¤Ë¤Á¤·¤Æ¤¤¤¯¤Ä¤â¤ê¤Ç¤¹ #CJ ¤³¤ÎÁʤ¨¤ÏËèÆü¤·¤Æ¤¤¤¯¤Ä¤â¤ê¤Ç¤¹
++¤³¤Î¤¹¤ì¤Ï¤¨¤í¤¤¤Ê #CJ ¤³¤Î¥¹¥ì¤Ï¥¨¥í¤¤¤Ê
++¤³¤Î¤¿¤³ #JN ¤³¤Î¥¿Žº
++¤³¤Î¤ä¤í¤¦ #CJ ¤³¤ÎÌîϺ¡ª
++¤³¤Ô¤Ú #T30 ¥³¥Ô¥Ú
++¤³¤Ô¤Ú¤¢¤é¤· #T35 ¥³¥Ô¥Ú¹Ó¤é¤·
++¤³¤Ô¤Ú¤¦¤¶ #KYT ¥³¥Ô¥Ú¤¦¤¶
++¤³¤Ô¤Ú¤Á¤å¤¦ #T35 ¥³¥Ô¥Ú¿ß
++¤³¤Ô¤Ú¤Ï¤«¤Á¤å¡¼¤·¤ã¤Ç¤¢¤Ü¡¼¤ó¤À¤è #JN ¤³¤Ô¤Ú¤Ï¤«¤Á¤å¡Á¤·¤ã¤Ç¤¢¤Ü¡Á¤ó¤À¤è
++¤³¤Ü¤æ¤­¡¼ #JN ¡ÊŽÒ¡¦¤ó¡¦¡Ë
++¤³¤Ü¤æ¤­¡¼ #JN ¥³¥Ü¥æ¥­¡¼
++¤³¤Þ¤Ä¤Ð¤é¤³¤¦¤³¤¦ #KK ¾®¾¾¸¶¹â¹»
++¤³¤Þ¤Ä¤Ð¤é¤³¤¦¤³¤¦ #T35 ¾®¾¾¸¶¹â¹»
++¤³¤Þ¤ë #JN ¥³¥Þ¥ë
++¤³¤ß¤± #KK ¥³¥ß¥±
++¤³¤ß¤Ñ #KK ¤³¤ß¥Ñ
++¤³¤ß¤Ñ #T35 ¤³¤ß¥Ñ
++¤³¤ß¤ß¤â¤Ê¡¼ #JN ¾®¼ª¥â¥Ê¡¼
++¤³¤á #T35 ¢¨
++¤³¤á¤·¤ª #KK ÊƱö
++¤³¤á¤·¤ª #T35 ÊƱö
++¤³¤á¤¸¤ª #KK ÊƱö
++¤³¤á¤¸¤ª #T35 ÊƱö
++¤³¤é #RT ¥³¥é
++¤³¤é #T35 ¥³¥é
++¤³¤ê¤ã¤Þ¡¼ #CN ¥³¥ê¥ã¥Þ¡¼
++¤³¤ê¤ã¤Þ¡¼ #T35 ¥³¥ê¥ã¥Þ¡¼
++¤³¤ê¤ã¤Þ¤¢ #T35 ¥³¥ê¥ã¥Þ¡¼
++¤³¤ê¤ó¤º #JN ¥³¥ê¥ó¥º
++¤³¤ê¤ó¤º¤¢¤é¤· #JN ¥³¥ê¥ó¥º¹Ó¤é¤·¡¡
++¤³¤ê¤ó¤º¤­¤é¡¼ #JN ¥³¥ê¥ó¥º¥­¥é¡¼
++¤³¤ê¤ó¤º¤À¡¼¤¯ #JN ¥³¥ê¥ó¥º¥À¡¼¥¯
++¤³¤ì¤ª¤â¤í¤¤ #CJ ¤³¤ì¤ª¤â¤í¤¤¡ª
++¤³¤ì¤Ï¤·¤å¤¦¤»¤¤¤µ¤ì¤ë¤Í #CJ ¤³¤ì¤Ï½¤À°¤µ¤ì¤ë¤Íwwww
++¤³¤í¤Ã¤± #T35 ¥³¥í¥Ã¥±
++¤³¤í¤Ã¤±¤µ¤¤ #T35 ¥³¥í¥Ã¥±º×
++¤³¤í¤Ã¤±¤ï¤Ã¤·¤ç¤¤ #JN ¥³¥í¥Ã¥±¥ï¥Ã¥·¥ç¥¤
++¤³¤í¤Ì #CJ ¥³¥í¥Ì
++¤³¤í¤Ì #CJ ¥³¥í¥Ì
++¤³¤í¤Ì #N5 ¥³¥í¥Ì
++¤³¤ï¤¤¤³¤ï¤¤¤Ò¡¼ #CJ ¥³¥ï¥¤¥³¥ï¥¤¥Ò¡¼
++¤³¤ó¤·¤å¤¦¤Î¤Ó¤Ã¤¯¤ê¤É¤Ã¤­¤ê¤¾¤Ì #JN º£½µ¤Î¥Ó¥Ã¥¯¥ê¥É¥Ã¥­¥ê¤¾¤Ì
++¤³¤ó¤É¡¼¤à¤Þ¤é¤é¡¼ #JN ¥³¥ó¥É¡¼¥à¥Þ¥é¥é¡¼
++¤³¤ó¤Î¤¦ #T35 º®Ç¾
++¤´¡¼ #KK ¥´¡¼
++¤´¡¼¤´¡¼¤Ë¡¼¤Ö¤ó¤·¤ç #T35 552ʸ½ñ
++¤´¡¼¤´¡¼¤Ë¡¼¤â¤ó¤¸¤ç #T35 552ʸ½ñ
++¤´¤¤¤ó¤­¤ç #T35 ¸æ±£µï
++¤´¤¦¤Á¤ó¤­¤ã¤é¤µ¤ó¤Ë¤ó¤°¤ß #JN ¹ìÄÀ¥­¥ã¥é»°¿ÍÁÈ
++¤´¤¦¤Á¤ó¤­¤ã¤é¤µ¤ó¤Ë¤ó¤°¤ß¤«¤Ã¤³¤À¤¤¤µ¤ó¤­¤È¤¸¤«¤Ã¤³ #JN ¹ìÄÀ¥­¥ã¥é»°¿ÍÁÈ¡ÊÂè»°´ü¡Ë
++¤´¤¦¤Á¤ó¤­¤ã¤é¤µ¤ó¤Ë¤ó¤°¤ß¤«¤Ã¤³¤À¤¤¤Ë¤­¤È¤¸¤«¤Ã¤³ #JN ¹ìÄÀ¥­¥ã¥é»°¿ÍÁÈ¡ÊÂèÆó´ü¡Ë
++¤´¤¦¤Ï¤é #JNS ¶ÈÊ¢
++¤´¤¦¤Ï¤é #T35 ¶ÈÊ¢
++¤´¤¦¤Ï¤é¤â¤Ê¡¼ #JN ¥´¡Ê°Ê²¼Î¬¡Ë¥â¥Ê¡¼
++¤´¤¦¤Þ¤ë¤µ¤ó¤é¤¦¤ó¤¸ #T35 503¥é¥¦¥ó¥¸
++¤´¤­¤Ö¤ê¤Ã¤Ä #JN ¥´¥­¥Ö¥ê¥Ã¥Ä
++¤´¤­¤Ö¤ê¤Ã¤Ä #KK ¥´¥­¥Ö¥ê¥Ã¥Ä
++¤´¤­¤Ö¤ê¤Ã¤Ä #T35 ¥´¥­¥Ö¥ê¥Ã¥Ä
++¤´¤­¤Ö¤ê¤è¤³¤Ï¤Þ¤¸¤ó #JN ¥´¥­¥Ö¥ê²£ÉÍ¿Í
++¤´¤­¤í¤ª #T35 ¥´¥­¥í¡¼
++¤´¤®¤³¤µ¡¼¤Æ¤£¡¼¤ó #JN ¥´¥®¥³£±£³
++¤´¤¯¤¦ #T35 ¸ç¶õ
++¤´¤¯¤Ö¤È¤Ð¤¤¤Ö¡¼ #T35 ¶ËÂÀ¥Ð¥¤¥Ö¡¼¡ª¡ª
++¤´¤µ¤ó¤± #T35 ¸æ»°²È
++¤´¤¸¤ã¡¼¤¹¤Þ¤é¤é¡¼ #JN ¥´¥¸¥ã¡¼¥¹¥Þ¥é¥é¡¼
++¤´¤¸¤ã¡¼¤¹¤â¤é¤é¡¼ #JN ¥´¥¸¥ã¡¼¥¹¥â¥é¥é¡¼
++¤´¤¹¤é #JN ¥´¥¹¥é
++¤´¤Ã¤É¤Ï¤ó¤É #T35 ¥´¥Ã¥É¥Ï¥ó¥É
++¤´¤Ë¤ã¤¢ #JN ¤´¤Ë¤ã¤¢
++¤´¤Ë¤ã¤¢ #JN ¥´¥Ë¥ã¥¢
++¤´¤Ð¤¯ #T35 ¸íÇú
++¤´¤Ð¤¯¤¢¤é¤· #T35 ¸íÇú¹Ó¤é¤·
++¤´¤Ð¤¯¤¹¤Þ¤½ #CJ ¸íÇú¥¹¥Þ¥½
++¤´¤Þ¤â¤É¤­ #JN ¥´¥Þ¤â¤É¤­
++¤´¤ß¤Ð¤³ #T35 ¥´¥ßÈ¢
++¤´¤ß¤ó #T35 ¤´¤ß¤ó
++¤´¤á¤½ #CJ ¥´¥á¥½
++¤´¤é¡¼ #JN ¥´¥é¡¼
++¤´¤é¤¡ #JN ¡ÔŽß§¥Žß¡ÕŽºŽÞŽ×Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž§Ž±!!!!!
++¤´¤é¤¡ #JN ¥´¥é¥¡
++¤´¤ê¤ç¤¦¤â¤¨ #T35 ¸æÎî˨
++¤´¤ë¤¡ #CJ (Žß§¥Žß)ŽºŽÞŽÙŽ§¡ª
++¤´¤ë¤¡ #CJ ¥´¥ë¥¡
++¤´¤ë¤¡ #CJ ¥´¥ë¥¡!
++¤´¤ë¤¡ #CJ ŽºŽÞŽÙŽ§¡ª
++¤´¤ë¤¡ #JN ¡³(*¡®§¥¡­)¥ÎŽºŽÞŽÙŽ§
++¤´¤ë¤¡ #JN (Žß§¥Žß)ŽºŽÞŽÙŽ§
++¤´¤ë¤¡ #JN ¥´¥ë¥¡
++¤´¤ë¤¡ #JN ŽºŽÞŽÙŽ§
++¤´¤ë¤¡ #T35 goluah!
++¤´¤ë¤¡¤È¤é¤Þ¤ó #JN ¥´¥ë¥¡¥È¥é¥Þ¥ó
++¤´¤ë¤¢ #CJ ¥´¥ë¥¡!
++¤´¤í¤í¤¦ #T35 ¥´¥í¥í¡¼
++¤µ¡¼¤Ð¤«¤ó¤·¤¸¤ç #T35 ¥µ¡¼¥Ð´Æ»ë½ê
++¤µ¡¼¤Ð¤À¤¤¤­¤ó #T35 ¥µ¡¼¥ÐÂå¶â
++¤µ¤¢¤¤¤³¤¦¤« #JN ¤µ¤¢¡Å¡¡À¤³¤¦¤«¡Å¡Å
++¤µ¤¢¤²¤¨¤à¤Î¤Ï¤¸¤Þ¤ê¤Ç¤¹ #CJ ¤µ¤¢¥²¡¼¥à¤Î»Ï¤Þ¤ê¤Ç¤¹
++¤µ¤¢¤µ¤¢¤ª¤­¤ã¤¯¤µ¤ó¤¬¤¯¤ë¤è #JN ¤µ¤¢¤µ¤¢¡¢¤ªµÒ¤µ¤ó¤¬Íè¤ë¤è!!!
++¤µ¤¢¤µ¤¢¤ª¤­¤ã¤¯¤µ¤ó¤¬¤¯¤ë¤è #JN ¤µ¤¢¤µ¤¢¡¢¤ªµÒ¤µ¤ó¤¬Íè¤ë¤è!!!
++¤µ¤¤¤³¤¦ #T35 ºÇ¹â
++¤µ¤¤¤³¤¦¤­¤ç¤¦ #T35 ºÇ¹â¶µ
++¤µ¤¤¤³¤¦¤¼¡¼¤è #JN ¥µ¥¤¥³¥¦¥¼¡¼¥è
++¤µ¤¤¤³¤Õ¤Ã¤µ¡¼¤ë #JN ¥µ¥¤¥³¡¦¥Õ¥Ã¥µ¡¼¥ë
++¤µ¤¤¤·¤ó¤ì¤¹ #T35 ºÇ¿·¥ì¥¹
++¤µ¤¤¤¼¤ó¤»¤ó¤¯¤ó #T35 ºÇÁ°Àþ·¯
++¤µ¤¤¤¿¤Þ #JN ¤µ¤¤¤¿¤Þ
++¤µ¤¤¤¿¤Þ #T35 ¤µ¤¤¤¿¤Þ
++¤µ¤¤¤À¤¤¤­¤å¤¦¤­¤Á¤¬¤¤¤±¤¤¤Û¤¦ #JN ºÇÂçµé¥­¥Á¥¬¥¤·ÙÊó
++¤µ¤¤¤É¤ê¤­¤¤¤Á #JN º¸°æ¸ÍÎÏ°ì
++¤µ¤¤¤Ð¡¼¤¨¡¼¤¸¤§¤ó¤È #KK ¥µ¥¤¥Ð¡¼¥¨¡¼¥¸¥§¥ó¥È
++¤µ¤¤¤â¤¨¤È¡¼¤Ê¤á¤ó¤È #T35 ºÇ˨¥È¡¼¥Ê¥á¥ó¥È
++¤µ¤¤¤â¤¨¤È¤¦¤Ê¤á¤ó¤È #T35 ºÇ˨¥È¡¼¥Ê¥á¥ó¥È
++¤µ¤«¡¼¤Ê #JN ¥µ¥«¡¼¥Ê
++¤µ¤«¤­¤Ð¤é¤»¤¤¤È #T35 ¼òµ´é¬é¯À»ÅÍ
++¤µ¤«¤Ê #JN µû
++¤µ¤«¤Ê #T35 µû
++¤µ¤«¤Ë¤Ã¤Ý #T35 ¤µ¤«¤Ë¤Ã¤Ý
++¤µ¤¬¤±¤ó¤µ¤¬¤·¤¸¤å¤¦¤Ê¤Ê¤µ¤¤ #JN º´²ì¸©º´²ì»Ô½½¼·ºÐ
++¤µ¤¯¤¸¤ç #T30 ºï½ü
++¤µ¤¯¤¸¤ç¤¤¤é¤¤ #T30 ºï½ü°ÍÍê
++¤µ¤¯¤¸¤ç¤¤¤é¤¤ #T35 ºï½ü°ÍÍê
++¤µ¤¯¤¸¤ç¤¬¤¤¤É¤é¤¤¤ó #T35 ºï½ü¥¬¥¤¥É¥é¥¤¥ó
++¤µ¤¯¤¸¤ç¤Ë¤ó #T35 ºï½ü¿Í
++¤µ¤¯¤»¤¤¤¤¤é¤¤ #T30 ºîÀ®°ÍÍê
++¤µ¤¯¤¿¤ó #T35 ¥µ¥¯¤¿¤ó
++¤µ¤¯¤Å¤± #T30 ¤µ¤¯¤Å¤±
++¤µ¤¯¤Å¤± #T30 ¥µ¥¯¥º¤±
++¤µ¤¯¤é¤¬¤ª¤«¤¬¤¯¤¨¤ó #KK ºùµÖ³Ø±à
++¤µ¤¯¤é¤¬¤ª¤«¤³¤¦¤³¤¦ #KK ºùµÖ¹â¹»
++¤µ¤¯¤é¤¬¤ª¤«¤Á¤å¤¦¤¬¤Ã¤³¤¦ #KK ºùµÖÃæ³Ø¹»
++¤µ¤¯¤é¤¿¤ó¤«¤ê #T35 ¤µ¤¯¤é¤¿¤ó¡Ê²¾¡Ë
++¤µ¤¯¤é¤¿¤ó¤Á¤å¤¦ #T35 ¤µ¤¯¤é¤¿¤ó¿ß
++¤µ¤¯¤é¤Á¤å¤¦ #T35 ºù¿ß
++¤µ¤¯¤é¤Ã¤Á #T35 ¥µ¥¯¥é¤Ã¤Á
++¤µ¤¯¤é¤Ã¤Á #T35 ºùÙÇÃ×
++¤µ¤¯¤é¤Ë¤³ #JN ¤µ¤¯¤é¥Ë¥³
++¤µ¤¯¤é¤Í¤Ã¤È #KK ¤µ¤¯¤é¤Í¤Ã¤È
++¤µ¤¯¤é¤á¤ó¤È #JN ¥µ¥¯¥é¥á¥ó¥È
++¤µ¤±¤È¤®¤³¤È¤Ï¤Ë¤ã¡¼¤ó¤È #JN ¼ò¤È¥®¥³¤È¤Ï¤Ë¤ã¡¼¤ó¤È
++¤µ¤±¤Ë¤®¤ê¤ï¤Ã¤·¤ç¤¤ #JN ºú¤Ë¤®¤ê¥ï¥Ã¥·¥ç¥¤
++¤µ¤² #KS sage
++¤µ¤² #KSr ¤µ¤²
++¤µ¤² #T35 sage
++¤µ¤²¤¢¤ª¤ê #T35 sageÀú¤ê
++¤µ¤²¤¢¤é¤· #T35 sage¹Ó¤é¤·
++¤µ¤²¤·¤ó¤³¤¦ #T30 ¤µ¤²¿Ê¹Ô
++¤µ¤²¤·¤ó¤³¤¦ #T35 sage¿Ê¹Ô
++¤µ¤²¤Ã¤Æ¤£ #JN sageŽ¯ŽÃŽ¨
++¤µ¤²¤ì¤¹ #T30 sage¥ì¥¹
++¤µ¤³¤Ä #JN ¥µ¹ü
++¤µ¤µ¤­¤±¤ó¤¹¤± #JN º´¡¹ÌÚ·ò²ð
++¤µ¤¶¤¨¤µ¤ó #JN ¥µ¥¶¥¨¤µ¤ó
++¤µ¤¶¤¨¤µ¤ó #JN ¥µ¥¶¥¨¤µ¤ó¡¡
++¤µ¤¹¤µ¤¹ #JN ¤µ¤¹¤µ¤¹
++¤µ¤¿¤ó #JN ¥µ¥¿¥ó
++¤µ¤¿¤ó #JN Ž»ŽÀŽÝ
++¤µ¤Ã¤Á¡¼¤Þ¤Ä¤ê #T35 ¥µ¥Ã¥Á¡¼º×¤ê
++¤µ¤Ã¤Á¤å¤¦¤¶¤¤¤´¤¸¤ã¡¼¤¹ #JN »¦¿ßºÞ¥´¥¸¥ã¡¼¥¹
++¤µ¤Ã¤Ý¤í #CN »¦ŽÎŽßŽÛ
++¤µ¤Ã¤Ý¤í #KK »¦¥Ý¥í
++¤µ¤Ã¤Ý¤í #T35 »¦¥Ý¥í
++¤µ¤Ã¤Ý¤í #T35 »¦ŽÎŽßŽÛ
++¤µ¤Ä¤¨¤¤¤­¤ó¤· #T35 »£±Æ¶Ø»ß
++¤µ¤È¤é¤ì #T35 ¥µ¥È¥é¥ì
++¤µ¤Ð #T35 »ª
++¤µ¤Ð¤ª¤Á #T30 »ªÍî¤Á
++¤µ¤Ð¤¬¤ª¤Á¤ë #CJ »ª¤¬Íî¤Á¤ë
++¤µ¤Ð¤¬¤È¤Ö #CJ »ª¤¬Èô¤Ö
++¤µ¤Ö¤Ð¤Ã¤¯¤¨¤¤¤Á¤Æ¤£¡¼¤¨¤à¤¨¤ë #T35 subback.html
++¤µ¤á¤¸¤Þ¤¸¤±¤ó #T35 »­Åç»ö·ï
++¤µ¤è #T35 ¥µ¥è
++¤µ¤è¤Ã¤Æ¤ë #T35 º¸Íã¤Ã¤Æ¤ë
++¤µ¤è¤ó¤Ü #T35 ¥µ¥è¥ó¥Ü
++¤µ¤é¤·¤¢¤² #KSr ¤µ¤é¤·age
++¤µ¤é¤·¤¢¤² #KSr ¤µ¤é¤·¤¢¤²
++¤µ¤é¤·¤¢¤² #KSr »¯¤·age
++¤µ¤é¤·¤¢¤² #T35 SALA¤·age
++¤µ¤é¤·¤¢¤² #T35 SALA»Å¾å¤²
++¤µ¤é¤·¤¢¤² #T35 £Ó£Á£Ì£Á»Å¾å¤²
++¤µ¤é¤·¤¢¤² #T35 ¤µ¤é¤·age
++¤µ¤é¤·¤¢¤² #T35 »¯¤·age
++¤µ¤é¤·¤¢¤²¤â¤Ê¡¼ #JN »¯¤·¾å¤²¥â¥Ê¡¼
++¤µ¤é¤Ö¤ì¤Ã¤È #JN ¥µ¥é¥Ö¥ì¥Ã¥È
++¤µ¤é¤Ö¤ì¤Ã¤É #JN ¥µ¥é¥Ö¥ì¥Ã¥É
++¤µ¤ë¤¶¤È¤¦ #T35 ±îº½Åü
++¤µ¤ë¤Ù¡¼¤¸ #T30 ¥µ¥ë¥Ù¡¼¥¸
++¤µ¤ì¤Ä¤Þ #T35 ¤µ¤ìºÊ
++¤µ¤ì¤Å¤Þ #T35 ¤µ¤ìºÊ
++¤µ¤ï¤¿¤ê¤Þ¤³¤È¤Ï¤ï¤¬¤¤¤Î¤Á #CJ ÂôÅÏ¿¿¶×¤Ï²æ¤¬Ì¿
++¤µ¤ï¤ä¤« #JN Á֤䤫¡ª
++¤µ¤ó¤¬¤Ä¤¦¤µ¤® #JN £³·î¥¦¥µ¥®
++¤µ¤ó¤­¤ã¤¯ #KK »°µÓ
++¤µ¤ó¤­¤ã¤¯ #T35 »°µÓ
++¤µ¤ó¤¯¤¹¤³ #CJ ¥µ¥ó¥¯¥¹¥³
++¤µ¤ó¤¯¤¹¤³ #CJ Ž»ŽÝŽ¸Ž½Žº
++¤µ¤ó¤±¡¼ #JN ¥µ¥ó¥±¡¼
++¤µ¤ó¤±¡¼¤·¤ó¤Ö¤ó #T35 £³£Ë¿·Ê¹
++¤µ¤ó¤²¤Ã¤È #JN £³¥²¥Ã¥È¤©¤©¤©¤©¡ª¡ª
++¤µ¤ó¤´ #T35 »¹¸ê
++¤µ¤ó¤º¤Î¤«¤ï #JN »°ÅÓ¤ÎÀî
++¤µ¤ó¤¿¤â¤Ë¤« #JN ¥µ¥ó¥¿¡á¥â¥Ë¥«
++¤µ¤ó¤À¤ó¤â¤Ê¡¼ #JN £³ÃÊ¥â¥é¥é¡¼
++¤µ¤ó¤É¤¤¤Ã¤Á #JN ¥µ¥ó¥É¥¤¥Ã¥Á
++¤µ¤ó¤á¡¼¤È¤ë¤Î¤¦¤Á¤å¤¦¤¸¤ó #JN £³£í¤Î±§Ãè¿Í¡¡
++¤µ¤ó¤â¤¸¤µ¤¯¤¬ #T35 »°Ê¸»úºî²è
++¤¶¡¼¤Ü¤ó #JN ¥¶¡¼¥Ü¥ó
++¤¶¤¢¤á¤ó¤¿¤¤¤·¤Ä #T35 ¥¶¡¼ÌÌÂμÁ
++¤¶¤¤¤¢¤½ #JN ¥¶¥¤¥¢¥½
++¤¶¤¤¤¢¤½ #JN ¥¶¥¤¥¢¥½
++¤¶¤¤¤³ #JN ¥¶¥¤»Ò
++¤¶¤¤¤³¤·¤ç¤ê¤Ï¤ó #JN ºß¸Ë½èÍýÈÉ
++¤¶¤¤¤Ë¤Á¤¤¤·¤ì¤Ã¤É #T35 ºßÆü°å»ÕRED
++¤¶¤¤¤Ë¤Á¤Ë¤ó¤Æ¤¤ #T30 ºßÆüǧÄê
++¤¶¤¤¤ê¤ç¤¦¤Ö¤Ã¤»¤¤¤¤¤¿ #CN ºàÎÁʪÀ­ÈÄ
++¤¶¤¤¤ê¤ç¤¦¤Ö¤Ã¤»¤¤¤¤¤¿ #T35 ºàÎÁʪÀ­ÈÄ
++¤¶¤­ #T35 ¥¶¥­
++¤¶¤Ã¤·¤å¤»¤ó¤»¤¤ #JN »¨¼ïÀèÀ¸
++¤¶¤Ä¤À¤ó¤³¤Æ¤¤ #T35 »¨Ã̸ÇÄê
++¤¶¤Ö¤È¤ó¤¢¤é¤· #JN ¤¶¤Ö¤È¤ó¹Ó¤é¤·
++¤¶¤ï¤¶¤ï #T30 ¤¶¤ï¤¶¤ï
++¤· #M5 ¤·
++¤· #N5 ¤·
++¤· #N5 »Ô
++¤· #N5 »á
++¤· #R5 ¤·
++¤·¡¼¤Ë¤ã¤ó #JN ¤·¡¼¤Ë¤ã¤ó
++¤·¤¢¡¼¤ë #KK ¤·R
++¤·¤¢¡¼¤ë #T35 ¤·R
++¤·¤¢¤¢¤ë #T35 ¤·R
++¤·¤¢¤ï¤»¤µ¤ó¤× #JN ¹¬¤»»¶ÉÛ
++¤·¤£ #JN ¤·¤£
++¤·¤£ #T35 ¤·¤£
++¤·¤£¤¢ #JN ¤·¤£¤¢
++¤·¤£¤¤¤¤¤ó¤Á¤ç¤¦ #JN ¤·¤£°Ñ°÷Ĺ
++¤·¤£¤«¤Á¤ã¤ó #JN ¤·¤£¤«¤Á¤ã¤ó
++¤·¤£¤¸¤ç¤­¤ç¤¦¤¸¤å #JN ¤·¤£½õ¶µ¼ø
++¤·¤£¤¹¤ê¡¼¤Þ¤¿¡¼¤ê #JN ¤·¤££³ÏÀ°Ø
++¤·¤£¤¹¤ê¡¼¤Þ¤¿¡¼¤ê #JN ¤·¤££³ŽÏŽÀŽ°ŽØ
++¤·¤£¤¿¤± #JN ¤·¤£¤¿¤±
++¤·¤£¤¿¤± #JN ¤·¤£¤¿¤±
++¤·¤£¤Ò¤á #JN ¤·¤£É±
++¤·¤£¤Ò¤í¤Õ¤ß #JN ¤·¤£ÍÎʸ
++¤·¤£¤Þ¤Þ #JN ¤·¤£¥Þ¥Þ
++¤·¤¤¤µ¤¢ #T35 ¥·¡¼¥µ¡¼
++¤·¤¤¤¿¤± #T35 ¤·¤¤¤¿¤±
++¤·¤¨¤ó #T35 »Ù±ç
++¤·¤ª #JN ±ö
++¤·¤ª #T35 ±ö
++¤·¤ª¤«¤ó #KK ¤·¤ª´Ú
++¤·¤ª¤«¤ó #T35 ¤·¤ª´Ú
++¤·¤ª¤¿ #T35 ±öÅÄ
++¤·¤ª¤Ë¤Á #T35 ±öÆü
++¤·¤«¤¯ #KK »Í³Ñ
++¤·¤«¤¯ #T35 ¢£
++¤·¤«¤¯¤·¤«¤¯ #T35 ¢¢¢¢
++¤·¤«¤¯¤·¤ó¤¸¤ã #T35 »Í³Ñ¿®¼Ô
++¤·¤¬¤µ¤¯ #T35 ¼¢²ìºî
++¤·¤­¤¬¤ß¤´¤é¤¡ #JN ¼°¿ÀŽºŽÞŽ×Ž§
++¤·¤­¤¬¤ß¤Ê¤á¤¯¤¸ #JN ¼°¿ÀéÝê¡
++¤·¤±¤ó¤«¤ó #JN »î¸³´É
++¤·¤²¤ò #JNM ¥·¥²¥ò
++¤·¤²¤ò #T35 ¥·¥²¥ò
++¤·¤³¤¯ #CN »à¹ñ
++¤·¤³¤¯ #T35 »à¹ñ
++¤·¤³¤¿¤Û¤ï¤¢ #CJ ¥·¥³¥¿¥Û¥ï¡¼
++¤·¤¸¤ß #T35 ¥·¥¸¥ß
++¤·¤¹¤¿¡¼¤¶¡¼¤Ü¤ó #JN ¥·¥¹¥¿¡¼¥¶¡¼¥Ü¥ó
++¤·¤¹¤×¤ê #KK ¥·¥¹¥×¥ê
++¤·¤¹¤×¤ê #T35 ¥·¥¹¥×¥ê
++¤·¤¿¤¤¤¬¤¾¤¦ #T35 »àÂβèÁü
++¤·¤¿¤é¤Ð¤¯¤ó #JN ¤·¤¿¤é¤Ð·¯¡Ê²¾¡Ë
++¤·¤¿¤é¤Ð¤³¤¦¤Ä¤¦¤ä¤³¤¦¤³¤¦¤½¤¯¤Ð¤¹ #JN ¤·¤¿¤é¤Ð¸òÄÌÌë¹Ô¹â®¥Ð¥¹
++¤·¤¿¤é¤Ð¤Ê¡¼ #JN ¥·¥¿¥é¥Ð¥Ê¡¼
++¤·¤Á¤¸¤å¤¦¤¯ #T35 ¼·½Å¶ì
++¤·¤Á¤Ë¤ó¤Î¤µ¤Ö #T35 ¼·¿Í¤Î¥µ¥Ö
++¤·¤Ã¤¿¤« #T35 ÃΤ俤«
++¤·¤Ã¤¿¤«¤¯¤ó #T35 ÃΤ俤«·¯
++¤·¤Ã¤¿¤«¤Á¤å¤¦¤Ü¤¦ #T35 ÃΤ俤«¿ß˼
++¤·¤Ã¤Æ¤ë¤Ê¤é¤Ê¤¼¤·¤Æ¤­¤·¤Æ¤¯¤ì¤Ê¤«¤Ã¤¿¤Î¤Ç¤¹¤« #CJ ÃΤäƤë¤Ê¤é¡¢¤Ê¤¼»ØŦ¤·¤Æ¤¯¤ì¤Ê¤«¤Ã¤¿¤Î¤Ç¤¹¤«¡©
++¤·¤È¤Ë¤é¤Á¤ã¤¨¤ë #JN »ÈḀ̊˥é¥Á¥ã¥¨¥ë
++¤·¤Ê #CJ ¥·¥Ê
++¤·¤Ê¡¼ #JN ¥·¥Ê¡¼
++¤·¤Ê¤¢ #T35 ¥·¥Ê¡¼
++¤·¤Ê¤½¤Ð¤ä¤Î¤µ¤Î¤â¤Ê¡¼ #JN »ÙÆᶾÇþ²°¤Îº´Ìî¥â¥Ê¡¼
++¤·¤Ê¤Í¡¼¤è #JN »á¥Ê¥Í¡¼¥è
++¤·¤Ë¤¬¤ß¤È¤ê¤Ã¤×¤ª¤Ö¤Ç¤¹ #JN »à¿À¥È¥ê¥Ã¥×¥ª¥Ö¥Ç¥¹
++¤·¤Ë¤¬¤ß¤ß¤Ê¤é¤¤¤·¤§¤ê¡¼ #JN »à¿À¸«½¬¡¡¥·¥§¥ê¡¼
++¤·¤Ë¤¬¤ß¤ß¤Ê¤é¤¤¤·¤§¤ê¡¼ #JN »à¿À¸«½¬¥·¥§¥ê¡¼
++¤·¤Í #CJ ¤·¤Í
++¤·¤Í #CJ »Ô¤Í
++¤·¤Í #CJ »á¤Í
++¤·¤Í¡¼¤è #JN »á¥Í¡¼¥è
++¤·¤Í¤Ð¡¼ #JN ¥·¥Í¥Ð¡¼
++¤·¤Í¤Ð¡¼ #JN ¥Á¥Í¥Ð¡¼
++¤·¤Í¤è¤ª¤á¡¼¤é #JN »á¤Í¤è¤ª¤á¡¼¤é
++¤·¤Î¤Ö¤é¤¤¤ó #T35 Ǧ¥é¥¤¥ó
++¤·¤Ð¤¤¤Ì #T35 ¼Æ¸¤
++¤·¤Ð¤±¤ó #T35 ¼Æ¸¤
++¤·¤Ð¤¹ #T35 »à¥Ð¥¹
++¤·¤Ö¤µ¤ï¤µ¤ó #JN ½Âß·¤µ¤ó
++¤·¤Û¤½ #T35 ¤·¥Û¥½
++¤·¤Û¤ó #T35 ¤·¥Û¥ó
++¤·¤Ü¤¦¤¸¤å¤¦ #JN ¡Ê`)¢Ï(¡­¡Ë¡Ê¡­)§¥(`¡Ë
++¤·¤Ü¤¦¤¸¤å¤¦ #JN »éËýÃ
++¤·¤à¤â¤Ê¡¼ #JN ¥·¥à¡¦¥â¥Ê¡¼
++¤·¤á¤¸ #T35 (Žß§ÕŽß)Ž¼ŽÒŽ¼ŽÞ
++¤·¤á¤Ä¤±¤Á¤«¤ó¤Ó¤¤¤à #T35 Äù¤áÉÕ¤±ÃÔ´Á¥Ó¡¼¥à
++¤·¤â¤Ä¤· #JN ¥·¥â¥Ä¥·
++¤·¤â¤È #T35 ¥·¥â¥È
++¤·¤â¤È #T35 Ž¼ŽÓŽÄ
++¤·¤ã¤¡¤»¤ó¤è¤¦¤®¤³¤ó¤°¤È¤¬¤ó¤â¤Ê #JN ¥·¥ã¥¡ÀìÍÑ¥®¥³¥ó¥°¤È¥¬¥ó¥â¥Ê
++¤·¤ã¤¢¤»¤ó¤è¤¦¤¤¤¿ #CN ¥·¥ã¥¢ÀìÍÑÈÄ
++¤·¤ã¤¢¤»¤ó¤è¤¦¤¤¤¿ #T35 ¥·¥ã¥¢ÀìÍÑÈÄ
++¤·¤ã¤¤¤¢¤¸¤ó #T35 ¥·¥ã¥¤¥¢¿Í
++¤·¤ã¤¤¤ó #T35 ¥·¥ã¥¤¥ó
++¤·¤ã¤­¤¤¤ó #CJ (¡®Ž¥¦ØŽ¥¡­)Ž¼Ž¬Ž·Ž°ŽÝ
++¤·¤ã¤­¤¤¤ó #CJ ¥·¥ã¥­¡¼¥ó
++¤·¤ã¤¯¤ì¤­¤ê¤·¤¿¤ó #T35 ¥·¥ã¥¯¥ì¥­¥ê¥·¥¿¥ó
++¤·¤ã¤·¤ç¤¦ #JN ¼Ö¾¸
++¤·¤ã¤Ð¤¤¤Î¤© #CJ ¥·¥ã¥Ð¥¤¥Î¥©
++¤·¤ã¤Ð¤¤¤Î¤© #CJ Ž¼Ž¬ŽÊŽÞŽ²ŽÉŽ«
++¤·¤ã¤Ð¤¾¤¦ #T35 ¥·¥ã¥ÐÁþ
++¤·¤ã¤Ù¤ë¤Ä¤¯¤¨ #JN ¤·¤ã¤Ù¤ë´ù
++¤·¤ã¤ó¤Æ¤£ #JN ¡ÊŽ¥¢ÏŽ¥¡ËŽ¼Ž¬ŽÝŽÃŽ¨¢ö
++¤·¤ã¤ó¤Æ¤£ #JN ¥·¥ã¥ó¥Æ¥£
++¤·¤ä¤¢ #T35 ¤·§Á
++¤·¤å¤¦ #JN ¤·¤å¤¥
++¤·¤å¤¦¤«¤ó¤¢¤¹¤­¡¼ #KK ½µ´©¥¢¥¹¥­¡¼
++¤·¤å¤¦¤­¤ç¤¦ #T35 ½¡¶µ
++¤·¤å¤¦¤µ¤¤¤â¤é¤é¡¼ #JN ½¨ºÍ¥â¥é¥é¡¼
++¤·¤å¤¦¤È¤¦ #T30 ½ªÅß
++¤·¤å¤¦¤È¤¦ #T35 ½ªÅß
++¤·¤å¤¦¤Õ¤æ #T30 ½ªÅß
++¤·¤å¤¦¤Õ¤æ #T35 ½ªÅß
++¤·¤å¤¦¤é¤¯ #T35 ¤·¤å¤¦¤é¤¯¡Ê½°Íî¡Ë
++¤·¤å¤¦¤ê¤ç¤¦ #CJ --------½ªÎ»-------
++¤·¤å¤¦¤ê¤ç¤¦ #CJ ¡á¡á¡á¡á¡á¡á½ªÎ»¡á¡á¡á¡á¡á¡á
++¤·¤å¤¦¤ê¤ç¤¦ #T30 ½ªÎ»
++¤·¤å¤¦¤ê¤ç¤¦¤Á¤å¤¦¤Ü¤¦ #T35 ½ªÎ»¿ß˼
++¤·¤å¤· #T35 ¼ñ»Ý
++¤·¤å¤·¤å #JN ¤·¤å¤·¤å
++¤·¤å¤¸¤¤ #T35 ¼ç¼£°å
++¤·¤å¤Ã¤Á¤ç¤¦ #T30 ½ÐÄ¥
++¤·¤å¤Ô¤¤¤ó¤·¤ã #T35 ¥·¥å¥Ô¡¼¥ó¼Ô
++¤·¤ç¡¼¤â¤Ê¡¼ #JN ¥·¥ç¡¼¥â¥Ê¡¼
++¤·¤ç¡¼¤â¤Ê¡¼ #JN ¥·¥ç¡¼¥â¥Ê¡¼
++¤·¤ç¡¼¤æ¤Í¤¯¤¹¤È #KK ¥·¥ç¡¼¥æ¥Í¥¯¥¹¥È
++¤·¤ç¤¦¤«¤ó #T30 ¾¤´­
++¤·¤ç¤¦¤«¤ó #T30 ¾¤´Ô
++¤·¤ç¤¦¤¬¤É¤­¤å¤ó #T35 À¸ÕªDQN
++¤·¤ç¤¦¤°¤ó¤µ¤Þ #T35 ¾­·³ÍÍ
++¤·¤ç¤¦¤¸¤­¤¹¤Þ¤ó¤«¤Ã¤¿ #CJ ÀµÄ¾¡¢¥¹¥Þ¥ó¥«¥Ã¥¿
++¤·¤ç¤¦¤¸¤­¤¹¤Þ¤ó¤«¤Ã¤¿ #CJ ÀµÄ¾¡¢¥¹¥Þ¥ó¥«¥Ã¥¿¡ª
++¤·¤ç¤¦¤Á¤å¤¦ #T35 Àµ¿ß
++¤·¤ç¤¦¤Ü¤¦ #T35 ¾ÃËÉ
++¤·¤ç¤¦¤Ü¤¦¤¤¤¿ #T35 ¾ÃËÉÈÄ
++¤·¤ç¤¦¤æ¤»¤ó¤·¤­¤Ã¤³¤¦¤Þ¤½ #T35 ¾ßÌýÀï»Î¥­¥Ã¥³¡¼¥Þ¥½
++¤·¤ç¤¦¤æ¤»¤ó¤·¤­¤Ã¤³¤¦¤Þ¤ó #T35 ¾ßÌýÀï»Î¥­¥Ã¥³¡¼¥Þ¥½
++¤·¤ç¤¦¤æ¤Ê¤×¤­¤ó #T35 ¾ßÌý¥Ê¥×¥­¥ó
++¤·¤ç¤¦¤æ¤Í¤¯¤¹¤È #T35 ¥·¥ç¡¼¥æ¥Í¥¯¥¹¥È
++¤·¤ç¤¯¤Ë¤ó #T35 ¿¦¿Í
++¤·¤ç¤¯¤Ë¤ó¤µ¤ó #T35 ¿¦¿Í¤µ¤ó
++¤·¤ç¤¯¤Í¡¼¤è #JN ¿¦¥Í¡¼¥è
++¤·¤ç¤¯¤è¤¦¤â¤Ê¡¼ #JN ¿©ÍÑ¥â¥Ê¡¼
++¤·¤ç¤¸¤ç¤­¤é¡¼¤¢¤Ù¤ë #JN ½è½÷¥­¥é¡¼¥¢¥Ù¥ë
++¤·¤ç¤¿ #T35 ¥·¥ç¥¿
++¤·¤ç¤¿¤³¤ó #T35 ¥·¥ç¥¿¥³¥ó
++¤·¤ç¤À¤¤¤µ¤ó¤É¤¤¤Ã¤Á #JN ½éÂ奵¥ó¥É¥¤¥Ã¥Á
++¤·¤ç¤À¤¤¤·¤Í¤Ð¡¼ #JN ½éÂ奷¥Í¥Ð¡¼
++¤·¤ç¤À¤¤¤Þ¤¸¤ì¤¹¤Þ¤ó #JN ½éÂå¥Þ¥¸¥ì¥¹¥Þ¥ó
++¤·¤ç¤À¤¤¤â¤Ê¡¼ #JN ½éÂå¥â¥Ê¡¼
++¤·¤ç¤À¤¤¤â¤Í¡¼ #JN ½éÂå¥â¥Í¡¼
++¤·¤ç¤Ü #JN ¥·¥ç¥Ü
++¤·¤ç¤Ü #JN Ž¼Ž®ŽÎŽÞ
++¤·¤ç¤Ü¡¼¤ó #CJ Ž¼Ž®ŽÎŽÞŽ°ŽÝ
++¤·¤ç¤Ü¡¼¤ó #JN (¡­¡¦¦Ø¡¦`)¥·¥ç¥Ü¡¼¥ó
++¤·¤ç¤Ü¡¼¤ó #JN (¡­Ž¥¦ØŽ¥`)Ž¼Ž®ŽÎŽÞŽ°ŽÝ
++¤·¤ç¤Ü¡¼¤ó #JN ¥·¥ç¥Ü-¥ó
++¤·¤ç¤Ü¡¼¤ó #JN Ž¼Ž®ŽÎŽÞ-ŽÝ
++¤·¤ç¤Ü¤ª¤ó #CJ ¥·¥ç¥Ü¡¼¥ó
++¤·¤ç¤Ü¤ª¤ó #CJ Ž¼Ž®ŽÎŽÞŽ°ŽÝ
++¤·¤ç¤Ü¤®¤³ #JN Ž¼Ž®ŽÎŽÞŽ·ŽÞŽº
++¤·¤ç¤é¤Í¡¼¤è #JN ¥·¥ç¥é¥Í¡¼¥è
++¤·¤è¤ª¤¦¤è #SUC ¥·¥è¡¼¥¦¥è
++¤·¤è¤ª¤¦¤è #SUC Ž¼ŽÖŽ°Ž³ŽÖ
++¤·¤é¤Ê¤¤¤ï #JN ¥·¥é¥Ê¥¤¥ï
++¤·¤é¤Í¡¼¤è #JN ¥·¥é¥Í¡¼¥è
++¤·¤é¤Í¤¨¤è #T35 ¥·¥é¥Í¡¼¥è
++¤·¤é¤Í¤Î¤ª¤í¤Á #JN ¥·¥é¥Í¥Î¥ª¥í¥Á
++¤·¤é¤Ò¡¼¤² #JN ¥·¥é¥Ò¡¼¥²
++¤·¤ê #T35 ¿¬
++¤·¤ê¤Ä #T35 ¿¬ÄÅ
++¤·¤ê¤È¤ê¤¤¤¿ #T35 ¤·¤ê¤È¤êÈÄ
++¤·¤ê¤È¤ê¤¶¤à¤é¤¤ #JN ¤·¤ê¤È¤ê»ø
++¤·¤ë #SUC ¤·¤ë
++¤·¤ë #SUC ½Á
++¤·¤í¤¦¤È¤Ë¤Ï¤ª¤¹¤¹¤á¤Ç¤­¤Ê¤¤ #CJ ÁǿͤˤϤªÁ¦¤á½ÐÍè¤Ê¤¤¡£
++¤·¤í¤Í¤³ #KK ÇòÇ­
++¤·¤í¤Í¤³ #T35 ÇòÇ­
++¤·¤í¤à¤Ä #T35 Çò¥à¥Ä
++¤·¤ó¤«¤á¤â¤Ê¡¼ #JN ¿¿¡¦¥«¥á¥â¥Ê¡¼¡¡
++¤·¤ó¤­¤í¤¯¤¿¤Ã¤»¤¤¤Ë¤ó¤Æ¤¤¤·¤ç¤¦ #JN ¿·µ­Ï¿Ã£À®Ç§Äê¾Ú
++¤·¤ó¤±¤¤¤»¤¤ #T35 ¿À·ÐÀ­
++¤·¤ó¤¶¤ó¤Ï¤«¤«¤º¤Ë¤Ï¤ó¤È¤·¤í¤à¤Ã¤Æ¤í #CJ ¿·»²¤Ï½ñ¤«¤º¤ËȾǯ£Ò£Ï£Í¤Ã¤Æ¤í
++¤·¤ó¤· #T35 ¿Â»Î
++¤·¤ó¤·¤å¤Î1¤µ¤ó #JN ¿·¼ï¤Î£±¤µ¤ó
++¤·¤ó¤¸¤Ä¤«¤¯¤É #T35 ¿¿¼Â³ÑÅÙ
++¤·¤ó¤¸¤ã #T35 ¿®¼Ô
++¤·¤ó¤¸¤å¤¯¤´¤¸¤å¤¦ #T35 ¿·½É50
++¤·¤ó¤¸¤å¤¯¤ß¤Ê¤ß¤°¤Á¤®¤å¤¦¤Ë¤å¤¦¤½¤Õ¤È¤¯¤ê¡¼¤à¤Î¤Í¤¨¤Á¤ã¤ó #JN ¿·½ÉÆî¸ý¡ÖµíÆý¥½¥Õ¥È¥¯¥ê¡¼¥à¡×¤Î¤Í¤¨¤Á¤ã¤ó
++¤·¤ó¤¹¤ì #T35 ¿·¥¹¥ì
++¤·¤ó¤¹¤ì¤ª¤á¤Ç¤È¤¦¤´¤¶¤¤¤Þ¡¼¤¹ #JN ¡À¡Ê¡°¢¦¡°¡Ë¡¿¿·¥¹¥ì¤ª¤á¤Ç¤È¤¦¤´¤¶¤¤¤Þ¡Ý¤¹¢ö
++¤·¤ó¤¹¤ì¤ª¤á¤Ç¤È¤¦¤´¤¶¤¤¤Þ¡¼¤¹ #JN ¿·¥¹¥ì¤ª¤á¤Ç¤È¤¦¤´¤¶¤¤¤Þ¡Ý¤¹
++¤·¤ó¤¹¤ì¤Ã¤É¤¹¤È¤Ã¤Ñ¡¼ #T35 ¿¿¡¦¥¹¥ì¥Ã¥É¥¹¥È¥Ã¥Ñ¡¼
++¤·¤ó¤¹¤ì¤Ã¤É¤¹¤È¤Ã¤Ñ¤¢ #T35 ¿¿¡¦¥¹¥ì¥Ã¥É¥¹¥È¥Ã¥Ñ¡¼
++¤·¤ó¤»¤¤ #PRE ¿¿À­
++¤·¤ó¤»¤¤ #T35 ¿¿À­
++¤·¤ó¤»¤¤¤Á¤å¤¦¤Ü¤¦ #T35 ¿¿À­¿ß˼
++¤·¤ó¤»¤ó #T35 ¿·Á¯
++¤·¤ó¤½¤³¤É¤¦¤Ç¤â¤¤ #KY ¿´Äì¤É¤¦¤Ç¤â¤¤
++¤·¤ó¤½¤³¤É¤¦¤Ç¤â¤¤ #KY ¿´Äì¤É¤¦¤Ç¤âÎÉ
++¤·¤ó¤½¤³¤É¤¦¤Ç¤â¤è #KY ¿´Äì¤É¤¦¤Ç¤âÎÉ
++¤·¤ó¤Á¤ç¤¦¤¹¤ì #KK ¿ÈĹ¥¹¥ì
++¤·¤ó¤Á¤ç¤¦¤¹¤ì #T35 ¿ÈĹ¥¹¥ì
++¤·¤ó¤É #T35 ¿¼ÅÙ
++¤·¤ó¤Ë¤Á¤ª¤¿ #T35 ¿·Æü¥ª¥¿
++¤·¤ó¤Í¡¼¤è¤ª¤Ö¤Í¡¼¤è #JN ¿¿¡¦¥Í¡¼¥è¡¦¥ª¥Ö¡¦¥Í¡¼¥è
++¤¸¡¼ #T35 £Ç
++¤¸¡¼¤¨¤à #T35 £Ç£Í
++¤¸¡¼¤µ¤¯¤È¤¸¤§¡¼¤ó #JN Gºî¤È¥¸¥§¡¼¥ó
++¤¸¡¼¤µ¤¯¤È¤¸¤§¡¼¤ó #JN Gºî¤È¥¸¥§¡¼¥ó¡ÊñÂΤÀ¤È²¿¤À¤«È½¤é¤Ê¤¤¤Î¤Ç£²É¤Ž¾Ž¯ŽÄ¡Ë
++¤¸¡¼¤µ¤¯¤È¤¸¤§¡¼¤ó #JN ¡Ê¡¦¢Ï¡¦¡Ë¡¡¡Ê¡¦¢Ï¡¦¢é¢é
++¤¸¤£ #JN ¤¸¤£
++¤¸¤¤¤³ #T35 ¼«°Ö¸Å
++¤¸¤§¤¤¤¦¤è¤¯ #T35 J±¦Íã
++¤¸¤§¤¤¤Ó¤¤¤Ó¤¤¤¨¤¹ #T35 JBBS
++¤¸¤§¤Î¤µ¤¤¤É¤«¤Ã¤¿¡¼ #JN ¥¸¥§¥Î¥µ¥¤¥É¥«¥Ã¥¿¡¼
++¤¸¤§¤ó¤È¤ë¤â¤Ê #JN ¥¸¥§¥ó¥È¥ë¥â¥Ê
++¤¸¤§¤ó¤È¤ë¤â¤é¤é¡¼¤È¤®¤³ #JN ¥¸¥§¥ó¥È¥ë¥â¥é¥é¡¼¤È¥®¥³
++¤¸¤¨¤¤¤«¤ó¤¨¤é¤¤ #CJ ¥¸¥¨¥¤¥«¥ó¥¨¥é¥¤
++¤¸¤¨¤¤¤«¤ó¤¨¤é¤¤ #CJ Ž¼ŽÞŽ´Ž²Ž¶ŽÝŽ´Ž×Ž²
++¤¸¤ª #KK ¥¸¥ª
++¤¸¤ª #KK ±ö
++¤¸¤ª #T35 ¥¸¥ª
++¤¸¤ª #T35 ±ö
++¤¸¤¯¤¦¤Þ¤ª¤¦ #JN »þ¶õËⲦ
++¤¸¤²¤ó #JN ¼¡¸µ
++¤¸¤´¤¦¤¸¤È¤¯ #JN (¡­¢Ï¡®)Ž¼ŽÞŽºŽÞŽ³Ž¼ŽÞŽÄŽ°Ž¸
++¤¸¤´¤¦¤¸¤È¤¯ #JN ¥¸¥´¥¦¥¸¥È¥¯
++¤¸¤´¤¯¤Î¤´¤¦¤« #JN ÃϹö¤Î¶È²Ð
++¤¸¤µ¤¯¤¸¤¨¡¼¤ó #JN ¥¸¥µ¥¯¥¸¥¨¡¼¥ó
++¤¸¤µ¤¯¤¸¤¨¤ó #JN (Ž¥¢ÏŽ¥)Ž¼ŽÞŽ»Ž¸Ž¼ŽÞŽ´Ž°ŽÝ
++¤¸¤µ¤¯¤¸¤¨¤ó #JN ¡Î¡Ê¡¦¢Ï¡¦¡Ë¡Ï
++¤¸¤µ¤¯¤¸¤¨¤ó #JN ¥¸¥µ¥¯¥¸¥¨¥ó
++¤¸¤µ¤¯¤¸¤¨¤ó #JN ¥¸¥µ¥¯¥¸±ß
++¤¸¤µ¤¯¤¸¤¨¤ó #JN ŽµŽÆŽ°ŽÁŽ¬ŽÝ(*¡¦¢Ï¡¦*)Ž´Ž¯ŽÁŽ°!!
++¤¸¤µ¤¯¤¸¤¨¤ó #T30 QQQQ
++¤¸¤µ¤¯¤¸¤¨¤ó #T30 ¼«ºî¼«±é
++¤¸¤µ¤¯¤¸¤¨¤ó #T35 ¥¸¥µ¥¯¥¸¥¨¥ó
++¤¸¤µ¤¯¤¸¤¨¤ó #T35 ¼«ºî¼«±é
++¤¸¤µ¤¯¤¸¤»¤ó #JN ¡Ê¡¦À顦¡Ë
++¤¸¤µ¤¯¤¸¤»¤ó #JN ¥¸¥µ¥¯¥¸¥»¥ó
++¤¸¤µ¤¯¤¸¤»¤ó #JN ¼Þ»¸¼Þ¾Ý
++¤¸¤µ¤¯¤¸¤»¤ó #JN Ž¼ŽÞŽ»Ž¸Ž¼ŽÞŽ¾ŽÝ
++¤¸¤µ¤Ä¤¸¤¨¤ó #JN ¡Ê-»á-¡Ë
++¤¸¤µ¤Ä¤¸¤¨¤ó #JN ¥¸¥µ¥Ä¥¸¥¨¥ó
++¤¸¤µ¤Ä¤¸¤¨¤ó #JN ¼Þ»Â¼Þ´Ý
++¤¸¤µ¤Ä¤¸¤¨¤ó #JN Ž¼ŽÞŽ»ŽÂŽ¼ŽÞŽ´ŽÝ
++¤¸¤·¤ó¤»¤¤¤È #JN ÃÏ¿ÌÀ¸ÅÌ
++¤¸¤·¤ó¤À #CJ ¼«¿®¤À¡ª¡ª¡ª¡ª
++¤¸¤·¤ó¤À #CJ ÃϿ̤À¡ª¡ª¡ª¡ª
++¤¸¤»¤¤¤Ê¤É¤­¤«¤Ê¤¤¤Ã #CJ ¼«À©¤Ê¤ÉÍø¤«¤Ê¤¤¤Ã
++¤¸¤Á¤¹¤ì #T35 ¼«¼£¥¹¥ì
++¤¸¤Á¤Á¤å¤¦ #T35 ¼«¼£¿ß
++¤¸¤Á¤ó¤µ¤¤ #T35 ÃÏÄú×
++¤¸¤Ã¤­¤ç¤¦¤¹¤ì #T35 ¼Â¶·¥¹¥ì
++¤¸¤Ã¤Ñ¤Ò¤È¤«¤ê¤² #JN ¥¸¥Ã¥Ñ¥Ò¥È¥«¥ê¥²
++¤¸¤Ä¤ï¤ò¤«¤¯¤Ê¤È¤¢¤ì¤Û¤É #CJ ¼ÂÏäò½ñ¤¯¤Ê¤È¤¢¤ì¤Û¤É¡Ä
++¤¸¤É¤¦¤ª¤¦¤À¤½¤¦¤Á #T35 ¼«Æ°²¥ÂÇÁõÃÖ
++¤¸¤Ï¤¢¤É #T35 ¥¸¥Ï¡¼¥É
++¤¸¤Ð¤¯ #T35 ¼«Çú
++¤¸¤Ò¤ã¤¯¤¸¤¨¤ó #JN ¡Ê¡¦É´¡¦¡Ë
++¤¸¤Ò¤ã¤¯¤¸¤¨¤ó #JN ¥¸¥Ò¥ã¥¯¥¸¥¨¥ó
++¤¸¤Ò¤ã¤¯¤¸¤¨¤ó #JN Ž¼ŽÞŽËŽ¬Ž¸Ž¼ŽÞŽ´ŽÝ
++¤¸¤×¤·¡¼ #T35 ¥¸¥×¥·¡¼
++¤¸¤×¤·¤¤ #T35 ¥¸¥×¥·¡¼
++¤¸¤Ø¤¤¤Ý¤ó #KK ¼«ÊĤݤó
++¤¸¤Ø¤¤¤Ý¤ó #T35 ¼«ÊĤݤó
++¤¸¤ß¤ó¤È¤¦¤â¤Ê¡¼ #JN ¼«Ì±ÅÞ¥â¥Ê¡Ý
++¤¸¤ß¤ó¤È¤¦¤â¤Ê¡¼ #JN ¼«Ì±ÅÞ¥â¥Ê¡Ý
++¤¸¤à #JN GM
++¤¸¤á¤ó¤ò¤ª¤è¤°¤®¤³ #JN ÃÏÌ̤ò±Ë¤°¥®¥³
++¤¸¤ã¡¼¤Ë¡¼ #JN ¥¸¥ã¡¼¥Ë¡¼
++¤¸¤ã¤¬¤â¤Ê¡¼ #JN ¤¸¤ã¤¬¥â¥Ê¡¼
++¤¸¤ã¤·¤ó #T35 ¼Ù¿À
++¤¸¤ã¤Ã¤«¤ë #T35 ¥¸¥ã¥Ã¥«¥ë
++¤¸¤ã¤Ã¤­¡¼ #JN ¥¸¥ã¥Ã¥­¡¼
++¤¸¤ã¤Ã¤­¡¼ #T35 ¥¸¥ã¥Ã¥­¡¼
++¤¸¤ã¤Ã¤­¤¤ #T35 ¥¸¥ã¥Ã¥­¡¼
++¤¸¤ã¤Ë¤¤ #T35 ¼Ø·»
++¤¸¤ã¤Ë¤¤ #T35 ¼Ù·»
++¤¸¤ã¤Ó #JN Ž¼ŽÞŽ¬ŽËŽÞ
++¤¸¤ã¤Þ¤µ¤­ #T35 ¼ÙËâºê
++¤¸¤ã¤ß¤í¤¯¤¤ #JN ¥¸¥ã¥ß¥í¥¯¥¤
++¤¸¤ã¤ë #T35 JA¥ÎL
++¤¸¤ã¤ó¤¬¤ê¤¢¤ó¤Ï¤à¤¹¤¿¡¼ #JN ¥¸¥ã¥ó¥¬¥ê¥¢¥ó¥Ï¥à¥¹¥¿¡¼
++¤¸¤ã¤ó¤¯¤¯¤é¤Ã¤«¡¼¤¯¤é¤Ã¤·¤ã¡¼ #JN ¥¸¥ã¥ó¥¯¡¦¥¯¥é¥Ã¥«¡¼¡¦¥¯¥é¥Ã¥·¥ã¡¼
++¤¸¤ã¤ó¤°¤ë¤Ý¤±¤Ã¤È¤Î¤Á¤Á¤Ï¤Õ¤¸¤­¤»¤­ #CJ ¥¸¥ã¥ó¥°¥ë¥Ý¥±¥Ã¥È¤ÎÉã¤Ï¥Õ¥¸¥­¥»¥­
++¤¸¤å¤¦¤·¤ç¤¯ #JN ½»¿¦
++¤¸¤å¤¦¤·¤ç¤¯ #T35 ½»¿¦
++¤¸¤å¤¦¤Ê¤Ê¤¹¤¯¤ê¤×¤È #T35 17¥¹¥¯¥ê¥×¥È
++¤¸¤å¤¦¤Ë¤ó #T35 ½»¿Í
++¤¸¤å¤¦¤Ï¤Á¤¸¤Ë¤¸¤å¤¦¤¸¤â¤ó¤À¤¤ #T35 18»þ¡¦20»þÌäÂê
++¤¸¤å¤¦¤Õ¤¯¤¹¤ì #T35 ½ÅÊ£¥¹¥ì
++¤¸¤å¤¦¤Õ¤¯¤¹¤ì¤Ã¤É #T35 ½ÅÊ£¥¹¥ì¥É
++¤¸¤å¤¦¤Þ¤ó¤¨¤ó #JN ­ª¡¡
++¤¸¤å¤¦¤Þ¤ó¤¨¤ó #JN ½½Ëü±ß
++¤¸¤å¤¦¤ß¤ó #T35 ½»Ì±
++¤¸¤å¤¦¤è¤ó #JN £±£´
++¤¸¤å¤«¤¤ #CN ¼ù³¤
++¤¸¤å¤«¤¤ #T35 ¼ù³¤
++¤¸¤å¤Æ¡¼¤à #JN ¥¸¥å¥Æ¡¼¥à
++¤¸¤å¤ó¤«¤¤ #T30 ½ä²ó
++¤¸¤å¤ó¤­¤ó¤¤¤¿ #CN ½ã¶âÈÄ
++¤¸¤å¤ó¤­¤ó¤¤¤¿ #T35 ½ã¶âÈÄ
++¤¸¤æ¤¦¤ò¤ß¤®¤Æ¤Ë¤¢¤¤¤Ê¤é¤Ò¤À¤ê¤Æ¤Ë #JN ¥¸¥æ¥¦¥ò¥ß¥®¥Æ¥Ë¥¢¥¤¥Ê¥é¥Ò¥À¥ê¥Æ¥Ë
++¤¸¤æ¤¦¤ò¤ß¤®¤Æ¤Ë¤¢¤¤¤Ê¤é¤Ò¤À¤ê¤Æ¤Ë #JN ¼ÞÕ³¦Ð·ÞÃƱ²Å×ËÀÞØÃÆ
++¤¸¤æ¤¦¤ò¤ß¤®¤Æ¤Ë¤¢¤¤¤Ê¤é¤Ò¤À¤ê¤Æ¤Ë #JN Ž¼ŽÞŽÕŽ³Ž¦ŽÐŽ·ŽÞŽÃŽÆŽ±Ž²ŽÅŽ×ŽËŽÀŽÞŽØŽÃŽÆ
++¤¸¤ç¤¤¤Ã¤Æ #KS JOY¤Ã¤Æ
++¤¸¤ç¤¦¤­¤ª¤¦ #JN ¾øµ¤²¦
++¤¸¤ç¤¦¤Á¤å¤¦ #T30 ¾ïÃó
++¤¸¤ç¤¦¤È¤¦¤¸¤ç¤æ¤¦ #T35 ¾åÅù½÷Í¥
++¤¸¤ç¤¦¤È¤Á¤å¤¦ #T35 ¾ùÅÏ¿ß
++¤¸¤ç¤¦¤ì¤ó #T35 ¾ïÏ¢
++¤¸¤ç¤»¤Õ¤È¤¢¤Ö¤É¤¥¤ë #JN ¥¸¥ç¥»¥Õ¤È¥¢¥ô¥É¥¥¥ë
++¤¸¤ç¤Æ¤¤ #T35 ½÷Äë
++¤¸¤ç¤Æ¤¤¤¨¤¹¤«¤ê¡¼¤Ì #JN ½÷Ä륨¥¹¥«¥ê¡¼¥Ì
++¤¸¤ç¤Ë¡¼ #JN ¥¸¥ç¥Ë¡¼
++¤¸¤ç¤ó #JN ¥¸¥ç¥ó
++¤¸¤ç¤ó #T35 ¥¸¥ç¥ó
++¤¸¤ç¤ó¤¸¤ç #JN ¥¸¥ç¥ó¥¸¥ç
++¤¸¤ç¤ó¤Õ¡¼¤ó #JN ¥¸¥ç¥ó¡¦¥Õ¡¼¥ó
++¤¸¤é¤¤ #T35 ÃÏÍë
++¤¸¤é¤¤¤²¤ó¤·¤ç¤ê¤·¤ã #JN ÃÏÍ븶½èÍý¼Ö
++¤¸¤é¤Í¡¼¤è #JN ¥¸¥é¥Í¡¼¥è
++¤¸¤ì¤¹ #T30 ¼«¥ì¥¹
++¤¸¤ó #SUC ¿Ð
++¤¸¤ó¤¸¤ã¡¼ #JN ¥¸¥ó¥¸¥ã¡¼
++¤¸¤ó¤Ë¤¯ #T35 ¿ÍÆù
++¤¸¤ó¤Ë¤¯ #T35 ¿ÍÆù»Ô¾ì
++¤¸¤ó¤Ë¤¯¤¤¤Á¤Ð #T35 ¿ÍÆù
++¤¸¤ó¤Ë¤¯¤¤¤Á¤Ð #T35 ¿ÍÆù»Ô¾ì
++¤¸¤ó¤ß¤ó¤°¤ó¤°¤ó¤«¤ó #JN ¿Í̱·³·³´±
++¤¸¤ó¤á¤ó¤´¤­¤Ö¤ê¤Ã¤Ä #JN ¿ÍÌÌ¥´¥­¥Ö¥ê¥Ã¥Ä
++¤¹¡¼¤Ñ¡¼¤´¤ê¤ª #JN ¥¹¡¼¥Ñ¡¼¥´¥ê¥ª
++¤¹¡¼¤Ñ¡¼¤â¤Ê¤®¤³¤¿¤¤¤»¤ó #JN ¥¹¡¼¥Ñ¡¼¥â¥Ê¥®¥³ÂçÀï
++¤¹¡¼¤Ñ¡¼¤ê¤¢¤ë¤Á¤å¤¦¤Ü¤¦ #T35 ¥¹¡¼¥Ñ¡¼¥ê¥¢¥ë¿ß˼
++¤¹¤¤¤»¤ó¤«¤ó¤¹¤ì #KK ¿åÀö´É¥¹¥ì
++¤¹¤¤¤»¤ó¤«¤ó¤¹¤ì #T35 ¿åÀö´É¥¹¥ì
++¤¹¤¤¤½¤¦ #T35 ¿åÁå
++¤¹¤¤¤¿¤£¤ç¤¥ #JN µÛ¤¤¤¿¤£¤ç¤¥¡¡
++¤¹¤¤¤¿¤¤¤è¤¦ #JN µÛ¤¤¤¿¤£¤ç¤¥¡¡
++¤¹¤¦¤Ñ¤¢¤Î¤¦¡«¤¡ #T35 ¥¹¡¼¥Ñ¡¼¥Î¥ô¥¡
++¤¹¤¦¤Ñ¤¢¤Ï¤«¤¢ #T35 ¥¹¡¼¥Ñ¡¼¥Ï¥«¡¼
++¤¹¤¦¤Ñ¤¢¤ê¤¢¤ë¤Á¤å¤¦¤Ü¤¦ #T35 ¥¹¡¼¥Ñ¡¼¥ê¥¢¥ë¿ß˼
++¤¹¤¦¤â¤¸¤â¤¸¤º¤Ä¤Ä¤¯¤Ã¤Æ¤Õ¤ä¤·¤¿¤¢¤¹¤­¡¼¤¢¡¼¤È #JN ¿ôʸ»ú¤º¤ÄÁý¤ä¤·¤Æºî¤Ã¤¿£Á£Á
++¤¹¤¨¤Ã¤³ #JN Ëö¤Ã»Ò
++¤¹¤¨¤Ã¤³ #T35 Ëö¤Ã»Ò
++¤¹¤« #T35 ¿Ü²Ã
++¤¹¤«¤¤¤é¡¼¤¯¤¼¤ó¤Ö #CJ ¥¹¥«¥¤¥é¡¼¥¯Á´Éô
++¤¹¤«¤é¤¢¤Ï #T35 ¥¹¥«¥é¡¼ÇÈ
++¤¹¤® #SUC ¿ù
++¤¹¤¯¤¦¤§¤¢ #T35 ¢£
++¤¹¤¯¤¦¤§¤¢¤Û¤ó¤·¤ã #JN ¥¹¥¯¥¦¥§¥¢ËܼÒ
++¤¹¤¯¤½¤×¤È #T35 ¥¹¥¯¥½¥×¥È
++¤¹¤¯¤Ä #T35 ¤¹¤¯¤Ä
++¤¹¤¯¤ê¤×¤È #T35 ¥¹¥¯¥ê¥×¥È
++¤¹¤´¤Þ¤¸¤¤ #CJ ¤¹¤´¤Þ¤¸¤¤
++¤¹¤¶¤±¤ë¤Ê #CJ ¤¹¤¶¤±¤ë¤Ê¡ª
++¤¹¤¹¤º #T35 ¥¹¥¹¥º
++¤¹¤º¤­¤à¤Í¤ª¤Ç¤·¤¿ #JN ¡Ê¡¦¢Ï¡¦¡ËÎëÌÚ½¡ÃËŽÃŽÞŽ¼ŽÀ
++¤¹¤º¤­¤à¤Í¤ª¤Ç¤·¤¿ #JN ÎëÌÚ½¡Ã˥ǥ·¥¿
++¤¹¤º¤­¤à¤Í¤ª¤Ç¤·¤¿ #JN ÎëÌÚ½¡ÃËŽÃŽÞŽ¼ŽÀ
++¤¹¤¿¡¼¤Þ¤ó #JN ¥¹¥¿¡¼¥Þ¥ó
++¤¹¤¿¤¸¤ª¤Ë¤Á¤ã¤ó¤Í¤ë¤Ï¤¸¤Þ¤ë¤è #JN ¥¹¥¿¥¸¥ª2ch»Ï¤Þ¤ë¤è¢ö
++¤¹¤Á¤º #JN ÁÇÃÏ¿Þ
++¤¹¤Á¤º #T35 ÁÇÃÏ¿Þ
++¤¹¤Ã¤´¤¯¤«¤ï¤¤¤¤¤â¤Ê¡¼ #JN ¡ù¤¹¤Ã¤´¤¯¡ù¤«¤ï¤¤¤¤(^o^)¥â¥Ê¡¼
++¤¹¤Ã¤É¤ì #JN ¡Ê¡¦¢Ï¡¦¡ËŽ½Ž¯ŽÄŽÞŽÚ!
++¤¹¤Ã¤É¤ì #JN ¥¹¥Ã¥É¥ì
++¤¹¤Ã¤É¤ì #JN Ž½Ž¯ŽÄŽÞŽÚ
++¤¹¤Ã¤É¤ì #T35 ¥¹¥Ã¥É¥ì
++¤¹¤Æ¤­¤¿¤¤¤à #T35 ¥¹¥Æ¥­¥¿¥¤¥à
++¤¹¤Æ¤Ï¤ó #T35 ¼Î¤Æ¥Ï¥ó
++¤¹¤È¡¼¤«¤á¤³ #T35 ¥¹¥È¡¼¥«¥á¥³
++¤¹¤È¤¦¤«¤á¤³ #T35 ¥¹¥È¡¼¥«¥á¥³
++¤¹¤È¤ê¤Ã¤× #T35 Áǥȥê¥Ã¥×
++¤¹¤Ê¤¤¤× #T30 ¥¹¥Ê¥¤¥×
++¤¹¤Ê¤«¤±¤Ð¤Ð¤¢ #JN º½¤«¤±ÇÌ
++¤¹¤Í¤«¤¸¤ê #T35 ¥¹¥Í¤«¤¸¤ê
++¤¹¤Î¡¼ #T35 £Ó£Î£Ï£×
++¤¹¤Î¤¦ #T35 SNOW
++¤¹¤Ñ #KS ¥¹¥Ñ
++¤¹¤Ñ¡¼¤¯¤â¤Ê¡¼ #JN ¥¹¥Ñ¡¼¥¯¥â¥Ê¡¼
++¤¹¤Ñ¤·¡¼¤Ü #T35 ¡Ê¡¦¢Ï¡¦¡Ë¥¹¥Ñ¥·¡¼¥Ü!!¡é
++¤¹¤Ñ¤·¡¼¤Ü #T35 ¡Ê¡¦¢Ï¡¦¡ËŽ½ŽÊŽßŽ¼Ž°ŽÎŽÞ!!¡é
++¤¹¤Ñ¤·¡¼¤Ü #T35 ¥¹¥Ñ¥·¡¼¥Ü
++¤¹¤Ñ¤·¡¼¤Ü #T35 Ž½ŽÊŽßŽ¼Ž°ŽÎŽÞ
++¤¹¤Ñ¤·¡¼¤Ü¤³¤¦¤« #T35 ¥¹¥Ñ¥·¡¼¥Ü¸ú²Ì
++¤¹¤Ñ¤·¤¤¤Ü #T35 ¡Ê¡¦¢Ï¡¦¡ËŽ½ŽÊŽßŽ¼Ž°ŽÎŽÞ!!¡é
++¤¹¤Ñ¤·¤¤¤Ü #T35 Ž½ŽÊŽßŽ¼Ž°ŽÎŽÞ
++¤¹¤Ñ¤·¤¤¤Ü¤³¤¦¤« #T35 ¥¹¥Ñ¥·¡¼¥Ü¸ú²Ì
++¤¹¤Ñ¤Á¤å¤¦ #T35 ¥¹¥Ñ¿ß
++¤¹¤Ñ¤à #T30 ¥¹¥Ñ¥à
++¤¹¤Ñ¤à #T35 spam
++¤¹¤Ñ¤à #T35 ¥¹¥Ñ¥à
++¤¹¤Ñ¤ó #JN SPAN
++¤¹¤Ô¤Þ¤¹ #T35 ¥¹¥Ô¥Þ¥¹
++¤¹¤Õ¤£¤ó¤¯¤¹ #JN ¥¹¥Õ¥£¥ó¥¯¥¹¡¡
++¤¹¤Ö¤¿¤ó #T35 ¥¹¥Ö¥¿¥ó
++¤¹¤Ú¤é¤ó¤«¡¼ #KK ¥¹¥Ú¥é¥ó¥«¡¼
++¤¹¤Ú¤é¤ó¤«¡¼ #T35 ¥¹¥Ú¥é¥ó¥«¡¼
++¤¹¤Ú¤é¤ó¤«¤¢ #T35 ¥¹¥Ú¥é¥ó¥«¡¼
++¤¹¤Þ #JN ¿ÜËá
++¤¹¤Þ #T35 ¿ÜËá
++¤¹¤Þ¤½ #CJ ¥¹¥Þ¥½
++¤¹¤à¤é¤Ã¤È #T35 SMART
++¤¹¤à¤é¤Ã¤È #T35 £Ó£Í£Ò£Á£Ô
++¤¹¤è #JN ¥¹¥è
++¤¹¤é¤¤¤à #JN ¥¹¥é¥¤¥à
++¤¹¤ë¤Ã¤È¤Á¤ã¤ó #JN ¥¹¥ë¥Ã¥È¤Á¤ã¤ó
++¤¹¤ì #T35 ¥¹¥ì
++¤¹¤ì¤´¤Ð¤¯ #T30 ¥¹¥ì¸íÇú
++¤¹¤ì¤µ¤¯¤¸¤ç #T30 ¥¹¥ìºï½ü
++¤¹¤ì¤¹¤È #T35 ¥¹¥ì¥¹¥È
++¤¹¤ì¤¿¤¤ #T35 ¥¹¥ì¥¿¥¤
++¤¹¤ì¤Á¤¬¤¤ #T35 ¥¹¥ì°ã¤¤
++¤¹¤ì¤Ã¤É #T35 ¤¹¤ì¤Ã¤É
++¤¹¤ì¤Ã¤É #T35 ¥¹¥ì¥Ã¥É
++¤¹¤ì¤Ã¤É¤¢¤Ã¤·¤å¤¯ #T30 ¥¹¥ì¥Ã¥É°µ½Ì
++¤¹¤ì¤Ã¤É¤¢¤Ã¤·¤å¤¯ #T35 ¥¹¥ì¥Ã¥É°µ½Ì
++¤¹¤ì¤Ã¤É¤¤¤Á¤é¤ó #T35 ¥¹¥ì¥Ã¥É°ìÍ÷
++¤¹¤ì¤Ã¤É¤¹¤È¤Ã¤Ñ¡¼ #T35 ¥¹¥ì¥Ã¥É¥¹¥È¥Ã¥Ñ¡¼
++¤¹¤ì¤Ã¤É¤¹¤È¤Ã¤Ñ¡¼¤¹¤Æ¡¼¤·¤ç¤ó #JN ¥¹¥ì¥Ã¥É¥¹¥È¥Ã¥Ñ¡¼¥¹¥Æ¡¼¥·¥ç¥ó
++¤¹¤ì¤Ã¤É¤¹¤È¤Ã¤Ñ¤¢ #T35 ¥¹¥ì¥Ã¥É¥¹¥È¥Ã¥Ñ¡¼
++¤¹¤ì¤Ã¤É¤Ò¤ç¤¦¤«¤Ë¤ó¤Æ¤¤¤¤¤¤¤ó¤«¤¤ #JN ¥¹¥ì¥Ã¥Éɾ²ÁǧÄê°Ñ°÷²ñ
++¤¹¤ì¤Ã¤É¤Õ¤í¡¼¤È¤Û¤¦¤·¤­ #T35 ¥¹¥ì¥Ã¥É¥Õ¥í¡¼¥ÈÊý¼°
++¤¹¤ì¤Ã¤É¤Õ¤í¤¦¤È¤Û¤¦¤·¤­ #T35 ¥¹¥ì¥Ã¥É¥Õ¥í¡¼¥ÈÊý¼°
++¤¹¤ì¤Ã¤É¤ì¤¤¤× #T30 ¥¹¥ì¥Ã¥É¥ì¥¤¥×
++¤¹¤ì¤Ë¤ó¤Æ¤¤¤·¤ç¤¦ #JN ¥¹¥ìǧÄê¾Ú
++¤¹¤ì¤Ò¤ç¤¦¤«¤¸¤ç¤¦ #JN ¥¹¥ìɾ²Á¾î
++¤¹¤ì¤ò¤è¤´ #S5 ¥¹¥ì¤ò±ø
++¤¹¤ì¤ò¤è¤´¤¹ #CJ ¥¹¥ì¤ò±ø¤¹
++¤¹¤í¤Ã¤È¤ª¤Ü¤¨¤¿¤Æ¤Ç #CJ ¥¹¥í¥Ã¥È³Ð¤¨¤¿¤Æ¤Ç
++¤¹¤ó¤¹¤ó¤¹¤¦¤ó #CJ (¡¦¢Ï¡¦)Ž½ŽÝŽ½ŽÝŽ½Ž°ŽÝ¢ö
++¤¹¤ó¤¹¤ó¤¹¤¦¤ó #CJ ¥¹¥ó¥¹¥ó¥¹¡¼¥ó¢ö
++¤¹¤ó¤Þ¤½ #CJ ¤¹¤ó¤Þ¤½
++¤º¤´¤ª¤Þ¤° #JN ¥º¡¦¥´¥ª¥Þ¡¦¥°
++¤º¤µ¤®¤³ #JN ¥º¥¶¥®¥³
++¤º¤¶¤Ê¤Þ¤Ï¤²¤µ¤Þ #JN ¡Ê¥º¥¶¡Ë¥Ê¥Þ¥Ï¥²ÍÍ
++¤º¤é¤é¡¼ #JN ¥º¥é¥é¡¼
++¤º¤ê¤»¤½ #T35 ¥º¥ê¥»¥ó
++¤º¤ë¤¤¤ª¤ó¤Ê #KK ¤º¤ë¤¤½÷
++¤º¤ë¤¤¤ª¤ó¤Ê #T35 ¤º¤ë¤¤½÷
++¤º¤ì #T35 ¥º¥ì
++¤º¤ì¤¬¤¹¤¯¤Ê¤¤¤Î¤Ç¤·¤å¤¦¤»¤¤¤·¤Æ¤ª¤­¤Þ¤·¤¿ #JN ¥º¥ì¤¬¾®¤µ¤¤¤Î¤Ç½¤Àµ¤·¤Æ¤ª¤­¤Þ¤·¤¿¡£
++¤º¤ì¤¬¤¹¤¯¤Ê¤¤¤Î¤Ç¤·¤å¤¦¤»¤¤¤·¤Þ¤·¤¿ #JN ¥º¥ì¤¬¾¯¤Ê¤¤¤Î¤Ç½¤Àµ¤·¤Þ¤·¤¿
++¤º¤ì¤¬¤¹¤¯¤Ê¤¤¤Î¤Ç¤·¤å¤¦¤»¤¤¤·¤Þ¤¹ #JN ¥º¥ì¤¬¾¯¤Ê¤¤¤Î¤Ç½¤Àµ¤·¤Þ¤¹
++¤»¡¼¤é¤à¤ª¤¦¤³¤¯ #JN ¤»¡¼¤é¤à¤ª¤¦¤³¤¯
++¤»¤¤¤«¤¤ #T35 À­²ô
++¤»¤¤¤®¤³ #JN ¥»¥¤¥®¥³
++¤»¤¤¤®¤³ #JN ¥»¥¤¥®¥³
++¤»¤¤¤´ #JNM À¬¸ã
++¤»¤¤¤´¤¦ #JN À­¹ë
++¤»¤¤¤´¤¦ #T35 À­¹ë
++¤»¤¤¤·¤å¤ó #JN ÀĽÕ
++¤»¤¤¤·¤ó¤Æ¤­¤Ö¤é¤¯¤é #T35 Àº¿ÀŪ¥Ö¥é¥¯¥é
++¤»¤¤¤»¤ó¤·¤ç¤¯¤Ò¤ó¤â¤é¤Þ¤µ #JN À¸Á¯¿©ÉÊ¥â¥é¥Þ¥µ
++¤»¤¤¤½¤¦¤Á¤å¤¦ #T35 À¶ÁÝ¿ß
++¤»¤¤¤Á #T35 À»ÃÏ
++¤»¤¤¤È #JN À¸ÅÌ
++¤»¤¤¤È #JN À¸ÅÌ¡©
++¤»¤¤¤È2 #JN À¸ÅÌ£Ö£å£ò£²
++¤»¤¤¤È3 #JN À¸ÅÌ£Ö£å£ò£³
++¤»¤¤¤È¤¤¤é¤Í¡¼¤è #JN À¸ÅÌ¥¤¥é¥Í¡¼¥è
++¤»¤¤¤È¤¦¤· #JN À¸Å̵í
++¤»¤¤¤È¤«¤ª¤À¤± #JN (¡¨¡­§¥¡®)¡¿ÀèÀ¸¡ª¡¦¡¦¡¦¡¦
++¤»¤¤¤È¤«¤ª¤À¤± #JN À¸ÅÌ´é¤À¤±
++¤»¤¤¤È¤µ¤¤¤·¤ç¤¦ #JN À¸Å̺Ǿ®
++¤»¤¤¤È¤¸¤ª¤ó¤° #JN À¸ÅÌ¥¸¥ª¥ó¥°
++¤»¤¤¤È¤¸¤å¤¦¤í¤¯¤¯¤ó #JN À¸ÅÌ£±£¶·¯
++¤»¤¤¤È¤¹¤Õ¤£¤ó¤¯¤¹ #JN À¸ÅÌ¥¹¥Õ¥£¥ó¥¯¥¹
++¤»¤¤¤È¤º¤´¤ª¤Þ¤° #JN À¸ÅÌ¥º¡¦¥´¥ª¥Þ¡¦¥°
++¤»¤¤¤È¤À¤¤¤¤¤Á¤Õ¤Ã¤µ¡¼¤ë #JN À¸ÅÌÂè°ì¥Õ¥Ã¥µ¡¼¥ë
++¤»¤¤¤È¤À¤¤¤¤¤Á¤Õ¤Ã¤µ¡¼¤ë¤Ð¡¼¤¸¤ç¤ó2 #JN À¸ÅÌÂè°ì¥Õ¥Ã¥µ¡¼¥ëver£²
++¤»¤¤¤È¤À¤¤¤¤¤Á¤Õ¤Ã¤µ¡¼¤ë¤Ð¡¼¤¸¤ç¤ó3 #JN À¸ÅÌÂè°ì¥Õ¥Ã¥µ¡¼¥ëver£³
++¤»¤¤¤È¤Î¤Î #JN À¸Å̤ΤÎ
++¤»¤¤¤È¤Ï¤é¤Þ¤­¤Ð¡¼¤¸¤ç¤ó1 #JN À¸ÅÌÊ¢´¬¤­£Ö£å£ò£±
++¤»¤¤¤È¤Ï¤é¤Þ¤­¤Ð¡¼¤¸¤ç¤ó2 #JN À¸ÅÌÊ¢´¬¤­£Ö£å£ò£²
++¤»¤¤¤È¤Õ¡¼¤ó #JN À¸Å̤ա¼¤ó
++¤»¤¤¤È¤Õ¤µ¤Ö¤Ä #JN À¸Å̤դµ¤Ö¤Ä
++¤»¤¤¤È¤Ö¤Ä¤Ö¤Ä #JN À¸Å̤֤Ĥ֤Ä
++¤»¤¤¤È¤Ö¤Ä¤Ö¤Ä¤¸¤å¤¦¤í¤¯¤¯¤ó #JN À¸Å̤֤Ĥ֤ģ±£¶·¯
++¤»¤¤¤È¤Ö¤Ä¤Ö¤Ä¤É¤¦¤è #JN À¸Å̤֤Ĥ֤Ĥɤ¦¤è
++¤»¤¤¤È¤Ö¤Ä¤Ö¤Ä¤É¤¦¤è¤Ð¡¼¤¸¤ç¤ó2 #JN À¸Å̤֤Ĥ֤Ĥɤ¦¤è£Ö£å£ò£²
++¤»¤¤¤È¤à¤Ã¤¯ #JN À¸ÅÌ¥à¥Ã¥¯
++¤»¤¤¤È¤á¤¿¤é¡¼¤Ð¡¼¤¸¤ç¤ó1 #JN À¸Ḁ̊᥿¥é¡¼ver£±
++¤»¤¤¤È¤á¤¿¤é¡¼¤Ð¡¼¤¸¤ç¤ó2 #JN À¸Ḁ̊᥿¥é¡¼ver£²
++¤»¤¤¤È¤é¤Ç¤£¤ó #JN À¸ÅÌ¥é¥Ç¥£¥ó
++¤»¤¤¤È¤ì¤«¤à¤Á¤ã¤Ã¤«¤ß¤½¤Á¤ó¤Ï¤¦¤¹ #JN À¸Ḁ̊졦¤«¤à¤Á¤ã¤Ã¤«¤ß¤½ÄÁ¥Ï¥¦¥¹
++¤»¤¤¤È¤ó¡¼ #JN À¸Å̤ó¡Á¡ª¡©
++¤»¤¤¤ê¤å¤¦ #T35 À¶Âí
++¤»¤«¤¤¤»¤Õ¤¯¤ò¤¿¤¯¤é¤à¤â¤é¤é¡¼ #JN À¤³¦¡ÖÀ©¡×Éþ¤ò´ë¤à¥â¥é¥é¡¼
++¤»¤¬¤·¤ó¤¸¤ã #T35 ¥»¥¬¿®¼Ô
++¤»¤¬¤Ó¡¼ #T35 ¥»¥¬B
++¤»¤¬¤ï #T35 ¥»Èé
++¤»¤­¤¹¤¤ #KK ÀÑ¿å
++¤»¤­¤¹¤¤ #T35 ÀÑ¿å
++¤»¤­¤º¤¤¤Ï¤ó¤·¤ã¤ì¤¹ #T30 ÀÔ¿ñÈ¿¼Í¥ì¥¹
++¤»¤­¤º¤¤¤Ï¤ó¤·¤ã¤ì¤¹ #T35 ÀÔ¿ñÈ¿¼Í¥ì¥¹
++¤»¤¯¡¼¤¹ #CN ¥»¥¯¡¼¥¹
++¤»¤¯¡¼¤¹ #T30 ¥»¥¯¡¼¥¹
++¤»¤¯¡¼¤¹ #T35 ¥»¥¯¡¼¥¹
++¤»¤ß¤µ¤ó¤³¤ª¤¹ #T35 ¥»¥ß¤µ¤ó¥³¡¼¥¹
++¤»¤ë¤²¤¨¤à #T35 ¥»¥ë¥²¡¼¥à
++¤»¤ó #T35 1000
++¤»¤ó¤¤¤¯¤¿¤Ó¤Ë¤¤¤¿¤ò¤Æ¤ó¤Æ¤ó¤È¤¹¤ë¤¹¤ì¤Ã¤É #T35 1000¹Ô¤¯¤¿¤Ó¤ËÈĤòž¡¹¤È¤¹¤ë¥¹¥ì¥Ã¥É
++¤»¤ó¤¤¤Á #T35 1001
++¤»¤ó¤³¤¦¤·¤ã #JN Àè¸ø¼Ô
++¤»¤ó¤³¤¦¤·¤ã #JN Àè¹Ô¼Ô
++¤»¤ó¤³¤¦¤·¤ã #T35 Àè¹Ô¼Ô
++¤»¤ó¤·¤å¤¦¤¬¤Ã¤³¤¦ #T35 À콤³Ø¹»
++¤»¤ó¤¹¤¤¤«¤ó¤¹¤ì #T35 Àø¿å´Ï¥¹¥ì
++¤»¤ó¤»¤¤ #JN ÀèÀ¸
++¤»¤ó¤»¤¤¤¿¤¹¤±¤Æ #JN ÀèÀ¸¡ª½õ¤±¤Æ¡ª
++¤»¤ó¤»¤¤¤Õ¤µ¤Ö¤Ä #JN ÀèÀ¸¤Õ¤µ¤Ö¤Ä
++¤»¤ó¤»¤¤¤Ö¤Ä¤Ö¤Ä #JN ÀèÀ¸¤Ö¤Ä¤Ö¤Ä
++¤»¤ó¤½¤¦ #T35 1000Áè
++¤»¤ó¤Î¤¦¤·¤å¤¦¤«¤¤ #T35 ÀöǾ½¸²ñ
++¤»¤ó¤â¤ó¤¤¤¿ #T35 ÀìÌçÈÄ
++¤¼¤Ã¤È¤­ #JN £Ú´ú
++¤¼¤Ã¤È¤·¤­ #T35 £Ú¼°
++¤¼¤Ã¤È¤¿¤± #T35 £ÚÉð
++¤¼¤Ã¤È¤Á¤ã¤ó¤Í¤ë¤¦¤ó¤¨¤¤¤¸¤ó #JN Zch±¿±Ä¿Ø
++¤¼¤Õ¤¡¡¼¤¢¤ó¤Á¤ã¤ó #JN ¥¼¥Õ¥¡¡¼¤¢¤ó¤Á¤ã¤ó
++¤¼¤í #T35 0
++¤¼¤í¤ï¤ó #T35 Îí°í
++¤¼¤ó¤Ä¤¦ #T30 Á´ÄÌ
++¤¼¤ó¤Ä¤¦ #T35 Á´ÄÌ
++¤¼¤ó¤é #T35 Á´Íç
++¤¼¤ó¤é¤¿¤¤ #T35 Á´ÍçÂâ
++¤½¡¼¤¹ #T35 ¥½¡¼¥¹
++¤½¡¼¤¹¤Ï #CJ ¥½¡¼¥¹¤Ï¡©
++¤½¡¼¤Ç¤â¤Ê¤¤¤è #JN ¤½¡¼¤Ç¤â¤Ê¤¤¤è
++¤½¡¼¤Ê¤Î #JN ¥½¡¼¥Ê¥Î
++¤½¤¤¤¿ #CN ¤½ÈÄ
++¤½¤¤¤¿ #T35 ¤½ÈÄ
++¤½¤¦¤« #T35 Áز½
++¤½¤¦¤¯¤Ä #T35 Áã·¢
++¤½¤¦¤±¤¤ #KK Áá·Ä
++¤½¤¦¤±¤¤ #T35 Áá·Ä
++¤½¤¦¤±¤¤¤¸¤ç¤¦¤Á #T35 Áá·Ä¾åÃÒ
++¤½¤¦¤³ #T35 ÁÒ¸Ë
++¤½¤¦¤³¤¤¤­ #CJ ÁÒ¸ËÀ¤­
++¤½¤¦¤³¤¤¤­ #T35 ÁҸ˹Ԥ­
++¤½¤¦¤³¤¦ #JN Á⹿
++¤½¤¦¤³¤Ð¤ó #T35 ÁÒ¸ËÈÖ
++¤½¤¦¤´¤¦¤¹¤ì¤Ã¤É #T35 Áí¹ç¥¹¥ì¥Ã¥É
++¤½¤¦¤µ¤¤ #T35 ÁíºÛ
++¤½¤¦¤·¤ç¤¯ #T30 Áõ¾þ
++¤½¤¦¤¸¤ó #JN Áâ¿Î
++¤½¤¦¤¹ #T35 ¥½¡¼¥¹
++¤½¤¦¤Á¤ç¤¦¤ì¤¹ #T30 ÁáÄ«¥ì¥¹
++¤½¤¦¤Ç¤â¤Ê¤¤¤è #CJ ¤½¤¦¤Ç¤â¤Ê¤¤¤è
++¤½¤¦¤Ç¤â¤Ê¤¤¤è #JN ¤½¤¦¤Ç¤â¤Ê¤¤¤è
++¤½¤¦¤È¤¦ #T35 ÁíÅý
++¤½¤¦¤Ï¤¤¤«¤ó¤¶¤­ #CJ ¤½¤¦¤Ï¤¤¿Àºê
++¤½¤¦¤ê¤½¤¦¤ê¤ã¤¯ #T35 ÁÏÍøÁÏά
++¤½¤«¤¤ #T30 Á³«
++¤½¤¯¤· #T35 ¨»à
++¤½¤¯¤·¤¹¤ì #T35 ¨»à¥¹¥ì
++¤½¤¯¤·¤Ï¤ó¤Æ¤¤ #T35 ¨»àȽÄê
++¤½¤¯¤Û¤¦ #CJ ®Êó¡ª
++¤½¤¯¤ì¤¹ #T30 ¨¥ì¥¹
++¤½¤¯¤ì¤¹ #T35 ¨¥ì¥¹
++¤½¤Ë¡¼¤¿¤¤¤Þ¡¼ #T35 ¥½¥Ë¡¼¥¿¥¤¥Þ¡¼
++¤½¤Ë¤¤¤¿¤¤¤Þ¤¢ #T35 ¥½¥Ë¡¼¥¿¥¤¥Þ¡¼
++¤½¤Ì¤­¤å¤¦¤Ó¤ó #JN ¥¾¥ÌµÞÊØ
++¤½¤Î #JN ¤½¤Î
++¤½¤Î¤³ #JN ±ñ»Ò
++¤½¤Î¤Ä¤¯¤«¤¤¤·¤ã #T35 ¡Ö¤½¡×¤Î¤Ä¤¯²ñ¼Ò
++¤½¤Ð¤Ð¤Ð¡¼¤ó #JN ¥½¥Ð¥Ð¥Ð-¥ó!!!
++¤½¤Ð¤Ð¤Ð¡¼¤ó #JN Ž¿ŽÊŽÞŽÊŽÞŽÊŽÞ-ŽÝ!!!
++¤½¤Ð¤Ð¤Ð¡¼¤ó #JN Ž¿ŽÊŽÞŽÊŽÞŽÊŽÞŽ°ŽÝ!!!!
++¤½¤Ó¤¨¤È #JN ¥½¥Ó¥¨¥È
++¤½¤Õ¤Þ¤Ã¤× #JN ¥½¥Õ¥Þ¥Ã¥×¡¡
++¤½¤Ü¤¯¤Ê¤®¤â¡¼¤ó #CJ ÁÇËѤʤ®¤â¡¼¤ó
++¤½¤Þ¤ê¤ä¤¬¤¤¤¹¤é¤à¤Ë¤½¤Þ¤ê¤ä #CJ ¥½¥Þ¥ê¥ä¤¬¥¤¥¹¥é¥à¤Ë¤½¤Þ¤ê¤ä
++¤½¤é¤¤¤à #JN ¥½¥é¥¤¥à
++¤½¤é¤Ê¤¤¤ï #JN ¥½¥é¥Ê¥¤¥ï
++¤½¤é¤Í¡¼¤Ç¤è #JN ¥½¥é¥Í¡¼¥Ç¥è
++¤½¤é¤Í¡¼¤è #JN ¥½¥é¥Í¡¼¥è
++¤½¤é¤Í¡¼¤è¤«¤ó¤¤¤Ð¤ó #JN ¥½¥é¥Í¡¼¥è´Ê°×ÈÇ
++¤½¤é¤ß¤¿¤³¤È¤« #JN ¤½¤é¸«¤¿¤³¤È¤«
++¤½¤ê¤Ã¤É¤â¤Ê¡¼¤¯ #JN ¥½¥ê¥Ã¥É¡¦¥â¥Ê¡¼¥¯
++¤½¤ì¤¬¤Ê¤Ë¤« #JN ¥½¥ì¥¬¥Ê¡á¥Ë¥«
++¤½¤ó #JNS ¹
++¤½¤ó¤´¤¯¤¦ #T35 ¹¸ç¶õ
++¤½¤ó¤·¤Î¤Ï¤¿¤¸¤ë¤· #JN ¹»Ò¤Î´ú°õ
++¤½¤ó¤Ê¤Î¤·¤Ã¤Á¤ç¤ì¤® #JN ¤½¤ó¤Ê¤ÎÃΤåÁ¥ç¥ì¥®
++¤½¤ó¤Ê¤Ð¤Ê¤Ê¤®¤³ #JN ¤½¤ó¤Ê¥Ð¥Ê¥Ê¥®¥³
++¤½¤ó¤Þ¤µ¤è¤· #JN ¹ÀµµÁ
++¤¾¤¤¤É¤¤¤¿ #CN ¥¾¥¤¥ÉÈÄ
++¤¾¤¤¤É¤¤¤¿ #T35 ¥¾¥¤¥ÉÈÄ
++¤¾¤¹ #CJ ¥¾¥¹
++¤¾¤Ë¤Ã¤¯ #JN ¤¾¤Ë¤Ã¤¯
++¤¾¤Ë¤Ã¤¯¤À¤ó¤·¤ã¤¯ #JN ¤¾¤Ë¤Ã¤¯Ã˼ß
++¤¾¤Ë¤Ã¤¯¤À¤ó¤·¤ã¤¯¤¢¤ë¤Õ¤¡ #JN ¤¾¤Ë¤Ã¤¯Ã˼ߦÁ
++¤¾¤Ë¤Ã¤¯¤À¤ó¤·¤ã¤¯¤¦¡«¤£¤¯¤È¤ê¡¼ #JN ¤¾¤Ë¤Ã¤¯Ã˼ßV
++¤¾¤Ì #JN ¤¾¤Ì
++¤¾¤Ì #JN ¥¾¥Ì
++¤¾¤Ì #T35 ¤¾¤Ì
++¤¾¤Ì¡¼¤Ô¡¼ #JN ¥¾¥Ì¡¼¥Ô¡¼
++¤¾¤Ì¤¶¤á¤¤¤¿¤ó¤Æ¤¤ #JN ¤¾¤Ì¡¦¥¶¡¦ÌÂõÄå
++¤¾¤Ì¤·¤ã¤Á¤ç¤¦ #JN ¤¾¤Ì¼ÒĹ
++¤¾¤Ì¤Ã¤Æ¤ë #CJ ¤¾¤Ì¤Ã¤Æ¤ë
++¤¾¤Ì¤Ö¤· #T35 ¤¾¤ÌÉú
++¤¾¤Ì¤Þ¤·¤ó #JN ¤¾¤Ì¥Þ¥·¥ó
++¤¾¤Í #T35 ¤¾¤Í
++¤¾¤à #JN ¥¾¥à
++¤¾¤í¤Ð¤ó #T35 ¥¾¥í¥Ð¥ó
++¤¿ #K5 ¿æ
++¤¿ #KJ ¿æ
++¤¿¡¼¤ó #JN ŽÀŽ°ŽÝ
++¤¿¤¤ #JN Âä
++¤¿¤¤ #T35 Âä
++¤¿¤¤¡¼¤Û #CJ ¥¿¥¤¨¬¨¬¨¬¨¬||¦µ|(|¡­|§¥|`|)|¦µ||¨¬¨¬¨¬¨¬¥Û
++¤¿¤¤¡¼¤Û #CJ ¥¿¥¤¨¬¨¬¨¬¨¬¡Ã¡Ã¦µ¡Ã¡Ê¡Ã¡¬¡Ã¢Ï¡Ã¡¬¡Ã¡Ë¡Ã¦µ¡Ã¡Ã¨¬¨¬¨¬¨¬¥Û¡ª¡ª¡ª
++¤¿¤¤¡¼¤Û #CJ ŽÀŽ²¨¬¨¬¨¬¨¬||¦µ|(|Žß|¢Ï|Žß|)|¦µ||¨¬¨¬¨¬¨¬ŽÎ!!!
++¤¿¤¤¤­ #T35 Â絤
++¤¿¤¤¤·¤«¤ó #T35 Âç»È´Û
++¤¿¤¤¤·¤ç¤¦¤·¤ç¤¦¤ï¤®¤³ #JN ÂçÀµ¾¼Ïµ¼¸Å
++¤¿¤¤¤Á¤ç¤¦ #CJ ÂâĹ¡ª
++¤¿¤¤¤È¤ë¤Ð¤Ê¡¼ #T35 ¥¿¥¤¥È¥ë¥Ð¥Ê¡¼
++¤¿¤¤¤à #T35 TIME
++¤¿¤¤¤à¤Ñ¤é¤É¤Ã¤¯¤¹ #T35 ¥¿¥¤¥à¥Ñ¥é¥É¥Ã¥¯¥¹
++¤¿¤¤¤ï¤ó #T35 ¥¿¥¤¸¤
++¤¿¤«¤¬¤Ý¤ó¤µ¤ì¤É¤Ý¤ó #CJ ¤¿¤«¤¬¥Ý¥ó¤µ¤ì¤É¥Ý¥ó
++¤¿¤«¤µ¤­¤ß¤ï #JN ¹âºêÈþÏÂ
++¤¿¤«¤µ¤ó #JNM ¥¿¥«¤µ¤ó
++¤¿¤«¤µ¤ó #T35 ¥¿¥«¤µ¤ó
++¤¿¤«¤·¤¯¤ó¤¸¤±¤ó #KK ¤¿¤«¤··¯»ö·ï
++¤¿¤«¤·¤¯¤ó¤¸¤±¤ó #T35 ¤¿¤«¤··¯»ö·ï
++¤¿¤«¤¿¤·¤ã¤Á¤ç¤¦ #JNS ¤¿¤«¤¿¼ÒĹ
++¤¿¤«¤¿¤·¤ã¤Á¤ç¤¦ #JNSUC ¤¿¤«¤¿¼ÒĹ
++¤¿¤«¤Ï¤·¤è¤· #T35 ¹â¶¶Í³
++¤¿¤«¤é¤®¤³ #JN ¥¿¥«¥é¥®¥³
++¤¿¤¯¤¢¤ó¤â¤Ê¡¼ #JN ¤¿¤¯¤¢¤ó¥â¥Ê¡¼
++¤¿¤¯¤­¤å¤¦ #T35 Âðµå
++¤¿¤°¤Á¤Ë¤Ã¤­ #T35 ÅĸýÆüµ­
++¤¿¤±¤·¤¯¤ó #JNM ¤¿¤±¤··¯
++¤¿¤±¤À¤­¤¾¤Ì #JN ÉðÅĵ³¤¾¤Ì
++¤¿¤±¤À¤­¤Ð #JN ÉðÅĵ³ÇÏ
++¤¿¤±¤À¤­¤Ð¤°¤ó¤À¤ó #T35 ÉðÅĵ³ÇÏ·³ÃÄ
++¤¿¤±¤Õ¤¸¤Î¤·¡¼¤¨¤à #JN ÉðÉٻΤΣãÍ
++¤¿¤³¤µ¤Ð #T35 tako»ª
++¤¿¤³¤Í¤³ #JN ¥¿¥³¤Í¤³
++¤¿¤³¤Í¤³ #JN ¥¿¥³¤Í¤³
++¤¿¤·¤í #JNS ÅÄÂå
++¤¿¤·¤í #T35 ÅÄÂå
++¤¿¤·¤í¤Ã¤¯ #KK ¥¿¥·¥í¥Ã¥¯
++¤¿¤·¤í¤Û¤¦ #T35 ÅÄÂåˤ
++¤¿¤·¤í¤Þ¤µ¤· #JN ÅÄÂå¤Þ¤µ¤·
++¤¿¤·¤í¤Þ¤Ä¤ê #T35 ÅÄÂåº×¤ê
++¤¿¤¸¤å¤¦ #T30 ¿½Å
++¤¿¤¸¤å¤¦¤È¤¦¤³¤¦ #T30 ¿½ÅÅê¹Æ
++¤¿¤¹¤£¤í¤¹ #T35 ¥¿¥¹¥£¥í¥¹
++¤¿¤½¤¬¤ì #KK ïÈà
++¤¿¤½¤¬¤ì #T35 ïÈà
++¤¿¤½¤½¤­¡¼¤½ #CJ ¥¿¥½¥½¥­¡¼¥½
++¤¿¤½¤½¤­¡¼¤½ #CJ ŽÀŽ¿Ž¿Ž·Ž°Ž¿
++¤¿¤½¤½¤­¡¼¤½ #JN (Žß¢ÏŽß)ŽÀŽ¿Ž¿Ž·Ž°Ž¿
++¤¿¤½¤½¤­¡¼¤½ #JN ¥¿¥½¥½¥­¡¼¥½
++¤¿¤½¤½¤­¡¼¤½ #JN ŽÀŽ¿Ž¿Ž·Ž°Ž¿
++¤¿¤¿ #K5r á
++¤¿¤¿¤­ #T35 ᤭
++¤¿¤¿¤¯ #K5r ᤯
++¤¿¤À¤­¤Á¤µ¤ó #JN ÃéµÈ¤µ¤ó
++¤¿¤À¤­¤Á¤µ¤ó #JN ÃéµÈ¤µ¤ó
++¤¿¤À¤Î #T35 TDN
++¤¿¤À¤ó¤¯¤· #T35 ¿Ãʶú
++¤¿¤Ã¤­¤å¤¦ #T35 Âðµå
++¤¿¤Æ¤¢¤é¤· #T35 Ω¤Æ¹Ó¤é¤·
++¤¿¤Æ¤Ê¤ª¤· #T35 Ω¤Æľ¤·
++¤¿¤Æ¤Ë¤² #T30 Ω¤Æƨ¤²
++¤¿¤Æ¤è¤ß #T35 ½ÄÆɤß
++¤¿¤Ê¤« #JN ÅÄÃæ
++¤¿¤Ê¤« #JNS ÅÄÃæ
++¤¿¤Ê¤«¤Õ¤¡¤ó¤¿¤¸¤¤ #T35 ÅÄÃæ¥Õ¥¡¥ó¥¿¥¸¡¼
++¤¿¤Ê¤«¤â¤Ê¤ä #JN ÅÄÃæ¥â¥ÊÌé
++¤¿¤Ê¤Ð¤¿¤¨¤É¤¦¤í¤¦¤â¤Ê¡¼ #JN ¼·Í¼³¨¤É¤¦¤í¤¦¥â¥Ê¡¼
++¤¿¤Ë¤¶¤ï¤É¤¦¤Ö¤Ä¤Ó¤ç¤¦¤¤¤ó #T35 ë߷ưʪɱ¡
++¤¿¤Í #T35 ¼ï
++¤¿¤Í¤Á¤å¤¦ #T35 ¼ï¿ß
++¤¿¤Í¤Ê¤· #JN ¼ï̵¤·
++¤¿¤Í¤Ê¤· #T35 ¼ï̵¤·
++¤¿¤Ð #KK «
++¤¿¤Ð #T35 «
++¤¿¤Ð¤¸¤ç¤¦¤»¤ó #T35 «¾åÀþ
++¤¿¤Þ¤´ #T35 ¶Ì»Ò
++¤¿¤Þ¤Á¤ã¤ó #JN ¥¿¥Þ¤Á¤ã¤ó
++¤¿¤ß¤ä #KK ¥¿¥ß¥ä
++¤¿¤à¤é¤ê¤ç¤¦¤³ #JN Åļμ»Ò
++¤À¤á¤Ý #CJ ¡²|¡±|¡û
++¤À¤á¤Ý #CJ orz
++¤À¤á¤Ý #CJ _no
++¤¿¤â¤ê #JN ¥¿¥â¥ê
++¤¿¤é #KK í
++¤¿¤é #T35 í
++¤¿¤é¤³ #T35 ¥¿¥é¥³
++¤¿¤ê¤­¤Á¤ã¤ó #T35 ¾ÎϤÁ¤ã¤ó
++¤¿¤ê¤Ð¤ó #CN ¥¿¥êÈÄ
++¤¿¤ê¤Ð¤ó #T35 ¥¿¥êÈÄ
++¤¿¤ê¤Ð¤ó¤¿¤í¤¦ #T35 ¥¿¥ê¥Ð¥óÂÀϺ
++¤¿¤ë¤±¤¨ #T35 ¥¿¥ë¥±¡¼
++¤¿¤ì¤ß¤ß¤â¤Ê¡¼ #JN ¤¿¤ì¼ª¥â¥Ê¡¼
++¤¿¤í¤¦ #SUC ÂÀϺ
++¤¿¤í¤¦ #T35 ¡û¡ûÂÀϺ
++¤¿¤ï¤é #T35 TAWARA
++¤¿¤ó #SUC ¥¿¥ó
++¤¿¤ó #SUC ŽÀŽÝ
++¤¿¤ó¤­¤å¡¼ #CJ ¥¿¥ó¥­¥å¡¼
++¤¿¤ó¤­¤å¡¼ #CJ ŽÀŽÝŽ·Ž­Ž°
++¤¿¤ó¤­¤å¤¦ #CJ ¥¿¥ó¥­¥å¡¼
++¤¿¤ó¤­¤å¤¦ #CJ ŽÀŽÝŽ·Ž­Ž°
++¤¿¤ó¤½¤­¡¼¤ó #CJ (¡¦¢Ï¡¦)¥¿¥ó¥½¥­¡¼¥ó
++¤¿¤ó¤½¤­¡¼¤ó #CJ (¡¦¢Ï¡¦)ŽÀŽÝŽ¿Ž·Ž°ŽÝ
++¤¿¤ó¤½¤­¡¼¤ó #CJ (¡¬¢Ï¡¬)¥¿¥½¥½¥­¡¼¥½
++¤¿¤ó¤½¤­¡¼¤ó #CJ (Žß¢ÏŽß)ŽÀŽ¿Ž¿Ž·Ž°Ž¿
++¤¿¤ó¤½¤­¡¼¤ó #CJ ¥¿¥ó¥½¥­¡¼¥ó
++¤¿¤ó¤½¤­¡¼¤ó #CJ ŽÀŽÝŽ¿Ž·Ž°ŽÝ
++¤¿¤ó¤½¤­¡¼¤ó #JN (¡¦¢Ï¡¦)ŽÀŽÝŽ¿Ž·Ž°ŽÝ
++¤¿¤ó¤½¤­¡¼¤ó #JN ¥¿¥ó¥½¥­¡¼¥ó
++¤¿¤ó¤½¤­¡¼¤ó #JN ÀÝ¿·°Ý
++¤¿¤ó¤½¤­¡¼¤ó #JN ŽÀŽÝŽ¿Ž·Ž°ŽÝ
++¤¿¤ó¤½¤¯¤ä¤¯¤¶ #JN û­ŽÔŽ¸Ž»ŽÞ
++¤¿¤ó¤Ý¤Ý¤½¤ó¤· #JN ³÷¸ø±Ñº»Õ
++¤À¡¼¤ä¤¹ #JN ¥À¡¼¥ä¥¹
++¤À¡¼¤ä¤¹ #T35 ¥À¡¼¥ä¥¹
++¤À¡¼¤ä¤¹¤­¤Î¤³ #JN ¥À¡¼¥ä¥¹¥­¥Î¥³
++¤À¤¢¤ä¤¹ #JN ¥À¡¼¥ä¥¹
++¤À¤¤¤ª¤¦¤Ò¤µ¤Þ #T35 Â粦ÈÞÍÍ
++¤À¤¤¤«¤ó¤²¤ó #T35 Âç´Ô¸µ
++¤À¤¤¤µ¤¯ #JN Âçºî
++¤À¤¤¤·¤å¤ê¤ç¤¦¤­¤ó¤°¤¾¡¼¤Ì #JN Âç¼óÎÎ¥­¥ó¥°¥¾¡¼¥Ì
++¤À¤¤¤·¤ó¤«¤ó¤³¤ê¤ó¤º #JN Âç¿À´±¥³¥ê¥ó¥º
++¤À¤¤¤·¤ó¤«¤ó¤Æ¤Ê¡¼ #JN Âç¿À´±¥Æ¥Ê¡¼
++¤À¤¤¤·¤ó¤«¤ó¤â¤Ò¤ã #JN Âç¿À´±¥â¥Ò¥ã
++¤À¤¤¤»¤ó¤»¤¤ #T35 ÂçÀèÀ¸
++¤À¤¤¤È¤¦¤¢¤Æ¤¤¤³¤¯ #KK ÂçÅì°¡Äë¹ñ
++¤À¤¤¤È¤¦¤¢¤Æ¤¤¤³¤¯ #T35 ÂçÅì°¡Äë¹ñ
++¤À¤¤¤Ë¤Á¤å¤¦¤Ü¤¦¤¤¤¿ #T35 Âè2¿ß˼ÈÄ
++¤À¤¤¤Ë¤Á¤å¤¦¤Ü¤¦¤¤¤¿ #T35 Â裲¿ß˼ÈÄ
++¤À¤¤¤Ð¤¯¤Ï¤Ä #JN ÂçÇúȯ
++¤À¤¦¤½ #T30 ¥À¥¦¥½
++¤À¤¦¤½ #T35 ¥À¥¦¥½
++¤À¤¦¤ó #T30 ¥À¥¦¥½
++¤À¤¦¤ó #T35 ¥À¥¦¥½
++¤À¤¦¤ó #T35 ¥À¥¦¥ó
++¤À¤¬¤½¤ì¤¬¤¤¤¤ #CJ ¤À¤¬¤½¤ì¤¬¤¤¤¤
++¤À¤±¤É #SUC ¤À¤±¤É
++¤À¤±¤É¤Ê¤Ë¤«¤·¤Ä¤â¤ó¤¢¤ë #CJ ¤À¤±¤É¡¢²¿¤«¼ÁÌ䤢¤ë¡©
++¤À¤±¤Ï¤«¤ó¤Ù¤ó¤·¤Æ¤¯¤À¤µ¤¤ #CJ ¤À¤±¤Ï´ªÊÛ¤·¤Æ¤¯¤À¤µ¤¤
++¤À¤µ¤¤¤¿¤Þ #T35 ¥À¥µ¥¤¥¿¥Þ
++¤À¤¹¤Ù¤§¤À #JN ½Ð¤¹¤Ù¤§ÂÀ
++¤À¤¹¤ì #T35 ÂÌ¥¹¥ì
++¤À¤¹¤ì¤·¤å¤¦¤è¤¦¤¸¤ç #T35 ÂÌ¥¹¥ì¼ýÍƽê
++¤À¤»¡¼¤è #JN ¥À¥»¡¼¥è
++¤À¤½¤Ê #JN ¥À¥½¥Ê
++¤À¤Ã¤³¤Á¤å¤¦ #T35 ¤À¤Ã¤³¿ß
++¤À¤Ã¤È¤¤¤­ #CJ datÀ¤­
++¤À¤Ã¤È¤¤¤­¤µ¤æ¤ê #JN DATÀ¤­º´Í´Íý
++¤À¤Ã¤È¤ª¤Á #CJ datÍî¤Á
++¤À¤Ö¤ë¤¤¤«¤ä¤­¤½¤Ð #JN ¥À¥Ö¥ë¤¤¤«¾Æ¤­¤½¤Ð
++¤À¤Ö¤ë¤Þ¡¼¤Á #T35 £×£Í£Á£Ò£Ã£È
++¤À¤Þ¤·¤¹¤ì #T35 ñÙ¤·¥¹¥ì
++¤À¤Þ¤ì¤³¤¾¤¦ #JN ¥À¥Þ¥ì¥³¥¾¥¦
++¤À¤ß¤¢¤ó #T35 ¥À¥ß¥¢¥½
++¤À¤ß¤¢¤ó #T35 ¥À¥ß¥¢¥ó
++¤À¤ß¤¢¤ó #T35 ¥À¥ß¥ä¥½
++¤À¤à #JN ¢º¡Ê¡¦¦Ø¡¦¡Ë¢»
++¤À¤à #JN ÂÌ̵
++¤À¤à #T35 ÂÌÌ´
++¤À¤à #T35 ÂÌ̵
++¤À¤á¤«¡¼ #CJ ÂÌÌܤ«¡¼
++¤À¤á¤«¤¢ #CJ ÂÌÌܤ«¡¼
++¤À¤á¤¹¤ì¤Ã¤É¤«¤ó¤ê¤­¤³¤¦ #JN ÂÌÌÜŽ½ŽÚŽ¯ŽÄŽÞ´ÉÍýµ¡¹½
++¤À¤á¤Ê¤ä¤Ä¤Ï¤Ê¤Ë¤ò¤ä¤Ã¤Æ¤À¤á #CJ ¤À¤á¤Ê¤ä¤Ä¤Ï²¿¤ò¤ä¤Ã¤Æ¤âÂÌÌÜ
++¤À¤á¤Ê¤ä¤Ä¤Ï¤Ê¤Ë¤ò¤ä¤Ã¤Æ¤â¤À¤á #CJ ¤À¤á¤ÊÅۤϲ¿¤ò¤ä¤Ã¤Æ¤â¤À¤á
++¤À¤á¤Ê¤ä¤Ä¤Ï¤Ê¤Ë¤ò¤ä¤Ã¤Æ¤â¤À¤á #JN ¤À¤á¤ÊÅۤϲ¿¤ò¤ä¤Ã¤Æ¤â¤À¤á
++¤À¤á¤Ð¤³ #T35 ¥À¥áÈ¢
++¤À¤á¤Ü¤Ã¤¯¤¹ #T35 ¥À¥á¥Ü¥Ã¥¯¥¹
++¤À¤è¤â¤ó #T35 ¤À¤è¤â¤ó
++¤À¤ë¤Þ¤â¤Ê¡¼ #JN ¤À¤ë¤Þ¥â¥Ê¡¼
++¤À¤ë¤Þ¤â¤Ê¡¼ #JN ¤À¤ë¤Þ¥â¥Ê¡¼
++¤À¤ì¤¤¤ä¤Í¤ó #JN ÂÄÎî²°Ç°¡¡
++¤À¤ì¤¹ #T35 Ḁ̂쥹
++¤À¤ì¤â¤¤¤Ê¤¤¤¹¤ì¤Ò¤È¤ê¤Ü¤Ã¤Á #CJ ï¤â¤¤¤Ê¤¤¥¹¥ì¡£¤Ò¤È¤ê¤Ü¤Ã¤Á
++¤Á¡¼¤º¤±¡¼¤­ #JN ŽÁŽ°Ž½ŽÞŽ¹Ž°Ž·
++¤Á¡¼¤à¤Ë¤Á¤ã¤ó¤Í¤ë #KK ¥Á¡¼¥à£²¤Á¤ã¤ó¤Í¤ë
++¤Á¤£¤â¤Ê¡¼ #JN ¤Á¤£¥â¥Ê¡¼
++¤Á¤§¤­¤Ê #T35 ¥Á¥§¥­¥Ê
++¤Á¤§¤Á¤§¤ó #T35 ¥Á¥§¥Á¥§¥ó
++¤Á¤§¤Ã #JN ¡¥¡¥¡¥(¡­§©¡®¡ËŽÁŽªŽ¯
++¤Á¤§¤Ã #JN ¤Á¤§¤Ã
++¤Á¤«¤¯¤Ø¤ó¤É¤¦ #T30 ÃϳÌÊÑÆ°
++¤Á¤«¤¯¤Ø¤ó¤É¤¦ #T35 ÃϳÌÊÑÆ°
++¤Á¤«¤² #JNM ¥Á¥«¥²
++¤Á¤«¤² #JNM ·ì±Æ
++¤Á¤«¤² #JNM Æý±Æ
++¤Á¤«¤² #T35 ¥Á¥«¥²
++¤Á¤«¤² #T35 ·ì±Æ
++¤Á¤«¤² #T35 Æý±Æ
++¤Á¤«¤¹¤ì #T35 Ãϲ¼¥¹¥ì
++¤Á¤«¤ó #T35 ÃÔ´Á
++¤Á¤«¤ó¤Ç¤Ã¤Á¤¢¤² #T35 ÃÔ´Á¤Ç¤Ã¤Á¾å¤²
++¤Á¤­¤ó¤ì¡¼¤¹ #T35 ¥Á¥­¥ó¥ì¡¼¥¹
++¤Á¤­¤ó¤ì¤¨¤¹ #T35 ¥Á¥­¥ó¥ì¡¼¥¹
++¤Á¤²¡¼¤è #JN ¥Á¥²¡¼¥è
++¤Á¤´¤¤¤Í #CJ ¥Á¥´¥¤¥Í
++¤Á¤·¤ç¤¦ #T35 ÃÓ¾Â
++¤Á¤º #T35 ÃÏ¿Þ
++¤Á¤¿¤Í¡¼¤è #JN ¥Á¥¿¥Í¡¼¥è
++¤Á¤Á¤ç¤ó¤Þ¤ó¤Á #JN ¤Á¤Á¤ç¤ó¤Þ¤ó¤Á
++¤Á¤Ã¤Ñ¤ó #KK ¤Á¤Ã¤Ñ¤ó
++¤Á¤Æ¤¤ #KK ÃÏÄì
++¤Á¤Æ¤¤ #T35 ÃÏÄì
++¤Á¤Æ¤¤¤â¤Ê #JN ÃÏÄì¤â¤Ê
++¤Á¤Í¤Ð¡¼ #JN ¥Á¥Í¥Ð¡¼
++¤Á¤Ð¤²¤ó¤¸¤ó #T35 ÀéÍÕ¸¶¿Í
++¤Á¤Ð¤·¤·¤ã #T35 ÃÔÇÍ»à¼Ô
++¤Á¤Ð¤È¤ß¤ó #T35 ÀéÍÕÅÔ̱
++¤Á¤Ð¤é¤­ #CN ¥Á¥Ð¥é¥­
++¤Á¤Ð¤é¤­ #T35 ¥Á¥Ð¥é¥­
++¤Á¤Ð¤é¤® #CN ¥Á¥Ð¥é¥®
++¤Á¤Ð¤é¤® #T35 ¥Á¥Ð¥é¥®
++¤Á¤Ó¤®¤³ #JN ¤Á¤Ó¥®¥³
++¤Á¤Ó¤®¤³¤Ö¤ê #JN ¤Á¤Ó¥®¥³¥Ö¥ê
++¤Á¤Ó¤·¤£ #JN ¤Á¤Ó¤·¤£
++¤Á¤Ó¤Õ¤µ #JN ¥Á¥Ó¥Õ¥µ
++¤Á¤Ó¤â¤é¤é¡¼ #JN ¥Á¥Ó¥â¥é¥é¡¼
++¤Á¤á¤¤ #T35 ÃÏ̾
++¤Á¤ã¤¤ #JN ¡¡¡¡,._.,¡¡
++¤Á¤ã¤¤ #JN ŽÁŽ¬Ž²¡¡
++¤Á¤ã¤Ö¤À¤¤ #JN ¤Á¤ã¤ÖÂæ
++¤Á¤ã¤Ö¤À¤¤ #JN ¨µ¨¬¨µ
++¤Á¤ã¤Ö¤À¤¤¤¤¤É¤¦ #JN ¤Á¤ã¤ÖÂæ°ÜÆ°
++¤Á¤ã¤à #JN ¥Á¥ã¥à
++¤Á¤ã¤à #T35 ¥Á¥ã¥à
++¤Á¤ã¤ó¤³ #JN ¥Á¥ã¥ó¥³
++¤Á¤ã¤ó¤³¤Þ¤¹¤À #T35 ¥Á¥ã¥ó¥³ÁýÅÄ
++¤Á¤ã¤ó¤³¤í #T35 ¥Á¥ã¥ó¥³¥í
++¤Á¤ã¤ó¤µ¤Þ #SUC ¤Á¤ã¤óÍÍ
++¤Á¤ã¤ó¤µ¤Þ #T35 ¤Á¤ã¤óÍÍ
++¤Á¤å¡¼¤Á¤å¡¼¤½¤ó¤° #KK ¤Á¤å¡¼¤Á¤å¡¼¥½¥ó¥°
++¤Á¤å¡¼¤Ü¡¼ #JN ¥Á¥å¡¼¡¦¥Ü¡¼
++¤Á¤å¡¼¤Ü¡¼¤Ç¤¹¤è #JN ¥Á¥å¡¼¥Ü¡¼¤Ç¤¹¤è¡ª
++¤Á¤å¤¦ #T35 ¿ß
++¤Á¤å¤¦¤«¤ê¤ç¤¦¤ê¤í¤Ü¤»¤ó¤³¤¦¤·¤ã #JN Ãæ²ÚÎÁÍý¥í¥ÜÀè¹Ô¼Ô
++¤Á¤å¤¦¤¬¤¯¤»¤¤¤Á¤Ï¤ë #T35 Ãæ³ØÀ¸¤Á¤Ï¤ë
++¤Á¤å¤¦¤±¤¤ #T30 Ãæ·Ñ
++¤Á¤å¤¦¤±¤ó #JN Ãæ·ø
++¤Á¤å¤¦¤±¤ó #T35 Ãæ·ø
++¤Á¤å¤¦¤³¤ª¤ó¤Ê #T35 Ãæ¸Å½÷
++¤Á¤å¤¦¤Á¤å¤¦¤½¤ó¤° #T35 ¤Á¤å¡¼¤Á¤å¡¼¥½¥ó¥°
++¤Á¤å¤¦¤Ö¤ë¤ª¤ó¤Ê #T35 Ãæ¸Å½÷
++¤Á¤å¤¦¤Ü¤¦ #T35 ¿ß˼
++¤Á¤å¤¦¤Ü¤¦¤°¤ó¤À¤ó #T35 ¿ß˼·³ÃÄ
++¤Á¤å¤¦¤Ü¤¦¤ê¤Ë¤å¤¦¤ê¤ç¤¯ #KK ¿ß˼ΥÆý¿©
++¤Á¤å¤× #T35 ¥Á¥å¥×
++¤Á¤å¤×¤¿¤ó #T35 ¥Á¥å¥×¥¿¥ó
++¤Á¤å¤×¤¿¤ó #T35 ŽÁŽ­ŽÌŽßŽÀŽÝ
++¤Á¤æ #JN ¤Á¤æ
++¤Á¤æ¤â¤Ê #JN ¤Á¤æ¤â¤Ê
++¤Á¤ç¤¤¤Î¤ê #T35 ¥Á¥ç¥¤¥Î¥ê
++¤Á¤ç¤¦¤ª¤ì¤°¤ë¤Þ #JN Ķ²¶¼Ö
++¤Á¤ç¤¦¤»¤¤¤É¤Ã¤È #JN .
++¤Á¤ç¤¦¤»¤¤¤É¤Ã¤È #JN Ä´À°¥É¥Ã¥È
++¤Á¤ç¤¦¤»¤ó¤·¤ã #JN Ä©Àï¼Ô
++¤Á¤ç¤¦¤»¤ó¤»¤¤ #JN ĶÀèÀ¸
++¤Á¤ç¤¦¤»¤ó¤»¤¤ #T35 ĶÀèÀ¸
++¤Á¤ç¤¦¤Ë¤Á¤·¤ó¤Ö¤ó #KK ¤Á¤ç¤¦¤Ë¤Á¿·Ê¹
++¤Á¤ç¤¦¤Ë¤Á¤·¤ó¤Ö¤ó #T35 ¤Á¤ç¤¦¤Ë¤Á¿·Ê¹
++¤Á¤ç¤¦¤Õ¤¯¤¹¤ì #T35 ½ÅÊ£¥¹¥ì
++¤Á¤ç¤¦¤Õ¤¯¤¹¤ì¤Ã¤É #T35 ½ÅÊ£¥¹¥ì¥É
++¤Á¤ç¤¦¤Ö¤ó¤ì¤¹ #T35 Ĺʸ¥ì¥¹
++¤Á¤ç¤¦¤ì¤¹ #T35 Ĺ¥ì¥¹
++¤Á¤ç¤¦¤í¤¦ #JN ĹϷ
++¤Á¤ç¤¦¤í¤¦ #T35 ĹϷ
++¤Á¤ç¤¯¤ê¤ó #T30 ľ¥ê¥ó
++¤Á¤ç¤¯¤ê¤ó¤¯ #T30 ľ¥ê¥ó¥¯
++¤Á¤ç¤·¤å¤µ¤ó #T35 ¥Á¥ç¥·¥å¥µ¥ó
++¤Á¤ç¤·¤å¤µ¤ó #T35 ŽÁŽ®Ž¼Ž­Ž»ŽÝ
++¤Á¤ç¤½ #T35 ¥Á¥ç¥½
++¤Á¤ç¤½ #T35 ŽÁŽ®Ž¿
++¤Á¤ç¤Ã¤Ñ¤ê #T35 ¥Á¥ç¥Ã¥Ñ¥ê
++¤Á¤ç¤é¤Í¡¼¤è #JN ¥Á¥ç¥é¥Í¡¼¥è
++¤Á¤ç¤ì¤®¤µ¤é¤À #JN ¥Á¥ç¥ì¥®¥µ¥é¥À
++¤Á¤ç¤ó #T35 ¥Á¥ç¥ó
++¤Á¤ç¤ó #T35 ŽÁŽ®ŽÝ
++¤Á¤ç¤ó¤¤¤ë¤·¤ó¤Ö¤ó #KK ¥Á¥ç¥ó¥¤¥ë¿·Ê¹
++¤Á¤ç¤ó¤¤¤ë¤·¤ó¤Ö¤ó #T35 ¥Á¥ç¥ó¥¤¥ë¿·Ê¹
++¤Á¤ç¤ó¤Ê #CJ ¥Á¥ç¥ó¤Ê
++¤Á¤é¤Í¡¼¤è #JN ¥Á¥é¥Í¡¼¥è¡¡
++¤Á¤ì¤¹ #T30 Ã٥쥹
++¤Á¤ì¤¹ #T35 Ã٥쥹
++¤Á¤ó #T35 Ä¿
++¤Á¤ó #T35 ÄÁ
++¤Á¤ó¤«¤³¤ß¤À¤ó #T35 ÄÁ°ÏÃÄ
++¤Á¤ó¤² #JN ¥Á¥ó¥²
++¤Á¤ó¤² #T35 ¥Á¥ó¥²
++¤Á¤ó¤³¤ª¤ó¤É #T35 ¤Á¤ó¤³²»Æ¬
++¤Á¤ó¤³¤à¤®¤å¡¼ #CJ ¤Á¤ó¤³¤à¤®¤å¡¼
++¤Á¤ó¤³¤à¤®¤å¤¦ #CJ ¤Á¤ó¤³¤à¤®¤å¡¼
++¤Á¤ó¤·¤ã #T35 ÄÁ¼Ö
++¤Á¤ó¤¸¤ç #T35 ÄÁ½÷
++¤Á¤ó¤½¤¦ #T30 ÄÁÁÕ
++¤Á¤ó¤½¤¦¤¢¤é¤· #JN ÄÁÁö¹Ó¤é¤·
++¤Á¤ó¤½¤¦¤¸¤ó #T35 ÄÁÁÕ¿Í
++¤Á¤ó¤½¤¦¤À¤ó #T35 ÄÁÁÕÃÄ
++¤Á¤ó¤½¤¦¤À¤ó #T35 ÄÁÁöÃÄ
++¤Á¤ó¤½¤¦¤É #T35 ÄÁÁÕÅÛ
++¤Á¤ó¤½¤¦¤Ù¤ó¤¸¤ç #T35 ÄÁÁÕÊؽê
++¤Á¤ó¤½¤¦¤â¤é¤é¡¼ #JN ÄÂÁö¥â¥é¥é¡¼
++¤Á¤ó¤Ç¤£¤¤ #T35 ÄÁD
++¤Á¤ó¤Ð¤ó #T35 ÄÁÈ×
++¤Á¤ó¤×¤¦ #KK ÄÁÉ÷
++¤Á¤ó¤×¤¦ #KK ÄÄÉ奦
++¤Á¤ó¤×¤¦ #T35 ÄÁÉ÷
++¤Á¤ó¤×¤¦ #T35 ÄÄÉ奦
++¤Á¤ó¤×¤¯ #T35 ÄÁÉþ
++¤Á¤ó¤Ý¡¼ #JN ¡Ê¡¦¢Ï¡¦¡ËŽÁŽÝŽÎŽßŽ°!!
++¤Á¤ó¤Ý¡¼ #JN ÁÝÎß!
++¤Á¤ó¤Ý¡¼ #JN ŽÁŽÝŽÎŽßŽ°!!
++¤Á¤ó¤Ý¤´¤­¤Ö¤ê #JN ¥Á¥ó¥Ý¥´¥­¥Ö¥ê
++¤Á¤ó¤Ý¤À¤ó #T35 ÄÁÊâÃÄ
++¤Â¤ã¤ó #JN ¥Â¥ã¥ó
++¤Â¤ó¤®¤ç #JN ¤Â¤óµû
++¤Ã¤Æ¤¤¤¦¤«¤¦¡«¤¡¤« #CJ ¤Ã¤Æ¤¤¤¦¤«¡¢¥ô¥¡¥«¡©
++¤Ã¤Æ¤¤¤¦¤«¤¦¡«¤¡¤« #CJ ¤Ã¤Æ¤¤¤¦¤«¡¢Ž³ŽÞŽ§Ž¶¡©
++¤Ã¤Æ¤¤¤¦¤«¤¦¡«¤¡¤« #CJ ¤Ã¤Æ¤¤¤¦¤«¡¢Ž³ŽÞŽ§Ž¶¡©>>
++¤Ä #R5r Äà
++¤Ä #R5 Äà
++¤Ä¡«¤µ¤¯¤Ä¡«¤¨¤½ #JN (?¢Ï?)
++¤Ä¡«¤µ¤¯¤Ä¡«¤¨¤½ #JN ¥Å¥µ¥¯¥Å¥¨¥½
++¤Ä¡«¤µ¤¯¤Ä¡«¤¨¤½ #JN ŽÂŽÞŽ»Ž¸ŽÂŽÞŽ´Ž¿
++¤Ä¡¼ #JN ¤Ä¡¼
++¤Ä¡¼¤« #CJ ¤Ä¡¼¤«
++¤Ä¡¼¤«¤«¤³¤í¤°¤è¤á #JN ¤Ä¡¼¤«²áµî¥í¥°Æɤá
++¤Ä¤¦¡«¤¡¤¤ #JN ¥Ä¥ô¥¡¥¤
++¤Ä¤¦¤¸¤ç¤¦¤Î¤µ¤ó¤Ð¤¤ #CJ Ä̾ï¤Î£³ÇÜ
++¤Ä¤¦¤¸¤ç¤¦¤Î¤µ¤ó¤Ð¤¤ #T35 Ä̾ï¤Î£³ÇÜ
++¤Ä¤¦¤Û¤¦¤·¤Þ¤¹¤¿ #T35 ÄÌÊó¤·¤Þ¤¹¤¿
++¤Ä¤« #KK ÄÍ
++¤Ä¤« #T35 ÄÍ
++¤Ä¤­ #T35 ·î
++¤Ä¤­¤Á¤å¤¦ #T35 ·î¿ß
++¤Ä¤­¤Î¤Ï¤·¤º¤¯ #JN ¤Ä¤­¤Î¤Ï¤·¤º¤¯
++¤Ä¤­¤Ò¤á #KK ·îɱ
++¤Ä¤¸ #T35 ¤Î¤Î¤¿¤ó
++¤Ä¤¸ #T35 ÄÔ
++¤Ä¤¸¡¼¤ó #JN ÄÔ¡¼¤ó
++¤Ä¤¸¡¼¤ó #T35 ÄÔ¡¼¤ó
++¤Ä¤¸¤¤¤ó #T35 ÄÔ¡¼¤ó
++¤Ä¤¸¤¨¤­ #JN ÄÔ±Ø
++¤Ä¤Î¤â¤Ê¡¼ #JN ¤Ä¤Î¥â¥Ê¡¼
++¤Ä¤Ü #CN ÄÛ
++¤Ä¤Ü #T35 ÄÚ
++¤Ä¤Ü #T35 ÄÛ
++¤Ä¤Ü¤Þ¤¸¤ó¤ß¤Ë¤Ê¤Ë¤ç¤ê¡¼¤Ê #JN ÄÛËâ¿Í¡¦ŽÐŽÆŽÅŽÆŽ®ŽØŽ°ŽÅ
++¤Ä¤Þ¤ó¤Í #CJ ¥Ä¥Þ¥ó¥Í
++¤Ä¤â #JN ¥Ä¥â
++¤Ä¤æ¤Ò¤¿ #T35 ¤Ä¤æ¤Ò¤¿
++¤Ä¤é¤¤¤³¤È¤ò¤ª¤â¤¦¤â¤é¤é¡¼ #JN ¿É¤¤¤³¤È¤ò»×¤¦¥â¥é¥é¡¼
++¤Ä¤ê #T35 Äà¤ê
++¤Ä¤ê¤· #T35 Äà¤ê»Õ
++¤Ä¤ë¤Ù¤¸¤±¤ó #T35 ÄáÉÓ»ö·ï
++¤Ä¤ì¤¿ #T35 Äà¤ì¤¿
++¤Å¡¼ #JN ¤Å¡¼
++¤Æ¤£¡¼ #JN £ô¡¡
++¤Æ¤£¡¼¤À #JN ¥Æ¥£¡¼¥À
++¤Æ¤£¤¤¤Ç¤£¤¤¤¨¤Ì #T35 TDN
++¤Æ¤£¤«¤² #JNM ¥Æ¥£¥«¥²
++¤Æ¤£¤«¤² #T35 ¥Æ¥£¥«¥²
++¤Æ¤£¤­¤ã¡¼¤² #T35 ¥Æ¥£¥­¥ã¡¼¥²
++¤Æ¤£¤­¤ã¤¢¤² #T35 ¥Æ¥£¥­¥ã¡¼¥²
++¤Æ¤£¤Ð #T35 ¥Æ¥£¥Ð
++¤Æ¤£¤Ð #T35 ŽÃŽ¨ŽÊŽÞ
++¤Æ¤£¤à¤Ý #T35 ¥Æ¥£¥à¥Ý
++¤Æ¤£¤à¤Ý¤Î¤ï¤®¤ê #T35 ¥Æ¥£¥à¥Ý¤ÎÎØÀÚ¤ê
++¤Æ¤£¤à¤Ý¤Î¤ï¤®¤ê #T35 ŽÃŽ¨ŽÑŽÎŽß¤ÎÎØÀÚ¤ê
++¤Æ¤£¤à¤Ý¤Ó¤ë #T35 ¥Æ¥£¥à¥Ý¥Ó¥ë
++¤Æ¤£¤ó¤Ý #T35 ¥Æ¥£¥ó¥Ý
++¤Æ¤¤¤­¤±¤ó #T35 Äê´ü·ô
++¤Æ¤¤¤­¤ç¤¦ #T35 Ä㶸
++¤Æ¤¤¤³¤¯¤á¤¤¤É #JN ÄëԢ̽ÅÓ
++¤Æ¤¤¤·¤å¤«¤ó¤Ñ¤¯¤â¤Ê¡¼ #JN Äâ¼ç´ØÇò¥â¥Ê¡¼
++¤Æ¤¤¤»¤Ä #T35 ÄêÀâ
++¤Æ¤¤¤É¤Ò¤¯ #KYT ÄøÅÙÄã
++¤Æ¤«¤ê¤Ö¤¿ #T35 ¥Æ¥«¥êÆÚ
++¤Æ¤­¤¸¤ç #T30 ¤Æ¤­¤¸¤ç
++¤Æ¤­¤È #JN ¥Æ¥­¥È
++¤Æ¤¯¤â #KK ¼êÃØéá
++¤Æ¤¯¤â #T35 ¼êÃØéá
++¤Æ¤¹¤Æ¤¹ #CJ ¤Æ¤¹¤Æ¤¹
++¤Æ¤½ #JN ¥Æ¥½
++¤Æ¤½ #JN ŽÃŽ¿
++¤Æ¤½ #T35 ¥Æ¥½
++¤Æ¤½ #T35 ŽÃŽ¿
++¤Æ¤Ã¤³¤¦¤· #T35 ¥Æ¥Ã¥³¥¦¥·
++¤Æ¤Ã¤»¤ó¤«¤¤ #KK ïÄÀðÐò
++¤Æ¤Ã¤»¤ó¤«¤¤ #T35 ïÄÀðÐò
++¤Æ¤Ã¤Æ¤¤¤³¤¦¤»¤ó¤»¤ó¤²¤ó #JN Å°Äì¹³ÀïÀë¸À
++¤Æ¤Ä #T35 Å´
++¤Æ¤Ä¤ª¤¿¤¼¤Ã¤È¤¿¤±¤¢¤Ã¤È¤á¤¤¤Æ¤Ä #JN Å´¥ò¥¿£ÚÉð@¦ÌÅ´
++¤Æ¤Ä¤ª¤¿¤¼¤Ã¤È¤¿¤±¤á¤¤¤Æ¤Ä #JN Å´¥ò¥¿£ÚÉð@¦ÌÅ´
++¤Æ¤Ä¤Î¤ª¤­¤Æ #T35 Å´¤ÎÙÝ
++¤Æ¤Æ¤· #T35 ¤Æ¤Æ¤·
++¤Æ¤Ê¡¼ #JN ¥Æ¥Ê¡¼
++¤Æ¤Õ¤Æ¤Õ #JN ¤Æ¤Õ¤Æ¤Õ
++¤Æ¤á¤§¤â¤Ê¡¼ #JN ¥Æ¥á¥§¥â¥Ê¡¼
++¤Æ¤ë¤¯¤Ï¤Î¤ë #T35 ¤Æ¤ë¤¯¤Ï¤Î¤ë
++¤Æ¤ì¤Û #T35 ¥Æ¥ì¥Û
++¤Æ¤ì¤Û¤·¤å¤¦¤ê¤ç¤¦ #T30 ¥Æ¥ì¥Û½ªÎ»
++¤Æ¤ì¤Û¤Þ¤ó #JN ¥Æ¥ì¥Û¥Þ¥ó
++¤Æ¤ì¤Û¤é¤Ã¤·¤å #T35 ¥Æ¥ì¥Û¥é¥Ã¥·¥å
++¤Æ¤í¤¨¤ê¡¼¤Ê #JN ¥Æ¥í¥¨¥ê¡¼¥Ê
++¤Æ¤ó¤·¤¨¤ó #CJ Å·»È±ê
++¤Æ¤ó¤·¤¨¤ó #T35 Å·»È±ê
++¤Æ¤ó¤Î¤¦ #JN Å·¹Ä
++¤Æ¤ó¤×¤ì #T35 ¥Æ¥ó¥×¥ì
++¤Æ¤ó¤Ý¤Ã¤Æ #KS ¥Æ¥ó¥Ý¤Ã¤Æ
++¤Ç¤¢¤ë¤« #CJ ¤Ç¡¢¤¢¤ë¤«
++¤Ç¤£ #JN ¤Ç¤£
++¤Ç¤£¡¼¤¸¤§¡¼¤â¤Ê¡¼ #JN £Ä£Ê¥â¥Ê¡¼¡¡
++¤Ç¤£¡¼¤Ý #T35 £Ä¥Ý
++¤Ç¤£¤¢¤Ê¤µ¤Þ #JN ¥Ç¥£¥¢¥ÊÍÍ
++¤Ç¤£¤ª¤â¤é¤ó¤É¡¼ #JN ¥Ç¥£¥ª¡¦¥â¥é¥ó¥É¡¼
++¤Ç¤£¤ª¤ó¤°¤ó #T35 DION·³
++¤Ç¤£¤ë¤ì¤¦¡«¤¡¤ó¤¬¡¼ #JN ¥Ç¥£¥ë¥ì¥ô¥¡¥ó¥¬¡¼
++¤Ç¤£¤ë¤ì¤¦¡«¤¡¤ó¤¬¤¢ #JN ¥Ç¥£¥ë¥ì¥ô¥¡¥ó¥¬¡¼
++¤Ç¤¤¤È¤¤¤ì¤À¡¼ #T35 ¥Ç¥¤¥È¥¤¥ì¥À¡¼
++¤Ç¤¤¤È¤¤¤ì¤À¤¢ #T35 ¥Ç¥¤¥È¥¤¥ì¥À¡¼
++¤Ç¤¦¡« #JN DEVU
++¤Ç¤¦¡« #JN ¤à¤·¤ã¤à¤·¤ã¡Ê¡¡¡­¡Ë§¥¡Ê¡®¡Ë
++¤Ç¤¨¤ó¤Ñ¤ß¤ó¤¾¤¯ #T35 ¥Ç¡¼¥ó¥Ñ¥ß¥ó¥¾¥¯
++¤Ç¤¨¤ó¤Ñ¤ß¤ó¤¾¤¯ #T35 ŽÃŽÞŽ°ŽÝŽÊŽßŽÐŽÝŽ¿ŽÞŽ¸
++¤Ç¤«¤Á¤ç¤¦¤¢¤ó¤É¤«¤º #JN ¥Ç¥«Ä¹¡õ¥«¥º
++¤Ç¤¬¤ï #JNS ½ÐÀî
++¤Ç¤¬¤ï #T35 ½ÐÀî
++¤Ç¤¬¤ï¤Ò¤Ã¤·¤À¤â¤½ #T35 ½ÐÀîɬ»à¥À¥â¥½¡ª
++¤Ç¤³ #JN ÆÌ
++¤Ç¤³ #T35 ÆÌ
++¤Ç¤¸¤â¤Ê¤Æ¤¤¤Þ¡¼¤º¤í¤´ #JN ¥Ç¥¸¥â¥Ê¥Æ¥¤¥Þ¡¼¥º¥í¥´
++¤Ç¤¹ #SUC DEATH
++¤Ç¤¹ #SUC ¥Ç¥¹
++¤Ç¤¹¤¯¤È¤Ã¤×¤³¤¦¤«¤¤¤¹¤ì #T35 ¥Ç¥¹¥¯¥È¥Ã¥×¸ø³«¥¹¥ì
++¤Ç¤¹¤±¤É¤Ê¤Ë¤« #CJ ¤Ç¤¹¤±¤É¡¢²¿¤«¡©
++¤Ç¤¹¤Ç¤¹ #CJ ¤Ç¤¹¤Ç¤¹
++¤Ç¤¹¤È¤í¤¤¤µ¤Þ #JN ¥Ç¥¹¥È¥í¥¤ÍÍ
++¤Ç¤½¤Ñ #T35 ¥Ç¥½¥Ñ
++¤Ç¤Õ¤©¤ë¤È¤Ê¤Ê¤· #T35 ¥Ç¥Õ¥©¥ë¥È̵̾¤·
++¤Ç¤Ö¤ª¤¿ #T35 ¥Ç¥Ö¥ò¥¿
++¤Ç¤Ö¤­¤ó #JN ¥Ç¥Ö¥­¥ó
++¤Ç¤Ö¤À¤Ê¡¼ #JN ¥Ç¥Ö¥À¥Ê¡¼
++¤Ç¤Ö¤í¤ó¤² #T35 ¥Ç¥Ö¥í¥ó¥²
++¤Ç¤Ö¤ò¤¿ #T35 ¥Ç¥Ö¥ò¥¿
++¤Ç¤Ö¤ò¤¿¤Ò¤Ã¤­¡¼ #T35 ¥Ç¥Ö¥ò¥¿¥Ò¥Ã¥­¡¼
++¤Ç¤Ö¤ò¤¿¤Ò¤Ã¤­¤¤ #T35 ¥Ç¥Ö¥ò¥¿¥Ò¥Ã¥­¡¼
++¤Ç¤Ø¤é¡¼ #JN ¥Ç¥Ø¥é¡¼
++¤Ç¤Ü¤¹¤º¤á #JN ¥Ç¥Ü¤¹¤º¤á
++¤Ç¤Þ¤Á #T30 ½ÐÄ®
++¤Ç¤Þ¤Á #T35 ½ÐÄ®
++¤Ç¤è¤í¤·¤¤¤« #CJ ¤Ç¤è¤í¤·¤¤¤«
++¤Ç¤ê #R5 ¥Ç¥ê
++¤Ç¤ê¤«¤· #JN ¥Ç¥ê¡Ê¡­§×`¡Ë¥«¥·
++¤Ç¤ó¤­¤ª¤¦ #JN Åŵ¤²¦
++¤Ç¤ó¤²¤­¤Ð¤Á¤Ð¤Á #JN ¤Ç¤ó¤²¤­¥Ð¥Á¥Ð¥Á
++¤Ç¤ó¤·¤ã¤¦¤· #JN Åżֵí
++¤Ç¤ó¤·¤ã¤¬¤¢¤ë #T35 Åż֥¬¡¼¥ë
++¤Ç¤ó¤·¤ã¤®¤å¤¦ #JN Åżֵí
++¤Ç¤ó¤»¤Ä¤­¤ç¤¸¤ó¤¤¤Ç¤Û¤½ #JN ÅÁÀâµð¿ÀŽ²ŽÃŽÞŽÎŽ¿
++¤Ç¤ó¤¿¤Þ #T35 ÅĶÌ
++¤Ç¤ó¤Ä¤¦ #T35 ÅÅ2
++¤Ç¤ó¤È #T35 ÅÄÅÔ
++¤Ç¤ó¤É¤í #T35 ÅÄÅ¥
++¤Ç¤ó¤Ë #T35 ÅÅ2
++¤Ç¤ó¤Ñ #T35 ¥Ç¥ó¥Ñ
++¤Ç¤ó¤Ñ #T35 ÅÅÇÈ
++¤Ç¤ó¤Ñ¤ª¤Ï¤Ê¤Ð¤¿¤±¤¤¤¿ #T35 ÅÅÇÈ¡¦¤ª²ÖȪÈÄ
++¤Ç¤ó¤Ñ¤­¤·¤ã #T35 ÅÅÇȵ­¼Ô
++¤Ç¤ó¤Ñ¤­¤ã¤é #T35 ÅÅÇÈ¥­¥ã¥é
++¤Ç¤ó¤Ñ¤Á¤ç¤¦¤µ¤¤¤ó¤â¤Ê¡¼ #JN ÅÅÇÈÄ´ºº°÷¥â¥Ê¡¼
++¤Ç¤ó¤Ñ¤È¤· #T35 ÅÅÇÈÅÔ»Ô
++¤Ç¤ó¤Ñ¤Ë¤Á¤ã¤ó #T35 ÅÅÇÈ2ch
++¤Ç¤ó¤Ñ¤Ë¤Á¤ã¤ó¤Í¤ë #T35 ÅÅÇÈ2¤Á¤ã¤ó¤Í¤ë
++¤Ç¤ó¤Ñ¤â¤é¤é¡¼ #JN ÅÅÇÈ¥â¥é¥é¡¼
++¤Ç¤ó¤Ñ¤é¤¤¤¿¤¢ #T35 ÅÅÇȥ饤¥¿¡¼
++¤Ç¤ó¤Ñ¤ò¤¿ #T35 ÅÅÇÈ¥ò¥¿
++¤È #SUC ¤È¡£
++¤È¡¼¤Û¤° #CN ¥È¡¼¥Û¥°
++¤È¡¼¤Û¤° #T35 ¥È¡¼¥Û¥°
++¤È¤¤¤¦¤³¤È¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤Í #CJ ¤È¤¤¤¦¤³¤È¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤Í
++¤È¤¤¤¦¤³¤È¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤Í #CJ ¤È¤¤¤¦¤³¤È¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤Í¡£:)
++¤È¤¤¤Ã¤Æ¤ª¤¯¤®¤ê #CJ ¤È¸À¤Ã¤Æ¤ª¤¯µÁÍý
++¤È¤¤¤Ã¤Æ¤ß¤ë¤Æ¤¹¤È #CJ ¤È¸À¤Ã¤Æ¤ß¤ë¥Æ¥¹¥È
++¤È¤¥¤¶¤¦¡«¤£¤¯¤È¤ê¡¼ #JN ¥È¥¥¥¶¥ô¥£¥¯¥È¥ê¡¼
++¤È¤¦ #T35 Åã
++¤È¤¦¤«¤¤ #CN Åݲõ
++¤È¤¦¤«¤¤ #CN Å쳤
++¤È¤¦¤«¤¤ #KK Åݲõ
++¤È¤¦¤«¤¤ #T35 Åݲõ
++¤È¤¦¤«¤¤ #T35 Å쳤
++¤È¤¦¤­¤å¤¦¤Á¤å¤¦ #T35 ÅìµÞ¿ß
++¤È¤¦¤­¤ç¤¦ #JN Åìµþ
++¤È¤¦¤­¤ç¤¦ #T35 Åìµþ
++¤È¤¦¤­¤ç¤¦¤¢¤¯¤»¤¹ #KK Åìµþ¥¢¥¯¥»¥¹
++¤È¤¦¤­¤ç¤¦¤­¤Æ¤£¤¤ #T35 Åìµþkitty¡Ê¡÷£÷¹Ó
++¤È¤¦¤­¤ç¤¦¤¸¤¨¤ó #JN ¥È¥¦¥­¥ç¥¦¥¸¥¨¥ó
++¤È¤¦¤­¤ç¤¦¤»¤¤¤·¤ó¤Ó¤ç¤¦¤¤¤ó #JN ÅìµþÀº¿Àɱ¡¡¡
++¤È¤¦¤­¤ç¤¦¤È¤»¤¤¤½¤¦¤­¤ç¤¯ #JN ÅìµþÅÔÀ¶ÁݶÉ
++¤È¤¦¤­¤ç¤¦¤È¤ê¤Ä¤Þ¤Ä¤¶¤ï¤Ó¤ç¤¦¤¤¤ó #JN ÅìµþÅÔΩ¾¾Âôɱ¡
++¤È¤¦¤µ¤ó #T30 É㤵¤ó
++¤È¤¦¤¸¤ç¤¦¤»¤ó #T35 «¾åÀþ
++¤È¤¦¤À¤¤¤ª¤Á #T35 ÅìÂçÍî¤Á
++¤È¤¦¤Ï¤È #KK ÅìÈ·
++¤È¤¦¤Ï¤È #T35 ÅìÈ·
++¤È¤¦¤Ö¤Á¤å¤¦ #T35 ÅìÉð¿ß
++¤È¤¦¤Ö¤Ø¤Ã¤É #T35 ƬÉô¥Ø¥Ã¥É
++¤È¤¦¤Û¤° #T35 ¥È¡¼¥Û¥°
++¤È¤¦¤á¤¤¤¢¤Ü¡¼¤ó #T30 Æ©ÌÀ¤¢¤Ü¡¼¤ó
++¤È¤¦¤á¤¤¤¢¤Ü¤ª¤ó #T30 Æ©ÌÀ¤¢¤Ü¡¼¤ó
++¤È¤¦¤è¤³¤È¤Ã¤­¤å¤¦¤Ï¤Þ¤¤¤Ë¤Á¤Ü¤í¤¤¤Á #CJ Åì²£ÆõޤÏËèÆü¥Ü¥í»Ô!
++¤È¤¨¤¤¤Ð¤¹ #JN ÅԱĥХ¹
++¤È¤ª¤â¤ï¤ì #CJ ¤È»×¤ï¤ì¡£
++¤È¤ª¤â¤ï¤ì¤á #CJ ¤È»×¥ï¥ì¥á
++¤È¤­¤å¤ó #T35 ¤È¥­¥å¥ó
++¤È¤¯¤À¤³¤¦¤¤¤Á #JN ÆÁÅĹ̰ì
++¤È¤¯¤Æ¤¤¤ê¤ç¤«¤¯ #T35 ÆÃÄêιµÒ
++¤È¤¯¤Ë¤ó¤®¤ç¤¦¤»¤¤¤·¤ç¤· #JN ÆÃǧ¹ÔÀ¯½ñ»Î
++¤È¤¯¤Ë¤ó¤®¤ç¤¦¤»¤¤¤·¤ç¤· #KK ÆÃǧ¹ÔÀ¯½ñ»Î
++¤È¤¯¤á¤¤ #T35 ƿ̾
++¤È¤¯¤á¤¤¤¯¤· #T35 ƿ̾¶ú
++¤È¤¯¤á¤¤¤±¤¤¤¸¤Ð¤ó #T35 ƿ̾·Ç¼¨ÈÄ
++¤È¤±¤Í¡¼¤è #JN ¡Ê¡¬¦Ç¡¬¡Ë¡¡¥È¥±¥Í¡¼¥è
++¤È¤±¤Í¡¼¤è #JN ¥È¥±¥Í¡¼¥è
++¤È¤³¤í¤Ç #CJ ¤È¤³¤í¤Ç
++¤È¤³¤í¤ó¤È¤Á¤ã¤ê¤Ô¤«¤¡ #JN ¥È¥³¥í¥ó¥È¥Á¥ã¥ê¥Ô¥«¥¡¡ª
++¤È¤· #T35 ÅÔ»Ô
++¤È¤À¤Ê #T35 ¸Íê
++¤È¤Ã¤­¤å¤¦¤¾¤Ì¤´¤¦ #JN Æõޤ¾¤Ì¹æ
++¤È¤Ã¤Æ¤â¤¿¤á¤Ë¤Ê¤ë¤ª¤Ï¤Ê¤· #JN ¤È¤Ã¤Æ¤â¤¿¤á¤Ë¤Ê¤ë¤ªÏÃ
++¤È¤Ã¤È¤È¤¤¤¯¤ª #JN ¤È¤Ã¤È¤ÈÀÂÉ×
++¤È¤Ä¤²¤­ #T35 ÆÍ·â
++¤È¤Ä¤²¤­¤²¤Ã¤¿¡¼¤º #JN ·ãÆÍ¥²¥Ã¥¿¡¼¥º
++¤È¤Ä¤²¤­¤Á¤å¤¦ #T35 ÆÍ·â¿ß
++¤È¤Ê¤«¤¤ #JN ŽÄŽÅŽ¶Ž²
++¤È¤Ó¤¹¤­¡¼¤ä¡¼¤â¤Ê¡¼ #JN Èô¤Ó¥¹¥­¡¼¥ä¡¼¥â¥Ê¡¼
++¤È¤Ô #T35 ¥È¥Ô
++¤È¤Þ¤È #T35 tomato
++¤È¤à #JN ¥È¥à
++¤È¤á #T35 ¥È¥á
++¤È¤â¤è¤â¤Ê¡¼ #JN ÃÎÀ¤¥â¥Ê¡¼
++¤È¤ä¤Þ #T35 ¥È¥äËâ
++¤È¤ä¤Þ #T35 ŽÄŽÔËâ
++¤È¤ä¤Þ¤ó¤³ #T35 ¥È¥ä¥Þ¥ó¥³
++¤È¤ä¤Þ¤ó¤³ #T35 ŽÄŽÔŽÏŽÝŽº
++¤È¤è¤Ï¤·¤·¤ß¤ó #T35 Ë­¶¶»Ô̱
++¤È¤é¤¦¤Þ¡¼ #JN (||Žß§¥Žß)ŽÄŽ×Ž³ŽÏŽ°
++¤È¤é¤¦¤Þ¡¼ #JN ¥È¥é¥¦¥Þ¡¼
++¤È¤é¤¦¤Þ¡¼ #JN ŽÄŽ×Ž³ŽÏŽ°
++¤È¤é¤¯¤ó¤¢¤ó¤É¤«¤×¤¯¤ó #JN ¤È¤é¤¯¤ó¡õ¤«¤×¤¯¤ó
++¤È¤é¤¯¤ó¤¢¤ó¤É¤«¤×¤¯¤ó #JN ¤È¤é¤¯¤ó¡õ¤«¤×¤¯¤ó
++¤È¤é¤é¡¼ #JN ¥È¥é¥é¡¼
++¤È¤ê #CN Ä»
++¤È¤ê #CN ÆÓ
++¤È¤ê #KK ÆÓ
++¤È¤ê #T35 Ä»
++¤È¤ê #T35 ÆÓ
++¤È¤ê¤³¤á #CN ¼è¤ê¹þ¤á
++¤È¤ê¤³¤á #CN Ä»ÊÆ
++¤È¤ê¤³¤á #T35 ¼è¤ê¹þ¤á
++¤È¤ê¤³¤á #T35 Ä»ÊÆ
++¤È¤ê¤µ¤ó #JN ¥È¥ê¤µ¤ó
++¤È¤ê¤Ã¤× #T35 ¥È¥ê¥Ã¥×
++¤È¤ê¤È¤È¤ó¤Ç¤¤¤ë¤â¤é¤é¡¼ #JN Ä»¤ÈÈô¤ó¤Ç¤¤¤ë¥â¥é¥é¡¼
++¤È¤ê¤Ï¤à #T35 Ä»¤Ï¤à
++¤È¤ì¤«¤á #T35 ¥È¥ì¥«¥á
++¤È¤ó #T35 ­Å
++¤È¤ó¤­¤ó #CN ¥È¥ó¥­¥ó
++¤È¤ó¤­¤ó #T35 ¥È¥ó¥­¥ó
++¤È¤ó¤Á¤ã¤â¤ó #KK ¥È¥ó¥Á¥ã¥â¥ó
++¤È¤ó¤Á¤ã¤â¤ó #T35 ¥È¥ó¥Á¥ã¥â¥ó
++¤È¤ó¤É¤ë #CJ ¥È¥ó¥É¥ë
++¤È¤ó¤É¤ë #CJ ­Å­Ë
++¤È¤ó¤É¤ë #JN ­Å­Ë
++¤È¤ó¤Ú¤¤ #T35 ¥È¥ó¥Ú¥¤
++¤É¡¼¤â¤¯¤ó #T35 ¤É¡¼¤â·¯
++¤É¤¤¤¨ #JN ¥É¥¤¥¨
++¤É¤¤¤¨ #R5 ¥É¥¤¥¨
++¤É¤¤¤¨ #T35 ¥É¥¤¥¨
++¤É¤¤¤Ä¤â¤Ê¡¼ #JN ¥É¥¤¥Ä¥â¥Ê¡¼
++¤É¤¦¤·¤·¤ã¤´¤­¤Ö¤ê #JN Ʊ»Ö¼Ò¥´¥­¥Ö¥ê
++¤É¤¦¤¸¤ó #T35 Ʊ¿Í
++¤É¤¦¤¸¤ó¤ª¤ó¤Ê #T35 Ʊ¿Í½÷
++¤É¤¦¤Æ¤¤ #T35 ƸÄç
++¤É¤¦¤Ç¤â¤¤¤¤¤Ë¤À #JN ¤É¤¦¤Ç¤â¤¤¤¤¥Ë¥À
++¤É¤¦¤Ç¤â¤¤¤¤¤ä¡¼ #JN ¥É¥¦¥Ç¥â¥¤¥¤¥ä¡¼
++¤É¤¦¤Ç¤â¤¤¤¤¤ä¤½¤ó¤Ê¤³¤È #JN ¤É¤¦¤Ç¤â¤¤¤¤¤ä¡¢¤½¤ó¤Ê¤³¤È¡ª
++¤É¤¦¤Ç¤â¤¤¤¤¤è #JN ¤É¤¦¤Ç¤â¤¤¤¤¤è
++¤É¤¦¤â¤¹¤ß¤Þ¤»¤ó #JN ¥É¥¦¥â¥¹¥ß¥Þ¥»¥ó
++¤É¤¦¤â¤¹¤ß¤Þ¤»¤ó #JN ŽÄŽÞŽ³ŽÓŽ½ŽÐŽÏŽ¾ŽÝ
++¤É¤¦¤è #CJ ¤É¤¦¤è
++¤É¤¦¤è #SUC ¤É¤¦¤è
++¤É¤¦¤í¤¸¤ç¤¦¤Û¤¦¤Ò¤ç¤¦¤¸¤Ð¤ó #JN ƻϩ¾ðÊóɽ¼¨ÈÄ
++¤É¤©¡¼¡¼¤ó #JN ¥É¥©¡¼¡¼¥ó¡ª¡ª¡ª
++¤É¤©¡¼¡¼¤ó2 #JN ¥É¥©¡¼¡¼¥ó¡ª¡ª¡ª£²
++¤É¤­¤å¤½ #T35 DQS
++¤É¤­¤å¤½ #T35 ¥É¥­¥å¥½
++¤É¤­¤å¤½¤ª¤¦¤³¤¯¤Ë¤Ã¤Ý¤ó #JN ¥É¥­¥å¥½²¦¹ñÆüËÜ
++¤É¤­¤å¤½¤ª¤¦¤³¤¯¤Ë¤Ã¤Ý¤ó #JN ŽÄŽÞŽ·Ž­Ž¿²¦¹ñÆüËÜ
++¤É¤­¤å¤½¤Á¤ã¤ó #JN ŽÄŽÞŽ·Ž­Ž¿¤Á¤ã¤ó
++¤É¤­¤å¤â #KK ¥É¥­¥å¥â
++¤É¤­¤å¤â #T35 ¥É¥­¥å¥â
++¤É¤­¤å¤ó #T35 DJN
++¤É¤­¤å¤ó #T35 £Ä£Ñ£Î
++¤É¤­¤å¤ó #T35 ¥É¥­¥å¥ó
++¤É¤­¤å¤ó¤Ê¤«¤¤¤·¤ã #T35 ¥É¥­¥å¥ó¤Ê²ñ¼Ò
++¤É¤¯¤ª¤È¤³ #T35 ÆÇÃË
++¤É¤¯¤·¤ó¤Æ¤¤¤ª¤¦ #JN ÆÈ¿ÈÄ벦
++¤É¤¯¤¸¤¿ #T35 ¤É¤¯¤¸¤¿
++¤É¤¯¤½ #T35 ÆÇÁÇ
++¤É¤¯¤È¤¦ #CN ÆÈÅç
++¤É¤¯¤È¤¦ #T35 ÆÈÅç
++¤É¤¯¤È¤ë¤Þ¤é #JN ¥É¥¯¥È¥ëM
++¤É¤³¤Ô¡¼ #T35 ¥É¥³£Ð
++¤É¤³¤Ô¤¤ #T35 ¥É¥³P
++¤É¤¹¤¦ #T35 ÅÙ¿ô
++¤É¤»¤¤¤µ¤ó #JN ÅÚÀ±¤µ¤ó
++¤É¤Æ¤Á¤å¡¼ #T35 ¥É¥Æ¥Á¥å¡¼
++¤É¤Æ¤Á¤å¤¦ #T35 ¥É¥Æ¥Á¥å¡¼
++¤É¤Ö¤Í¤º¤ß #T35 ¹ÂÁÍ
++¤É¤à #T35 £Ä£Ï£Í
++¤É¤á¤ë¤É #JN ¥É¥á¥ë¥É
++¤É¤é #JN ¥É¥é
++¤É¤é¤¨¤â¤ó¤Õ¤¯¤â¤È¤Õ¤©¡¼¤à #JN ¥É¥é¤¨¤â¤óÊ¡ËÜ¥Õ¥©¡¼¥à
++¤É¤é¤´¤ó #T35 ¥É¥é¥´¥ó
++¤É¤é¤´¤ó¤ª¤¨¤¹¤È #T35 ¥É¥é¥´¥ó¥ª¥¨¥¹¥È
++¤É¤é¤´¤ó¤¹¤È¤Ã¤× #T35 ¥É¥é¥´¥ó¥¹¥È¥Ã¥×
++¤É¤é¤Ã¤­¤Ê¡¼ #JN ¥É¥é¥Ã¥­¥Ê¡¼
++¤É¤ê¤Á¤ó #T35 ¥É¥ê¥Á¥ó
++¤É¤ê¤ë¤Á¤ó¤Á¤ó #T35 ¥É¥ê¥ë¤Á¤ó¤Á¤ó
++¤É¤ë¤¨¤à¤¤¤¤ #T35 $ME
++¤Ê¤¢¤¹¤¦¤£¤Ã¤Á¤³¤à¤®¤Á¤ã¤ó #T35 ¥Ê¡¼¥¹¥¦¥£¥Ã¥Á¾®Çþ¤Á¤ã¤ó
++¤Ê¤¤¤¹¤Ê¤Ø¤Ã¤É¤Õ¤©¤ó #T35 ¥Ê¥¤¥¹¤Ê¥Ø¥Ã¥É¥Õ¥©¥ó¡ª
++¤Ê¤¨ #KS °à¤¨
++¤Ê¤¨ #T35 °à¤¨
++¤Ê¤¨¤Ê¤¤¤ï #JN ¥Ê¥¨¥Ê¥¤¥ï
++¤Ê¤ª¤ê¤ó #T35 ¤Ê¤ª¤ê¤ó
++¤Ê¤«¤¦¤é¤ï¤Î¤Û¤· #T35 Ã決ϤÎÀ±
++¤Ê¤«¤¸¡¼¤Ô¡¼ #T35 ¤Ê¤«GP
++¤Ê¤«¤¸¤¤¤Ô¤¤ #T35 ¤Ê¤«GP
++¤Ê¤«¤¿¤³ #JN ¤Ê¤«¤¿¤³
++¤Ê¤«¤¿¤³ #T35 ¤Ê¤«¤¿¤³
++¤Ê¤«¤¿¤Þ¤´ #T35 ¤Ê¤«Íñ
++¤Ê¤«¤À¤· #T30 ÃæÅÄ»á
++¤Ê¤«¤Ä¤®¤« #T35 Ãæ·Ñ¤®²Ý
++¤Ê¤«¤Î¤Ò¤È #T35 Ãæ¤Î¿Í
++¤Ê¤¬¤·¤½¤¦¤á¤ó #JN ή¤·¤½¤¦¤á¤ó
++¤Ê¤¬¤Ö¤ó¤Î¤«¤ó¤½¤¦¤â¤¸¤ì¤¹¤æ¤¦¤É¤¦¤¢¤¹¤­¡¼¤¢¡¼¤È #JN Ĺʸ¤Î´¶ÁÛʸ»ú¥ì¥¹Í¶Æ³£Á£Á
++¤Ê¤°¤Á¤ã¤ó¤Í¤ë #T35 ¤Ê¤°¤Á¤ã¤ó¤Í¤ë
++¤Ê¤²¤¹¤Æ¤ë¤â¤Ê¡¼ #JN Åꤲ¼Î¤Æ¤ë¥â¥Ê¡¼
++¤Ê¤´¤ä¤±¤ó #T35 ̾¸Å²°¸©
++¤Ê¤·¤À¤¤ #T35 ̵Âç
++¤Ê¤¾¤Î¤»¤¤¤á¤¤¤¿¤¤ #JN Ææ¤ÎÀ¸Ì¿ÂÎ
++¤Ê¤¾¤Î¤Ë¤Û¤ó¤¸¤ó #JN Ææ¤ÎÆüËÜ¿Í
++¤Ê¤Ã¤Á #JN ¡Ê¡ü¡­¡¼¡®¡ü¡Ë
++¤Ê¤Ã¤Á #JN ¤Ê¤Ã¤Á
++¤Ê¤Ã¤Á #T35 ¤Ê¤Ã¤Á
++¤Ê¤Ã¤Á #T35 °ÂÇÜ
++¤Ê¤Ã¤Á¤¢¤ê¤¬¤È¤¦ #CJ ¤Ê¤Ã¤Á¤¢¤ê¤¬¤È¤¦(¡ü¡­¡¼¡®¡ü)
++¤Ê¤Ã¤Á¤â¤Ê¡¼ #JN ¤Ê¤Ã¤Á¥â¥Ê¡¼
++¤Ê¤Ã¤Á¤å #T35 ¤Ê¤Ã¤Á¤å
++¤Ê¤Ã¤Á¤å¤¦ #T35 Ǽ¿ß
++¤Ê¤Ä¤Á¤å¤¦ #T35 ²Æ¿ß
++¤Ê¤Ä¤Á¤å¤¦¤Ü¤¦ #T35 ²Æ¿ß˼
++¤Ê¤Ä¤Ü¤¦ #T35 ²Æ˼
++¤Ê¤Ä¤á #JN ¥Ê¥Ä¥á
++¤Ê¤Ê¤µ¤ó #JN £·¤µ¤ó
++¤Ê¤Ê¤·¤µ¤ó #T35 ̵̾¤·¤µ¤ó
++¤Ê¤Ê¤·¤µ¤ó¤×¤é¤º¤Þ #JN ̵̾¤·¤µ¤ó¥×¥é¥º¥Þ
++¤Ê¤Ê¤á¤¦¤¨ #T35 ¼Ð¤á¾å
++¤Ê¤Ê¤á¤«¤Ã¤³¤Ï¤ó¤À¤¯¤Æ¤ó¤¿¡¼¤ó¤¨¡¼¤Ï¤ó¤À¤¯¤Æ¤ó¤«¤Ã¤³¤È¤¸¤Ê¤Ê¤á¤×¤ë¤Ã¤Ñ¤Û¤· #JN ¡À(¡¬¢Ï¡¬)¡¿¥×¥ë¥Ã¥Ñ¡ù
++¤Ê¤Ê¤á¤«¤Ã¤³¤Ï¤ó¤À¤¯¤Æ¤ó¤¿¡¼¤ó¤¨¡¼¤Ï¤ó¤À¤¯¤Æ¤ó¤«¤Ã¤³¤È¤¸¤Ê¤Ê¤á¤×¤ë¤Ã¤Ñ¤Û¤· #JN ¡À(Žß¢ÏŽß)¡¿ŽÌŽßŽÙŽ¯ŽÊŽß¡ù
++¤Ê¤Ë¤¤¤Ã¤Æ¤ë¤Õ¤á¤¤ #CJ ²¿¸À¤Ã¤Æ¤ëÉÔÌÀ
++¤Ê¤Ë¤« #KK ²¿¤«
++¤Ê¤Ë¤« #T35 ²¿¤«
++¤Ê¤Ë¤«¤¢¤ë #CJ ¤Ê¤Ë¤«¤¢¤ë¡©
++¤Ê¤Ë¤«¤Ë¤ª¤Ó¤¨¤ë¤®¤³ #JN ((¡¨Žß§¥Žß)Ž¶ŽÞŽ¸Ž¶ŽÞŽ¸ŽÌŽÞŽÙŽÌŽÞŽÙ
++¤Ê¤Ë¤«¤Ë¤ª¤Ó¤¨¤ë¤®¤³ #JN ²¿¤«¤Ë¶±¤¨¤ë¥®¥³
++¤Ê¤Ë¤µ¤Þ #JN ²¿ÍÍ
++¤Ê¤Ë¤µ¤Þ #T35 ²¿ÍÍ
++¤Ê¤Ë¤ß¤Æ¤ó¤À¤è¤µ¤ë #JN ²¿¸«¤Æ¤ó¤À¤è±î
++¤Ê¤Ë¤ç¤ê¡¼¤Ê #JN ŽÅŽÆŽ®ŽØŽ°ŽÅ
++¤Ê¤Î¤é #SUC ¤Ê¤Î¤é
++¤Ê¤Î¤é¤¢ #CJ ¤Ê¤Î¤é¡Á
++¤Ê¤Þ¤¢¤¤¤Ô¤¤ #T35 À¸IP
++¤Ê¤Þ¤¢¤¿¤¿¤«¤¯¤ß¤Þ¤â¤ë #CJ ¤Ê¤ÞÃȤ«¤¯¸«¼é¤ë
++¤Ê¤Þ¤³ #T35 ¤Ê¤Þ¤³
++¤Ê¤Þ¤³¤×¤ì¤¤ #T35 ¤Ê¤Þ¤³¥×¥ì¥¤
++¤Ê¤Þ¤â¤Î #T35 ¥Ê¥Þ¥â¥Î
++¤Ê¤ß¤«¤ì #CJ ¥Ê¥ß¥«¥ì
++¤Ê¤ß¤À¤Ç¤Þ¤¨¤¬¤ß¤¨¤Þ¤»¤ó #CJ ÎÞ¤ÇÁ°¤¬¸«¤¨¤Þ¤»¤ó¡ª
++¤Ê¤à #JN ¥Ê¥â
++¤Ê¤á¤¯¤¸ #JN ¥Ê¥á¥¯¥¸
++¤Ê¤ä¤ß¤¹¤®¤ë¤È¤Ï¤²¤ë #T35 Ǻ¤ß¤¹¤®¤ë¤ÈÆŤ²¤ë
++¤Ê¤æ¤­¤°¤ë¤Þ #JN ̾Àã¼Ö
++¤Ê¤ê¤­¤ê¤¹¤ì #T35 ¤Ê¤ê¤­¤ê¥¹¥ì
++¤Ê¤ê¤¹¤Þ #S5r ¤Ê¤ê¤¹¤Þ
++¤Ê¤ê¤¿¤È¤Ã¤×¤í¤ª¤É #JN ¤Ê¤ê¤¿¤È¤Ã¤×¤í¤ª¤É
++¤Ê¤ê¤¿¤È¤Ã¤×¤í¤ª¤É #JN ¤Ê¤ê¤¿¤È¤Ã¤×¤í¤ª¤É
++¤Ê¤ê¤Ð¤ó #T35 ¥Ê¥ê¥Ð¥ó
++¤Ê¤ì¤¢ #W5 Æë¤ì¹ç
++¤Ê¤ì¤¢¤¤ #T35 Æë¤ì¹ç¤¤
++¤Ê¤í #CJ ¤Ê¤í
++¤Ê¤ó¤¬¤ó¤Æ¤¤¤­¤¢¤Ä #JN Æî´ßÄ㵤°µ
++¤Ê¤ó¤±¤¤¤Ð #T35 ¤Ê¤ó¶¥ÇÏ
++¤Ê¤ó¤À¤«¤Ê¡¼¤¢¤ó¤É¤µ¤¤¤³¡¼¤À #JN ¥Ê¥ó¥À¥«¥Ê¡¼¡õ¥µ¥¤¥³¡¼¥À
++¤Ê¤ó¤À¤«¤ó¤À #CJ ¤Ê¤ó¤À¤«¤ó¤À
++¤Ê¤ó¤Ä¤Ã¤¿¤ê¤·¤Æ #CJ ¤Ê¤ó¤Ä¤Ã¤¿¤ê¤·¤Æ
++¤Ê¤ó¤È¤¤¤¦¤³¤È¤Ç¤·¤ç¤¦ #CJ ¤Ê¤ó¤È¤¤¤¦¤³¤È¤Ç¤·¤ç¤¦
++¤Ê¤ó¤Ð¤¢¤¹¤¯¤¦¤ë #T35 ¥Ê¥ó¥Ð¡¼¥¹¥¯¡¼¥ë
++¤Ê¤ó¤ß¤ó #T35 Æṉ̃
++¤Ê¤ó¤ß¤ó¤¤¤¿ #T35 Æṉ̃ÈÄ
++¤Ê¤ó¤â¤¸¤á¤ò¤¿¤Æ¤è¤ß¤¹¤ë¤Î #CJ ²¿Ê¸»úÌܤò½ÄÆɤߤ¹¤ë¤Î¡©
++¤Ë #T30 ½ªÅß
++¤Ë #T35 2
++¤Ë #T35 ½ªÅß
++¤Ë¡¼ #JN ¥Ë¡¼
++¤Ë¡¼¤¤¤Á¤è¤ó¤¸¤±¤ó #T35 £²¡¦£±£´»ö·ï
++¤Ë¤¤¤Á¤å¤¦ #T35 ny¿ß
++¤Ë¤¤¤Ã¤Ô¤ç¤¦ #CJ ¤Ë°ìɼ
++¤Ë¤­¤³¤¦ #T35 Æó´ü¹»
++¤Ë¤­¤Ó¤¬¤Ç¤­¤¿¤â¤Ê¡¼ #JN ¥Ë¥­¥Ó¤¬½ÐÍ褿¥â¥Ê¡¼
++¤Ë¤¯¤³¤Ã¤×¤ó¤¯¤¨ #CJ ¥Ë¥¯¥³¥Ã¥×¥ó¥¯¥¨!
++¤Ë¤¯¤³¤Ã¤×¤ó¤¯¤¨ #CJ ŽÆŽ¸ŽºŽ¯ŽÌŽßŽÝŽ¸Ž´!
++¤Ë¤¯¤³¤Ã¤×¤ó¤¯¤¨ #JN ¥Ë¥¯¥³¥Ã¥×¥ó¥¯¥¨!
++¤Ë¤¯¤³¤Ã¤×¤ó¤¯¤¨ #JN ŽÆŽ¸ŽºŽ¯ŽÌŽßŽÝŽ¸Ž´!
++¤Ë¤¯¤³¤×¡¼¤ó #CJ (¡¦¢Ï¡¦)¥Ë¥¯¥³¥×¡¼¥ó
++¤Ë¤¯¤³¤×¡¼¤ó #CJ (Ž¥¢ÏŽ¥)ŽÆŽ¸ŽºŽÌŽßŽ°ŽÝ
++¤Ë¤¯¤³¤×¡¼¤ó #CJ ¥Ë¥¯¥³¥×¡¼¥ó
++¤Ë¤¯¤³¤×¡¼¤ó #CJ ŽÆŽ¸ŽºŽÌŽßŽ°ŽÝ
++¤Ë¤¯¤³¤×¡¼¤ó #JN (Ž¥¢ÏŽ¥)ŽÆŽ¸ŽºŽÌŽßŽ°ŽÝ
++¤Ë¤¯¤³¤×¡¼¤ó #JN ¥Ë¥¯¥³¥×¡¼¥ó
++¤Ë¤¯¤³¤×¡¼¤ó #JN ŽÆŽ¸ŽºŽÌŽßŽ°ŽÝ
++¤Ë¤¯¤Ï¤ó¤Ë¤ã #KK ÆùÈ̼ã
++¤Ë¤¯¤Ï¤ó¤Ë¤ã #T35 ÆùÈ̼ã
++¤Ë¤¯¤Ù¤ó¤­ #T35 ÆùÊØ´ï
++¤Ë¤²¤Ã¤È #JN 2¥²¥Ã¥È
++¤Ë¤²¤Æ¤§¤Ë¤²¤Æ¤§¤Ë¤²¤Æ¤§¤Ï¤ä¤¯¤Ë¤²¤Æ¤§¤Ã #JN ƨ¤²¤Æ¤§Æ¨¤²¤Æ¤§Æ¨¤²¤Æ¤§Á᤯ƨ¤²¤Æ¤§¥Ã¡ª
++¤Ë¤³¤ì¤Ã¤È #JN ¥Ë¥³¥ì¥Ã¥È
++¤Ë¤· #JN Æó»à
++¤Ë¤· #JNS Æó»à
++¤Ë¤· #T35 Æó»à
++¤Ë¤·¤¿¤ó #JN Æó»à¥¿¥ó
++¤Ë¤·¤¿¤ó #T35 Æó»à¥¿¥ó
++¤Ë¤·¤Æ¤Ä¤Ð¤¹¤¸¤ã¤Ã¤¯¤¸¤±¤ó #KK À¾Å´¥Ð¥¹¥¸¥ã¥Ã¥¯»ö·ï
++¤Ë¤·¤Æ¤Ä¤Ð¤¹¤¸¤ã¤Ã¤¯¤¸¤±¤ó #T35 À¾Å´¥Ð¥¹¥¸¥ã¥Ã¥¯»ö·ï
++¤Ë¤·¤å¤¦¤Í¤ó¤¤¤Ù¤ó¤È #T35 £²¼þǯ¥¤¥Ù¥ó¥È
++¤Ë¤¸¤²¤ó #T35 Æ󼡸µ
++¤Ë¤¸¤²¤ó¤ª¤¿ #T35 Æ󼡸µ¥ª¥¿
++¤Ë¤¸¤²¤ó¤ò¤¿ #T35 Æ󼡸µ¥ò¥¿
++¤Ë¤¸¤å¤¦ #T35 20
++¤Ë¤¸¤å¤¦¤Ê¤Ê¤·¤­¤¯¤½¤¹¤ì¤¯¤Á¤¯¤Æ¤¤ #JN 27¼°Êµ¥¹¥ì¶îÃàÄú
++¤Ë¤¸¤å¤Ã¤È¤¦¤·¤ó #T35 20Æ®¿À
++¤Ë¤¸¤ç¤¦¤¬¤ï¤é¤Î¤é¤¯¤·¤ç #T35 Æó¾ò²Ï¸¶¤ÎÍî½ñ
++¤Ë¤»¤¢¤æ #T35 µ¶¤¢¤æ
++¤Ë¤»¤Ï¤ë¤Ê¤¢¤ó¤É¤¦¤Ë¤å¤¦¤ê¡¼¤Ê #JN µ¶½ÕºÚ¡õ¤¦¤Ë¤å¤¦¥ê¡¼¥Ê
++¤Ë¤»¤á¤Ã¤» #T35 µ¶¥á¥Ã¥»
++¤Ë¤»¤â¤Ê¡¼ #JN µ¶¥â¥Ê¡¼
++¤Ë¤»¤ó¤Î¤ï¤¶ #CJ 2000¤Îµ»
++¤Ë¤À¡¼ #JN ¥Ë¥À¡¼
++¤Ë¤À¡¼ #JN ŽÆŽÀŽÞŽ°
++¤Ë¤À¡¼¤¿¤¤¤¤ #JN ¥Ë¥À¡¼Âç°Ó
++¤Ë¤À¡¼¤Á¤ç #JN ¥Ë¥À¡¼¥Á¥ç
++¤Ë¤À¤À¡¼ #JN ¥Ë¥À¥À¡¼
++¤Ë¤À¤À¡¼ #JN ¥Ë¥À¥À¡¼
++¤Ë¤Á¤ã¤ó #CJ 2ch
++¤Ë¤Á¤ã¤ó #CJ £²¤Á¤ã¤ó
++¤Ë¤Á¤ã¤ó #T35 2ch
++¤Ë¤Á¤ã¤ó #T35 £²¤Á¤ã¤ó
++¤Ë¤Á¤ã¤ó¤µ¤Ð¤«¤Ã¤Æ¤Ê¤«¤ó¤·¤¸¤ç #T35 2ch»ª¾¡¼ê¤Ê´Æ»ë½ê
++¤Ë¤Á¤ã¤ó¤Æ¤­¤Ë¤Ï #CJ £²£ã£èŪ¤Ë¤Ï
++¤Ë¤Á¤ã¤ó¤Æ¤­¤Ò¤ç¤¦¤« #T35 £²£ã£èŪɾ²Á
++¤Ë¤Á¤ã¤ó¤Í¤ë¤¯¤½¤¹¤ì¤Ã¤É¤Ä¤¤¤Û¤¦¤»¤ó¤»¤ó #JN £²¤Á¤ã¤ó¤Í¤ëʵ¥¹¥ì¥Ã¥ÉÄÉÊüÀïÀþ
++¤Ë¤Á¤ã¤ó¤Í¤ë¤°¤ó¤Ý¤¦¤¬¤¤¤® #JN £²£ã£è·³Ë¡²ñµÄ
++¤Ë¤Á¤ã¤ó¤Í¤ë¤µ¤Ý¡¼¤È¤»¤ó¤¿¡¼ #JN £²¤Á¤ã¤ó¤Í¤ë¥µ¥Ý¡¼¥È¥»¥ó¥¿¡¼
++¤Ë¤Á¤ã¤ó¤Í¤ë¤¼¤ó¤¤¤¿¤Ë¤ó¤­¤È¤¦¤Ê¤á¤ó¤È #T35 2¤Á¤ã¤ó¤Í¤ëÁ´ÈĿ͵¤¥È¡¼¥Ê¥á¥ó¥È
++¤Ë¤Á¤ã¤ó¤Í¤ë¤¿¤¢¤Ü #T35 2¤Á¤ã¤ó¤Í¤ë¥¿¡¼¥Ü
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ä¤¦ #T35 2ch2
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ä¤¦ #T35 2¤Á¤ã¤ó¤Í¤ë2
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ê¤Ê¤Á¤å¤¦¤¤¤¿ #CJ £²¤Á¤ã¤ó¤Í¤ë¼·¿ßÈÄ
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ê¤Ê¤Á¤å¤¦¤¤¤¿ #T35 £²¤Á¤ã¤ó¤Í¤ë¼·¿ßÈÄ
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ë #T35 2ch2
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ë #T35 2¤Á¤ã¤ó¤Í¤ë2
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Î¤Ï¤ó¤Ö¤ó¤Ï¤Í¤¿¤Ç¤Ç¤­¤Æ¤¤¤Þ¤¹ #CJ 2¤Á¤ã¤ó¤Í¤ë¤ÎȾʬ¤Ï¥Í¥¿¤Ç¤Ç¤­¤Æ¤¤¤Þ¤¹
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ó¤å¤¦¤¢ #T35 2¤Á¤ã¤ó¤Í¤ë¥Ó¥å¡¼¥¢
++¤Ë¤Á¤ã¤ó¤Í¤ë¤Ö¤é¤¦¤¶ #T35 2¤Á¤ã¤ó¤Í¤ë¥Ö¥é¥¦¥¶
++¤Ë¤Á¤ã¤ó¤Ö¤í¤° #T35 2ch-Blog
++¤Ë¤Á¤ã¤ó¤×¤í¤Ð¤¤¤À¤¢ #T35 2ch¥×¥í¥Ð¥¤¥À¡¼
++¤Ë¤Á¤ã¤ó¤ì¤ó¤á¤¤ #JN 2¤Á¤ã¤óÏ¢ÌÁ
++¤Ë¤Ã¤­ #JN Æüµ­
++¤Ë¤Ã¤­ #T35 Æüµ­
++¤Ë¤Ã¤­¡¼ #JN ¥Ë¥Ã¥­¡¼
++¤Ë¤Ã¤¯¤·¤ó¤»¤¤ #T30 ¥Ë¥Ã¥¯¿½ÀÁ
++¤Ë¤Ã¤»¤¤ #T35 ¥Ë¥Ã¥»¥¤
++¤Ë¤Ã¤»¤¤ #T35 ÆüÀÂ
++¤Ë¤Ã¤Ý¤ó¤Ï¤Ï¤ó¤»¤¤¤·¤ë #CJ ÆüËܤÏÈ¿¾Ê¤·¤ë¡ª
++¤Ë¤È¤¦¤¸¤ç¤æ¤¦ #T35 ÆóÅù½÷Í¥
++¤Ë¤È¤¦¤Ø¤¤ #JN ÆóÅùʼ
++¤Ë¤È¤¦¤Ø¤¤ #T35 ÆóÅùʼ
++¤Ë¤Ë¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¤·¤ê¡¼¤º #SUC ¤Ë£²¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¥·¥ê¡¼¥º
++¤Ë¤Ë¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¤·¤ê¡¼¤º #T35 ¤Ë£²¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¥·¥ê¡¼¥º
++¤Ë¤Ë¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¤·¤ê¤¤¤º #T35 ¤Ë£²¤Á¤ã¤ó¤¬¤¢¤Ã¤¿¤é¥·¥ê¡¼¥º
++¤Ë¤Ï¤ï¤é¤Ã¤¿ #CJ ¤Ë¤Ï¾Ð¤Ã¤¿¡ª
++¤Ë¤Û¤ó¤µ¤ó¤­¤ç¤¦¤À¤¤¤¬¤¯ #T35 ÆüËÜ£³µþÂç³Ø
++¤Ë¤Û¤ó¤»¤¤¤á¤¤ #KK ÆüËÜÀ¸Ì¿
++¤Ë¤Û¤ó¤Á¤ã¤ó #KK ¥Ë¥Û¥ó¤Á¤ã¤ó
++¤Ë¤Û¤ó¤Á¤ã¤ó #T35 ¥Ë¥Û¥ó¤Á¤ã¤ó
++¤Ë¤ã¤¦ #JN ¤Ë¤ã¤¦¡¡
++¤Ë¤ä¤Ë¤ä #CJ ¥Ë¥ä¥Ë¥ä
++¤Ë¤ä¤ê #CJ ¡Ê¡±¡¼¡±¡Ë¥Ë¥ä¥ê
++¤Ë¤ä¤ê #CJ ¥Ë¥ä¥ê
++¤Ë¤ä¤ê¤Ã #CJ ¡Ê¡±¡¼¡±¡Ë¥Ë¥ä¥ê¥Ã
++¤Ë¤ä¤ê¤Ã #CJ ¡Ê¡±¡¼¡±¡ËŽÆŽÔŽØŽ¯
++¤Ë¤ä¤ê¤Ã #JN ¡Ê¡±¡¼¡±¡ËŽÆŽÔŽØŽ¯
++¤Ë¤ä¤ê¤Ã #JN ¥Ë¥ä¥ê¥Ã
++¤Ë¤ä¤ê¤Ã #JN ŽÆŽÔŽØŽ¯
++¤Ë¤å¡¼¤¹¤¹¤Æ¡¼¤·¤ç¤ó #KK ¥Ë¥å¡¼¥¹¥¹¥Æ¡¼¥·¥ç¥ó
++¤Ë¤å¤¦¤¹¤½¤¯¤Û¤¦¤×¤é¤¹ #T35 ¥Ë¥å¡¼¥¹Â®Êó+
++¤Ë¤å¤¦¤½¤¯¤×¤é¤¹¤­¤·¤ã #T35 ¥Ë¥å¡¼Â®+µ­¼Ô
++¤Ë¤ç #RT ¤Ë¤ç
++¤Ë¤ç¤¤¤¬¤¿ #T35 ¥Ë¥ç¥¤³ã
++¤Ë¤ç¤¤¤¬¤¿ #T35 ŽÆŽ®Ž²³ã
++¤Ë¤ç¤¬¡¼¤ó #CJ (Žß§ÕŽß)ŽÆŽ®Ž¶ŽÞŽ°ŽÝ
++¤Ë¤ç¤¬¡¼¤ó #CJ ¥Ë¥ç¥¬¡¼¥ó
++¤Ë¤ç¤¬¡¼¤ó #CJ ŽÆŽ®Ž¶ŽÞŽ°ŽÝ
++¤Ë¤ç¤Á¤ó¤À¤ó #T35 ½÷ÄÁÃÄ
++¤Ë¤é¤¤¤à #JN ¥Ë¥é¥¤¥à
++¤Ë¤é¤Á¤ã¤¨¤ë¤»¤¤¤Ð¡¼ #JN ¥Ë¥é¥Á¥ã¥¨¥ë¥»¥¤¥Ð¡¼
++¤Ë¤é¤Á¤ã¤Å¤Þ #JN ¥Ë¥éÃãºÊ
++¤Ë¤é¤Á¤ã¤Í¤³ #JN ¥Ë¥éÃãÇ­
++¤Ë¤é¤Á¤ã¤à¤¹¤á #JN ¥Ë¥éÃã̼
++¤Ë¤é¤à¤· #JN ¥Ë¥éÃî
++¤Ë¤ë¤Ï¡¼¤Ë¤ã¤ó #JN ¤Ë¤ë¤Ï¡¼¤Ë¤ã¤ó
++¤Ë¤ï¤« #T35 ¥Ë¥ï¥«
++¤Ë¤ï¤«¤é¤·¤ê¡¼¤º #CN Äí¤«¤é¥·¥ê¡¼¥º
++¤Ë¤ï¤«¤é¤·¤ê¡¼¤º #T35 Äí¤«¤é¥·¥ê¡¼¥º
++¤Ë¤ï¤«¤é¤·¤ê¤¤¤º #T35 Äí¤«¤é¥·¥ê¡¼¥º
++¤Ë¤ó¤¤¤¿¤ó #JN Ǥ°Õ¤¿¤ó
++¤Ë¤ó¤·¤ó #KK Ç¥¿±
++¤Ë¤ó¤·¤ó #T35 Ç¥¿±
++¤Ë¤ó¤¸¤ã #JN ¥Ë¥ó¥¸¥ã
++¤Ë¤ó¤Æ¤ó¤É¤¦¤«¤¤¤°¤ó¤³¤¦¤¯¤¦¤¿¤¤ #T35 ǤŷƲ³¤·³¹Ò¶õÂâ
++¤Ë¤ó¤é¤¤¤ó #T35 Ǧ¥é¥¤¥ó
++¤Ì¡¼¤ë #T35 ¥Ì¡¼¥ë
++¤Ì¤¦¤¬¤¿ #CN ¤Ì¤¦¤¬¤¿
++¤Ì¤¦¤¬¤¿ #T35 ¤Ì¤¦¤¬¤¿
++¤Ì¤¦¤ë #T35 ¥Ì¡¼¥ë
++¤Ì¤­¤Ê¤ß #F04 ¤Ì¤­¤Ê¤ß
++¤Ì¤­¤Ê¤ß #T35 ¤Ì¤­¤Ê¤ß
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #CJ ¥Ì¥Ã¥Ø¥Ã¥Û¡¼
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #JN (Ž¥¢ÏŽ¥¢ÏŽ¥)ŽÇŽ¯ŽÍŽ¯ŽÎŽ°
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #JN ¤Ì¤Ã¤Ø¤Ã¤Û¡¼
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #JN ¥Ì¥Ã¥Ø¥Ã¥Û¡¼
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #JN ŽÇŽ¯ŽÍŽ¯ŽÎŽ°
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #T35 (¡¦¢Ï¡¦¢Ï¡¦)¥Ì¥Ã¥Ø¥Ã¥Û¡¼
++¤Ì¤Ã¤Ø¤Ã¤Û¡¼ #T35 (Ž¥¢ÏŽ¥¢ÏŽ¥)ŽÇŽ¯ŽÍŽ¯ŽÎŽ°
++¤Ì¤Ã¤Ý¤ó #T35 ¥Ì¥Ã¥Ý¥ó
++¤Ì¤Þ¤Ã¤­ #KK ¤Ì¤Þ¤Ã¤­
++¤Ì¤Þ¤Ã¤­ #T35 ¤Ì¤Þ¤Ã¤­
++¤Ì¤ê¤«¤Ù¤â¤Ê¡¼ #JN ¤Ì¤êÊÉ¥â¥Ê¡¼
++¤Ì¤ë #KY ¥Ì¥ë
++¤Ì¤ë¤Ý #T35 ¤Ì¤ë¤Ý
++¤Í #CJ ne¡ª
++¤Í¡¼¤Î #JN ¥Í¡¼¥Î
++¤Í¡¼¤è¤ª¤Ö¤Í¡¼¤è #JN ¥Í¡¼¥è¡¦¥ª¥Ö¡¦¥Í¡¼¥è
++¤Í¡¼¤è¤É¤¦¤á¤¤ #JN ¥Í¡¼¥èƱÌÁ
++¤Í¤¨ #JN ¤Í¤¨
++¤Í¤¨¤Í¤¨ #CJ ¤Í¤§¤Í¤§
++¤Í¤¨¤Ü¤¯¤¹¤´¤¤¤Ç¤·¤ç #JN ¤Í¤¨¤Ü¤¯¤¹¤´¤¤¤Ç¤·¤ç
++¤Í¤ª¤¦¤¦¤í¤ó¤Á¤ã #T35 ¥Í¥ª±¨Î¶Ãã
++¤Í¤ª¤¿¤¤¤Æ¤¤ #JN ¥Í¥ªÂçÄë
++¤Í¤ª¤à¤®¤Á¤ã #JN ¥Í¥ª¤à¤®Ãã
++¤Í¤ª¤à¤®¤Á¤ã #JN ¥Í¥ªÇþÃã
++¤Í¤«¤Þ #T30 ¥Í¥«¥Þ
++¤Í¤«¤Þ #T35 ¥Í¥«¥Þ
++¤Í¤® #CN ¤Í¤®
++¤Í¤® #CN ¥Í¥®
++¤Í¤® #T35 ¤Í¤®
++¤Í¤® #T35 ¥Í¥®
++¤Í¤¯¤í¤Þ¤é¤é¡¼ #JN ¥Í¥¯¥í¥Þ¥é¥é¡¼
++¤Í¤³¤À¤¤¤¹¤­ #CJ ¤Í¤³Âç¹¥¤­
++¤Í¤³¤ä¤·¤­ #CN Ç­²°Éß
++¤Í¤³¤ä¤·¤­ #T35 Ç­²°Éß
++¤Í¤¹ #JN ¥Í¥¹
++¤Í¤¹¤±¤·¤ó¤¸¤ã #T35 ¥Í¥¹¥±¿®¼Ô
++¤Í¤¹¤â¤Ê¡¼ #JN ¥Í¥¹¥â¥Ê¡¼
++¤Í¤º¤ß¤ª¤È¤³ #JN ¥Í¥º¥ßÃË
++¤Í¤º¤ß¤Ï¤é¤æ¤¦¤¶¤ó #JN Á͸¶Íº»°
++¤Í¤¿ #T35 ¥Í¥¿
++¤Í¤¿¤·¤ç¤¯¤Ë¤ó¤¹¤ì #T35 ¥Í¥¿¿¦¿Í¥¹¥ì
++¤Í¤¿¤¹¤ì #T35 ¥Í¥¿¥¹¥ì
++¤Í¤¿¤À¤í #CJ ¥Í¥¿¤À¤í¡©
++¤Í¤¿¤Ð¤é¤·¤Á¤å¤¦ #T35 ¥Í¥¿¤Ð¤é¤·¿ß
++¤Í¤Á¤±¤Ã¤È¤¸¤¤¤µ¤ó #JN ¥Í¥Á¥±¥Ã¥È¤¸¤¤¤µ¤ó¡¡
++¤Í¤Á¤º¤ó #T35 ¥Í¥Á¥º¥ó
++¤Í¤Á¤º¤ó #T35 ÙÔ¥Á¥º¥ó
++¤Í¤Á¤å¤¦ #T35 ¥Í¿ß
++¤Í¤Á¤ó #T35 ¥ÍÄÁ
++¤Í¤Ã¤È¤Á¤ó #T35 NetÄÁ
++¤Í¤Ã¤È¤×¤ì¤¤¤ä¤¢ #T35 ¥Í¥Ã¥È¥×¥ì¥¤¥ä¡¼
++¤Í¤Ã¤È¤é¤ó¤Ê¤¢ #KK ¥Í¥Ã¥È¥é¥ó¥Ê¡¼
++¤Í¤Ê¤Ù #T35 ¥Í¥Ê¥Ù
++¤Í¤Ë¤Á¤ê¡¼¤ó #JN ¡Ê¡¦¢Ï¡¦¡ËŽÈŽÆŽÁŽØŽ°ŽÝ
++¤Í¤Ë¤Á¤ê¡¼¤ó #JN ¥Í¥Ë¥Á¥ê¡¼¥ó
++¤Í¤Ë¤Á¤ê¡¼¤ó #T35 ¥Í¥Ë¥Á¥ê¡¼¥ó
++¤Í¤á¤ó¤Ê #CJ ¤Í¤á¤ó¤Ê
++¤Í¤é¤¢ #T35 ¥Í¥é¡¼
++¤Í¤é¤ó¤Á¤å¤¦ #T35 ¥Í¥é¥ó¿ß
++¤Í¤ì #CJ ¿²¤ì
++¤Í¤ó¤Á¤ã¤¯ #T35 Ç´Ãå
++¤Í¤ó¤Á¤ã¤¯¤¯¤ó #T35 Ç´Ãå·¯
++¤Í¤ó¤Ö¤Ä¤·¤å¤¦¤È¤¦¤ß¤«¤¤ #KK Ç°Ê©½¡Åϳ¤²ñ
++¤Í¤ó¤Ö¤Ä¤·¤å¤¦¤È¤¦¤ß¤«¤¤ #T35 Ç°Ê©½¡Åϳ¤²ñ
++¤Í¤ó¤ê¤ç¤¦ #T35 dzÎÁ
++¤Î¡¼¤Á¤ã¤ó #JN ¤Î¡¼¤Á¤ã¤ó
++¤Î¡¼¤Í #JN ¥Î¡¼¥Í
++¤Î¤¢¤ª¤¿ #T35 ¥Î¥¢¥ª¥¿
++¤Î¤¤¤Ã¤Ñ¤ó¤Æ¤­¤Ê¤È¤¯¤Á¤ç¤¦ #SUC ¤Î°ìÈÌŪ¤ÊÆÃħ
++¤Î¤¦¤« #JN ÇÀ²È
++¤Î¤¦¤­¤ç¤¦ #T35 ÇÀ¶¨
++¤Î¤¦¤Ê¤¤ #T35 ǾÆâ
++¤Î¤¦¤Ê¤¤¤¢¤Ü¡¼¤ó #T30 ǾÆ⤢¤Ü¡¼¤ó
++¤Î¤ª¤È¤ó¤»¤ó¤»¤¤ #T35 ¥Î¡¼¥È¥óÀèÀ¸
++¤Î¤ª¤È¤ó¤È¤é¤Ã¤× #T35 ¥Î¡¼¥È¥ó¥È¥é¥Ã¥×
++¤Î¤« #CJ ¤Î¤«
++¤Î¤« #SUC ¤Î¤«
++¤Î¤«¡¼ #JN ¥Î¥«¡¼
++¤Î¤°¤½ #T35 NGS
++¤Î¤¹¤¿¤ë¤Ï #T35 ¥Î¥¹¥¿¥ëÇÈ
++¤Î¤Î¤½¡¼¤ê #JN ¤Î¤ÎÁíÍý
++¤Î¤Î¤¿¤ó #JN ¤Î¤Î¤¿¤ó
++¤Î¤Î¤¿¤ó #T35 ¤Î¤Î¤¿¤ó
++¤Î¤Î¤¿¤ó #T35 ÄÔ
++¤Î¤Ó #KSr ¿­¤Ó
++¤Î¤Ó¤Î¤Ó¤·¤¿¤ä¤Ä #JN ¤Î¤Ó¤Î¤Ó¤·¤¿¥ä¥Ä
++¤Î¤Ó¤ç¤ß¤å¤¢¤¢¤à #JN ¥Î¥Ó¥ç¥ß¥å¥¢¥¡¥à
++¤Î¤Ó¤ç¤ß¤å¤¢¤¢¤à #JN ŽÉŽËŽÞŽ®ŽÐŽ­Ž±Ž§ŽÑ
++¤Î¤Ö¤ä¤Ü #T35 ¤Î¤Ö¤ä¤Ü
++¤Î¤è¤«¤ó #CJ ¤Îͽ´¶!!
++¤Î¤é¤Ê¤Ã¤Á #JN ÌîÎɤʤäÁ
++¤Î¤é¤Í¤³ #JN ÌîÎÉÇ­
++¤Î¤ê #T35 ³¤ÂÝ
++¤Î¤ê¤ò #T35 ¥Î¥ê¥ò
++¤Î¤í¤¤¤Þ¤¢¤¹ #CJ ¼ö¤Þ¡¼¤¹
++¤Î¤í¤¾¤¦ #T35 ¤Î¤í¤¾¤¦
++¤Î¤ó¤¹¤Æ #T35 ¥Î¥ó¥¹¥Æ
++¤Ï #KK ÍÕ
++¤Ï #T35 ÍÕ
++¤Ï¤¡ #CJ ¥Ï¥¡¡©
++¤Ï¤¡ #JN ¡Ê¡ë§¥¡ë)ŽÊŽ§¡©
++¤Ï¤¡ #JN ¥Ï¥¡?
++¤Ï¤¡¤Ï¤¡ #CJ (;¡­§¥¡®)¥Ï¥¡¥Ï¥¡
++¤Ï¤¡¤Ï¤¡ #CJ (;¡­§¥¡®)ŽÊŽ§ŽÊŽ§
++¤Ï¤¡¤Ï¤¡ #CJ ¥Ï¥¡¥Ï¥¡
++¤Ï¤¡¤Ï¤¡ #CJ ŽÊŽ§ŽÊŽ§
++¤Ï¤¡¤Ï¤¡ #JN (;¡­§¥¡®)ŽÊŽ§ŽÊŽ§
++¤Ï¤¡¤Ï¤¡ #JN ¥Ï¥¡¥Ï¥¡
++¤Ï¤¡¤Ï¤¡ #JN ŽÊŽ§ŽÊŽ§
++¤Ï¤¡¤Ï¤¡ #T30 ¥Ï¥¡¥Ï¥¡
++¤Ï¤¡¤Ï¤¡ #T30 ŽÊŽ§ŽÊŽ§
++¤Ï¤¡¤Ï¤¡¤Ê¤ó¤Æ¤Ç¤­¤Ê¤¤¤è #CJ ŽÊŽ§ŽÊŽ§¤Ê¤ó¤Æ½ÐÍè¤Ê¤¤¤è¡Ä
++¤Ï¤¡¤Ï¤¡¤Ê¤ó¤Æ¤Ç¤­¤Ê¤¤¤è #JN ¥Ï¥¡¥Ï¥¡¤Ê¤ó¤Æ½ÐÍè¤Ê¤¤¤è¡Ä
++¤Ï¤¡¤Ï¤¡¤Ê¤ó¤Æ¤Ç¤­¤Ê¤¤¤è #JN ŽÊŽ§ŽÊŽ§¤Ê¤ó¤Æ½ÐÍè¤Ê¤¤¤è¡Ä
++¤Ï¤¢ #CJ ¤Ï¤¡¡©
++¤Ï¤¢ #JN ¡Ê¡ë§¥¡ë)ŽÊŽ§¡©
++¤Ï¤¢¤Ï¤¢ #CJ ¥Ï¥¡¥Ï¥¡
++¤Ï¤¤¤­¤ç #CN ÇÑÔÒ
++¤Ï¤¤¤­¤ç #T35 ÇÑÔÒ
++¤Ï¤¤¤¹¤´¤¤¤¹¤´¤¤ #JN ¡³¡ÌŽß§¥Žß¡ÍШŽÊŽ²Ž½ŽºŽÞŽ²Ž½ŽºŽÞŽ²
++¤Ï¤¤¤¹¤´¤¤¤¹¤´¤¤ #JN ¥Ï¥¤¥¹¥´¥¤¥¹¥´¥¤
++¤Ï¤¤¤¹¤´¤¤¤¹¤´¤¤ #JN ŽÊŽ²Ž½ŽºŽÞŽ²Ž½ŽºŽÞŽ²
++¤Ï¤¤¤½¤Ê¤»¤ì¤Ö¤Ë¤Þ¤¿¤¤¤Ã¤Ý #CJ ¥Ï¥¤¥½¤Ê¥»¥ì¥Ö¤Ë¤Þ¤¿°ìÊâ¶á¤Å¤­¤Þ¤·¤¿¤Ç¤¹¡£
++¤Ï¤¤¤Ã¤¤¤½¤¦ #CJ Æþ¤Ã¤¤¤½¤¦
++¤Ï¤¤¤É #JN ¤Ï¤¤¤É
++¤Ï¤¤¤É #T35 ¤Ï¤¤¤É
++¤Ï¤¤¤à¤Ä #T35 ³¥¥à¥Ä
++¤Ï¤«¡¼ #T35 ¥Ï¥«¡¼
++¤Ï¤«¡¼ #T35 Ê衼
++¤Ï¤«¤¢ #T35 ¥Ï¥«¡¼
++¤Ï¤«¤¢ #T35 Ê衼
++¤Ï¤«¤® #KK ÍÕ¸°
++¤Ï¤«¤®¤¤¤¿ #CN ÍÕ¸°ÈÄ
++¤Ï¤«¤®¤¤¤¿ #T35 ÍÕ¸°ÈÄ
++¤Ï¤«¤®¤¤¤¿¤µ¤¤¤â¤¨¤ª¤È¤³¤È¡¼¤Ê¤á¤ó¤È #T35 ÍÕ¸°ÈĺÇdz¤¨Ã˥ȡ¼¥Ê¥á¥ó¥È
++¤Ï¤«¤®¤¤¤¿¤µ¤¤¤â¤¨¤È¡¼¤Ê¤á¤ó¤È #KK ÍÕ¸°ÈĺÇ˨¥È¡¼¥Ê¥á¥ó¥È
++¤Ï¤«¤®¤¤¤¿¤µ¤¤¤â¤¨¤È¡¼¤Ê¤á¤ó¤È #T35 ÍÕ¸°ÈĺÇ˨¥È¡¼¥Ê¥á¥ó¥È
++¤Ï¤«¤®¤»¤ó¤½¤¦ #T35 ÍÕ¸°ÀïÁè
++¤Ï¤«¤®¤Á¤å¤¦ #T35 ÍÕ¸°¿ß
++¤Ï¤«¤®¤Ã¤³ #T35 ÍÕ¸°¤Ã»Ò
++¤Ï¤­¤å¤¦¤ó #CJ HQN
++¤Ï¤®¤¤¤¿ #CN ÇëÈÄ
++¤Ï¤®¤¤¤¿ #T35 ÇëÈÄ
++¤Ï¤®¤ï¤é #CJ (Ç븶
++¤Ï¤®¤ï¤é #CJ Ç븶
++¤Ï¤¯ #T30 ¥Ï¥¯
++¤Ï¤¯¤½¤ê¡¼¤Ê¤Ø #JN ¤Ï¤¯¤½¥ê¡¼¥Ê¤Ø
++¤Ï¤¯¤À¤Ä¤Á¤å¤¦ #T35 ÇíÃ¥¿ß
++¤Ï¤¯¤Á #T35 ÇòÃÔ
++¤Ï¤°¤­ #JN »õ·Ô
++¤Ï¤°¤­ #T35 »õ·Ô
++¤Ï¤°¤ë¤Þ¤ª¤¦ #JN »õ¼Ö²¦
++¤Ï¤°¤ë¤Þ¤ï¤ó¤Á¤§¤ó #JN »õ¼Ö¥ï¥ó¥Á¥§¥ó
++¤Ï¤°¤ë¤Þ¤ï¤ó¤Á¤§¤ó #JN »õ¼Ö¥ï¥ó¥Á¥§¥ó¡Ê²¾¾Î¡Ë
++¤Ï¤°¤ì¤Ê¤Þ¤³ #T35 ¤Ï¤°¤ì¤Ê¤Þ¤³
++¤Ï¤±¡¼¤ó #T30 ¥Ï¥±¡¼¥ó
++¤Ï¤±¡¼¤ó #T30 ŽÊŽ¹Ž°ŽÝ
++¤Ï¤² #T35 »³²¼
++¤Ï¤²¤·¤¯¤¯¤Î¤¤¤Á #JN ·ã¤·¤¯¤¯¥Î°ì
++¤Ï¤²¤·¤¯¤À¤ß¡¼ #JN ·ã¤·¤¯¥À¥ß¡¼
++¤Ï¤²¤·¤¯¤É¤¥¤¤¤¨ #CJ ·ã¤·¤¯¥É¥¥¥¤¥¨¡ª
++¤Ï¤²¤·¤¯¤É¤¦¤¤ #CJ ·ã¤·¤¯Æ±°Õ¡ª
++¤Ï¤²¤·¤¯¤É¤¦¤Ò #CJ ·ã¤·¤¯Æ±Èô¡ª
++¤Ï¤²¤·¤¯¤Ë¤ç¤¦¤¤ #CJ ·ã¤·¤¯Ç¢°Õ¡ª
++¤Ï¤²¤·¤¯¤Ë¤ó¤¸¤ã #JN ·ã¤·¤¯Ç¦¼Ô
++¤Ï¤²¤·¤¯¤Ò¤ç¤¦¤¤ #CJ ·ã¤·¤¯Øá°Í¡ª
++¤Ï¤²¤É¤¦ #CJ ¤Ï¤²¤É¤¦
++¤Ï¤²¤É¤¦ #CJ ÆÅƱ
++¤Ï¤²¤É¤¦ #T30 ¤Ï¤²¤É¤¦
++¤Ï¤²¤É¤¦ #T30 ÆÅƱ
++¤Ï¤²¤â¤Ê¡¼ #JN hage¥â¥Ê¡¼
++¤Ï¤²¤ó¤ê¤·¤å¤® #T35 ÍÕ¸¶Íý¼çµÁ
++¤Ï¤³¤³¤Ç¤¹¤« #CJ ¤Ï¤³¤³¤Ç¤¹¤«¡©
++¤Ï¤³¤³¤Ç¤¹¤« #SUC ¤Ï¤³¤³¤Ç¤¹¤«¡©
++¤Ï¤·¤ë¤ó¤Ç¤¹ #T35 Áö¥ë¥ó¤Ç¤¹
++¤Ï¤¸¤Ã¤³ #T35 ÃѤûÒ
++¤Ï¤¸¤ë¤¹ #T35 ¤Ï¤¸¤ë¤¹
++¤Ï¤¹ #T35 Ï¡
++¤Ï¤¹¤³¤é #T35 Ï¡¥³¥é
++¤Ï¤º #T35 ¥Ï¥º
++¤Ï¤Á¤¤¤Á¤´¤¸¤±¤ó #T35 £¸£±£µ»ö·ï
++¤Ï¤Á¤¬¤Ä¤­¤­ #T35 £¸·î´íµ¡
++¤Ï¤Á¤¸¤ç¤¦¤¸¤Þ¤¸¤«¤ó¤«¤ó¤ê¤»¤ó¤¿¡¼ #JN Ȭ¾æÅç»þ´Ö´ÉÍý¥»¥ó¥¿¡¼
++¤Ï¤Á¤Á¤Á #T35 ¤Ï¤Á¤Á¤Á
++¤Ï¤Á¤È¤¦¤·¤ó¤Î #RT £¸Æ¬¿È¤Î¡¡
++¤Ï¤Á¤È¤¦¤·¤ó¤Î¤Þ¤ë¤Þ¤ë #JN £¸Æ¬¿È¤Î¡û¡û¡¡
++¤Ï¤Ã¤«¡¼ #T35 ¥Ï¥Ã¥«¡¼
++¤Ï¤Ã¤«¤¢ #T35 ¥Ï¥Ã¥«¡¼
++¤Ï¤Ã¤¯¤é¤¤¤¿ #CN ¥Ï¥Ã¥¯¥éÈÄ
++¤Ï¤Ã¤¯¤é¤¤¤¿ #T35 ¥Ï¥Ã¥¯¥éÈÄ
++¤Ï¤Ã¤·¤å #T35 ¥Ï¥Ã¥·¥å
++¤Ï¤Ã¤»¤ó¤Á¤å¤¦ #T35 8000¿ß
++¤Ï¤Ã¤Á¤ã¤±¤Æ¤°¤¥ #CJ ¤Ï¤Ã¤Á¤ã¤±¤Æ¥°¥¥
++¤Ï¤Ã¤Æ¤ó #T35 hatten
++¤Ï¤Ã¤Æ¤ó #T35 ¥Ï¥Ã¥Æ¥ó
++¤Ï¤Ã¤Æ¤ó¤¯¤ó #JN hatten·¯
++¤Ï¤Ã¤Æ¤ó¤·¤Í¡¼¤è #JN ȯŸ¥·¥Í¡¼¥è
++¤Ï¤Ã¤È¤¦¤·¤ó¤ª¤Ë¤®¤ê¤â¤Ê¡¼ #JN £¸Åù¿È¤ª¤Ë¤®¤ê¥â¥Ê¡¼
++¤Ï¤Ã¤È¤¦¤·¤ó¤®¤³ #JN ȬƬ¿È¥®¥³
++¤Ï¤Ã¤È¤¦¤·¤ó¤»¤ó¤è¤¦¤¬¤¯¤ä¤¦¤é¤³¤¿¤Ä #JN ȬƬ¿ÈÀìÍѳڲ°Î¢ßÙßý
++¤Ï¤Ã¤È¤¦¤·¤ó¤á¤ó¤É¤¯¤»¤§ #JN ȬƬ¿ÈŽÒŽÝŽÄŽÞŽ¸Ž¾Žª
++¤Ï¤Ã¤È¤¦¤·¤ó¤â¤Ê¡¼ #JN £¸Æ¬¿È¥â¥Ê¡¼
++¤Ï¤Ã¤È¤¦¤·¤ó¤â¤Ê¡¼¤¯¤ó #JN £¸¤È¤¦¤·¤ó¥â¥Ê¡½¤¯¤ó
++¤Ï¤Ã¤È¤¦¤·¤ó¤ò¤Û¤í¤Ü¤¹¤Ë¤»¤¤¤Á¤µ¤ó #JN £¸Æ¬¿È¤òÌǤܤ¹µ¶£±¤µ¤ó
++¤Ï¤Ã¤Ñ #T35 ÍÕ¤ÃÇÉ
++¤Ï¤Ã¤Ñ¤¿¤¤ #JN ¤Ï¤Ã¤ÑÂâ
++¤Ï¤Ã¤Ô¤¤¤Ä¤ê¤¤¤Õ¤ì¤ó¤º #T35 HappyTreeFriends
++¤Ï¤Ä¤·¤Ð¤ê¤Ã¤¯ #T35 ½é¼Ç¥ê¥Ã¥¯
++¤Ï¤Ä¤É¤¦ #T30 ȯư
++¤Ï¤Ä¤Ò¤Î¤Ç¤Á¤ó¤½¤¦ #T30 ½éÆü¤Î½Ð¡ùÄÁÁö
++¤Ï¤Ç¤¹¤á¤ó¤Ð¡¼ #KK ¥Ï¥Ç¥¹¥á¥ó¥Ð¡¼
++¤Ï¤Ç¤¹¤á¤ó¤Ð¡¼ #T35 ¥Ï¥Ç¥¹¥á¥ó¥Ð¡¼
++¤Ï¤Ç¤¹¤á¤ó¤Ð¤¢ #T35 ¥Ï¥Ç¥¹¥á¥ó¥Ð¡¼
++¤Ï¤È #JN È·
++¤Ï¤È #T35 È·
++¤Ï¤È¤¢¤Ë #JN È··»
++¤Ï¤È¤¢¤Ë #T35 È··»
++¤Ï¤È¤ª¤È¤¦¤È #JN È·Äï
++¤Ï¤È¤ª¤È¤¦¤È #T35 È·Äï
++¤Ï¤È¤ä¤Þ¤æ¤­¤ª #JN È·»³Í³µªÉ×
++¤Ï¤É¤¦¤Û¤¦ #JN ÇÈưˤ
++¤Ï¤Ê #T35 ²Ú
++¤Ï¤Ê¤² #JN É¡ÌÓ
++¤Ï¤Ê¤² #T35 É¡ÌÓ
++¤Ï¤Ê¤Ü¤¦¤· #JN ²Ö˹»Ò
++¤Ï¤Ë¤ã¤ó¤¾¤¦ #JN ¥Ï¥Ë¥ã¥ó¢
++¤Ï¤Í¤À #T35 Ä·¤Í¤À
++¤Ï¤Þ #T35 ¤Ï¤Þ
++¤Ï¤Þ #T35 ¥Ï¥Þ
++¤Ï¤Þ¤Þ¤Ä¤ê #T35 ¤Ï¤Þº×¤ê
++¤Ï¤à #KK ¸ø
++¤Ï¤à #T35 ¸ø
++¤Ï¤à¤³ #JNM ¥Ï¥à»Ò
++¤Ï¤à¤³ #T35 ¥Ï¥à»Ò
++¤Ï¤à¤¹¤¿¡¼ #JN ¡¡¡¡¡¡¡Ê,¡Ë¡¡¡¡¡¡¡¡¡Á("¡¦)
++¤Ï¤à¤¹¤¿¡¼ #JN ¥Ï¥à¥¹¥¿¡¼
++¤Ï¤à¤¿¤í¤¦ #JN ¥Ï¥àÂÀϺ
++¤Ï¤à¤Ê¤×¤È¤é #JN ¥Ï¥à¥Ê¥×¥È¥é
++¤Ï¤ä¤¯¤¢¤ä¤Þ¤ì¤è #CJ Á᤯¼Õ¤ì¤è
++¤Ï¤ä¤ß¤Þ¤¹¤ß #JN ®¿å¿¿À¡
++¤Ï¤é¤·¤Þ #T35 ¥Ï¥é¥·¥Þ
++¤Ï¤é¤·¤Þ¤ó #T35 ¥Ï¥é¥·¥Þ¥ó
++¤Ï¤ê¡¼¤Ý¤Ã¤¿¡¼¤È¤Ø¤É¤¦¤£¤° #JN ¥Ï¥ê¡¼¡¦¥Ý¥Ã¥¿¡¼¤È¥Ø¥É¥¦¥£¥°
++¤Ï¤ë¤¤¤Á¤Ð¤ó #JN ½Õ°ìÈÖ
++¤Ï¤ë¤¤¤Á¤Ð¤ó #T35 ½Õ°ìÈÖ
++¤Ï¤ë¤« #T35 ¥Ï¥ë¥«
++¤Ï¤ë¤Á¤å¤¦ #T35 ½Õ¿ß
++¤Ï¤ë¤ä¤Þ #JNS ½Õ»³
++¤Ï¤ï¤é¤Ã¤¿ #CJ ¤Ï¾Ð¤Ã¤¿¡ª
++¤Ï¤ï¤é¤Ã¤¿ #SUC ¤Ï¾Ð¤Ã¤¿¡ª
++¤Ï¤ó¤«¤¯ #T35 ¤Ï¤ó¤«¤¯
++¤Ï¤ó¤«¤¯¤«¤Ê #T35 Ⱦ³Ñ¥«¥Ê
++¤Ï¤ó¤«¤¯¤«¤Ê¤¤¤¿ #T35 Ⱦ³Ñ¤«¤ÊÈÄ
++¤Ï¤ó¤«¤¯¤Ë¤¸¤²¤ó¤¤¤¿ #T35 Ⱦ³ÑÆ󼡸µÈÄ
++¤Ï¤ó¤«¤¯¤â¤¸¤ì¤Ä #T35 Ⱦ³Ñʸ»úÎó
++¤Ï¤ó¤«¤¯¤â¤¸¤ì¤Ä¤¤¤¿ #CN Ⱦ³Ñʸ»úÎóÈÄ
++¤Ï¤ó¤«¤¯¤â¤¸¤ì¤Ä¤¤¤¿ #KK Ⱦ³Ñʸ»úÎóÈÄ
++¤Ï¤ó¤«¤¯¤â¤¸¤ì¤Ä¤¤¤¿ #T35 Ⱦ³Ñʸ»úÎóÈÄ
++¤Ï¤ó¤­¤å¤¦ #KK ȾµÙ
++¤Ï¤ó¤­¤å¤¦ #KK Ⱦµå
++¤Ï¤ó¤­¤å¤¦ #T35 ȾµÙ
++¤Ï¤ó¤­¤å¤¦ #T35 Ⱦµå
++¤Ï¤ó¤­¤å¤¦¤Ï¤º #T35 ÈȵçŽÊŽ½ŽÞ
++¤Ï¤ó¤°¤ë¤¤¤¿¤À¤¤¤¤¤Á¤Û¤¦¤½¤¯ #T35 ¥Ï¥ó¥°¥ëÈÄÂè°ìˡ§
++¤Ï¤ó¤³¤¦¤è¤³¤¯ #T30 ÈȹÔͽ¹ð
++¤Ï¤ó¤³¤¦¤è¤³¤¯¤¹¤ì #T35 ÈȹÔͽ¹ð¥¹¥ì
++¤Ï¤ó¤·¤ó¤À¤¤¤·¤ó¤µ¤¤¤Ï¤ï¤é¤¨¤¿ #CJ ºå¿ÀÂç¿ÌºÒ¤Ï¾Ð¤¨¤¿¡ª
++¤Ï¤ó¤¸¤ã¤¤¤·¤ã #T35 ÈȺá¼Ô
++¤Ï¤ó¤º¤Ü¤ó¤· #T35 Ⱦ¥º¥Ü¥ó»á
++¤Ï¤ó¤»¤¤¤·¤ë¤ª¤¸¤µ¤ó #JN È¿¾Ê¤·¤ë¤ª¤¸¤µ¤ó
++¤Ï¤ó¤»¤¤¤·¤ë¤ª¤¸¤µ¤ó #T35 È¿¾Ê¤·¤ë¤ª¤¸¤µ¤ó
++¤Ï¤ó¤½¤¦¤ª¡¼¤ë¤¹¤¿¡¼ #JN ÈÂÁ÷¥ª¡¼¥ë¥¹¥¿¡¼
++¤Ï¤ó¤Á¤ó #T35 ÈÈÄÁ
++¤Ï¤ó¤È¤¦ #T35 ȾÅç
++¤Ï¤ó¤É¤ë #T35 ¥Ï¥ó¥É¥ë
++¤Ï¤ó¤É¤ë¤Í¡¼¤à #T35 ¥Ï¥ó¥É¥ë¥Í¡¼¥à
++¤Ï¤ó¤É¤ë¤Í¤¨¤à #T35 ¥Ï¥ó¥É¥ë¥Í¡¼¥à
++¤Ï¤ó¤Ë¤ã #SUC È̼ã
++¤Ï¤ó¤Ë¤ã¤·¤ó¤®¤ç¤¦ #JN È̼㿴·Ð
++¤Ï¤ó¤Î¤¦ #T35 ȾǾ
++¤Ð¡¼ #JN BAR
++¤Ð¡¼ #T35 ¥Ð¡¼
++¤Ð¡¼¤¸¤ó¤­¤é¡¼¤¢¤Ù¤ë #JN ½è½÷¥­¥é¡¼¥¢¥Ù¥ë
++¤Ð¡¼¤¿¤ì #T35 ¥Ð¡¼¥¿¥ì
++¤Ð¡¼¤Á¤ã¤Í¤Ã¤È¤¢¤¤¤É¤ë¤Ë¤·¤à¤é¤Ò¤í¤³12¤µ¤¤ #JN ¥Ð¡¼¥Á¥ã¥ë¥Í¥Ã¥È¥¢¥¤¥É¥ëÀ¾Â¼Çî»Ò£±£²ºÐ
++¤Ð¡¼¤Á¤ã¤ë¤Í¤Ã¤È¤¢¤¤¤É¤ë¤¨¤ë¤¨¤ë¤¨¤ë #JN ¥Ð¡¼¥Á¥ã¥ë¥Í¥Ã¥È¥¢¥¤¥É¥ëLLL
++¤Ð¡¼¤Ü¤Ã¤È #JN ¥Ð¡¼¥Ü¥Ã¥È
++¤Ð¡¼¤ä #JN ¥Ð¡¼¥ä
++¤Ð¡¼¤ä #T35 ¥Ð¡¼¥ä
++¤Ð¤¢ #T35 ¥Ð¡¼
++¤Ð¤¢¤¿¤ì #T35 ¥Ð¡¼¥¿¥ì
++¤Ð¤¢¤ä #T35 ¥Ð¡¼¥ä
++¤Ð¤¤¤«¤¯¤â¤¸ #T35 ÇܳÑʸ»ú
++¤Ð¤¤¤¯¤ì¡¼¤¹ #T35 ¥Ð¥¤¥¯¥ì¡¼¥¹
++¤Ð¤¤¤Ð¤¤ #JN ÊÞ²ÊÞ²
++¤Ð¤¤¤Ð¤¤ #JN ŽÊŽÞŽ²ŽÊŽÞŽ²
++¤Ð¤¤¤í¤ó¤â¤ì¤Î #T35 ¥Ð¥¤¥í¥ó¡¦¥â¥ì¥Î
++¤Ð¤«¡¼ #JN ŽÊŽÞŽ¶Ž°
++¤Ð¤«¡¼ #JN ŽÊŽÞŽ¶Ž°¡´(Žß§ÕŽß)ŽÉ¡«
++¤Ð¤«¤¦¤è #JN ¥Ð¥«¥¦¥è
++¤Ð¤«¤®¤Ã¤³ #T35 ¥Ð¸°¤Ã»Ò
++¤Ð¤«¤À #T35 ¥Ð¥«ÅÄ
++¤Ð¤«¤Ë¤Ï¤³¤Ô¤Ú¤Ç¤­¤Ê¤¤ #CJ ¦Â¦Á¦Ê¦Á¤Ë¤Ï¥³¥Ô¥Ú¤Ç¤­¤Ê¤¤
++¤Ð¤«¤é¤í¤¦ #T35 ¥Ð¥«¥é¥í¥¦
++¤Ð¤«¤í¤ê¡¼¤¿ #T35 ¥Ð­Ê¥¿
++¤Ð¤«¤í¤ê¡¼¤¿ #T35 ŽÊŽÞ­ÊŽÀ
++¤Ð¤«¤í¤ê¡¼¤¿¤é¤ê¤Ã¤È¤ë #CJ ¥Ð­Ê¥¿¥é­È
++¤Ð¤«¤í¤ê¡¼¤¿¤é¤ê¤Ã¤È¤ë #CJ ŽÊŽÞ­ÊŽÀŽ×­È
++¤Ð¤«¤í¤ê¤¤¤¿ #T35 ŽÊŽÞ­ÊŽÀ(¥Ð¥«¥í¥ê¡¼¥¿)
++¤Ð¤«¤í¤ê¤¤¤¿¤é¤ê¤Ã¤È¤ë #CJ ŽÊŽÞ­ÊŽÀŽ×­È
++¤Ð¤«¤ó¤³¤¯ #CN ¥Ð´Ú¹ñ
++¤Ð¤«¤ó¤³¤¯ #T35 ¥Ð´Ú¹ñ
++¤Ð¤­¤å¡¼¤à¤«¡¼ #JN ¥Ð¥­¥å¡¼¥à¥«¡¼
++¤Ð¤¯¤²¤­ #T35 Çú·â
++¤Ð¤¯¤¸¤ã¤Ã¤¯¤¸¤±¤ó #KK ¥Ð¥¹¥¸¥ã¥Ã¥¯»ö·ï
++¤Ð¤¯¤À¤ó¤Í¤º¤ß #JN ÇúÃƥͥº¥ß
++¤Ð¤¯¤Á¤å¡¼¤â¤ó¤À¤¤ #JN Çú¥Á¥å¡¼ÌäÂê
++¤Ð¤° #JN ¥Ð¥°
++¤Ð¤µ¤í¤¹¤ì #T35 ¥Ð¥µ¥í¥¹¥ì
++¤Ð¤¹¤¸¤ã¤Ã¤¯ #T30 ¥Ð¥¹¥¸¥ã¥Ã¥¯
++¤Ð¤º¡¼¤«¤®¤³ #JN ¥Ð¥º¡¼¥«¥®¥³
++¤Ð¤Ã¤µ¤¤¤ä #JN ȲºÎ²°
++¤Ð¤Ä #JN ú¥
++¤Ð¤Ä¤Ð¤³ #T35 ¡ßÈ¢
++¤Ð¤Ä¤Ü¤Ã¤¯¤¹ #T35 ¡ß¥Ü¥Ã¥¯¥¹
++¤Ð¤È¤é¡¼ #JN ¥Ð¥È¥é¡¼
++¤Ð¤È¤í¤ï¤¹¤ì #JN ¥Ð¥È¥í¥ï¥¹¥ì
++¤Ð¤Ð¤¡ #JN ÇÌ¥¡
++¤Ð¤Ó #R5 ¥Ð¥Ó
++¤Ð¤Ó¤ê¤Æ¤£ #T35 ¥Ð¥Ó¥ê¥Æ¥£
++¤Ð¤Ó¤ë¤Ë¤» #KK ¥Ð¥Ó¥ëµ¶
++¤Ð¤Ó¤ë¤Ë¤» #T35 ¥Ð¥Ó¥ëµ¶
++¤Ð¤é¤³¤¦ #CN ¥Ð¥é¹â
++¤Ð¤é¤³¤¦ #T35 ¥Ð¥é¹â
++¤Ð¤é¤Á¤½ #T35 ¥Ð¥é¥Á¥½
++¤Ð¤é¤Á¤½ #T35 ŽÊŽÞŽ×ŽÁŽ¿
++¤Ð¤ë¤«¤ó¤ï¤Ã¤·¤ç¤¤ #JN ¥Ð¥ë¥«¥ó¡¦¥ï¥Ã¥·¥ç¥¤
++¤Ð¤ó #T35 ÈÇ
++¤Ð¤ó¤À¤¤ #T35 ÈÖÂæ
++¤Ð¤ó¤Á¤ç¤¦ #JN ÈÖĹ
++¤Ð¤ó¤Á¤ç¤¦ #T35 ÈÖĹ
++¤Ñ¤¤¤Ñ¤¤ #T35 ¦Ð¡¹
++¤Ñ¤¤¤Ñ¤ó¤­¤ç¤¦¤À¤¤ #JN ¥Ñ¥¤¥Ñ¥ó·»Äï
++¤Ñ¤¯¤ê #T35 ËÑÍû
++¤Ñ¤½¤³¤ó¤­¤å¤¦¤­¤å¤¦¤Ð¤¹¤¿¤¢¤º #T35 ¥Ñ¥½¥³¥óµßµÞ¥Ð¥¹¥¿¡¼¥º
++¤Ñ¤Ã¤È #T35 Pat
++¤Ñ¤Æ #KK ¥Ñ¥Æ
++¤Ñ¤Æ #T35 ¥Ñ¥Æ
++¤Ñ¤È #KS ¥Ñ¥È
++¤Ñ¤È #R5 ¥Ñ¥È
++¤Ñ¤È #T35 Pat
++¤Ñ¤Ô¤³ #T35 ¥Ñ¥Ô¥³
++¤Ñ¤Ú¤Ã¤È¤Þ¤Ú¤Ã¤È #JN ¥Ñ¥Ú¥Ã¥È¥Þ¥Ú¥Ã¥È
++¤Ñ¤ä¤ª #T35 ¥Ñ¥ä¥ª
++¤Ñ¤é¤µ¤¤¤È¤Ô¤è¤ß¡¼ #JN ¡¡(ŽßoŽß¢¿¡Á~~
++¤Ñ¤é¤µ¤¤¤È¤Ô¤è¤ß¡¼ #JN ¥Ñ¥é¥µ¥¤¥È¥Ô¥è¥ß¡¼
++¤Ñ¤é¤µ¤¤¤È¤Ô¤è¤ß¡¼ #JN ¥Ñ¥é¥µ¥¤¥È¥Ô¥è¥ß¡¼
++¤Ñ¤é¤À¤¤¤¹¤±¤¤¤¶¤¤ #T35 ¥Ñ¥é¥À¥¤¥¹·ÐºÑ
++¤Ñ¤é¤â¤ê¤Þ¤Ä¤ê #T35 ¥Ñ¥é¿¹º×¤ê
++¤Ñ¤ì¡¼¤É #JN ¥Ñ¥ì¡¼¥É
++¤Ñ¤í¤ß¤Î¤¯¤ó #JN ¥Ñ¥í¥ß¥Î·¯
++¤Ñ¤ó¤Æ¤£¤é #T35 ¥Ñ¥ó¥Æ¥£¥é
++¤Ñ¤ó¤Ñ¤« #T35 ¥Ñ¥ó¥Ñ¥«
++¤Ñ¤ó¤Ñ¤ó #T35 ¥Ñ¥ó¥Ñ¥ó¡ª
++¤Ò #T35 Èæ
++¤Ò¡¼¤Ë¤Ë¡¼¤Ë¤Ó¤Ã¤¯¤ê #JN ¥Ò¡¼¥Ë¥Ë¡¼¥Ë¡ª
++¤Ò¤¤¤«¤ê¤ã¤¯ #T35 ¤Ò¡Ê°Ê²¼Î¬¡Ë
++¤Ò¤«¤é¤Ó¤É¤ó #T35 ¤Ò¤«¤é¤ÓЧ
++¤Ò¤«¤ê¤Ä¤¦¤·¤ó #KK ¸÷ÄÌ¿®
++¤Ò¤«¤ë #T35 ¥Ò¥«¥ë
++¤Ò¤¬¤¯¤ó #T35 Èæ²Å·¯
++¤Ò¤¬¤· #JNS ´³²Û»Ò
++¤Ò¤¬¤· #T35 ´³²Û»Ò
++¤Ò¤¬¤·¤«¤¿¤â¤Ê¤¹¤± #JN ÅìÊý¥â¥Ê½õ
++¤Ò¤­¤³ #T35 ¥Ò¥­¥³
++¤Ò¤­¤³¡¼¤â¤ê #JN ¥Ò¥­¥³¡¼¥â¥ê
++¤Ò¤­¤³¤â #R5r ¤Ò¤­¤³¤â
++¤Ò¤­¤³¤â #R5r °ú¤­äƤâ
++¤Ò¤­¤³¤â¤é¤é¡¼ #JN ¥Ò¥­¥³¥â¥é¥é¡¼
++¤Ò¤­¤³¤â¤ê¤³¤Þ¤ë #JN ¥Ò¥­¥³¿¹¥³¥Þ¥ë
++¤Ò¤­¤ã¤¯ #T35 ÈôµÓ
++¤Ò¤¯¤½¤ó #JN ¥Ò¥¯¥½¥ó
++¤Ò¤² #JN ¥Ò¥²
++¤Ò¤² #JN ɦ
++¤Ò¤² #T35 ¥Ò¥²
++¤Ò¤²¤à¤· #T35 ¤Ò¤²¤à¤·
++¤Ò¤µ¤ó¤Ê1 #T35 Èá»´¤Ê£±
++¤Ò¤µ¤ó¤Ê¤¤¤Á #JN Èá»´¤Ê£±
++¤Ò¤µ¤ó¤Ê¤¤¤Á #T35 Èá»´¤Ê1
++¤Ò¤·¤À¤Ê #T35 Èé»é¤À¤Ê
++¤Ò¤·¤ç¤¦¤±¤¤¤É¤¦¤¸¤ó #KK ÈôæÆ·ÏƱ¿Í
++¤Ò¤·¤ç¤¦¤±¤¤¤É¤¦¤¸¤ó #T35 ÈôæÆ·ÏƱ¿Í
++¤Ò¤º¤ß #JN ÏÄ
++¤Ò¤½¤Ò¤ì #T35 ¤Ò¤½¤Ò¤ì
++¤Ò¤Ã¤­¡¼ #JN ¥Ò¥Ã¥­¡¼
++¤Ò¤Ã¤­¡¼ #JN ¥Ò¥Ã¥­¡¼
++¤Ò¤Ã¤­¡¼ #T35 ¤Ò¤Ã¤­¡¼
++¤Ò¤Ã¤­¡¼ #T35 ¥Ò¥Ã¥­¡¼
++¤Ò¤Ã¤­¤¤ #T35 ¥Ò¥Ã¥­¡¼
++¤Ò¤Ã¤·¤À¤Ê #CJ ɬ»à¤À¤Ê
++¤Ò¤Ã¤·¤À¤Ê #T35 ɬ»à¤À¤Ê
++¤Ò¤Ã¤¿¤ê #T35 ¤Ò¤Ã¤¿¤ê
++¤Ò¤Ä¤¸ #T35 ÍÓ
++¤Ò¤Ä¤è¤¦¤¢¤¯¤Î¤Ð¤«¤¹¤Æ¤Ð #T35 ɬÍ×°­¤ÎÇϼ¯¼Î¤Æ¾ì
++¤Ò¤Ç¤§¤ä #JN ¤Ò¤Ç¤§¤ä
++¤Ò¤Ç¤é¤ì #KS HIDE¤é¤ì
++¤Ò¤È¤ª¤ª¤¹¤® #T35 ¿ÍÂç¿ù
++¤Ò¤È¤¯¤¤¤ª¤ª¤ß¤ß #JN ¿Í¿©¤¤Â缪
++¤Ò¤È¤Ð¤·¤é #T35 ¿ÍÃì
++¤Ò¤È¤ß¤Á¤ã¤ó #JN Æ·¤Á¤ã¤ó
++¤Ò¤È¤ê¤è¤¦¤­¤ã¤Ã¤× #T35 ¤Ò¤È¤êÍÑ¥­¥ã¥Ã¥×
++¤Ò¤É¤¦¤É¤¦¤Æ¤¤ #T35 ÈóƻƸÄç
++¤Ò¤Ê¤ó¤¸¤ç #T35 ÈòÆñ½ê
++¤Ò¤Ê¤ó¤¸¤ç¤æ¤¦¤É¤¦¤®¤³ #JN ÈòÆñ½êͶƳ¥®¥³
++¤Ò¤Î¤Ç¤Á¤ç¤¦ #T35 Æü½ÐÄ®
++¤Ò¤Ï¤ó¤è¤¦¤Ü¤¦ #T35 ÈãȽÍ×˾
++¤Ò¤Ò¤Ò¤Ò #CJ ¥Ò¥Ò¥Ò¥Ò
++¤Ò¤Ò¤Ò¤Ò¤Ò #CJ ¥Ò¥Ò¥Ò¥Ò¥Ò
++¤Ò¤Õ¤ß¤¯¤À¤ó #T35 £±£²£³£¹ÃÊ
++¤Ò¤Ù #T35 hibe
++¤Ò¤Ù #T35 ¥Ò¥Ù
++¤Ò¤Þ¤Í¡¼¤è #JN ¥Ò¥Þ¥Í¡¼¥è
++¤Ò¤ã¤¯¤µ¤²¤Ï¤¤¤Á¤¢¤²¤Ë¤·¤«¤º #CJ É´¤µ¤²¤Ï°ì¤¢¤²¤Ë¤·¤«¤º
++¤Ò¤ã¤¯¤µ¤ó¤¸¤å¤¦¤Ë¤Ë¤ó¤á¤Î¤½¤¹¤¦¤µ¤ó #T35 132¿ÍÌܤÎÁÇ¿ô¤µ¤ó
++¤Ò¤ã¤¯¤·¤ç¤¦¤È¤· #T35 É´À«ÅÔ»Ô
++¤Ò¤ã¤¯¤¸¤å¤¦¤­¤å¤¦¤±¤¤¤Ç¤ó¤·¤ã #JN 119·ÏÅżÖ
++¤Ò¤ã¤¯¤Ë¤¸¤å¤¦¤Ï¤Ã¤È¤¦¤·¤ó¤â¤Ê¡¼ #JN 128Ƭ¿È¥â¥Ê¡¼
++¤Ò¤ã¤Ã¤Û¤¦ #CJ ¥Ò¥ã¥Ã¥Û¡¼
++¤Ò¤ã¤Ã¤Û¤¦ #CJ ŽËŽ¬Ž¯ŽÎŽ°
++¤Ò¤è¤³ #JN ¥Ò¥è¥³
++¤Ò¤è¤·¤Á¤å¤¦ #T35 ÆüµÈ¿ß
++¤Ò¤é¤¬¤Ê #JN ¤Ò¤é¤¬¤Ê
++¤Ò¤é¤¬¤Ê #T35 ¤Ò¤é¤¬¤Ê
++¤Ò¤é¤¬¤Ê¤Ç¤å¡¼¤¯ #JN ¤º¤£¤³¤´¤¬¤§¤ª¤¬¤¸¤¢¤¯¤­¤®¤²¤ª¤¬¤¥¤³¤¹¡ã°Ê²¼Î¬¡ä
++¤Ò¤é¤¬¤Ê¤Ç¤å¡¼¤¯ #JN ¤Ò¤é¤¬¤ÊDUKE
++¤Ò¤é¤ß¤ß¤â¤Ê¡¼ #JN Ê¿¼ª¥â¥Ê¡¼
++¤Ò¤é¤ß¤ß¤â¤é¤é¡¼ #JN Ê¿¼ª¥â¥é¥é¡¼
++¤Ò¤ê¤ã¤¯ #T35 ¤Ò¡Êά¡Ë
++¤Ò¤í¤·¤µ¤Þ #JNM ÇîÍÍ
++¤Ò¤í¤·¤µ¤Þ #T35 ÇîÍÍ
++¤Ò¤í¤Ò¤È #JN ¥Ò¥í¥Ò¥È
++¤Ò¤í¤Ò¤È #T35 ¥Ò¥í¥Ò¥È
++¤Ò¤í¤Ý¤ó #JN ¤Ò¤í¤Ý¤ó
++¤Ò¤í¤æ¤­ #JN ¤Ò¤í¤æ¤­
++¤Ò¤í¤æ¤­ #JNM ¤Ò¤í¤æ¤­
++¤Ò¤í¤æ¤­ #T35 ¤Ò¤í¤æ¤­
++¤Ò¤í¤æ¤­¤«¤ó¤Á¤ç¤¯¤Ë¤ó #JN ¤Ò¤í¤æ¤­¡÷´Éľ¿Í
++¤Ò¤í¤æ¤­¤«¤ó¤Á¤ç¤¯¤Ë¤ó #JN ¤Ò¤í¤æ¤­¡÷´Éľ¿Í
++¤Ò¤í¤æ¤­¤«¤ó¤Ê¤ª¤È #JNM ¤Ò¤í¤æ¤­¡÷¿ûľ¿Í
++¤Ò¤í¤æ¤­¤³¤¦¤Ë¤ó¤Õ¤¡¤ó¤¯¤é¤Ö #KK ¤Ò¤í¤æ¤­¸øǧ¥Õ¥¡¥ó¥¯¥é¥Ö
++¤Ò¤í¤æ¤­¤Ã¤Ý¤¤¤Î #JN ¤Ò¤í¤æ¤­¤Ã¤Ý¤¤¤Î
++¤Ò¤í¤æ¤³¤«¤ó¤Ê¤ª¤È #JNM ¤Ò¤í¤æ»Ò¡÷¿ûľ¿Í
++¤Ò¤ó¤Ô¤ç¤¦¤«¤¤ #T30 ÉÊɾ²ñ
++¤Ò¤ó¤Ô¤ç¤¦¤«¤¤ #T35 ÉÊɾ²ñ
++¤Ó¡¼ #T35 £Â
++¤Ó¡¼¤°¤ë #JN ¥Ó¡¼¥°¥ë
++¤Ó¡¼¤°¤ë¤¢¤é¤· #JN ¥Ó¡¼¥°¥ë¹Ó¤é¤·
++¤Ó¡¼¤Á¤¯ #T35 BÃ϶è
++¤Ó¤£ #JN ¤Ó¤£
++¤Ó¤¤¤°¤ë¤¢¤é¤· #T35 ¥Ó¡¼¥°¥ë¹Ó¤é¤·
++¤Ó¤­¤ã¤¯ #JN ÈþµÓ
++¤Ó¤·¤ç¤¦¤¸¤ç¤»¤ó¤·¤»¡¼¤é¡¼¤Õ¡¼¤ó #JN Èþ¾¯½÷Àï»Î¥»¡¼¥é¡¼¤Õ¡¼¤ó
++¤Ó¤·¤ç¤¦¤¸¤ç¤Ë¤ó¤Æ¤¤ #T30 Èþ¾¯½÷ǧÄê
++¤Ó¤¸ #T35 ¥Ó¥¸
++¤Ó¤¸¤Í¤¹¤Ë¤å¤¦¤¹¤×¤é¤¹ #T35 ¥Ó¥¸¥Í¥¹¥Ë¥å¡¼¥¹¡Ü
++¤Ó¤¹¤±¤¿¤ó #T35 ¥Ó¥¹¥±¤¿¤ó
++¤Ô¡¼¤³ #T30 ¥Ô¡¼¥³
++¤Ô¡¼¤³¤ä¤í¤¦ #T35 ¥Ô¡¼¥³ÌîϺ
++¤Ô¤¤ #T35 P
++¤Ô¤«¤Á¤å¡¼ #JN ¥Ô¥«¥Á¥å¡¼
++¤Ô¤«¤Á¤å¤¦ #JN ¥Ô¥«¥Á¥å¥¦
++¤Ô¤«¤Á¤å¤¦ #JN ¥Ô¥«¿ß
++¤Ô¤«¤Ä¡¼ #KK ¥Ô¥«¥Ä¡¼
++¤Ô¤¯¤ß¤½ #JN ¥Ô¥¯¥ß¥½
++¤Ô¤¯¤ß¤ó #JN ¥Ô¥¯¥ß¥ó
++¤Ô¤³ #T35 ¥Ô¥³
++¤Ô¤ç¤ó¤Ô¤ç¤ó #JN ¥Ô¥ç¥ó¥Ô¥ç¥ó
++¤Ô¤í #JN ¥Ô¥í¥³
++¤Ô¤í #T35 ¥Ô¥í
++¤Ô¤í #T35 ¥Ô¥í¥³
++¤Ô¤í¤³ #JN ¥Ô¥í
++¤Ô¤í¤³ #T35 ¥Ô¥í
++¤Ô¤í¤³ #T35 ¥Ô¥í¥³
++¤Ô¤ó¤­¡¼ #JN ¥Ô¥ó¥­¡¼
++¤Ô¤ó¤¯¤¿¤ï¤¢¤É¤Ã¤È¤³¤à #T35 pinktower.com
++¤Ô¤ó¤¯¤Á¤ã¤ó¤Í¤ë #T35 Pink¤Á¤ã¤ó¤Í¤ë
++¤Ô¤ó¤Ý¤ó¤À¤Ã¤·¤å #T30 ¥Ô¥ó¥Ý¥ó¥À¥Ã¥·¥å
++¤Õ¡¼¤ó #CJ ¤Õ¡¼¤ó
++¤Õ¡¼¤ó #JN ¤Õ¡¼¤ó¡¡
++¤Õ¡¼¤ó¤­¤ç¤¦¤À¤¤ #JN ¤Õ¡¼¤ó·»Äï
++¤Õ¤¡¡¼¤¹¤È¤®¤³¤¨¤â¤ó #JN ¥Õ¥¡¡¼¥¹¥È¡¦¥®¥³¥¨¥â¥ó
++¤Õ¤¡¡¼¤¹¤È¤®¤³¤ß #JN ¥Õ¥¡¡¼¥¹¥È¡¦¥®¥³¥ß
++¤Õ¤¡¤¤¤Ê¤ë¤¢¤ó¤µ¤¢ #CJ FA
++¤Õ¤¡¤¤¤Ê¤ë¤¢¤ó¤µ¤¢ #CJ FA?
++¤Õ¤¡¤¤¤Ê¤ë¤¢¤ó¤µ¤¢ #CJ ¥Õ¥¡¥¤¥Ê¥ë¥¢¥ó¥µ¡¼¡©
++¤Õ¤¡¤¤¤Ê¤ë¤¿¤Ö¤¦ #T35 ¥Õ¥¡¥¤¥Ê¥ë¥¿¥Ö¡¼
++¤Õ¤¡¤¤¤Ê¤ë¤Õ¤¡¤ó¤¿¤º¤£ #T35 FINAL¡¡FANTAZY
++¤Õ¤¡¤Ã¤¯¤æ¡¼ #JN ¥Õ¥¡¥Ã¥¯¥æ¡¼
++¤Õ¤¡¤Ã¤¯¤æ¤¦¤Ö¤Á¤³¤í¤¹¤¾ #CJ Fuch¡¡You¡¡¤Ö¤Á»¦¤¹¤¾
++¤Õ¤¡¤Ó¤ç #KS ¥Õ¥¡¥Ó¥ç
++¤Õ¤¡¤Ó¤ç¤ó #T35 ¥Õ¥¡¥Ó¥ç¥ó
++¤Õ¤¡¤é¤ª #JN ¥Õ¥¡¥é¥ª
++¤Õ¤¡¤ó¤¿¤¸¡¼ #T35 ¥Õ¥¡¥ó¥¿¥¸¡¼
++¤Õ¤¡¤ó¤¿¤¸¤¤ #T35 ¥Õ¥¡¥ó¥¿¥¸¡¼
++¤Õ¤£¡¼¤Í¤â¤¨ #JN ¥Õ¥£¡¼¥Í˨¤¨
++¤Õ¤£¤Ã¤·¤ã¡¼¤Þ¤ó #JN ¥Õ¥£¥Ã¥·¥ã¡¼¥Þ¥ó
++¤Õ¤£¤ë¤¿ #T30 ¥Õ¥£¥ë¥¿
++¤Õ¤£¤ë¤¿¡¼ #T35 ¥Õ¥£¥ë¥¿¡¼
++¤Õ¤¦¤­¤¤¤¤¤ó #T35 É÷µª°Ñ°÷
++¤Õ¤¦¤Ö¤Ä¤· #T35 ¤Õ¤¦¤Ö¤Ä¤·
++¤Õ¤¦¤ó #CJ ¥Õ¡¼¥ó
++¤Õ¤¦¤ó #CJ ŽÌŽ°ŽÝ
++¤Õ¤§¤é¡¼¤Á¤ç #JN ¥Õ¥§¥é¡¼¥Á¥ç
++¤Õ¤§¤é¡¼¤Á¤ç¤Õ¤¡¤ß¤ê¡¼ #JN ¥Õ¥§¥é¡¼¥Á¥ç¥Õ¥¡¥ß¥ê¡¼
++¤Õ¤§¤é¤Í¡¼¤è #JN ¥Õ¥§¥é¥Í¡¼¥è
++¤Õ¤©¤¦¤É #T35 4rd
++¤Õ¤©¤é¤Í¡¼¤è #JN ¥Õ¥©¥é¥Í¡¼¥è
++¤Õ¤«¤ß¤¨¤¤¤¤¤Á¤í¤¦ #JN ¿¼¿å±Ñ°ìϺ
++¤Õ¤«¤ï¤ê¤ç¤¦ #JN ¤Õ¤«¤ï¤ê¤ç¤¦
++¤Õ¤®¡¼ #JN ¥Õ¥®¡¼
++¤Õ¤®¤¤ #T35 ¥Õ¥®¡¼
++¤Õ¤¯¤·¤ç¤¦ #JN Éû¾­
++¤Õ¤¯¤·¤ç¤¦ #T35 Éû¾­
++¤Õ¤¯¤¹¤¦¤¹¤ì #T35 Ê£¿ô¥¹¥ì
++¤Õ¤¯¤¹¤¦¤¹¤ì¤Ã¤É #T35 Ê£¿ô¥¹¥ì¥Ã¥É
++¤Õ¤¯¤¹¤± #T35 £²£¹½õ
++¤Õ¤¯¤ì¤­ #T35 ʤÎò
++¤Õ¤° #T35 ²ÏÆÚ
++¤Õ¤°¤ê¤é¡¼ #JN ¥Õ¥°¥ê¥é¡¼
++¤Õ¤µ¤ª #JN ¥Õ¥µÉ×
++¤Õ¤µ¤ª #JNM ¤Õ¤µ¤ª
++¤Õ¤µ¤®¤³ #JN ¥Õ¥µ¥®¥³
++¤Õ¤µ¤®¤³¤³¤¦¤Ü¤ò¤Î¤ß¤¹¤®¤¿¤Õ¤µ¤®¤³ #JN ¥Õ¥µ¥®¥³¹ÚÊì¤ò°û¤ß²á¤®¤¿¥Õ¥µ¥®¥³
++¤Õ¤µ¤®¤³¤Þ¤ó¤À¤ó #JN ¥Õ¥µ¥®¥³Ì¡ÃÌ
++¤Õ¤·¤¢¤Ê¤µ¤ó #T30 fusianasan
++¤Õ¤·¤¢¤Ê¤µ¤ó¤È¤é¤Ã¤× #T35 fusianasan¥È¥é¥Ã¥×
++¤Õ¤¸¤ç¤¦ #T30 Éâ¾å
++¤Õ¤¸¤ç¤· #T35 Éå½÷»Ò
++¤Õ¤Á¤å¤¦¤±¤¤¤à¤·¤ç #JN ÉÜÃ淺̳½ê
++¤Õ¤Ã¤­¤ä #T35 Éüµ¢²°
++¤Õ¤Ã¤µ¡¼¤ë¤¿¤¤¤µ #JN ¥Õ¥Ã¥µ¡¼¥ëÂ纴
++¤Õ¤Ã¤µ¤ë¤È¤Ó¤Õ¤µ¤¹¤± #JN ¥Õ¥Ã±îÈô¥Õ¥µ½õ
++¤Õ¤Ã¤µ¤ë¤È¤Ó¤Õ¤µ¤¹¤± #JN ŽÌŽ¯±îÈôŽÌŽ»½õ
++¤Õ¤Ã¤µ¤ì #JN ŽÌŽ¯Ž»ŽÚ
++¤Õ¤È¤¹¤± #JNM ÂÀÊå
++¤Õ¤È¤¹¤± #T35 ÂÀÊå
++¤Õ¤È¤Þ¤· #JN ¥Õ¥È¥Þ¥·
++¤Õ¤È¤Þ¤· #KY ÂÀ¤Þ¤·
++¤Õ¤È¤Þ¤·¤¤¤»¤¤¤È #JN ÂÀ¤Þ¤·¤¤À¸ÅÌ
++¤Õ¤È¤Þ¤·¤¤¤»¤¤¤È #JN ÂÀ¤Þ¤·¤¤À¸ÅÌ
++¤Õ¤È¤Þ¤·¤¤¤Þ¤é¤é¡¼ #JN ÂÀ¤Þ¤·¤¤¥Þ¥é¥é¡¼
++¤Õ¤È¤Þ¤·¤¤¤â¤Ê¡¼ #JN ÂÀ¤Þ¤·¤¤¥â¥Ê¡¼
++¤Õ¤É¤¦¤ß¤Í #T35 ÉÔÆ°Êö
++¤Õ¤Ë¤¯ #T35 ÉåÆù
++¤Õ¤å¤¦¤¸¤ã¤Í¤¤¤¶¤ó #T35 ¥Õ¥å¡¼¥¸¥ã¥Í¥¤¥¶¥ó
++¤Õ¤å¤¦¤¸¤ã¤Í¤¤¤·¤ã¤ó #T35 ¥Õ¥å¡¼¥¸¥ã¥Í¥¤¥·¥ã¥ó
++¤Õ¤æ¤·¤Ð¤±¤ó #JN Å߼Ƹ¤
++¤Õ¤æ¤·¤Ð¤±¤ó #T35 Å߼Ƹ¤
++¤Õ¤æ¤Á¤å¤¦ #T35 Åß¿ß
++¤Õ¤é¤°¤¬¤¿ #T5 ¥Õ¥é¥°¤¬Î©
++¤Õ¤é¤Ã¤·¤å¤Þ¤ó #JN ¥Õ¥é¥Ã¥·¥å¥Þ¥ó
++¤Õ¤é¤Ã¤È¤¹¤ê¤£ #T35 ¥Õ¥é¥Ã¥È3
++¤Õ¤é¤ó¤¹¤Ñ¤ó #T35 ¥Õ¥é¥½¥¹¥Ñ¥ó
++¤Õ¤é¤ó¤¹¤Ñ¤ó #T35 ŽÌŽ×Ž¿Ž½ŽÊŽßŽÝ
++¤Õ¤ê¡¼¤Õ¤©¡¼¤ë #JN FREEFALL
++¤Õ¤ê¤«¤¨¤ê¤â¤Ê¤« #JN ¿¶¤êÊÖ¤ê¥â¥Ê¥«
++¤Õ¤ê¤ó¤Á¤ã¤ó #T35 ÉÔÎѤÁ¤ã¤ó
++¤Õ¤ë¤¦¡«¤§¤ó #JN ¥Õ¥ë¥ô¥§¥ó
++¤Õ¤ë¤¦¡«¤§¤ó #T35 ¥Õ¥ë¥ô¥§¥ó
++¤Õ¤ì¤Ã¤Ä¤í¤Ü #JN ¥Õ¥ì¥Ã¥Ä¥í¥Ü
++¤Ö¤¤ #JN Éô°Ì
++¤Ö¤¤ #JN Éð°Ò
++¤Ö¤¤ #T35 Éð°Ò
++¤Ö¤¤ #T35 Éô°Ì
++¤Ö¤¯¤Þ¤¯ #T30 ¥Ö¥¯¥Þ¥¯
++¤Ö¤µ¤¤¤³ #T35 ¥Ö¥µ¥¤¥³
++¤Ö¤µ¤è¤¯ #JN ¥Ö¥µ¥è¥¯
++¤Ö¤µ¤è¤¯ #T35 ¥Ö¥µ¥è¥¯
++¤Ö¤¿ #JN ÆÚ
++¤Ö¤¿ #T35 ÆÚ
++¤Ö¤Á #T35 Þ¼
++¤Ö¤Á¤³ #JN ¤Ö¤Á¤³
++¤Ö¤Á¤³ #T35 ¤Ö¤Á¤³
++¤Ö¤Ã¤¯ #T35 ¥Ö¥Ã¥¯
++¤Ö¤Ã¤¯¤Þ¡¼¤¯ #T30 ¥Ö¥Ã¥¯¥Þ¡¼¥¯
++¤Ö¤Ã¤·¤Ä #T35 ʪ¼Á
++¤Ö¤Ã¤À #T35 ¥Ö¥Ã¥À
++¤Ö¤Ä¤À¤ó #T35 Ê©ÃÅ
++¤Ö¤É¤¦¤â¤Ê¡¼ #JN Éòƺ¥â¥Ê¡¼
++¤Ö¤Ì¤¹ #T35 ¥Ö¥Ì¥¹
++¤Ö¤Ó¤Á¤å¤¦ #T35 ¥Ö¥Ó¿ß
++¤Ö¤è¤¯ #T35 ¥Ö¥è¥¯
++¤Ö¤é #T35 ¥Ö¥é
++¤Ö¤é¤¦¤¶¤¯¤é¤Ã¤·¤ã #T35 ¥Ö¥é¥¦¥¶¡¼¥¯¥é¥Ã¥·¥ã
++¤Ö¤é¤¦¤¶¤¯¤é¤Ã¤·¤ã¡¼ #T35 ¥Ö¥é¥¦¥¶¡¼¥¯¥é¥Ã¥·¥ã¡¼
++¤Ö¤é¤¯¤é #T35 ¥Ö¥é¥¯¥é
++¤Ö¤é¤¯¤é #T35 ÉôÍî¤é
++¤Ö¤é¤¯¤é¤Á¤§¤Ã¤« #T35 ¥Ö¥é¥¯¥é¥Á¥§¥Ã¥«
++¤Ö¤é¤¯¤é¤Á¤§¤Ã¤«¡¼ #T35 ¥Ö¥é¥¯¥é¥Á¥§¥Ã¥«¡¼
++¤Ö¤é¤Ã¤¯¤Û¤ª¤ë #T35 ¥Ö¥é¥Ã¥¯¥Û¡¼¥ë
++¤Ö¤ë¤ª¤¿ #T35 ¥Ö¥ë¥ò¥¿
++¤Ö¤ë¤É¤Ã¤¯¤½¡¼¤¹ #KK ¥Ö¥ë¥É¥Ã¥¯¥½¡¼¥¹
++¤Ö¤ì¤¤¤º #T35 ̵Îé¿Þ
++¤Ö¤ì¤¤¤ó¤¬ #JN ¥Ö¥ì¥¤¥ó¥¬
++¤Ö¤í¡¼¤É¤Ð¤ó¤É¤ë¡¼¤¿ #T35 ¥Ö¥í¡¼¥É¥Ð¥ó¥É¥ë¡¼¥¿
++¤Ö¤í¡¼¤É¤Ð¤ó¤É¤ë¡¼¤¿¡¼ #T35 ¥Ö¥í¡¼¥É¥Ð¥ó¥É¥ë¡¼¥¿¡¼
++¤Ö¤í¤Ã¤¯¤¹ #T35 ¤Ö¤í¤Ã¤¯¤¹
++¤×¤¤¤¿ #CN ¥×ÈÄ
++¤×¤¤¤¿ #T35 ¥×ÈÄ
++¤×¤¹¤£¤³ #JN ¤×¤¹¤£»Ò
++¤×¤Ã #CJ ¤×¤Ã
++¤×¤Ã #CJ ¥×¥Ã
++¤×¤Ã #CJ ŽÌŽßŽ¯
++¤×¤Ã #JN ¡Ê¡­,_¡µ¡®¡ËŽÌŽßŽ¯
++¤×¤Ã #JN ŽÌŽßŽ¯
++¤×¤Ã¤×¤¯¤×¡¼ #JN ¤×¤Ã¤×¤¯¤×¡¼
++¤×¤Ë #T35 ¤×¤Ë
++¤×¤Ë #T35 ¥×¥Ë
++¤×¤Ë¤ë #T35 ¥×¥Ë¥ë
++¤×¤Ë¤ë¤Á¤å¤¦ #T35 ¥×¥Ë¥ë¿ß
++¤×¤é¤Ê¤ê¤¢ #JN ¥×¥é¥Ê¥ê¥¢
++¤×¤ê¤¦¤ó¤³ #T35 ¤×¤ê¤¦¤ó¤³
++¤×¤ê¤×¤ê¤Ñ¤Ã¤Ñ #JN ¥×¥ê¥×¥ê¥Ñ¥Ã¥Ñ
++¤×¤ê¤ë¤Ê¤é¤¤¤Þ¤Î¤¦¤Á #CJ ¥×¥ê¥ë¥Ê¥é¥¤¥Þ¥Î¥¦¥Á
++¤×¤ê¤ë¤Ê¤é¤¤¤Þ¤Î¤¦¤Á #CJ ŽÌŽßŽØŽÙŽÅŽ×Ž²ŽÏŽÉŽ³ŽÁ
++¤×¤ê¤ë¤Ê¤é¤¤¤Þ¤Î¤¦¤Á #JN ¥×¥ê¥ë¥Ê¥é¥¤¥Þ¥Î¥¦¥Á
++¤×¤ê¤ë¤Ê¤é¤¤¤Þ¤Î¤¦¤Á #JN ŽÌŽßŽØŽÙŽÅŽ×Ž²ŽÏŽÉŽ³ŽÁ
++¤×¤ê¤ó¤¢¤¿¤Þ #T35 ¥×¥ê¥óƬ
++¤×¤ë¤®¤³ #JN ¥×¥ë¥®¥³
++¤×¤ë¤â¤Ê #JN ¥×¥ë¥â¥Ê
++¤×¤í¤­¤·¤­¤»¤¤ #T35 £Ð£Ò£Ï£Ø£Ùµ¬À©
++¤×¤í¤¯¤· #T35 ¥×¥í¥¯¥·
++¤×¤í¤·¤ß¤ó #T35 ¥×¥í»Ô̱
++¤×¤í¤¸¤§¤¯¤È¤¨¤Ã¤¯¤¹ #KK ¥×¥í¥¸¥§¥¯¥È£Ø
++¤×¤í¤¸¤§¤¯¤È¤¨¤Ã¤¯¤¹ #T35 ¥×¥í¥¸¥§¥¯¥ÈX
++¤×¤í¤¸¤§¤¯¤È¤¨¤Ã¤¯¤¹ #T35 ¥×¥í¥¸¥§¥¯¥È£Ø
++¤×¤í¤¸¤§¤¯¤È¤±¡¼ #KK ¥×¥í¥¸¥§¥¯¥È£Ë
++¤×¤í¤¸¤§¤¯¤È¤±¡¼ #T35 ¥×¥í¥¸¥§¥¯¥È£Ë
++¤×¤í¤¸¤§¤¯¤È¤±¤¨ #T35 ¥×¥í¥¸¥§¥¯¥ÈK
++¤×¤í¤Ð¤¬¤ó¤À¤³¤¦ #T35 ¥×¥í¥Ñ¥¬¥ó¥À¹»
++¤×¤í¤Ñ¤¬¤ó¤À¤¿¤ï¤¢ #T35 ¥×¥í¥Ñ¥¬¥ó¥À¥¿¥ï¡¼
++¤Ø¡¼¤â¤Ê¡¼ #JN ¤Ø¡¼¥â¥Ê¡¼
++¤Ø¤¤¤¢¤ó #JN Ê¿°Â
++¤Ø¤¤¤¢¤ó #T35 Ê¿°Â
++¤Ø¤¤¤µ¤»¤Ä #T35 Êĺ¿Àâ
++¤Ø¤§¤¨ #CJ (¡­Ž¥¢ÏŽ¥`)¤Ø¤§¡¼
++¤Ø¤§¤¨ #CJ ¤Ø¤§¡Á
++¤Ø¤¨¤¨¤­¤ß¤é¤¤¤À¤¢¤Ë¤Ê¤Ã¤¿¤Ð¤Ã¤«¤ê¤Ê¤ó¤À #CJ ¤Ø¤¨¡¼·¯¥é¥¤¥À¡¼¤Ë¤Ê¤Ã¤¿¤Ð¤Ã¤«¤ê¤Ê¤ó¤À
++¤Ø¤³ #T35 ±ú
++¤Ø¤Ä¤° #CJ >>¡û¡û¤Ø¹ð¤°
++¤Ø¤Ê¤® #JNS ¤Ø¤Ê¤®
++¤Ø¤Ê¤® #T35 ¤Ø¤Ê¤®
++¤Ø¤Î¤Ø¤Î¤â¤Ø¤¸ #JN ¤Ø¤Î¤Ø¤Î¤â¤Ø¤¸
++¤Ø¤Ü¤ó #T35 ¤Ø¤Ü¤ó
++¤Ø¤ó¤Ê¤¦¤¿ #T35 ÊѤʲÎ
++¤Ù¤Ã¤½¤¦ #T35 ÊÌÁñ
++¤Ù¤Ó¤·¤£ #JN ¥Ù¥Ó¤·¤£
++¤Ù¤ë¤À¤ó¤Ç¤£¡¼¤¢¤é¤· #JN ¥Ù¥ë¥À¥ó¥Ç¥£¡¼¹Ó¤é¤·
++¤Ù¤ì¤â¤é #JN ¥Ù¥ì¥â¥é
++¤Ù¤ó¤­ #T35 ÊØ´ï
++¤Ù¤ó¤¸¤ç¤Î¤é¤¯¤¬¤­ #T35 Êؽê¤ÎÍî½ñ¤­
++¤Ù¤ó¤¼¤ó¤«¤ó #JN ¥Ù¥ó¥¼¥ó´Ä
++¤Ú¡¼¤¸¤Ó¤å¡¼ #T35 ¥Ú¡¼¥¸¥Ó¥å¡¼
++¤Ú¤±¤Ð¤³ #T35 ¥Ú¥±È¢
++¤Ú¤±¤Ü¤Ã¤¯¤¹ #T35 ¥Ú¥±¥Ü¥Ã¥¯¥¹
++¤Ú¤³¤ê #CJ ¤Ú¤³¤ê
++¤Ú¤Ã #CJ ¤Ú¤Ã
++¤Ú¤Ã¤È #T35 ¥Ú¥Ã¥È
++¤Ú¤Ã¤È¤Ü¤È¤ë #T35 ¥Ú¥Ã¥È¥Ü¥È¥ë
++¤Ú¤É #T35 ¥Ú¥É
++¤Ú¤É¤Õ¤£¤ê¤¢ #T35 ¤Ú¤É¤Õ¤£¤ê¤¢
++¤Ú¤É¤Õ¤£¤ê¤¢ #T35 ¥Ú¥É¥Õ¥£¥ê¥¢
++¤Ú¤ä¤ó¤° #JN ¥Ú¥ä¥ó¥°
++¤Ú¤ä¤ó¤° #T35 ¥Ú¥ä¥ó¥°
++¤Ú¤ê¤« #T35 ¥Ú¥ê¥«
++¤Û¡¼¤¹¤¯¤é¤Ã¤·¤ã¡¼ #JN ¥Û¡¼¥¹¥¯¥é¥Ã¥·¥ã¡¼
++¤Û¡¼¤¹¤¯¤é¤Ã¤·¤ã¡¼ #T35 ¥Û¡¼¥¹¥¯¥é¥Ã¥·¥ã¡¼
++¤Û¤¥ #JN ¡ÊŽß¢òŽß¡Ë
++¤Û¤¥ #JN ŽÎŽ©
++¤Û¤¦ #T35 ˤ
++¤Û¤¦¤¨¤¤¤Õ¤ó¤¨¤ó¤í¤¯ #T35 Êõ±ÊÊ®±ìϽ
++¤Û¤¦¤±¤¤ #CN Êñ·Ô
++¤Û¤¦¤±¤¤ #T35 Êñ·Ô
++¤Û¤¦¤¸¤ç¤¦¤â¤Ê¤ë #JN ËÌÛê¥â¥Ê¥ë
++¤Û¤¦¤¹¤¯¤é¤Ã¤·¤ã¤¢ #T35 ¥Û¡¼¥¹¥¯¥é¥Ã¥·¥ã¡¼
++¤Û¤¦¤½¤¯¤«¤¤¤Ò #T35 ˡ§²óÈò
++¤Û¤¦¤Á #T30 ÊüÃÖ
++¤Û¤¦¤Æ¤¤ #JN Ë¡Äî
++¤Û¤«¤ó #T30 ÊÝ´É
++¤Û¤¯¤È¤·¤ó¤±¤ó¤Ç¤ä¤é¤ì¤ë¤â¤Ê¡¼ #JN ËÌÅÍ¿À·ý¤Ç»¦¤é¤ì¤ë¥â¥Ê¡¼
++¤Û¤¯¤Û¤¯¤µ¤Ä¤µ¤Ä #CN ËÌËÌ»¥»¥
++¤Û¤¯¤Û¤¯¤µ¤Ä¤µ¤Ä #T35 ËÌËÌ»¥»¥
++¤Û¤°¤À¤¤ #T35 ¤Û¤°¤À¤¤
++¤Û¤· #T35 À±
++¤Û¤·¤¯¤ó #JN ¡ù¤¯¤ó
++¤Û¤·¤å #T30 Êݼé
++¤Û¤·¤å¤Ï¤¢¤é¤· #CJ Êݼé¤Ï¹Ó¤é¤·
++¤Û¤¹¤£ #CJ ¥Û¥¹¥£¡¦¡¦¡¦
++¤Û¤¹¤£ #CJ ŽÎŽ½Ž¨Ž¥Ž¥Ž¥
++¤Û¤¹¤£ #JN ¥Û¥¹¥£
++¤Û¤¼¤ó #T30 ÊÝÁ´
++¤Û¤Ã¤µ¤ï #T35 ʧÂô
++¤Û¤Ã¤È¤¾¤Ì #KK ¥Û¥Ã¥È¥¾¥Ì
++¤Û¤Ã¤È¤¾¤Ì #T35 ¥Û¥Ã¥È¥¾¥Ì
++¤Û¤Í #JN ¹ü¡¡
++¤Û¤Í¤ª¤¦ #T35 ¹ü²¦
++¤Û¤Î¤ª¤Î¤³¤Þ #T35 ±ê¤Î¥³¥Þ
++¤Û¤à¤¦¤é¤ó #T35 ¥Û¥à¡¼¥é¥ó
++¤Û¤à¤¦¤é¤ó¤¦¤¿¤ì¤Æ #CJ ¥Û¥à¡¼¥é¥óÂǤ¿¤ì¤Æ¡Ä
++¤Û¤á¤Ñ¤² #T35 ¥Û¥á¥Ñ¥²
++¤Û¤é¤è #CJ ¤Û¤é¤è
++¤Û¤ï¤¤¤È¤Ù¡¼¤¹¤«¤ó¤­¤ç¤¦ #JN ¥Û¥ï¥¤¥È¥Ù¡¼¥¹´Ï¶¶
++¤Û¤ó #T35 ËÜ
++¤Û¤ó¤±¤Ê¤° #JN ËܲȤʤ°
++¤Û¤ó¤·¤Ä #T35 ËܼÁ
++¤Û¤ó¤¹¤ì #T35 ËÜ¥¹¥ì
++¤Û¤ó¤¹¤ì¤µ¤ó¤­¤ç¤¦¤À¤¤ #JN ËÜ¥¹¥ì»°·»Äï
++¤Û¤ó¤¹¤ì¤Î¤Ï¤¿ #JN ËÜ¥¹¥ì¤Î´ú
++¤Ü¡¼¤É¤¤¤Á¤é¤ó #T35 ¥Ü¡¼¥É°ìÍ÷
++¤Ü¤¦ #T35 ˼
++¤Ü¤¦¤À #T35 ËÀÂÌ
++¤Ü¤¦¤á¤¤ #T35 Ë´Ì¿
++¤Ü¤ª¤ë¤º #JN ¥Ü¡¼¥ë¥º
++¤Ü¤­¤ó #T30 ¤Ü¤­¤ó
++¤Ü¤¯¤ª¤ó¤Ê #T35 Ëͽ÷
++¤Ü¤¯¤Á¤ó¤«¤ï¤¤¤Á¤å¤®¤À¤ï¤ó #JN ¤Ü¤¯¤Á¤ó¡¢¤«¤ï¤¤¤Á¤å¤®¤À¥ï¥ó¡ª
++¤Ü¤¯¤È¤¦ #JN ÌÚÅá
++¤Ü¤¯¤È¤¦ #T35 ÌÚÅá
++¤Ü¤¯¤Î¤¢¤Ä¤³¤¿¤ó #JN ËͤΤ¢¤Ä¤³¤¿¤ó¡ª
++¤Ü¤¯¤Î¤¢¤Ä¤³¤¿¤ó #JN ËͤΤ¢¤Ä¤³¤¿¤ó¡ª¡³(¡­¡¼`)ŽÉ
++¤Ü¤¯¤Î¤³¤¦¤â¤ó¤â¤Ø¤¤¤µ¤µ¤ì¤½¤¦¤Ç¤¹ #CJ ¥Ü¥¯¤ÎæêÌç¤âÊĺ¿¤µ¤ì¤½¤¦¤Ç¤¹
++¤Ü¤±¤§ #CJ ¥Ü¥±¥§
++¤Ü¤³ #R5 ±ú
++¤Ü¤À #T35 ÊèÂÌ
++¤Ü¤Ã¤­¤¢¤² #JN ¡³(`§¥¡­)¥Î¥Ü¥Ã¥­¥¢¥²
++¤Ü¤Ã¤­¤¢¤² #JN ¡³(`§¥¡­)ŽÉŽÎŽÞŽ¯Ž·Ž±Ž¹ŽÞ
++¤Ü¤Ã¤­¤¢¤² #JN ¥Ü¥Ã¥­¥¢¥²
++¤Ü¤Ã¤­¤¢¤² #JN ŽÎŽÞŽ¯Ž·Ž±Ž¹ŽÞ
++¤Ü¤Ã¤­¤¢¤² #T35 ¥Ü¥Ã¥­¥¢¥²
++¤Ü¤Ã¤­¤Æ¤ó¤· #T35 ËÖµ¯Å·»È
++¤Ü¤Ã¤­¤É¤é¤¨¤â¤ó #JN ¤Ü¤Ã¤­¥É¥é¤¨¤â¤ó¡¡
++¤Ü¤Ã¤·¤å¡¼¤È #JN ¥Ü¥Ã¥·¥å¡¼¥È
++¤Ü¤Ç¤£¤¤¤º¤Ó¤¤¤È #T35 ¥Ü¥Ç¥£¡¼¥º¥Ó¡¼¥È
++¤Ü¤Ü¤ó #T35 ¥ÜËß
++¤Ü¤Ü¤ó #T35 ËХܡ¼¥ó
++¤Ü¤Ü¤ó #T35 ËХܥó
++¤Ü¤Ü¤ó¤¹¤ì #T35 ¥Ü¥Ü¥ó¥¹¥ì
++¤Ü¤ß¤ç¤¦ #CJ ¤Ü¤ß¤ç¡¼
++¤Ü¤ß¤ç¤¦ #T35 ¤Ü¤ß¤ç¡¼
++¤Ü¤ë¤¸¤ç¤¢ #JN ¤Ü¤ë¤¸¤ç¤¢¢¡yBEncckFOU
++¤Ü¤ó¤¯¤é¤¹ #T35 ¥Ü¥ó¥¯¥é¥¹
++¤Ü¤ó¤µ¤¤ #T35 ËߺÏ
++¤Ü¤ó¤µ¤¤¤»¤ó¤»¤¤ #T35 ËߺÏÀèÀ¸
++¤Ü¤ó¤Á¤å¤¦ #T35 Ëß¿ß
++¤Ý #CJ ¤Ý
++¤Ý¡¼¤«¤ó #JN ¡Ê¡û¸ý¡û*¡ËŽÎŽßŽ°Ž¶ŽÝ
++¤Ý¡¼¤«¤ó #JN ¥Ý¡¼¥«¥ó
++¤Ý¡¼¤ë¤Þ¤ó #JN ¥Ý¡¼¥ë¥Þ¥ó
++¤Ý¤¢ #T35 ¥Ý¥¢
++¤Ý¤¤¤º¤ó #T35 ¥Ý¥¤¥º¥ó
++¤Ý¤¤¤º¤ó¤¹¤ì #T35 ¥Ý¥¤¥º¥ó¥¹¥ì
++¤Ý¤¨¤¿¤ó #JN ¥Ý¥¨¤¿¤ó
++¤Ý¤¨¤¿¤ó #T35 ¥Ý¥¨¤¿¤ó
++¤Ý¤«¡¼¤ó #CJ (¡¬§Õ¡¬)¥Ý¥«¡¼¥ó
++¤Ý¤«¡¼¤ó #CJ (Žß§ÕŽß)ŽÎŽßŽ¶Ž°ŽÝ
++¤Ý¤«¡¼¤ó #CJ ¥Ý¥«¡¼¥ó
++¤Ý¤«¡¼¤ó #CJ ŽÎŽßŽ¶Ž°ŽÝ
++¤Ý¤«¡¼¤ó #JN (Žß§ÕŽß)ŽÎŽßŽ¶Ž°ŽÝ
++¤Ý¤«¡¼¤ó #JN ¥Ý¥«¡¼¥ó
++¤Ý¤«¡¼¤ó #JN ŽÎŽßŽ¶Ž°ŽÝ
++¤Ý¤³¡¼¤ê #CJ ¥Ý¥³¡¼¥ê
++¤Ý¤³¡¼¤ê #CJ ŽÎŽßŽºŽ°ŽØ
++¤Ý¤¹¤È¤µ¤ó #JN ¥Ý¥¹¥È¤µ¤ó
++¤Ý¤Ã¤Ý #JN ¤Ý¤Ã¤Ý
++¤Ý¤Ã¤Ý #JN ¥Ý¥Ã¥Ý
++¤Ý¤Ã¤Ý #T35 ¤Ý¤Ã¤Ý
++¤Ý¤Ã¤Ý #T35 ¥Ý¥Ã¥Ý
++¤Ý¤ê¤´¤ó¤â¤Ê¡¼ #JN ¡¡¡¡¡¡¥Ý¥ê¥´¥ó¥â¥Ê¡¼
++¤Ý¤ê¤´¤ó¤â¤Ê¡¼ #JN ¥Ý¥ê¥´¥ó¥â¥Ê¡¼
++¤Ý¤ë¤È¤¬¤ë¤´ #T35 Éòƺ²ç¸ì
++¤Ý¤ì #T35 ¥Ý¥ì
++¤Ý¤ó¤­¤ó¤«¤ó #CN ¥Ý¥ó¥­¥ó¥«¥ó
++¤Ý¤ó¤­¤ó¤«¤ó #T35 ¥Ý¥ó¥­¥ó¥«¥ó
++¤Ý¤ó¤À¤¤ #CN ¥Ý¥óÂç
++¤Ý¤ó¤À¤¤ #T35 ¥Ý¥óÂç
++¤Ý¤ó¤Ð¤· #CN ¥Ý¥ó¶¶
++¤Ý¤ó¤Ð¤· #T35 ¥Ý¥ó¶¶
++¤Þ #JN Ëâ
++¤Þ #T35 Ëâ
++¤Þ¡¼¤¬¤ì¤Ã¤È¤¢¤ó¤É¤Õ¤é¤ó¤½¤ï #JN ¥Þ¡¼¥¬¥ì¥Ã¥È¡õ¥Õ¥é¥ó¥½¥ï
++¤Þ¡¼¤·¡¼ #JN ¥Þ¡¼¥·¡¼
++¤Þ¡¼¤º¤ä #JN £Í£Á£Ò£Ó²°
++¤Þ¡¼¤Á #KK ¥Þ¡¼¥Á
++¤Þ¤¡¤¦¡«¤µ¤² #T35 ¡³(`§¥¡­)¥Î¥Þ¥¡¥ô¥µ¥²
++¤Þ¤¡¤¦¡«¤µ¤² #T35 ¡³(`§¥¡­)ŽÉŽÏŽ§Ž³ŽÞŽ»Ž¹ŽÞ
++¤Þ¤¢¤ª¤Á¤Ä¤± #CJ ¤Þ¤¢Íî¤ÁÃ失
++¤Þ¤¢¤ª¤ó¤¿¤¤¤À¤· #CJ ¤Þ¤¢¸æÂç¤À¤·
++¤Þ¤¢¤Á #T35 ¥Þ¡¼¥Á
++¤Þ¤¤¤¦¡¼ #T35 ¥Þ¥¤¥¦¡¼
++¤Þ¤¤¤®¤ç¤¯ #T35 £Í£ù¶Ì
++¤Þ¤¤¤¯¤½¤½¤Õ¤È #T35 ¥Þ¥¤Êµ¥½¥Õ¥È
++¤Þ¤¤¤¿ #CN ¥ÞÈÄ
++¤Þ¤¤¤¿ #T35 ¥ÞÈÄ
++¤Þ¤¤¤¿¤ó¤Ú¤ó¤®¤ó #JN ¤Þ¤¤¤¿¤ó¥Ú¥ó¥®¥ó
++¤Þ¤¤¤Ë¤Ã¤Á #JN ¥Þ¥¤¥Ë¥Ã¥Á¡¡
++¤Þ¤¤¤Ó¤¤¤à #T35 ¥Þ¥¤¥Ó¡¼¥à
++¤Þ¤¤¤ó¤É¤¯¤é¤Ã¤·¤ã¤¢ #T35 ¥Þ¥¤¥ó¥É¥¯¥é¥Ã¥·¥ã¡¼
++¤Þ¤¦ #JN ¥Þ¥¦
++¤Þ¤¦ #T35 ¥Þ¥¦
++¤Þ¤¦¤¹¤Ñ¤Ã¤È #T35 ¥Þ¥¦¥¹¥Ñ¥Ã¥È
++¤Þ¤¨¤¹¤ì #T35 Á°¥¹¥ì
++¤Þ¤¨¤À¤±¤¤¤¸ #JN Á°Åķļ¡
++¤Þ¤ª¡¼ #JN ¥Þ¥ª¡¼
++¤Þ¤ª¤¦¤â¤Ê¤Õ¤¡¡¼ #JN ËⲦ¥â¥Ê¥Õ¥¡¡¼
++¤Þ¤«¡¼ #T35 ¥Þ¥«¡¼
++¤Þ¤«¤¢ #T35 ¥Þ¥«¡¼
++¤Þ¤«¤¤ #T35 Ë⳦
++¤Þ¤«¤Ä #K5 ¤Þ¤«¤Ä
++¤Þ¤«¤Ä¤¯¤Ã¤Æ¤¤¤¦¤«¤­¤â¤¤ #CJ ¤Þ¤«¤Ä¤¯¤Ã¤Æ¤¤¤¦¤«¥­¥â¥¤
++¤Þ¤­¤³ #JNM ¥Þ¥­¥³
++¤Þ¤­¤³ #JNM Ëâµ´»Ò
++¤Þ¤­¤³ #T35 ¥Þ¥­¥³
++¤Þ¤­¤³ #T35 Ëâµ´»Ò
++¤Þ¤­¤Î¤ë¤­ #JN ËÒÌîαɱ
++¤Þ¤°¤Þ¤° #KK ¤Þ¤°¤Þ¤°
++¤Þ¤°¤í #T35 Ëî
++¤Þ¤±¤¤¤Ì #T35 É餱¸¤
++¤Þ¤³¤Ä #T35 Ëâ¹ü
++¤Þ¤³¤È #JN ¿¿
++¤Þ¤³¤Ô¡¼ #JN ¤Þ¤³¤Ô¡¼
++¤Þ¤³¤Ô¡¼ #T35 ¤Þ¤³¤Ô¡¼
++¤Þ¤³¤Ô¤¤ #T35 ¤Þ¤³¤Ô¡¼
++¤Þ¤³¤Ô¤¹¤È #T35 ¤Þ¤³¤Ô¤¹¤È
++¤Þ¤µ¤ª #JNM ¤Þ¤µ¤ª
++¤Þ¤µ¤ª #JNM ¥Þ¥µ¥ª
++¤Þ¤µ¤ª #JNM ÀµÃË
++¤Þ¤µ¤ª #T35 ¤Þ¤µ¤ª
++¤Þ¤µ¤ª #T35 ¥Þ¥µ¥ª
++¤Þ¤µ¤ª #T35 ÀµÃË
++¤Þ¤µ¤à¤Í¡¼¤è¤«¤Ã¤³¤¦¤£¤º¤Ê¤¨¤Ê¤¤¤ï¤È¤¸¤«¤Ã¤³ #JN ¥Þ¥µ¥à¥Í¡¼¥è¡Êwith¡¡¥Ê¥¨¥Ê¥¤¥ï¡Ë
++¤Þ¤µ¤ä #JNM ¥Þ¥µ¥ä
++¤Þ¤µ¤ä #T35 ¥Þ¥µ¥ä
++¤Þ¤µ¤è¤· #JNM ÀµµÁ
++¤Þ¤·¡¼¤Ö #T35 ¥Þ¥·¡¼¥Ö
++¤Þ¤·¤¤¤Ö #T35 ¥Þ¥·¡¼¥Ö
++¤Þ¤·¤ê¤È #JN ¥Þ¥·¥ê¥È
++¤Þ¤·¤ê¤È #T35 ¥Þ¥·¥ê¥È
++¤Þ¤·¤ó¤¤¤é¤Í¤¤¤À¡¼ #JN ¥Þ¥·¥ó¥¤¥é¥Í¥¤¥À¡¼
++¤Þ¤·¤ó¤µ¤ó #CJ ¤Þ¤·¤ó¤µ¤ó¡¦¡¦¡¦
++¤Þ¤¸¤á¤À¤Ê¡¼ #JN ¥Þ¥¸¥á¥À¥Ê¡¼
++¤Þ¤¸¤ì¤¹ #T30 ¥Þ¥¸¥ì¥¹
++¤Þ¤¸¤ì¤¹¤Þ¤ó #JN ¥Þ¥¸¥ì¥¹¥Þ¥ó
++¤Þ¤¸¤ò¤¿ #T35 ¥Þ¥¸¥ò¥¿
++¤Þ¤¹¤ª #JNM ¥Þ¥¹¥ª
++¤Þ¤¹¤ª #T35 ¥Þ¥¹¥ª
++¤Þ¤¹¤´¤ß #T35 ¥Þ¥¹¥´¥ß
++¤Þ¤¹¤¿ #SUC ¤Þ¤¹¤¿
++¤Þ¤¹¤¿¡¼¤¤¤Ä¤â¤Î¤¿¤Î¤à #CJ ¥Þ¥¹¥¿¡¼¡¢¤¤¤Ä¤â¤Î¤¿¤Î¤à
++¤Þ¤º¤¦ #CJ ¥Þ¥º¡¼
++¤Þ¤º¤¦ #CJ ŽÏŽ½ŽÞŽ°
++¤Þ¤º¤¸¤å¡¼ #T35 ¤Þ¤º¥¸¥å¡¼
++¤Þ¤½¤³ #T35 ¥Þ¥½¥³
++¤Þ¤¿ #CJ ¤Þ¤¿¡©
++¤Þ¤¿¡¼¤ê #T30 ¥Þ¥¿¡¼¥ê
++¤Þ¤¿¡¼¤ê #T30 ¥Þ¥¿¡Á¥ê
++¤Þ¤¿¡¼¤ê¤­¤ã¤é¤®¤ã¤¯¤µ¤Ä¤È¤¦ #KK ¥Þ¥¿¡¼¥ê¥­¥ã¥éµÔ»¦ÅÞ
++¤Þ¤¿¡¼¤ê¤­¤ã¤é¤®¤ã¤¯¤µ¤Ä¤È¤¦¤¢¤é¤· #JN ¥Þ¥¿¡¼¥ê¥­¥ã¥éµÔ»¦Å޹Ӥ餷
++¤Þ¤¿¡¼¤ê¤­¤ã¤é¤®¤ã¤¯¤µ¤Ä¤È¤¦¤½¤¦¤¹¤¤ #JN ¥Þ¥¿¡¼¥ê¥­¥ã¥éµÔ»¦ÅÞÁí¿ã
++¤Þ¤¿¡¼¤ê¤´¤¦ #JN MATAARI¹æ
++¤Þ¤¿¡¼¤ê¤Ê¤ä¤·¤ç¤¯¤ò¤Ä¤¯¤í¤¦ #JN ¥Þ¡¼¥¿¥ê¤ÊÌë¿©¤òºî¤í¤¦
++¤Þ¤¿¡¼¤ê¤á¤À¤ë #JN ¥Þ¥¿¡¼¥ê¥á¥À¥ë
++¤Þ¤¿¡¼¤ê¤á¤À¤ë #JN ŽÏŽÀŽ°ŽØŽÒŽÀŽÞŽÙ
++¤Þ¤¿¤¢¤ê¤¹¤ì #T35 ¥Þ¥¿¡¼¥ê¥¹¥ì
++¤Þ¤¿¤¢¤ê¤Á¤å¤¦ #T35 ¥Þ¥¿¡¼¥ê¿ß
++¤Þ¤¿¤ª¤ª¤µ¤«¤« #CJ ¤Þ¤¿Âçºå¤«
++¤Þ¤¿¤ª¤ª¤µ¤«¤ä #CJ ¤Þ¤¿Âçºå¤ä
++¤Þ¤¿¤Ê¤¬¤¿¤¹¤ì¤« #CJ ¤Þ¤¿±ÊÅÄ¥¹¥ì¤«
++¤Þ¤À¤à #JN ¥Þ¥À¥à
++¤Þ¤Á¤Ó¡¼¤Ó¡¼¤¨¤¹ #KK ¤Þ¤ÁBBS
++¤Þ¤Á¤Ó¤¤¤Ó¤¤¤¨¤¹ #T35 ¤Þ¤ÁBBS
++¤Þ¤Ã¤¿¤ê #T30 ¥Þ¥Ã¥¿¥ê
++¤Þ¤Ã¤¿¤ê #T30 ¤Þ¤Ã¤¿¤ê
++¤Þ¤Ã¤Á¤ç¤â¤Ê¡¼ #JN ¥Þ¥Ã¥Á¥ç¥â¥Ê¡¼
++¤Þ¤Ä¤¤ #T35 ¾¾°æ
++¤Þ¤Ä¤¿¤±¤³ #JN ¾¾¤¿¤±»Ò
++¤Þ¤Ä¤À¤¤¤é #T35 ¾¾Ê¿
++¤Þ¤Ä¤À¤¿¤«¤È #JN ¾¾ÅÄ·¼¿Í
++¤Þ¤Ä¤ê #T35 º×¤ê
++¤Þ¤Ä¤ê¤¢¤­¤¿ #JN º×¤êË°¤­¤¿
++¤Þ¤Ä¤ê¤À¤È¤Ä¤²¤­¤À #JN º×¤ê¤À¢öÆÍ·â¤À¡ª
++¤Þ¤Å #T35 ¥Þ¥Å
++¤Þ¤È¤Ð¤Õ¤ß¤ª #JN Ū¾ìʸÃË
++¤Þ¤É¤« #T35 ¥Þ¥É¥«
++¤Þ¤É¤Ä¤«¤¤ #T35 Áë»È¤¤
++¤Þ¤Ë¡¼ #JN ¥Þ¥Ë¡¼¡¡
++¤Þ¤Ë¡¼¤¯¤Þ¤Ã¤·¤å¤ë¡¼¤à #JN ¥Þ¥Ë¡¼¥¯¥Þ¥Ã¥·¥å¥ë¡¼¥à
++¤Þ¤Ë¡¼¤¯¤Þ¤Ã¤·¤å¤ë¡¼¤à #JN ¥Þ¥Ë¡¼¥¯¥Þ¥Ã¥·¥å¥ë¡¼¥à
++¤Þ¤Ò¤£¤¢ #JN ¥Þ¥Ò¥£¥¢
++¤Þ¤Ò¤£¤¢ #JN ŽÏŽËŽ¨Ž±
++¤Þ¤Ò¤£¤¢ #T35 ¥Þ¥Ò¥£¥¢
++¤Þ¤Ò¤£¤¢¤£¤ç¤¥ #JN ¥Þ¥Ò¥£¥¢¤£¤ç¤¥
++¤Þ¤Ò¤£¤¢¤£¤ç¤¥ #JN ŽÏŽËŽ¨Ž±¤£¤ç¤¥
++¤Þ¤Û¤¦¤Ä¤«¤¤ #T35 ËâË¡»È¤¤
++¤Þ¤Ü¤ó #T35 Ëõ¥Ü¡¼¥ó
++¤Þ¤Ü¤ó #T35 Ëõ¥Ü¥ó
++¤Þ¤Ý¡¼¤é #CJ ¥Þ¥Ý¡¼¥é
++¤Þ¤Þ #CJ ¡Ê¡­§Õ¡®¡Ë¥Þ¥Þ¡¦¡¦¡¦
++¤Þ¤Þ #CJ ¡Ê¡­§Õ¡®¡ËŽÏŽÏ¡¦¡¦¡¦
++¤Þ¤Þ #JN ¡Ê¡­§Õ¡®¡Ë¥Þ¥Þ¡¦¡¦¡¦
++¤Þ¤Þ #JN ¡Ê¡­§Õ¡®¡ËŽÏŽÏ¡¦¡¦¡¦
++¤Þ¤Þ¤´¤ó #T35 ¥Þ¥Þ¥´¥ó
++¤Þ¤Þ¤â¤Ê¡¼¤»¤¤¤Á¤ç¤¦¤º #JN ¥Þ¥Þ¥â¥Ê¡¼À®Ä¹¿Þ
++¤Þ¤Þ¤ó #JN ¥Þ¥Þ¥ó
++¤Þ¤Þ¤ó #T35 ¥Þ¥Þ¥ó
++¤Þ¤à¤³ #T35 ¥Þ¥à¥³
++¤Þ¤á #T35 Ʀ
++¤Þ¤é¤¤¤¢¤ó #JN ¥Þ¥é¥¤¥¢¥ó
++¤Þ¤é¤¹¤¿¡¼ #JN ¥Þ¥é¡¦¥¹¥¿¡¼
++¤Þ¤é¤Í¡¼¤è #JN ¥Þ¥é¥Í¡¼¥è
++¤Þ¤é¤Ü¤¦ #JN ¥Þ¥éË·
++¤Þ¤é¤ß #JN ¥Þ¥éÈþ
++¤Þ¤é¤é¡¼ #JN ¥Þ¥é¥é¡¼
++¤Þ¤é¤é¡¼¤À¤ó¤µ¡¼¤º #JN ¥Þ¥é¥é¡¼¥À¥ó¥µ¡¼¥º
++¤Þ¤é¤é¤É¤Î #JN ¥Þ¥é¥éÅÂ
++¤Þ¤é¤ê¡¼¤Þ¤ó #JN ¥Þ¥é¥ê¡¼¥Þ¥ó
++¤Þ¤ê¤â #JN ÝÜÁô
++¤Þ¤ê¤â #T35 ¤Þ¤ê¤â
++¤Þ¤ë¤¤¤±¤¤ #T35 ´Ý°æ·Ï
++¤Þ¤ë¤¹¤ä #JN £Í£Á£Ò£Ó²°
++¤Þ¤ë¤Á #JN ¥Þ¥ë¥Á
++¤Þ¤ë¤Á #T35 ¥Þ¥ë¥Á
++¤Þ¤ë¤Á¤Ý¤¹¤È #T30 ¥Þ¥ë¥Á¥Ý¥¹¥È
++¤Þ¤ë¤ß #JN ±ßÈþ
++¤Þ¤ë¤ß¤ß¤â¤Ê¡¼ #JN ´Ý¼ª¥â¥Ê¡¼
++¤Þ¤í¤ó #T35 ¥Þ¥í¥ó
++¤Þ¤ï¤·¤®¤³ #JN ¤Þ¤ï¤·¥®¥³
++¤Þ¤ó #T35 Ëþ
++¤Þ¤ó¤¤¤ó¤Ç¤ó¤·¤ã #JN Ëþ°÷ÅżÖ
++¤Þ¤ó¤¬¤Í¤¿¤¹¤ì #T35 Ì¡²è¥Í¥¿¥¹¥ì
++¤Þ¤ó¤­¤ó¤¨¤°¤¼ #T35 ¥Þ¥ó¥­¥óEXE
++¤Þ¤ó¤®¤ã¤ë #T35 ¥Þ¥ó¥®¥ã¥ë
++¤Þ¤ó¤º¤ê #T35 ÒÄ¥º¥ê
++¤Þ¤ó¤»¡¼ #CJ ¥Þ¥ó¥»¡¼
++¤Þ¤ó¤»¡¼¤á¡¼¤¿¡¼ #T35 ¥Þ¥ó¥»¡¼¥á¡¼¥¿¡¼
++¤Þ¤ó¤»¤¨¤á¤¨¤¿¤¢ #T35 ¥Þ¥ó¥»¡¼¥á¡¼¥¿¡¼
++¤Þ¤ó¤É¤¯¤»¤¨ #CJ ¥Þ¥ó¥É¥¯¥»¡¼
++¤Þ¤ó¤Ü¤¦ #JN ¥Þ¥ó¥Ü¥¦
++¤ß¡¼¤È¤Ü¡¼¤ë #JN ¥ß¡¼¥È¥Ü¡¼¥ë
++¤ß¤¤¤Ë¤ã¤¢¤¿¤ó #T35 ¥ß¡¼Æó¥ã¡¼¤¿¤ó
++¤ß¤¦¤Ê #JN ¤ß¤¦¤Ê
++¤ß¤«¤« #KK ¤ß¤«¤«
++¤ß¤«¤« #T35 ¤ß¤«¤«
++¤ß¤«¤É¤¢¤ó #JN ¤ß¤«¤É°Ã
++¤ß¤«¤É¤¢¤ó¤Ê¤¤¤Ö #JN ¤ß¤«¤É°ÃÆâÉô
++¤ß¤­¡¼¤ª #JN ¥ß¥­¡¼¥ª
++¤ß¤®¤Æ¤Ç¤«¤­¤Þ¤·¤¿ #CJ ±¦¼ê¤Ç½ñ¤­¤Þ¤·¤¿
++¤ß¤®¤Ò¤² #T35 ±¦¤Ò¤²
++¤ß¤³¤ß¤³¤Ê¤¢¤¹ #KK Öà½÷¤ß¤³¥Ê¡¼¥¹
++¤ß¤µ¤«¤«¤ª¤ê #T35 Èþºä¹áΤ
++¤ß¤·¤ã¤â¤Ê¡¼ #JN Èþ¼Ó¥â¥Ê¡¼
++¤ß¤·¤ç¤¯¤¯¤ó #T35 ̤¿©·¯
++¤ß¤¹¤º¤â¤Ê¡¼ #JN ´ÑÎë¥â¥Ê¡¼
++¤ß¤¹¤¿¡¼¤Û¤¥ #JN Mr.ŽÎŽ©
++¤ß¤º¤´¤ê¤é #JN ¿å¥´¥ê¥é
++¤ß¤º¤´¤ê¤é #T35 ¿å¥´¥ê¥é
++¤ß¤¾¤Í¤º¤ß #JN ¹ÂÁÍ
++¤ß¤¾¤Í¤º¤ß #T35 ¹ÂÁÍ
++¤ß¤¿¤é¤¤¤Ò¤í¤­ #T35 ¸æ¼êÀöÊØ´ï
++¤ß¤Á¤å #JN (*'-'*)
++¤ß¤Á¤å #JN ¤ß¤Á¤å
++¤ß¤Ã¤·¡¼ #JN ¤ß¤Ã¤·¡¼
++¤ß¤Ã¤·¡¼ #T35 ¤ß¤Ã¤·¡¼
++¤ß¤Ã¤·¤¤ #T35 ¤ß¤Ã¤·¡¼
++¤ß¤Ã¤Õ¤£¡¼¤ª¤ä¤³ #JN ¥ß¥Ã¥Õ¥£¡¼¿Æ»Ò
++¤ß¤Ä¤´¤í #T35 £³£²£µ£¶
++¤ß¤Ä¤ß #T35 £³£²£³
++¤ß¤Ä¤ß¤â¤Ê¡¼ #JN £³£²£³¥â¥Ê¡¼
++¤ß¤É¤Í¤¨ #T35 ¥ß¥É°¹
++¤ß¤É¤ê¤¬¤¨¤ë #T35 Îг¿
++¤ß¤Ê¡¼ #JN ¥ß¥Ê¡¼
++¤ß¤Ê¤»¤Ê¤æ¤­ #JN ¿åÀ¥Ì¾Àã
++¤ß¤Ê¤»¤Ê¤æ¤­ #T35 ¿åÀ¥Ì¾Àã
++¤ß¤Ê¤Å¤­¤¸¤ç¤¦¤Û¤¦¤Ú¡¼¤¸ #KK ¿å̵·î¾ðÊó¥Ú¡¼¥¸
++¤ß¤Ê¤Ý¤ó #T35 ¤ß¤Ê¤Ý¤ó
++¤ß¤Ê¤ß¤Á¤ç¤ó #T35 Æî¥Á¥ç¥ó
++¤ß¤Ê¤ß¤â¤ê¤Þ¤Á #KK ÆĮ
++¤ß¤Ê¤ß¤â¤ê¤Þ¤Á #T35 ÆĮ
++¤ß¤Ê¤â¤È #T35 ¥ß¥Ê¤â¤È
++¤ß¤Ê¤â¤È¤µ¤ó #JN ¸»¤µ¤ó
++¤ß¤Ë¤®¤³ #JN ¥ß¥Ë¥®¥³
++¤ß¤Ë¤â¤é #JN ¥ß¥Ë¥â¥é
++¤ß¤Î¤ï #T35 ̧ÎØ
++¤ß¤ß¤º¤ä¤µ¤ó #T35 ¥ß¥ß¥º²°¤µ¤ó
++¤ß¤ß¤Ê¤·¤â¤Ê¡¼ #JN ¼ª¤Ê¤·¥â¥Ê¡¼
++¤ß¤à¤é #JNS »°Â¼
++¤ß¤à¤é #T35 »°Â¼
++¤ß¤ã¤¢¤À¤¤ #T35 ¤ß¤ã¡ÁÂç
++¤ß¤ã¤Ã¤¯ #JN ¥ß¥ã¥Ã¥¯
++¤ß¤ç¤¥ #JN ¤ß¤ç¤¥
++¤ß¤è¤¦ #JN ¤ß¤ç¤¥
++¤ß¤é¤¤¤Ë¤Ã¤­ #T35 ̤ÍèÆüµ­
++¤ß¤ë¤¯¤«¤Õ¤§ #T35 ¥ß¥ë¥¯¥«¥Õ¥§
++¤ß¤ó¤É #T35 ̱ÅÙ
++¤ß¤ó¤Ê¡¼¤ª¤Á¤±¤Ä¡¼ #JN ¤ß¤ó¤Ê¡¼¤ª¤Á¤±¤Ä¡¼
++¤ß¤ó¤Ê¤«¤é¤Î¤ª¤Í¤¬¤¤ #T35 ¤ß¤ó¤Ê¤«¤é¤Î¤ª¤Í¤¬¤¤
++¤à¤¤¤¿ #CN ¥àÈÄ
++¤à¤¥ #JN ¤à¤¥
++¤à¤«¡¼¤Ç #JN ¥à¥«¡¼¥Ç
++¤à¤«¤Ä¤¯¤Í¤ó #JN ¥à¥«¤Ä¤¯Ç°
++¤à¤®¤å¡¼ #JN ¥à¥®¥å¡¼
++¤à¤±¤é¡¼ #JN ¥à¥±¥é¡¼
++¤à¤·¤«¤´ #T35 ÃîäÆ
++¤à¤·¤Ð¡¼ #JN ¥à¥·¥Ð¡¼
++¤à¤·¤å¤¦ #T35 ̵½­
++¤à¤·¤ç¤¯ #T35 ̵¿¦
++¤à¤¸¤ë¤· #T35 ̵°õ
++¤à¤¹¡¼¤Ë¤ç #JN ¥à¥¹¡¼¥Ë¥ç
++¤à¤¹¤« #T35 ¥à¥¹¥«
++¤à¤Ã¤¯ #JN ¥à¥Ã¥¯
++¤à¤Í¤ª #JNM ¥à¥Í¥ª
++¤à¤Í¤ª #T35 ¥à¥Í¥ª
++¤à¤Í¤ª¤Ï¤¦¤¹ #T35 ¥à¥Í¥ª¥Ï¥¦¥¹
++¤à¤Í¤ò #JN ¥à¥Í¥ò
++¤à¤Í¤ò #JNM ¥à¥Í¥ò
++¤à¤Í¤ò #T35 ¥à¥Í¥ò
++¤à¤Ï¤¡ #JN ¡ÊŽß§¥Žß¡¡¡Ë¥à¥Ï¥¡
++¤à¤Ï¤¡ #JN ¥à¥Ï¥¡
++¤à¤é¤µ¤­ #JN »ç
++¤à¤é¤µ¤­ #T35 »ç
++¤à¤é¤µ¤­¤À #CJ »ç¤À
++¤à¤é¤Î¤·¤ó¤Ü¤ë #JN ¼¤Î¥·¥ó¥Ü¥ë
++¤à¤ê¤À¡¼¤è #JN ¥à¥ê¥À¡¼¥è
++¤à¤ê¤À¡¼¤è #JN ŽÑŽØŽÀŽÞŽ°ŽÖ
++¤á¡¼¤ë¤Ü¤à #T35 ¥á¡¼¥ë¥Ü¥à
++¤á¤¢¤ê¤£ #T35 ¥á¥¢¥ê¥£¡¢¡º¥¢¥ê¥£
++¤á¤¢¤ê¤£¤Î¤Í¤Ä¤¾¤¦¤ì¤¹ #T35 ¥á¥¢¥ê¥£¤ÎÙÔ¤¥ì¥¹¡¢¡º¥¢¥ê¥£¤ÎÙÔ¤¥ì¥¹
++¤á¤¤¤¸ #CN ÌÀ¼£
++¤á¤¤¤¸ #T35 ­í
++¤á¤¤¤¹¤ì #T35 ̾¥¹¥ì
++¤á¤¤¤¹¤ì¤Î¤ª¤«¤ó #CJ ̾¥¹¥ì¤Î°­´¨
++¤á¤¤¤¹¤ì¤Î¤è¤«¤ó #CJ ̾¥¹¥ì¤Îͽ´¶
++¤á¤¤¤Æ¤Ä #T35 ÌÂÅ´
++¤á¤¤¤Ì¤ì¤Î¤è¤«¤ó #CJ ³Æ¥Ì¥ì¤ÎÌ·´¶
++¤á¤¤¤×¤ë¤·¤í¤Ã¤× #T35 MapleSyrup
++¤á¤¤¤è¤Ø¤ó¤¸¤ç¤¦ #CJ ̾ÍÀÊÖ¾å
++¤á¤¤¤ë¤Ü¤à #T35 ¥á¡¼¥ë¥Ü¥à
++¤á¤¨¤Æ¤ë¤¹¤ì #T35 ¥á¡¼¥Æ¥ë¥¹¥ì
++¤á¤«¡¼ #JN ŽÒŽ¶Ž°
++¤á¤«¤¤¤è¤¦ #JN ¥á¥«¤£¤ç¤¥
++¤á¤«¤¦¤Þ¡¼ #JN ŽÒŽ¶Ž³ŽÏŽ°¡ÊŽÒŽ¶Ž°¡Ë
++¤á¤«¤ª¤È¤¿¤± #JN ¥á¥«ZÉð
++¤á¤«¤ª¤Ë¤®¤ê #JN ¥á¥«¤ª¤Ë¤®¤ê
++¤á¤«¤«¤á¤â¤Ê¡¼ #JN ¥á¥«¥«¥á¥â¥Ê¡¼
++¤á¤«¤®¤³ #JN ¥á¥«¥®¥³
++¤á¤«¤²¤é¤é¡¼ #JN ¥á¥«¥²¥é¥é¡¼
++¤á¤«¤·¤é¤Í¡¼¤è #JN ¥á¥«¥·¥é¥Í¡¼¥è
++¤á¤«¤¸¤¨¤ó #JN [¡¦»®¡¦¡§]
++¤á¤«¤¸¤¨¤ó #JN ŽÒŽ¶Ž¼ŽÞŽ´ŽÝ
++¤á¤«¤»¤¤¤È #JN ¥á¥«À¸ÅÌ
++¤á¤«¤½¤¦¤Ç¤â¤Ê¤¤¤è #JN ¥á¥«¤½¤¦¤Ç¤â¤Ê¤¤¤è
++¤á¤«¤½¤é¤Í¡¼¤è #JN ¥á¥«¥½¥é¥Í¡¼¥è
++¤á¤«¤¾¤Ì #JN ¥á¥«¤¾¤Ì
++¤á¤«¤È¤±¤Í¡¼¤è #JN [:Žß/|Žß:]ŽÄŽ¹ŽÈŽ°ŽÖ
++¤á¤«¤È¤±¤Í¡¼¤è #JN ¥á¥«¥È¥±¥Í¡¼¥è
++¤á¤«¤Õ¤§¤é¡¼¤Á¤ç #JN ¥á¥«¥Õ¥§¥é¡¼¥Á¥ç
++¤á¤«¤â¤¦¤³¤Í¤§¤è #JN ¥á¥«ŽÓŽ³ŽºŽÈŽªŽÖ!
++¤á¤«¤â¤Ê¡¼ #JN ¥á¥«¥â¥Ê¡¼
++¤á¤¬¤¨¤ë #JN ¥á¥¬¥¨¥ë
++¤á¤¬¤Ó #KK ¥á¥¬¥Ó
++¤á¤¬¤Ó #T35 ¥á¥¬¥Ó
++¤á¤¬¤ß #T35 ½÷¿À
++¤á¤®¤Î¤¬¤Ç #JN ¥á¡¦¥®¥Î¥¬¡¦¥Ç
++¤á¤± #T35 ¤á¤±
++¤á¤±¤Ã #T35 ¤á¤±¤Ã
++¤á¤±¤ò¤ß¤È¤á¤ë #CJ ¤á¤±¤òǧ¤á¤ë
++¤á¤·¤À¤¤ #T35 ¤á¤·Âç
++¤á¤¹¤Ö¤¿ #T35 »óÆÚ
++¤á¤½¤Ð¡¼ #T35 ¥á¥½¥Ð¡¼
++¤á¤½¤Ð¤¢ #T35 ¥á¥½¥Ð¡¼
++¤á¤¾¤·¤ã¡¼¤ê¡¼ #KK ¥á¥¾¥·¥ã¡¼¥ê¡¼
++¤á¤¾¤·¤ã¡¼¤ê¡¼ #T35 ¥á¥¾¥·¥ã¡¼¥ê¡¼
++¤á¤¾¤·¤ã¤¢¤ê¤¤ #T35 ¥á¥¾¥·¥ã¡¼¥ê¡¼
++¤á¤¿¤ê¤« #T35 ¥á¥¿¥ê¥«
++¤á¤¿¤ê¤Ã¤¯ #KK ¤á¤¿¤ê¤Ã¤¯
++¤á¤À¤Þ #T35 ÌܶÌ
++¤á¤Ç¤Æ¡¼¤è #JN ¥á¥Ç¥Æ¡¼¥è
++¤á¤Ê¤· #JN Ìܤʤ·
++¤á¤à¤Ð¡¼ #T35 ¥á¥à¥Ð¡¼
++¤á¤â¤é¡¼ #JN ¥á¥â¥é¡¼
++¤á¤ê¤±¤ó¤Æ¤ó¤·¤µ¤é #JN ¥á¥ê¥±¥óÅ·»È¡ù¥µ¥é¡ª
++¤á¤ê¤ë¤·¤£¤ë¤Ð¡¼¤Ð¡¼¤° #JN ¥á¥ê¥ë¡¦¤·¤£¥ë¥Ð¡¼¥Ð¡¼¥°
++¤á¤ë¤Ø¤ó #T35 ¥á¥ë¥Ø¥ó
++¤á¤ë¤Ø¤ó¤¤¤¿ #T35 ¥á¥ë¥Ø¥óÈÄ
++¤á¤ë¤Þ¤¬ #T35 ¥á¥ë¥Þ¥¬
++¤á¤í¤¹¤Ñ¡¼ #T35 ¥á¥í¥¹¥Ñ¡¼
++¤á¤í¤¹¤Ñ¤¢ #T35 ¥á¥í¥¹¥Ñ¡¼
++¤á¤í¤ó #T35 ¥á¥í¥ó
++¤á¤ó #T35 ÌÍ
++¤á¤ó¤¿¤ë¤Ø¤ë¤¹¤¤¤¿ #T35 ¥á¥ó¥¿¥ë¥Ø¥ë¥¹ÈÄ
++¤á¤ó¤Æ #T30 ¥á¥ó¥Æ
++¤á¤ó¤É¤¯¤»¤§ #JN ¥á¥ó¥É¥¯¥»¥§
++¤á¤ó¤É¤¯¤»¤§¤»¤¤¤È #JN ŽÒŽÝŽÄŽÞŽ¸Ž¾ŽªÀ¸ÅÌ
++¤á¤ó¤Ð¡¼ #T35 ¥á¥ó¥Ð¡¼
++¤á¤ó¤Ð¤¢ #T35 ¥á¥ó¥Ð¡¼
++¤á¤ó¤Ø¤é¤¢ #T35 ¥á¥ó¥Ø¥é¡¼
++¤á¤ó¤Ø¤ë¤¤¤¿ #T35 ¥á¥ó¥Ø¥ëÈÄ
++¤á¤ó¤Ü¤¦ #T35 ¤á¤ó¤Ü¤¦
++¤â¡¼¤¤¤¿ #CN ¥â¡¼ÈÄ
++¤â¡¼¤¤¤¿ #T35 ¥â¡¼ÈÄ
++¤â¡¼¤³¡¼ #CN ¥â¡¼¥³¡¼
++¤â¡¼¤³¡¼ #T35 ¥â¡¼¥³¡¼
++¤â¡¼¤Ë¤ó¤°¤³¡¼¤Ò¡¼ #CN ¥â¡¼¥Ë¥ó¥°¥³¡¼¥Ò¡¼
++¤â¡¼¤Ë¤ó¤°¤³¡¼¤Ò¡¼ #KK ¥â¡¼¥Ë¥ó¥°¥³¡¼¥Ò¡¼
++¤â¡¼¤Ë¤ó¤°¤à¤¹¤á #JN ¥â¡¼¥Ë¥ó¥°Ì¼¡£
++¤â¡¼¤Ë¤ó¤°¤à¤¹¤á¤¤¤¿ #CN ¥â¡¼¥Ë¥ó¥°Ì¼¡£ÈÄ
++¤â¤¢¤ê #T35 ÁôÍ­
++¤â¤¤¤¿ #CN ¥âÈÄ
++¤â¤¤¤¿ #T35 ¥âÈÄ
++¤â¤¦¤¤¤¿ #T35 ¥â¡¼ÈÄ
++¤â¤¦¤ª¤³¤Ã¤¿¤¾¤¦ #JN ¤â¤¦Åܤä¿¥¾¥¦
++¤â¤¦¤²¤ó #T35 ÌѸÀ
++¤â¤¦¤³¤¦ #T35 ¥â¡¼¥³¡¼
++¤â¤¦¤³¤Í¤¨¤è #JN ¡³(`§¥¡­)ŽÉ¤â¤¦Íè¤Í¤¨¤è
++¤â¤¦¤³¤Í¤¨¤è #CJ ¡³(`§¥¡­)¥Î¤â¤¦Íè¤Í¤¨¤è¡ª
++¤â¤¦¤³¤Í¤¨¤è #CJ ¡³(`§¥¡­)¥Î¤â¤¦Íè¤Í¤¨¤è¡ª¥¦¥ï¥¡¥¡¥ó
++¤â¤¦¤³¤Í¤¨¤è #CJ ¡³(`§¥¡­)ŽÉ¤â¤¦Íè¤Í¤¨¤è¡ª
++¤â¤¦¤³¤Í¤¨¤è #CJ ¡³(`§¥¡­)ŽÉ¤â¤¦Íè¤Í¤¨¤è¡ªŽ³ŽÜŽ§Ž§ŽÝ
++¤â¤¦¤³¤Í¤¨¤è #CJ ¤â¤¦Íè¤Í¤¨¤è¡ª
++¤â¤¦¤³¤Í¤¨¤è #JN ¡³(`§¥¡­)¥Î¤â¤¦Íè¤Í¤¨¤è¡ª¥¦¥ï¥¡¥¡¥ó
++¤â¤¦¤³¤Í¤¨¤è #JN ¡³(`§¥¡­)ŽÉ¤â¤¦Íè¤Í¤¨¤è¡ªŽ³ŽÜŽ§Ž§ŽÝ
++¤â¤¦¤³¤Í¤¨¤è #JN ¥â¥¦¥³¥Í¥¨¥è!!¥¦¥ï¥¡¥¡¥ó!¥â¥¦¥³¥Í¥¨¥è!!¥¦¥ï¥¡¥¡¥ó!¥â¥¦¥³¥Í¥¨¥è!!¥¦¥ï¥¡¥¡¥ó!
++¤â¤¦¤³¤Í¤¨¤è #JN ŽÓŽ³ŽºŽÈŽ´ŽÖ!!Ž³ŽÜŽ§Ž§ŽÝ!ŽÓŽ³ŽºŽÈŽ´ŽÖ!!Ž³ŽÜŽ§Ž§ŽÝ!ŽÓŽ³ŽºŽÈŽ´ŽÖ!!Ž³ŽÜŽ§Ž§ŽÝ!
++¤â¤¦¤³¤Í¤¨¤è¤¦¤ï¤¡¤¡¤ó #JN ¡³(`§¥¡­)ŽÉ¤â¤¦Íè¤Í¤¨¤è¡ªŽ³ŽÜŽ§Ž§ŽÝ
++¤â¤¦¤½¤¦¤½¤¦ #CJ ¤â¤¦¤½¤¦¤½¤¦
++¤â¤¦¤¿¤¢¤ª¤È¤³ #T35 ¥â¡¼¥¿¡¼ÃË
++¤â¤¦¤¿¤¢¤µ¤¤¤¯¤ë #T35 ¥â¡¼¥¿¡¼¥µ¥¤¥¯¥ë
++¤â¤¦¤¿¤Í¤Ý #CJ ¤â¤¦¤¿¤Í¤Ý
++¤â¤¦¤À¤á¤Ý #CJ ¤â¤¦¤À¤á¤Ý
++¤â¤¦¤À¤á¤Ý #T35 ¤â¤¦¤À¤á¤Ý
++¤â¤¦¤Ë¤ó¤°¤³¤¦¤Ò¤¤ #T35 ¥â¡¼¥Ë¥ó¥°¥³¡¼¥Ò¡¼
++¤â¤¦¤ß¤º¤Ý #CJ ¤â¤¦¤ß¤º¤Ý
++¤â¤¦¤ß¤º¤Ý #T35 ¤â¤¦¤ß¤º¤Ý
++¤â¤¦¤â¤¦ #CJ ¤â¡¼¤â¡¼
++¤â¤¨ #KS ˨¤¨
++¤â¤¨ #T35 ˨¤¨
++¤â¤ª¤Î¤­ #T35 ¥â¥ª¥Î¥­
++¤â¤«¡¼ #JN ¥â¥«¡¼
++¤â¤¬¤ì¤¿¤¯¤ó #JN ¥â¥¬¥ì¥¿·¯
++¤â¤¯¤²¤­¤É¤­¤å¤ó #KK ÌÜ·â¥É¥­¥å¥ó
++¤â¤±¤± #JN ¥â¥±¥±
++¤â¤±¤± #JN ŽÓŽ¹Ž¹
++¤â¤³¤¿ #JN ¤â¤³ÂÀ
++¤â¤·¤½¤¦¤ê #JNS ¿¹ÁíÍý
++¤â¤·¤½¤¦¤ê #JNSUC ¿¹ÁíÍý
++¤â¤¸¤ì¤¹ #T35 ʸ»ú¥ì¥¹
++¤â¤¹¤é¡¼ #JN ¥â¥¹¥é¡¼
++¤â¤» #T35 ¤â¤»
++¤â¤»¤¢ #T35 ¤â¤»¤¢
++¤â¤¿¤ª #T35 ¥â¥¿ÃË
++¤â¤Ã¤³¤ê¡¼¤Ê #JN ¥â¥Ã¥³¥ê¡¼¥Ê
++¤â¤Ã¤Á¡¼ #JN ¥â¥Ã¥Á¡¼
++¤â¤Ã¤Á¡¼ #T35 ¥â¥Ã¥Á¡¼
++¤â¤Ã¤Á¤¤ #T35 ¤â¤Ã¤Á¡¼
++¤â¤Ã¤Á¤¤ #T35 ¥â¥Ã¥Á¡¼
++¤â¤Æ¤Í¡¼¤è #JN ¥â¥Æ¥Í¡¼¥è
++¤â¤È¤«¤¤¤¾¤¯¤Î¤Ä¤ê¤­¤Á¤µ¤«¡¼¤Ê #JN ¸µ³¤Â±¤ÎÄà¤ê´ðÃÏ¥µ¥«¡¼¥Ê
++¤â¤È¤«¤¤¤¾¤¯¤Î¤Ä¤ê¤­¤Á¤µ¤«¡¼¤Ê¤È¤½¤Î¤³¤Ö¤ó¤¿¤Á #JN ¸µ³¤Â±¤ÎÄà¤ê´ðÃÏ¥µ¥«¡¼¥Ê¤È¤½¤Î»Òʬ¤¿¤Á
++¤â¤Ê¡¼ #JN ¥â¥Ê¡¼
++¤â¤Ê¡¼¤¦¡¼¤Þ¤ó #JN ¥â¥Ê¡¼¥¦¡¼¥Þ¥ó
++¤â¤Ê¡¼¤«¡¼¤É #JN ¥â¥Ê¡¼¥«¡¼¥É
++¤â¤Ê¡¼¤«¤ó¤³¤¦ #KK ¥â¥Ê¡¼´Ñ¸÷
++¤â¤Ê¡¼¤¯¤¨¤¹¤È #KK ¥â¥Ê¡¼¥¯¥¨¥¹¥È
++¤â¤Ê¡¼¤¯¤¨¤¹¤È #T35 ¥â¥Ê¡¼¥¯¥¨¥¹¥È
++¤â¤Ê¡¼¤¯¤Ã¤­¤ó¤° #JN ¥â¥Ê¡¼¥¯¥Ã¥­¥ó¥°
++¤â¤Ê¡¼¤±¤ó¤¹¤± #JN ¥â¥Ê¡¼·ò²ð
++¤â¤Ê¡¼¤±¤ó¤¹¤±¤¤ #JN ¥â¥Ê¡¼·ò¤¹·Ù
++¤â¤Ê¡¼¤·¤å¤Ö¤ó¤×¤º #JN ¥â¥Ê¡¼¼ïʬÉÛ¿Þ
++¤â¤Ê¡¼¤·¤å¤Ö¤ó¤×¤º¤â¤Ê¡¼¤â¤é¤é¡¼¤Ð¤ó #JN ¥â¥Ê¡¼¼ïʬÉÛ¿Þ¥â¥Ê¡¼¡¦¥â¥é¥é¡¼ÈÇ
++¤â¤Ê¡¼¤·¤å¤Ö¤ó¤ë¤¤¤º¤±¤Ã¤Æ¤¤¤Ð¤ó #JN ¥â¥Ê¡¼¼ïʬÎà¿Þ·èÄêÈÇ
++¤â¤Ê¡¼¤·¤å¤Ö¤ó¤ë¤¤¤º¤¾¤Ë¤Ã¤¯¤Ð¤ó #JN ¥â¥Ê¡¼¼ïʬÎà¿Þ¡¡¥¾¥Ë¥Ã¥¯ÈÇ
++¤â¤Ê¡¼¤·¤å¤Ö¤ó¤ë¤¤¤º¤¾¤Ë¤Ã¤¯¤Ð¤ó #JN ¥â¥Ê¡¼¼ïʬÎà¿Þ¥¾¥Ë¥Ã¥¯ÈÇ
++¤â¤Ê¡¼¤·¤ç¤¦¤á¤Ä #JN ¥â¥Ê¡¼¾ÃÌÇ
++¤â¤Ê¡¼¤¸¤¾¤¦ #JN ¥â¥Ê¡¼ÃÏ¢
++¤â¤Ê¡¼¤¸¤å¤¦¤è¤ó¤»¤¤ #JN ¥â¥Ê¡¼£±£´À¤
++¤â¤Ê¡¼¤¾¤¯¤­¤å¤¦¤­¤ç¤¯¤ª¤¦¤®¤â¤é¤é¡¼¤É¤é¤¤¤Ð¡¼ #JN ¥â¥Ê¡¼Â²¡¦µæ¶Ë±üµÁ¡¦¥â¥é¥é¡¼¥É¥é¥¤¥Ð¡¼
++¤â¤Ê¡¼¤¿¤ó¤¸¤ç¤¦¤Î¤Ò¤ß¤Ä #JN ¥â¥Ê¡¼ÃÂÀ¸¤ÎÈëÌ©
++¤â¤Ê¡¼¤Ç¤¤¤«¤ê¤ò¤Ö¤Ä¤±¤ë¤¹¤ì¤³¤¯¤µ¤¤¤¸¤ç¤¦¤ä¤¯¤¸¤å¤Ã¤«¤¸¤ç¤¦ #JN ¥â¥Ê¡¼¤ÇÅܤê¤ò¤Ö¤Ä¤±¤ë¥¹¥ì¹ñºÝ¾òÌó½½¥ö¾ò
++¤â¤Ê¡¼¤È¤®¤³¤Î¤²¡¼¤à¤·¤ç¤Ã¤× #JN ¥â¥Ê¡¼¤È¥®¥³¤Î¥²¡¼¥à¥·¥ç¥Ã¥×
++¤â¤Ê¡¼¤Î¤¤¤Á¤Ë¤Á #JN ¥â¥Ê¡¼¤Î°ìÆü
++¤â¤Ê¡¼¤Î¤«¤Î¤¸¤ç #JN ¥â¥Ê¡¼¤ÎÈà½÷
++¤â¤Ê¡¼¤Î¤«¤Î¤¸¤ç #JN ¥â¥Ê¡¼¤ÎÈà½÷¡Ê¸Î¿Í¡Ë
++¤â¤Ê¡¼¤Î¤»¤ó¤¾ #JN ¥â¥Ê¡¼¤ÎÀèÁÄ
++¤â¤Ê¡¼¤Ï¤è¤¦¤Á¤·¤Í¤è #JN ¥â¥Ê¡¼¤ÏÍÄÃÕ¡£»à¤Í¤è
++¤â¤Ê¡¼¤Ð¤ó¤É #JN ¥â¥Ê¡¼¥Ð¥ó¥É
++¤â¤Ê¡¼¤Õ¤Ã¤«¤Ä #JN ¥â¥Ê¡¼Éü³è
++¤â¤Ê¡¼¤Þ¤ó #JN ¥â¥Ê¡¼¥Þ¥ó
++¤â¤Ê¡¼¤Þ¤ó #JN ŽÓŽÅŽ°ŽÏŽÝ
++¤â¤Ê¡¼¤à¡¼¤ó¤°¤ó #JN ¥â¥Ê¡¼¥à¡¼¥ó·³
++¤â¤Ê¡¼¤à¡¼¤ó¤°¤ó #JN Ž·ŽÞŽºŽ½ŽÀŽ°·³
++¤â¤Ê¡¼¤à¡¼¤ó¤°¤ó #JN ŽÓŽÅŽ°ŽÑŽ°ŽÝ·³
++¤â¤Ê¡¼¤á¤¿¤ë¤Ð¤ó¤É #JN ¥â¥Ê¡¼¥á¥¿¥ë¥Ð¥ó¥É
++¤â¤Ê¡¼¤ê¤¶ #JN ¥â¥Ê¡¼¥ê¥¶
++¤â¤Ê¤¢ #T35 ¥â¥Ê¡¼
++¤â¤Ê¤¢¤«¤ó¤³¤¦ #T35 ¥â¥Ê¡¼´Ñ¸÷
++¤â¤Ê¤¢¤¯¤¨¤¹¤È #T35 ¥â¥Ê¡¼¥¯¥¨¥¹¥È
++¤â¤Ê¤¢¤¶¤é¤· #JN ¥â¥Ê¥¢¥¶¥é¥·¡¡
++¤â¤Ê¤¢¤é¤Ö #T35 ¥â¥Ê¡Á¤é¤Ö
++¤â¤Ê¤¤¤¢¤ó #JN ¥â¥Ê¥¤¥¢¥ó
++¤â¤Ê¤¨ #JN ¥â¥é»Þ
++¤â¤Ê¤¨¤À¤»¤ó¤»¤¤ #JN ¥â¥Ê»ÞÀèÀ¸
++¤â¤Ê¤¨¤â¤ó #JN ¥â¥Ê¤¨¤â¤ó
++¤â¤Ê¤ª¤¦ #JN ¥â¥Ê²¦
++¤â¤Ê¤« #JN ¥â¥Ê¥«
++¤â¤Ê¤« #JN ¥â¥Ê¥«
++¤â¤Ê¤« #JNS ¥â¥Ê¥«
++¤â¤Ê¤« #T35 ¥â¥Ê¥«
++¤â¤Ê¤« #T35 ºÇÃæ
++¤â¤Ê¤«¤«¤ó¤Î¤ó #JN ¥â¥Ê¥«´Ñ²»
++¤â¤Ê¤«¤² #JN ¥â¥Ê±Æ
++¤â¤Ê¤«¤² #JN ŽÓŽÅ±Æ
++¤â¤Ê¤«¤Á¤ã¤ó #JN ¥â¥Ê¤«¤Á¤ã¤ó
++¤â¤Ê¤«¤ó¤Î¤ó #JN ¥â¥Ê´Ñ²»
++¤â¤Ê¤«¤ó¤Î¤ó #JN ÌÐ̾´Ñ²»
++¤â¤Ê¤®¤³¤»¤­¤æ¤¬¤½¤ê¤ó¤¹¤¿¤ó¤É #JN ¥â¥Ê¥®¥³ÀÐÌý¥¬¥½¥ê¥ó¥¹¥¿¥ó¥É
++¤â¤Ê¤®¤³¤Õ¤£¤ë¤Ï¡¼¤â¤Ë¡¼¤«¤ó¤²¤ó¤¬¤¯¤À¤ó #JN ¥â¥Ê¥®¥³¥Õ¥£¥ë¥Ï¡¼¥â¥Ë¡¼´É¸¹³ÚÃÄ
++¤â¤Ê¤¯¤í¤×¤¹ #JN £Í£Ï£Î£Á£Ã£Ì£Ï£Ð£Ó
++¤â¤Ê¤¯¤í¤ó #JN ¥â¥Ê¥¯¥í¥ó
++¤â¤Ê¤°¤é¤¨¤ê #JN ¥â¥Ê¢·ÃΤ
++¤â¤Ê¤°¤é¤¨¤ê #JN ¥â¥Ê¢·ÃΤ
++¤â¤Ê¤³ #JN ¥â¥Ê»Ò
++¤â¤Ê¤³¤ó #JN ¥â¥Ê¥³¥ó
++¤â¤Ê¤µ¤ó¤±¤¤¤Ê¡¼ #JN ¥â¥Ê¥µ¥ó¡¦¥±¥¤¥Ê¡¼
++¤â¤Ê¤¶¤¤¤³ #JN ¥â¥Ê¥¶¥¤»Ò
++¤â¤Ê¤¸¤¾¤¦ #JN ¥â¥ÊÃÏ¢
++¤â¤Ê¤¸¤é #KK ¥â¥Ê¥¸¥é
++¤â¤Ê¤¸¤é¡¼ #KK ¥â¥Ê¥¸¥é¡¼
++¤â¤Ê¤¸¤é¤¢¤¤¤Ç¤£¡¼ #T35 monazillaID
++¤â¤Ê¤¸¤é¤ª¤ë¤°¤ï¤é #T35 monazilla.org(w
++¤â¤Ê¤»¤ó¤Ë¤ó #JN ¥â¥ÊÀç¿Í
++¤â¤Ê¤½¤¦¤·¤­ #JN ¥â¥ÊÁò¼°
++¤â¤Ê¤È¤í¤Ð¤¸¡¼¤Ê¤¿¤¤¤¤ #JN ¥â¥Ê¥È¥í¡¦¥Ð¥¸¡¼¥ÊÂç°Ó
++¤â¤Ê¤Ë¡¼ #JN ¥â¥Ê¥Ë¡¼
++¤â¤Ê¤Î¤ê¤­¤å¤¦ #JN ¥â¥Ê¥Î¡¡ÍøµÙ
++¤â¤Ê¤Ú #KK ¥â¥Ê¥Ú
++¤â¤Ê¤Ú #T35 ¥â¥Ê¥Ú
++¤â¤Ê¤Û #JN ¥â¥Ê¥Û
++¤â¤Ê¤Ü¤ó #JN ¥â¥Ê¥Ü¥ó
++¤â¤Ê¤Ý¤ì¤ª¤ó¤â¤Ê¤Ñ¤ë¤É #JN ¥â¥Ê¥Ý¥ì¥ª¥ó¡á¥â¥Ê¥Ñ¥ë¥É
++¤â¤Ê¤Þ¤¸¤ó #JN ¥â¥ÊËâ¿À
++¤â¤Ê¤ß¤Ï¤ó¤¿¡¼ #JN ¥â¥Ê¥ß¡¦¥Ï¥ó¥¿¡¼
++¤â¤Ê¤à¤· #JN ¥â¥ÊÃî
++¤â¤Ê¤ê¤«¤º¤­ #JN ¥â¥Ê¤ê¤«¤º¤­
++¤â¤Ê¤ì¤¤ #JN ¥â¥ÊÎî
++¤â¤Ê¤ì¤¤ #JN ¥â¥ÊÎî
++¤â¤Ë¡¼ #JN ¥â¥Ë¡¼
++¤â¤Ë¤« #JN ¥â¥Ë¥«¡¦±¦
++¤â¤Ë¤ã¡¼¤¯¤ó #JN ¥â¥Ë¥ã¡¼·¯
++¤â¤Ë¤ã¡¼¤¯¤ó #JN ¥â¥Ë¥ã¡¼·¯
++¤â¤Ë¤ç #R5 ¤â¤Ë¤ç
++¤â¤Í¡¼ #JN ¥â¥Í¡¼
++¤â¤Í¡¼¤ë #JN ¥â¥Í¡¼¥ë
++¤â¤Í¤¹ #JN ¥â¥Í¥¹
++¤â¤Î¤¯¤í¡¼¤à #JN ¥â¥Î¡¦¥¯¥í¡¼¥à
++¤â¤Î¤¹¤´¤¤¤¤¤­¤ª¤¤¤Ç #CJ ¤â¤Î¤¹¤´¤¤Àª¤¤¤Ç
++¤â¤Î¤Û¤·¤¶¤ª¤¦¤ê #JN ʪ´³¤·´ÈÇä¤ê
++¤â¤Ñ¤¢¤é #T35 ¥â¥Ñ¡¼¥é
++¤â¤Õ¤¡¤Ø¤Õ¤¡ #JN ¥â¥Õ¥¡¤Ø¥Õ¥¡
++¤â¤Þ¡¼ #JN ¥â¥Þ¡¼
++¤â¤ß¤ª¤« #T35 ¥â¥ß²¬
++¤â¤ß¤ª¤« #T35 Ù沬
++¤â¤â¤¤¤í¤µ¤ó¤Ç¡¼¤¯¤ê¡¼¤à¤¹¤Ú¤·¤ã¤ë #JN Åí¿§¥µ¥ó¥Ç¡¼¥¯¥ê¡¼¥àSP
++¤â¤â¤¦¤¤ #T35 ¥â¥â¡¼¥¤
++¤â¤â¤ª¤¤ #T35 ¥â¥â¡¼¥¤
++¤â¤â¤Á¤ã¤ó #JN Åí¤Á¤ã¤ó
++¤â¤â¤ó¤é¡¼ #JN ¥â¥â¥ó¥é¡¼
++¤â¤ä¤· #T35 ¥â¥ä¥·
++¤â¤é #JN ¤â¤é¢ö
++¤â¤é¡¼¤Þ¤ó #JN ¤â¤é¡¼¥Þ¥ó
++¤â¤é¤¨¤â¤ó #JN ¥â¥é¤¨¤â¤ó
++¤â¤é¤ª¤ó¤× #JN ¤â¤é¢ö
++¤â¤é¤³ #JN ¥â¥é»Ò
++¤â¤é¤¿¤¤¤· #JN ¥â¥éÂç»È
++¤â¤é¤Á¤ã¤¨¤ë #JN ¥â¥é¥Á¥ã¥¨¥ë
++¤â¤é¤Ò¤ã¤¯ #JN ¥â¥éÉ´
++¤â¤é¤Þ¤¸¤ó #JN ¥â¥éËâ¿À
++¤â¤é¤Þ¤ó #JN ¤â¤é¥Þ¥ó
++¤â¤é¤è¤·¤«¤² #JN ¥â¥éµÈ±Æ
++¤â¤é¤é #JN ¤â¤é¤é
++¤â¤é¤é¡¼ #JN ¥â¥é¥é¡¼
++¤â¤é¤é¡¼¤¢¤é¤· #JN ¥â¥é¥é¡¼¹Ó¤é¤·
++¤â¤é¤é¡¼¤«¤Á¤ç¤¦ #JN ¥â¥é¥é¡¼²ÝĹ
++¤â¤é¤é¡¼¤µ¤ó¤¸¤å¤¦¤· #JN ¥â¥é¥é¡¼»°½Æ»Î
++¤â¤é¤é¡¼¤Á¤ç¤¦¤«¤ó #JN ¥â¥é¥é¡¼Ä¹´±
++¤â¤é¤é¡¼¤Æ¤£¡¼¤À #JN ¥â¥é¥é¡¼¥Æ¥£¡¼¥À
++¤â¤é¤é¡¼¤Õ¤©¡¼ #JN ¥â¥é¥é¡¼4
++¤â¤é¤é¡¼¤Ö¤Á¤ç¤¦ #JN ¥â¥é¥é¡¼ÉôĹ
++¤â¤é¤é¡¼¤Þ¤Þ #JN ¥â¥é¥é¡¼¥Þ¥Þ
++¤â¤é¤é¤¨¤ë #JN ¥â¥é¥é¥¨¥ë
++¤â¤é¤é¤È¤Î #JN ¥â¥é¥éÅÂ
++¤â¤é¤é¤È¤Î #JN ŽÓŽ×Ž×ÅÂ
++¤â¤é¤é¤È¤Î¤È¤â¤Ê¤«¤² #JN ŽÓŽ×Ž×Å¡ʺ¸¡Ë¤ÈŽÓŽÅ±Æ¡Ê±¦¡Ë
++¤â¤é¤ê #JN ¥â¥é¥ê¡¦º¸
++¤â¤ê #T35 ¿¹
++¤â¤ê¤¢¤¬¤Ã¤Æ¤Þ¤¤¤ê¤Þ¤·¤¿ #CJ À¹¤ê¾å¤¬¤Ã¤Æ¤Þ¤¤¤ê¤Þ¤·¤¿
++¤â¤ê¤Á¤å¤¦ #T35 À¹¿ß
++¤â¤ë #JN ¥â¥ë
++¤â¤ë¤¡ #JN (ŽßŽÛŽß)ŽÓŽÙŽ§!!
++¤â¤ë¤¡ #JN ¥â¥ë¥¡
++¤â¤ì #T35 ϳ¤ì
++¤â¤ì¤¯¤· #T35 ϳ¤ì¶ú
++¤â¤í¤Ï¤Î¤Ä¤ë¤® #CJ ½ô¿Ï¤Î·õ¡£
++¤â¤ó¤­¤¤¤·¤å¤¬¤¢ #T35 ¥â¥ó¥­¡¼¥·¥å¥¬¡¼
++¤â¤ó¤¯¤¢¤ë #CJ ʸ¶ç¤¢¤ë¡©
++¤â¤ó¤ë¤¤ #T30 ÌåÎÞ
++¤ä #SUC ¤ä
++¤ä¤ª #T30 ¥ä¥ª
++¤ä¤ª¤¤ #T35 ¤ä¤ª¤¤
++¤ä¤ª¤­¤ó #KK ¥ä¥ª¥­¥ó
++¤ä¤ª¤­¤ó #T35 ¥ä¥ª¥­¥ó
++¤ä¤ª¤Ï¤² #T35 ¥ä¥ªÆŤ²
++¤ä¤ª¤Ð #T35 ²°¥ª¥Ð
++¤ä¤ª¤Õ¤¯ #KK ¥ä¥ª¥Õ¥¯
++¤ä¤­¤¤¤â #T35 ¤ä¤­¤¤¤â
++¤ä¤­¤Ä¤±¤Ð #T35 ¾ÆÉÕ¤±¿Ï
++¤ä¤­¤Ä¤±¤ä¤¤¤Ð #T35 ¾ÆÉÕ¤±¿Ï
++¤ä¤­¤È¤ê #KK ¾Æ¤­Ä»
++¤ä¤­¤È¤ê #T35 ¾Æ¤­Ä»
++¤ä¤­¤Ê¤ª¤»¤Ç¤ª¤Þ¤¨¤Î¤¢¤¿¤Þ¤â¤ä¤­¤Ê¤ª¤» #CJ ¾Æ¤­¤Ê¤ª¤»¡¢¤Ç¡¢¤ªÁ°¤ÎƬ¤â¾Æ¤­¤Ê¤ª¤»
++¤ä¤­¤ó #JN Ìë¶Ð
++¤ä¤­¤ó #JN Ìë¶Ð¡ú
++¤ä¤¯¤¶ #JN ¥ä¥¯¥¶
++¤ä¤¯¤ë¤Ä #T35 ¥ä¥¯¥ë¥Ä
++¤ä¤¯¤ë¤Ä¤·¤£ #JN ¥ä¥¯¥ë¥Ä¤·¤£
++¤ä¤°¤Ã¤Á¤ç¤ê¡¼¤Ê #JN ¥ä¥°¥Ã¥Á¥ç¥ê¡¼¥Ê
++¤ä¤µ¤·¤ß #JN Í¥¤·¤ß
++¤ä¤· #T35 ¹á¶ñ»Õ
++¤ä¤·¤¬¤Ë #T30 ¥ä¥·¥¬¥Ë
++¤ä¤·¤ã #T35 Ì뺵
++¤ä¤¸¤ë¤·¤Á¤å¤¦ #T35 Ìð°õ¿ß
++¤ä¤¹¤À¤¹¤ì¤Ã¤É #CN ÊÝÅÄ¥¹¥ì¥Ã¥É
++¤ä¤¹¤À¤¹¤ì¤Ã¤É #T35 ÊÝÅÄ¥¹¥ì¥Ã¥É
++¤ä¤¹¤ê #T35 ïÌ
++¤ä¤½¤Þ¡¼ #JN ¥ä¥½¥Þ¡¼
++¤ä¤½¤Þ¡¼¤í¤´¤¤¤ê #JN ¥ä¥½¥Þ¡¼(¥í¥´Æþ¤ê)
++¤ä¤À¤â¤ó #JN ¥ä¥À¥â¥ó
++¤ä¤Ã¤Û¡¼ #CN ¥ä¥Ã¥Û¡¼
++¤ä¤Ã¤Û¡¼ #KK ¥ä¥Ã¥Û¡¼
++¤ä¤Ã¤Û¡¼ #T35 ¥ä¥Ã¥Û¡¼
++¤ä¤Ã¤Û¤ª #T35 ¥ä¥Ã¥Û¡¼
++¤ä¤Ä #JN ¥ä¥Ä
++¤ä¤Ä #T35 ¥ä¥Ä
++¤ä¤Ê¤¬¤·¤ï #JNS ¤ä¤Ê¤¬¤·¤ï
++¤ä¤Ê¤¬¤·¤ï #T35 ¤ä¤Ê¤¬¤·¤ï
++¤ä¤Ê¤®¤µ¤ï¤â¤Ê¡¼ #JN ¥ä¥Ê¥®¥µ¥ï¥â¥Ê¡¼
++¤ä¤Õ #KK ¥ä¥Õ
++¤ä¤Õ¤¦ #CN ÌðÉ÷
++¤ä¤Õ¤¦ #T35 ÌðÉ÷
++¤ä¤Õ¤ª¤¯ #KK ¥ä¥Õ¥ª¥¯
++¤ä¤Õ¤ª¤¯ #T35 ¥ä¥Õ¥ª¥¯
++¤ä¤Ö¤Ë¤é¤ß¤â¤é¤é¡¼ #JN 鮤ˤé¤ß¥â¥é¥é¡¼
++¤ä¤Þ¤¶¤­¤È¤é¤Ã¤× #T35 »³ºê¥È¥é¥Ã¥×
++¤ä¤Þ¤¶¤­¤ï¤¿¤ë #T35 »³ºê¾Ä(^^)
++¤ä¤Þ¤À #JN »³ÅÄ
++¤ä¤á¤Æ¤¿¤â¤ì #CJ ¤ä¤á¤Æ¤¿¤â¤ì
++¤ä¤á¤ì #CJ ¤ä¤á¤ì
++¤ä¤é¤Ê¤¤¤« #CJ ¤ä¤é¤Ê¤¤¤«
++¤ä¤ê¤¹¤®¤¯¤ó #JN ¤ä¤ê¤¹¤®·¯
++¤ä¤ë¤­¤Ê¤· #T35 ¤ä¤ëµ¤¤Ê¤·¡ª
++¤ä¤ë¤¾ #JN ¤ä¤ë¤¾¡ª¡ª
++¤ä¤ë¤Ã¤Æ¤Ö¤· #CJ ¤ä¤ë¤Ã¤ÆÀá
++¤ä¤í¤ª¤¦¤è #CJ ¥ä¥í¡¼¥¦¥è
++¤ä¤í¤ª¤¦¤è #CJ ŽÔŽÛŽ°Ž³ŽÖ
++¤ä¤ï¤é¤Á¤ã¤ó #JNM ¥ä¥ï¥é¤Á¤ã¤ó
++¤ä¤ó¤¸¤ã¤ó #KK ¥ä¥ó¥¸¥ã¥ó
++¤ä¤ó¤¸¤ã¤ó #T35 ¥ä¥ó¥¸¥ã¥ó
++¤ä¤ó¤ä¤ó #CJ ¤ä¤ó¤ä¤ó
++¤ä¤ó¤ä¤ó #T35 ¤ä¤ó¤ä¤ó
++¤æ¡¼¤¨¤¹¤Ó¡¼¤±¡¼¤Ö¤ë¤Ç¤¯¤Ó¤Ä¤Ã¤Æ¤·¤Í #CJ USB¥±¡¼¥Ö¥ë¤Ç¼óÄߤäƻá¤Í
++¤æ¡¼¤¸¡¼ #T35 £Õ£Ç
++¤æ¡¼¤æ¡¼ #JN ¥æ¡¼¥æ¡¼
++¤æ¤¦¤¤¤Á #JN Í´£±
++¤æ¤¦¤«¤ó #JN ͼ´©
++¤æ¤¦¤­¤¬¤Ê¤¯¤Æ¤ß¤ì¤Ê¤¤¤¬¤¾¤¦¤«¤¤¤»¤Ä¤¹¤ì #T35 ͦµ¤¤¬Ìµ¤¯¤Æ¸«¤ì¤Ê¤¤²èÁü²òÀ⥹¥ì
++¤æ¤¦¤³ #T35 ¤æ¤¦¤³
++¤æ¤¦¤·¤ã #T35 ͦ¼Ô
++¤æ¤¦¤·¤ã¤â¤Ê¡¼ #JN ͦ¼Ô¥â¥Ê¡¼
++¤æ¤¦¤·¤ã¤â¤Ê¤¿ #JN ͦ¼Ô¥â¥ÊÂÀ
++¤æ¤¦¤Ç¤£¤¤¤×¤í¤¸¤§¤¯¤È #T35 UD¥×¥í¥¸¥§¥¯¥È
++¤æ¤¦¤É¤¦ #T30 ͶƳ
++¤æ¤¦¤Ê¤ó¤Þ¤Ä¤ê #T35 ¤æ¤¦¤Ê¤óº×¤ê
++¤æ¤¦¤Ï¤È¤¯¤Æ¤¤¤µ¤ì¤Þ¤¹¤¿ #CJ YOU¤ÏÆÃÄꤵ¤ì¤Þ¤¹¤¿
++¤æ¤¦¤Ó¤ó¤æ¤¦¤»¤¤¤¤¤¿ #CJ ͹ÊØ¡¦Í¹À¯ÈÄ
++¤æ¤¦¤Ó¤ó¤æ¤¦¤»¤¤¤¤¤¿ #CN ͹ÊØ¡¦Í¹À¯ÈÄ
++¤æ¤¦¤Ó¤ó¤æ¤¦¤»¤¤¤¤¤¿ #T35 ͹ÊØ¡¦Í¹À¯ÈÄ
++¤æ¤¦¤Ü¤¦ #JN m(-_-m)¡ÁŽ³Ž×ŽÒŽ¼ŽÔŽ°
++¤æ¤¦¤Ü¤¦ #JN ¤æ¤¦Ë·
++¤æ¤¦¤á¤¤¤³¤Æ¤¤ #T35 ͭ̾¸ÇÄê
++¤æ¤¦¤ê¤ç¤¦¤« #T30 Í­ÎÁ²½
++¤æ¤¬¤ß #T35 ÏÄ
++¤æ¤­¤ª¤Ë¤®¤ê¤À¤ë¤Þ #JN À㤪¤Ë¤®¤ê¤À¤ë¤Þ
++¤æ¤­¤¸¤ë¤· #T35 À°õ
++¤æ¤­¤¸¤ë¤·¤®¤å¤¦¤Ë¤å¤¦ #JN À°õµíÆý
++¤æ¤Ã¤­¡¼ #JN ¥æ¥Ã¥­¡¼
++¤æ¤Ã¤­¡¼ #T35 ¥æ¥Ã¥­¡¼
++¤æ¤Ã¤­¤¤ #T35 ¥æ¥Ã¥­¡¼
++¤æ¤Ç¤À¤«¤é #T35 ¤æ¤Ç¤À¤«¤é¡¦¡¦¡¦
++¤æ¤Ë¤Ã¤¯¤¹¤Õ¤é¤Ã¤·¤å #T35 unix¥Õ¥é¥Ã¥·¥å
++¤æ¤Ö¤¿ #T35 ÌýÆÚ
++¤æ¤ó #JN ¤æ¤ó
++¤æ¤ó¤«¡¼¤¹ #JN ¥æ¥ó¥«¡¼¥¹
++¤æ¤ó¤«¡¼¤¹ #T35 ¥æ¥ó¥«¡¼¥¹
++¤æ¤ó¤«¤¢¤¹ #T35 ¥æ¥ó¥«¡¼¥¹
++¤æ¤ó¤æ¤ó #CJ ¤æ¤ó¤æ¤ó
++¤æ¤ó¤æ¤ó #T35 ¤æ¤ó¤æ¤ó
++¤è #CJ YO¡ª
++¤è #CJ yo¡ª
++¤è #CJ yp
++¤è¤¢¤Ë #T35 Â奢¥Ë
++¤è¤¤¡¼¤·¤ç¤â¤Ê¡¼ #JN ¥è¥¤¡¼¥·¥ç¥â¥Ê¡¼
++¤è¤¤¡¼¤·¤ç¤â¤Ê¡¼ #JN ŽÖŽ²Ž°Ž¼Ž®ŽÓŽÅŽ°
++¤è¤¦¤¯¤· #T35 Íζú
++¤è¤¦¤·¤Ñ¤Ñ¤È¤¯¤â¤ê¤¿¤Î¤ó¤¸¤ã¤¦¤¾¤¦ #CJ ¤è¡¼¤·¥Ñ¥ÑÆÃÀ¹Íê¤ó¤¸¤ã¤¦¤¾¡¼
++¤è¤¦¤¸¤ç #T35 ¤ç¤¥¦ÉŽÞ¤ç
++¤è¤¦¤¸¤ç¤æ¤¦¤«¤¤ #JN ¤ç¤¥¦É¡«¤ç¤å¤¥¥õ¤£
++¤è¤¦¤»¤¤ #T35 ÍÅÀº
++¤è¤¦¤Á¤¨¤ó¤«¤é¤Ç¤Ê¤ª¤·¤Æ¤³¤¤ #T35 ÍÄ¡¡ÃÕ¡¡±à¡¡¤«¡¡¤é¡¡½Ð¡¡Ä¾¡¡¤·¡¡¤Æ¡¡¤³¡¡¤¤
++¤è¤¦¤Á¤ó¤À¤ó #T35 ÍÎÄÁÃÄ
++¤è¤© #CJ YO¡ª
++¤è¤© #CJ yo¡ª
++¤è¤© #CJ yp
++¤è¤©¡¼¤¼¤Õ #JN ¥è¥©¡¼¥¼¥Õ
++¤è¤©¡¼¤¼¤Õ¤«¤Ã¤³¤«¤·¤ç¤¦¤«¤Ã¤³¤È¤¸ #JN ¥è¥©¡¼¥¼¥Õ(²¾¾Î)
++¤è¤«¡¼¤ó #JN ¥è¥«¡¼¥ó
++¤è¤¯¤Ö¤«¤ª¤¦ #JN (¡­V¡®)¡Ö
++¤è¤¯¤Ö¤«¤ª¤¦ #JN Íß¿¼²¦
++¤è¤¯¤â #JN ¡Ê¦¨§Õ¦¨¡ËŽÖŽ¸ŽÓŽ¥Ž¥Ž¥
++¤è¤¯¤â #JN ¥è¥¯¥â¡¦¡¦¡¦
++¤è¤¯¤â #JN ŽÖŽ¸ŽÓŽ¥Ž¥Ž¥
++¤è¤³¤Ï¤á #CN ¥è¥³¥Ï¥á
++¤è¤³¤Ï¤á #T35 ¥è¥³¥Ï¥á
++¤è¤³¤ä¤Þ¤µ¤ó¤´¤¯¤· #T35 ²£»³»°¹ñ»Ö
++¤è¤´¤ì #T35 ¥è¥´¥ì
++¤è¤´¤ì #T35 ±ø¤ì
++¤è¤·¤À #JN Yoshida
++¤è¤·¤Î¤ä¤³¤Ô¤Ú #T35 µÈÌî²È¥³¥Ô¥Ú
++¤è¤·¤æ¤­ #T35 ¤è¤·¤æ¤­
++¤è¤·¤è¤· #JN ¡Ê¡¡¡¨§¥¡¨¡Ë¡³¡Ê¡­£ö¡®¡¡¡ËŽÖŽ¼ŽÖŽ¼
++¤è¤·¤è¤· #JN ¤è¤·¤è¤·
++¤è¤¼¤Ë #T35 Â奼¥Ë
++¤è¤½¤¦¤Î¤Ê¤Ê¤á¤¦¤¨ #T35 ͽÁۤμФá¾å
++¤è¤Á¤ì¤¹ #T35 ͽÃΥ쥹
++¤è¤Ã¤­¤å¤ó #JN ¤è¤Ã¤­¤å¤ó
++¤è¤Ã¤­¤å¤ó #T35 ¤è¤Ã¤­¤å¤ó
++¤è¤Ã¤¹¤£¤â¤Ê¡¼ #JN ¤è¤Ã¤¹¤£¥â¥Ê¡¼
++¤è¤Ê¡¼ #JN ¥è¥Ê¡¼
++¤è¤Í #T35 ¢¨
++¤è¤Í¡¼ #JN ¥è¥Í¡¼
++¤è¤ß¡¼¤ê #JN ¥è¥ß¡¼¥ê
++¤è¤á #CJ ²Ç
++¤è¤ë¤Î¤ª¤«¤º #T35 Ìë¤Î¤ª¤«¤º
++¤è¤ó #T35 >>4
++¤è¤ó¤È¤¦¤·¤ó¤Ë¤é¤¤¤à #JN »ÍƬ¿È¥Ë¥é¥¤¥à
++¤è¤ó¤Þ¤ë¤è¤ó #T35 404
++¤è¤ó¤è¤ó #CJ ¤è¤ó¤è¤ó
++¤è¤ó¤è¤ó #T35 ¤è¤ó¤è¤ó
++¤é¡¼ #T35 £Ò£Á£Ò
++¤é¡¼¤¸¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN ¥é-¥¸¥¨¥¤¥ê¥¦¥ï¥¡¥¡¥ó
++¤é¡¼¤¸¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN Ž×-Ž¼ŽÞŽ´Ž²ŽØŽ³ŽÜŽ§Ž§ŽÝ
++¤é¡¼¤á¤ó #T35 ¥é¡¼¥á¥ó
++¤é¡¼¤á¤ó¤®¤³ #JN ¥é¡¼¥á¥ó¥®¥³
++¤é¡¼¤á¤ó¤®¤³¤¢¤ó¤É¤â¤Ê¡¼ #JN ¥é¡¼¥á¥ó¥®¥³¡õ¥â¥Ê¡¼
++¤é¡¼¤á¤ó¤â¤Ê¡¼ #JN ¥é¡¼¥á¥ó¥â¥Ê¡¼
++¤é¤¢ #T35 RAR
++¤é¤¤¡¼¤è¡¼ #T35 (Ž¥¢ÏŽ¥)Ž×Ž²Ž°ŽÖŽ°!!
++¤é¤¤¡¼¤è¡¼ #T35 ¡Ê¡¦¢Ï¡¦¡Ë¥é¥¤¡¼¥è¡¼!!
++¤é¤¤¡¼¤è¡¼ #T35 ¡Ê¡¦¢Ï¡¦¡ËŽ×Ž²Ž°ŽÖŽ°!!
++¤é¤¤¤¢¤Ã¤È #KK ¥é¥¸¡÷
++¤é¤¤¤¿ #CN ¥éÈÄ
++¤é¤¤¤Á¤ç¤¦ #KK ÍëÄ»
++¤é¤¤¤Á¤ç¤¦ #T35 ÍëÄ»
++¤é¤¤¤Ì #T35 ¥é¥¤¥Ì
++¤é¤¤¤Ì #T35 ¥é¸¤
++¤é¤¤¤Ì #T35 Ž×¸¤
++¤é¤¤¤Ì #T35 Ž×Ž²ŽÇ
++¤é¤¦¡¼¤¸ #T35 ¥é¥¦¡¼¥¸
++¤é¤¦¤á¤¹ #JN ¥é¥¦¥á¥¹
++¤é¤¦¤á¤¹ #T35 ¥é¥¦¥á¥¹
++¤é¤¦¤ó¤¸ #CN ¥é¥¦¥ó¥¸
++¤é¤¦¤ó¤¸ #T35 ¥é¥¦¥ó¥¸
++¤é¤¦¤ó¤¸¤ª¤Õ¤«¤¤ #T30 ¥é¥¦¥ó¥¸¥ª¥Õ²ñ
++¤é¤¦¤ó¤¸¤« #T30 ¥é¥¦¥ó¥¸²½
++¤é¤¦¤ó¤¸¤Ò¤Ê¤ó¤¸¤ç #T35 ¥é¥¦¥ó¥¸ÈòÆñ½ê
++¤é¤¦¤ó¤¸¤ã #T35 ¥é¥¦¥ó¥¸¥ã
++¤é¤¦¤ó¤¸¤ã¡¼ #T35 ¥é¥¦¥ó¥¸¥ã¡¼
++¤é¤¦¤ó¤¸¤ã¤¢ #T35 ¥é¥¦¥ó¥¸¥ã¡¼
++¤é¤¦¤ó¤¸¤ã¤¢¤Í¤® #T35 ¥é¥¦¥ó¥¸¥ã¡¼Ç¬
++¤é¤­¡¼¤Þ¤ó #JN ¥é¥­¡¼¥Þ¥ó
++¤é¤­¡¼¤Þ¤ó #JN ¥é¥­¡¼¥Þ¥ó
++¤é¤¸¤¢¤Ã¤È #KK ¥é¥¸¡÷
++¤é¤¹¤Ü¤¹¤Ï¤¨¤¹¤È¤·¡¼¤â¤¢ #CJ ¥é¥¹¥Ü¥¹¤Ï¥¨¥¹¥È¥·¡¼¥â¥¢
++¤é¤Ã¤­¡¼¤Á¤ó¤Ð #T35 ¥é¥Ã¥­¡¼ÄÁÇÏ
++¤é¤Ã¤È¤­¤é¡¼ #JN ¥é¥Ã¥È¥­¥é¡¼
++¤é¤Æ¤ó¤¢¤Ò¤ã #JN ¥é¥Æ¥ó¥¢¥Ò¥ã
++¤é¤Ç¤£¤½ #T35 ¥é¥Ç¥£¥½
++¤é¤Ê¡¼ #JN ¥é¥Ê¡¼
++¤é¤ê¤é¤ê #T35 ¥é¥ê¥é¥ê
++¤é¤ê¤é¤ê #T35 Ž×ŽØŽ×ŽØ
++¤é¤ë¤¯¤½ #JN ¥é¥ë¥¯¥½
++¤é¤ë¤¯¤½ #T35 ¥é¥ë¥¯¥½
++¤é¤í¡¼ #SUC ¤é¤í¡¼
++¤é¤í¤¦ #SUC ¤é¤í¡¼
++¤ê¡¼¤¼¤ó¤È #JN ¥ê¡¼Á°ÅÓ
++¤ê¡¼¤Õ¤È¤¦¤µ¤¯ #T35 ¥ê¡¼¥ÕÅðºî
++¤ê¡¼¤Þ¤ó #JN ¥ê¡¼¥Þ¥ó
++¤ê¡¼¤Þ¤ó #T30 ¥ê¡¼¥Þ¥ó
++¤ê¡¼¤ê¤Ã¤Ò #JN ­¡¥ê¡¼¥ê¥Ã¥Ò
++¤ê¡¼¤ê¤Ã¤Ò¤¸¤å¤Ë¤¢ #JN ­¢¥ê¡¼¥ê¥Ã¥Ò£Ê£ò
++¤ê¡¼¤ê¤Ã¤Ò¤Ë¤»¤¤ #JN ­£¥ê¡¼¥ê¥Ã¥ÒÆóÀ¤
++¤ê¤¢¤½¤·¤é¤Í¡¼¤è #JN ¥ê¥¢¥ë¥½¥é¥Í¡¼¥è
++¤ê¤¢¤Á¤å¤¦ #T35 ¥ê¥¢¿ß
++¤ê¤¢¤ë #T35 ¥ê¥¢¥ë
++¤ê¤¢¤ë¤¢¤½¤Ñ¤½¤Þ¤½ #JN ¥ê¥¢¥ë¥¢¥½¥Ñ¥½¥Þ¥½
++¤ê¤¢¤ë¤¢¤½¤Ñ¤½¤Þ¤½ #JN ¥ê¥¢¥ëŽ±Ž¿ŽÊŽßŽ¿ŽÏŽ¿
++¤ê¤¢¤ë¤¢¤Ã¤½¡¼ #JN ¥ê¥¢¥ë¤¢¤Ã¤½¡¼
++¤ê¤¢¤ë¤£¤ç¤¥ #JN ¥ê¥¢¥ë¤£¤ç¤¥
++¤ê¤¢¤ë¤£¤ç¤¥¤â¤³¤â¤³¤Ð¡¼¤¸¤ç¤ó #JN ¥ê¥¢¥ë¤£¤ç¤¥¡Ê¤â¤³¤â¤³¥Ð¡¼¥¸¥ç¥ó¡Ë
++¤ê¤¢¤ë¤¤¤é¤Í¡¼¤è #JN ¥ê¥¢¥ë¥¤¥é¥Í¡¼¥è
++¤ê¤¢¤ë¤¦¤Ä #JN ¥ê¥¢¥ëݵ
++¤ê¤¢¤ë¤ª¤Þ¤¨¤¯¤Þ¡¼ #JN ¥ê¥¢¥ë¥ª¥Þ¥¨¥¯¥Þ¡¼
++¤ê¤¢¤ë¤ª¤Þ¤¨¤â¤Ê¡¼ #JN ¥ê¥¢¥ë¥ª¥Þ¥¨¥â¥Ê¡¼
++¤ê¤¢¤ë¤«¤µ¡¼¤ê #JN ¥ê¥¢¥ë¥«¥µ¡¼¥ê
++¤ê¤¢¤ë¤­¤¿¡¼¡¼ #JN ¥ê¥¢¥ë¥­¥¿¡¼
++¤ê¤¢¤ë¤­¤Á¤¬¤¤¤±¤¤¤Û¤¦ #JN ¥ê¥¢¥ë´ðÃϳ°·ÙÊó
++¤ê¤¢¤ë¤®¤³ #JN ¥ê¥¢¥ë¥®¥³
++¤ê¤¢¤ë¤´¤¿¤¤¤Õ¤Þ¤ó¤¾¤¯ #JN ¥ê¥¢¥ë¸ÞÂÎÉÔËþ­
++¤ê¤¢¤ë¤·¤£ #JN ¥ê¥¢¥ë¤·¤£
++¤ê¤¢¤ë¤·¤Í¤Ð¡¼ #JN ¥ê¥¢¥ë¥·¥Í¥Ð¡¼
++¤ê¤¢¤ë¤·¤ç¤¦¤Ü¤¦ #T35 ¥ê¥¢¥ë¾ÃËÉ
++¤ê¤¢¤ë¤·¤é¤Í¡¼¤è #JN ¥ê¥¢¥ë¥·¥é¥Í¡¼¥è
++¤ê¤¢¤ë¤·¤é¤Í¡¼¤è2 #JN ¥ê¥¢¥ë¥·¥é¥Í¡¼¥è£²
++¤ê¤¢¤ë¤¸¤µ¤¯¤¸¤¨¤ó #JN ¥ê¥¢¥ë¥¸¥µ¥¯¥¸¥¨¥ó
++¤ê¤¢¤ë¤¸¤µ¤¯¤¸¤¨¤ó #JN ¥ê¥¢¥ëŽ¼ŽÞŽ»Ž¸Ž¼ŽÞŽ´ŽÝ
++¤ê¤¢¤ë¤¸¤ã¤Ê¤¤¤«¤é¤¯¤½ #CJ ¥ê¥¢¥ë¤¸¤ã¤Ê¤¤¤«¤é¥¯¥½
++¤ê¤¢¤ë¤¸¤ç¤ó¤¸¤ç¤µ¤ó #JN ¥ê¥¢¥ë¥¸¥ç¥ó¥¸¥ç¤µ¤ó
++¤ê¤¢¤ë¤¹¤Ã¤É¤ì #JN ¥ê¥¢¥ëŽ½Ž¯ŽÄŽÞŽÚ
++¤ê¤¢¤ë¤¹¤Õ¤£¤ó¤¯¤¹ #JN ¥ê¥¢¥ë¥¹¥Õ¥£¥ó¥¯¥¹
++¤ê¤¢¤ë¤½¤¦¤Ç¤â¤Ê¤¤¤è #JN ¥ê¥¢¥ë¤½¤¦¤Ç¤â¤Ê¤¤¤è
++¤ê¤¢¤ë¤½¤é¤Í¡¼¤è #JN ¥ê¥¢¥ë¥½¥é¥Í¡¼¥è
++¤ê¤¢¤ë¤½¤ì¤¬¤Ê¤Ë¤« #JN ¥ê¥¢¥ë¥½¥ì¥¬¥Ê¡á¥Ë¥«
++¤ê¤¢¤ë¤¿¤¤¤à #T35 ¥ê¥¢¥ë¥¿¥¤¥à
++¤ê¤¢¤ë¤Á¤å¤¦¤Ü¤¦ #T35 ¥ê¥¢¥ë¿ß˼
++¤ê¤¢¤ë¤Ê¤ª¤Ë¤®¤ê¤â¤Ê¡¼ #JN ¥ê¥¢¥ë¤Ê¤ª¤Ë¤®¤ê¥â¥Ê¡¼
++¤ê¤¢¤ë¤Ê¤ª¤Ë¤®¤ê¤â¤Ê¡¼¤¤¤Á #JN ¥ê¥¢¥ë¤Ê¤ª¤Ë¤®¤ê¥â¥Ê¡¼£±
++¤ê¤¢¤ë¤Ê¤ª¤Ë¤®¤ê¤â¤Ê¡¼¤Ë #JN ¥ê¥¢¥ë¤Ê¤ª¤Ë¤®¤ê¥â¥Ê¡¼£²
++¤ê¤¢¤ë¤Ê¤±¤ó #JN ¥ê¥¢¥ë¤Ê¥±¥ó
++¤ê¤¢¤ë¤Ê¤Ã¤Á #JN ¥ê¥¢¥ë¤Ê¤Ã¤Á
++¤ê¤¢¤ë¤Ê¤É¤»¤¤¤µ¤ó #JN ¥ê¥¢¥ë¤ÊÅÚÀ±¤µ¤ó
++¤ê¤¢¤ë¤Ê¤Í¤¹¤â¤Ê¡¼ #JN ¥ê¥¢¥ë¤Ê¥Í¥¹¥â¥Ê¡¼
++¤ê¤¢¤ë¤Ë¤À¡¼ #JN ¥ê¥¢¥ë¥Ë¥À¡¼
++¤ê¤¢¤ë¤Ï¤¡ #JN ¥ê¥¢¥ë¥Ï¥¡¡©
++¤ê¤¢¤ë¤Ò¤í¤æ¤­ #JN ¥ê¥¢¥ë¤Ò¤í¤æ¤­
++¤ê¤¢¤ë¤Õ¤§¤é¡¼¤Á¤ç #JN ¥ê¥¢¥ë¥Õ¥§¥é¡¼¥Á¥ç
++¤ê¤¢¤ë¤Û¤½¤á #JN ¥ê¥¢¥ëºÙÌÜ
++¤ê¤¢¤ë¤Þ¤À¡¼ #JN ¥ê¥¢¥ë¥Þ¥À¡¼
++¤ê¤¢¤ë¤Þ¤Ë¡¼ #JN ¥ê¥¢¥ë¥ÞÆó¡Ý
++¤ê¤¢¤ë¤à¤Ã¤¯ #JN ¥ê¥¢¥ë¥à¥Ã¥¯
++¤ê¤¢¤ë¤â¤¦¤³¤Í¤¨¤è #JN ¥ê¥¢¥ë¥â¥¦¥³¥Í¥¨¥è
++¤ê¤¢¤ë¤â¤Ê¡¼ #JN ¥ê¥¢¥ë¥â¥Ê¡¼
++¤ê¤¢¤ë¤ä¤À¤â¤ó #JN ¥ê¥¢¥ë¥ä¥À¥â¥ó
++¤ê¤¢¤ë¤è¤·¤Æ¤£¡¼ #JN ¥ê¥¢¥ë¤è¤·¥Æ¥£¡¼
++¤ê¤¢¤ë¤ê¤¢¤ê¤Æ¤£ #T35 ¥ê¥¢¥ë¥ê¥¢¥ê¥Æ¥£
++¤ê¤¢¤ë¤ì¤â¤Ê #JN ¥ê¥¢¥ë¥ì¥â¥Ê
++¤ê¤¤¤Á #T35 reach
++¤ê¤¤¤É¤·¤¤¤¸¤¤¤¢¤¤ #T35 read.cgi
++¤ê¤«¤Á¤ã¤ó #T35 Τ²Â¤Á¤ã¤ó
++¤ê¤­¤·¤ì¤Ç¤£ #T35 ¥ê¥­¥·¥ì¥Ç¥£
++¤ê¤­¤Ã¤É¤â¤é¡¼¤¯ #JN ¥ê¥­¥Ã¥É¡¦¥â¥é¡¼¥¯
++¤ê¤¯ #T35 Φ
++¤ê¤¸¤§¤ó¤ê¤ã #JN Íû·òÎÉ
++¤ê¤Ã¤Ä #T35 ¥ê¥Ã¥Ä
++¤ê¤Ã¤Ä¤¬¤¤¤ë¤µ #JN ¥ê¥Ã¥Ä¤¬¤¤¤ë¤µ
++¤ê¤Ã¤Ý¤¦¤¿¤¤ #JN ΩÊýÂÎ
++¤ê¤Æ¤Ê¤¢ #T35 ¥ê¥Æ¥Ê¡¼
++¤ê¤È¤ë¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN ¥ê¥È¥ë¥¨¥¤¥ê¥¦¥¡¥¡¥ó
++¤ê¤È¤ë¤¨¤¤¤ê¤¦¤ï¤¡¤¡¤ó #JN ŽØŽÄŽÙŽ´Ž²ŽØŽ³Ž§Ž§ŽÝ
++¤ê¤Ü¤Ã¤È #T35 ¥ê¥Ü¥Ã¥È
++¤ê¤Ü¤ë¤Ð¡¼¤¹¤Þ¤ó¤«¤Ã¤¿ #JN ¥ê¥Ü¥ë¥Ð¡¼¡¦¥¹¥Þ¥ó¥«¥Ã¥¿
++¤ê¤Ü¤ë¤Ð¡¼¤¹¤Þ¤ó¤«¤Ã¤¿ #JN ¥ê¥Ü¥ë¥ô¥¡¡¼¡¦¥¹¥Þ¥ó¥«¥Ã¥¿
++¤ê¤Ü¤ó #T35 ¥ê¥Ü¥ó
++¤ê¤Ü¤ó¤×¤ì¤¤ #T30 ¥ê¥Ü¥ó¥×¥ì¥¤
++¤ê¤â¡¼¤È¤Û¤¹¤È #T35 ¥ê¥â¡¼¥È¥Û¥¹¥È
++¤ê¤â¤Û #T35 ¥ê¥â¥Û
++¤ê¤ã¤¯ #T35 (ry
++¤ê¤ã¤¯ #T35 ry
++¤ê¤ã¤¯ #T35 ¡Ê£ò£ù
++¤ê¤ã¤¯¤·¤­¤¸¤Á¤ó¤µ¤¤ #T35 ά¼°ÃÏÄú×
++¤ê¤ç¤¦¤¹¤ì¤ª¤È¤³ #JN ÎÉ¥¹¥ìÃË
++¤ê¤ç¤¦¤¹¤ì¤Î¤è¤«¤ó #CJ ÎÉ¥¹¥ì¤Îͽ´¶
++¤ê¤ç¤¦¤Î¤¦ #T35 ξǾ
++¤ê¤ë¤³ #JN ¥ê¥ë»Ò
++¤ê¤í¡¼¤É #T30 ¥ê¥í¡¼¥É
++¤ê¤í¤ª¤É¤¹¤ì¤Ã¤É #T35 ¥ê¥í¡¼¥É¥¹¥ì¥Ã¥É
++¤ê¤í¤¹¤ì #T35 ¥ê¥í¥¹¥ì
++¤ê¤ó¤´¤Ä¤«¤¤ #T35 ¥ê¥ó¥´»È¤¤
++¤ë¤¤ #T35 rui
++¤ë¤Ñ¤ó¤Õ¤é¤Ã¤·¤å #T35 ¥ë¥Ñ¥ó¥Õ¥é¥Ã¥·¥å
++¤ì¡¼ #JN ¥ì¡¼
++¤ì¤¤¤­¤å¤¦¤·¤ã #JN ÎîÛͼÖ
++¤ì¤¤¤¯ #JN ¥ì¥¤¥¯
++¤ì¤¤¤µ¤à #T35 Îä´¨
++¤ì¤¤¤¾¤¦¤³ #T35 Î䢸Ë
++¤ì¤°¤Í¤Ã¤»¤à #T35 Regnessem
++¤ì¤²¡¼ #T35 ¥ì¥²¡¼
++¤ì¤²¡¼¤¤¤¿ #CN ¥ì¥²¡¼ÈÄ
++¤ì¤²¡¼¤¤¤¿ #T35 ¥ì¥²¡¼ÈÄ
++¤ì¤¸ #T35 ¥ì¥¸
++¤ì¤¹ #T30 ¥ì¥¹
++¤ì¤¹¤µ¤¯¤¸¤ç #T30 ¥ì¥¹ºï½ü
++¤ì¤¹¤¹¤ì¤´¤Ð¤¯ #T30 ¥ì¥¹¥¹¥ì¸íÇú
++¤ì¤¹¤¿¤Æ¤´¤Ð¤¯ #T30 ¥ì¥¹Î©¤Æ¸íÇú
++¤ì¤¹¤Ð¤ó¤´¤¦ #T35 ¥ì¥¹ÈÖ¹æ
++¤ì¤Ã¤È¤¦ #KK ÎôƬ
++¤ì¤Ã¤É¤Ö¤Ã¤¯¤¤¤Ï¤ó #CJ ¥ì¥Ã¥É¥Ö¥Ã¥¯°ãÈ¿¡ª¡¢¥ì¥Ã¥É¥«¡¼¥É¡ª
++¤ì¤Ä¤®¤ç¤Ù¤¤¤Ù¡¼¤·¡¼¤Þ¤¤¤Ø¡¼ #CJ ¤ì¤Ä¤®¤ç¡ª¤Ù¤¤¤Ù¡¼¡¡¤·¡¼¤Þ¤¤¤Ø¡¼¢ö
++¤ì¤Ä¤®¤ç¤Ù¤¤¤Ù¡¼¤·¡¼¤Þ¤¤¤Ø¡¼ #T35 ¤ì¤Ä¤®¤ç¡ª¤Ù¤¤¤Ù¡¼¡¡¤·¡¼¤Þ¤¤¤Ø¡¼¢ö
++¤ì¤Ç¤£¤¤¤¹¤µ¤Þ #T35 ¥ì¥Ç¥£¡¼¥¹ÍÍ
++¤ì¤Ù¤ë¤Ò¤¯ #KY ¥ì¥Ù¥ëÄã
++¤ì¤â¤Ê #JN ¥ì¥â¥Ê
++¤ì¤â¤Ê #JN ¥ì¥â¥Ê
++¤ì¤â¤Ê¤¹¤ì #CN ¥ì¥â¥Ê¥¹¥ì
++¤ì¤â¤Ê¤¹¤ì¤Î¤â¤é¤é¡¼ #JN ¥ì¥â¥Ê¥¹¥ì¤Î¥â¥é¥é¡¼
++¤ì¤â¤é¤â¡¼¤Ê #JN ¥ì¥â¥é¥â¡¼¥Ê
++¤ì¤ì¤Û #T35 ¥ì¥ì¥Û
++¤ì¤ó¤¬ #T35 ¥ì¥ó¥¬
++¤í #T35 ϧ
++¤í¡¼¤«¤ë¤ë¡¼¤ë #T35 ¥í¡¼¥«¥ë¥ë¡¼¥ë
++¤í¤¤¤â¤Ê¤Ù¤ë #JN ¥í¥¤¡¦¥â¥Ê¥Ù¥ë
++¤í¤° #T35 ¥í¥°
++¤í¤±¤Ã¤È¤Ç¤Ä¤­¤Ì¤±¤ë #CJ ¥í¥±¥Ã¥È¤ÇÆͤ­È´¤±¤ë
++¤í¤´ #T35 ¥í¥´
++¤í¤Ã¤¯¤·¤Æ¤£ #JN ¥í¥Ã¥¯¥·¥Æ¥£
++¤í¤Ã¤¯¤â¤Ê¡¼ #JN ¥í¥Ã¥¯¥â¥Ê¡¼
++¤í¤Ã¤Ý¤ó¤¾¡¼ #JN ¤í¤Ã¤Ý¤ó¤¾¡¼
++¤í¤Ã¤Ý¤ó¤¾¡¼ #T35 ¤í¤Ã¤Ý¤ó¤¾¡¼
++¤í¤Æ¤¨¤ó #T35 ¥í¥Æ¡¼¥ó
++¤í¤Æ¤¨¤ó #T35 ŽÛŽÃŽ°ŽÝ
++¤í¤Ó¤á¤¹ #JN ¥í¥Ó¥á¥¹
++¤í¤Ó¤á¤¹ #T35 ¥í¥Ó¥á¥¹
++¤í¤Ó¤é¡¼ #T35 ¥í¥Ó¥é¡¼
++¤í¤Õ¤È¤×¤é¤¹¤ï¤ó #CN ¥í¥Õ¥È¥×¥é¥¹¥ï¥ó
++¤í¤à #KS ROM
++¤í¤à #R5 £Ò£Ï£Í
++¤í¤à #T35 R@M
++¤í¤à #T35 ROM
++¤í¤à #T35 £Ò£Ï£Í
++¤í¤ê #T35 ¥í¥ê
++¤í¤ê¤³¤ó #T35 ¥í¥ê¥³¥ó
++¤í¤ê¤Ú¤É #T35 ¥í¥ê¥Ú¥É
++¤í¤ë #CJ (lol
++¤í¤ì #KK ¥í¥ì
++¤í¤í #JN ¥í¥í
++¤í¤í #T35 ¥í¥í
++¤í¤ó¤² #T35 ¥í¥óÌÓ
++¤ï¡¼¤â¤Ê¡¼ #JN ¤ï¡¼¤â¤Ê¡¼
++¤ï¤¤¤Ç¤¹¤è¤ó¤¸¤å¤¦ #JN ¥ï¥¤¥Æ¡«¥¹£´£°
++¤ï¤¤¤Ó¡¼¤Ó¡¼¤Û¤¦¤Á¤ß¤ó #T35 £Ù£Â£ÂÊüÃÖ̱
++¤ï¤«¤ª¤¯ #T35 ¤ï¤«¤ª¤¯
++¤ï¤«¤Î¤Ï¤Ê #T35 WAKANOHANA
++¤ï¤«¤á #T35 ¤ï¤«¤á
++¤ï¤±¤ï¤«¤é¤ó #JN ¥ï¥±¥ï¥«¥é¥ó
++¤ï¤µ¤Ó #T35 ¥ï¥µ¥Ó
++¤ï¤¸¤ª #CN ϱö
++¤ï¤¸¤ª #KK ϱö
++¤ï¤¸¤ª #T35 ϱö
++¤ï¤»¤À¤¨¤­ #JN Áá°ðÅıØ
++¤ï¤¿¤Ê¤Ù #T35 ÅÏÊÕ
++¤ï¤¿¤Ê¤Ù¤â¤Ê¡¼ #JN ¥ï¥¿¥Ê¥Ù¥â¥Ê¡¼
++¤ï¤¿¤Ê¤Ù¤â¤Ê¡¼ #JN ¥ï¥¿¥Ê¥Ù¥â¥Ê¡¼
++¤ï¤Ê #T35 æ«
++¤ï¤Ê¡¼ #JN ¥ï¥Ê¡¼
++¤ï¤é #CJ (ÏÎ
++¤ï¤é #CJ (w
++¤ï¤é #CJ (£÷
++¤ï¤é #CJ (¥ï¥é
++¤ï¤é #CJ (Ü×
++¤ï¤é #CJ (ŽÜŽ×
++¤ï¤é #CJ w
++¤ï¤é #CJ ¤ï¤é
++¤ï¤é #CJ ¥ï¥é
++¤ï¤é #CJ ÏÎ
++¤ï¤é1 #JN ¥ï¥é1
++¤ï¤é1 #JN ŽÜŽ×1
++¤ï¤é¤£ #CJ ¥ï¥é¥£
++¤ï¤é¤¿ #CJ ¥ï¥é¥¿
++¤ï¤é¤¿ #CJ ŽÜŽ×ŽÀ
++¤ï¤é¤Ó #T35 ¡ÊÏÏ
++¤ï¤é¤ï¤»¤ë¤Ê #CJ ¥ï¥é¥ï¥»¥ë¥Ê
++¤ï¤é¤ï¤»¤ë¤Ê #CJ ŽÜŽ×ŽÜŽ¾ŽÙŽÅ
++¤ï¤ê¤ª #T35 ¥ï¥ê¥ª
++¤ï¤ë¤ì #R5 ¤ï¤ë¤ì
++¤ï¤ì¤¶¡¼ #T35 ¥ï¥ì¥¶¡¼
++¤ï¤ì¤¶¤Á¤å¤¦¤Ü¤¦ #T35 ¥ï¥ì¥¶¿ß˼
++¤ï¤ì¤º #T35 ¥ï¥ì¥º
++¤ï¤ì¤â¤Î #KK ¤ï¤ì¤â¤Î
++¤ï¤ì¤â¤Î #T35 ¤ï¤ì¤â¤Î
++¤ï¤ì¤â¤Î #T35 ³ä¤ìʪ
++¤ï¤í¤¿ #CJ ¥ï¥í¥¿
++¤ï¤ó¤À¡¼ #T35 WONDER
++¤ò¤«¤­¤³¤à¤¹¤ì¤À¤è #CJ ¤ò½ñ¤­¹þ¤à¥¹¥ì¤À¤è¡ª¡ª
++¤ò¤«¤­¤³¤à¤¹¤ì¤À¤è #JN ¡Ê¡¦¢Ï¡¦¡Ë
++¤ò¤¿ #JN ¥ò¥¿
++¤ò¤¿ #T35 ¥ò¥¿
++¤ò¤¿¤·¤Ë¤Ê¤Þ¤ë¤Þ¤ë #JN Ž¦ŽÀ42700
++¤ò¤¿¤¿¤¿¤­ #T35 ¥ò¥¿Ã¡¤­
++¤ò¤¿¤¿¤¿¤­¤ò¤¿ #T35 ¥ò¥¿Ã¡¤­¥ò¥¿
++¤ò¤¿¤Á¤§¤Ã¤¯ #T30 ¥ò¥¿¥Á¥§¥Ã¥¯
++¤ò¤¿¤Á¤§¤Ã¤¯¤¢¤Ë¤ò¤¿¤Ø¤ó #JN ¥ò¥¿¥Á¥§¥Ã¥¯¡Ê¥¢¥Ë¥ò¥¿ÊÔ¡Ë
++¤ò¤¿¤é¡¼ #JN ¥ò¥¿¥é¡¼
++¤ò¤¿¤é¡¼ #JN Ž¦ŽÀŽ×Ž°
++¤ò¤Á #T30 ¥ò¥Á
++¤ò¤Á¤¤¤¿ #CN ¥ò¥ÁÈÄ
++¤ò¤Á¤¤¤¿ #T35 ¥ò¥ÁÈÄ
++¤ò¤Ã¤Á #T30 ¥ò¥Ã¥Á
++¤ò¤Ã¤Á¤¤¤¿ #CN ¥ò¥Ã¥ÁÈÄ
++¤ò¤Ã¤Á¤¤¤¿ #T35 ¥ò¥Ã¥ÁÈÄ
++¤ò¤ð #T35 ¤ò¤ð
++¤ó¡¼ #JN ¤ó¡Á¡ª¡©
++¤ó¤¬¤ó¤° #CJ ¤ó¤¬¤ó¤°
++¤ó¤¸¤ã #CJ ¤ó¤¸¤ã¡ª
++¤ó¤À¤è #JN ¥ó¥À¥è
++¤ó¤À¤ó¤À #CJ ¤ó¤À¤ó¤À
++¤ó¤Ç #JN ¤ó¤Ç¡¡
++¤ó¤Ê¤³¤¿¤¢¤Ê¤¤ #CJ ¤ó¤Ê¤³¤¿¡¼¤Ê¤¤
++¤ó¤Ê¤ï¤±¤Í¡¼¤è #JN ¤ó¤Ê¤ï¤±¥Í¡¼¥è
++¤ó¤Þ #JN (`¦Æ.¡­)¡ã¤ó¤Þ!
++¤ó¤Þ #JN ¤ó¤Þ¡ª
diff --git a/meta-openembedded/meta-oe/recipes-support/anthy/anthy/native-helpers.patch b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/native-helpers.patch
new file mode 100644
index 000000000..47ce007b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/native-helpers.patch
@@ -0,0 +1,58 @@
+upstream: not applicable
+author: pH5
+comment: Stage the native anthy helpers mkfiledic, mkdepgraph, mkworddic,
+comment: calctrans and proccorpus.
+
+Index: anthy-9100h/mkanthydic/Makefile.am
+===================================================================
+--- anthy-9100h.orig/mkanthydic/Makefile.am
++++ anthy-9100h/mkanthydic/Makefile.am
+@@ -3,7 +3,7 @@ noinst_SCRIPTS =
+ CLEANFILES = anthy.dic
+ INCLUDES = -I$(top_srcdir)/ -DSRCDIR=\"$(srcdir)\"
+
+-noinst_PROGRAMS = mkfiledic
++bin_PROGRAMS = mkfiledic
+ mkfiledic_SOURCES = mkfiledic.c
+ mkfiledic_LDADD = ../src-diclib/libdiclib.la
+
+Index: anthy-9100h/depgraph/Makefile.am
+===================================================================
+--- anthy-9100h.orig/depgraph/Makefile.am
++++ anthy-9100h/depgraph/Makefile.am
+@@ -9,7 +9,7 @@ CLEANFILES = anthy.dep
+ EXTRA_DIST = indepword.txt $(DEPWORDS)
+
+ # Generate the dictionary
+-noinst_PROGRAMS = mkdepgraph
++bin_PROGRAMS = mkdepgraph
+ mkdepgraph_SOURCES = mkdepgraph.c
+ mkdepgraph_LDADD = ../src-main/libanthy.la ../src-worddic/libanthydic.la
+
+Index: anthy-9100h/mkworddic/Makefile.am
+===================================================================
+--- anthy-9100h.orig/mkworddic/Makefile.am
++++ anthy-9100h/mkworddic/Makefile.am
+@@ -26,7 +26,8 @@ DIC_FILES = @top_srcdir@/alt-cannadic/gc
+ @top_srcdir@/mkworddic/udict
+
+ # Generate the dictionary
+-noinst_PROGRAMS = mkworddic
++#noinst_PROGRAMS = mkworddic
++bin_PROGRAMS = mkworddic
+ mkworddic_SOURCES = mkdic.c writewords.c mkudic.c calcfreq.c mkdic.h
+ mkworddic_LDADD = ../src-worddic/libanthydic.la
+
+Index: anthy-9100h/calctrans/Makefile.am
+===================================================================
+--- anthy-9100h.orig/calctrans/Makefile.am
++++ anthy-9100h/calctrans/Makefile.am
+@@ -3,7 +3,7 @@ EXTRA_DIST =\
+ corpus.3.txt corpus.4.txt corpus.5.txt\
+ corpus_info weak_words
+
+-noinst_PROGRAMS = calctrans proccorpus
++bin_PROGRAMS = calctrans proccorpus
+ INCLUDES = -I$(top_srcdir)/
+
+ calctrans_SOURCES = calctrans.c input_set.c input_set.h corpus.c
diff --git a/meta-openembedded/meta-oe/recipes-support/anthy/anthy/not_build_elc.patch b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/not_build_elc.patch
new file mode 100644
index 000000000..1c5c49400
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/not_build_elc.patch
@@ -0,0 +1,17 @@
+upstream: not applicable
+source: stolen from debian
+
+Index: anthy-9100h/src-util/Makefile.am
+===================================================================
+--- anthy-9100h.orig/src-util/Makefile.am
++++ anthy-9100h/src-util/Makefile.am
+@@ -8,7 +8,8 @@ ELISP_FILES = anthy.el anthy-dic.el anth
+ anthy-isearch.el anthy-azik.el anthy-kyuri.el
+ EXTRA_DIST = $(ELISP_FILES) typetab dic-tool-usage.txt anthy.i
+ bin_PROGRAMS = anthy-dic-tool anthy-agent anthy-morphological-analyzer
+-ELCFILES = anthy.elc anthy-dic.elc anthy-azik.elc anthy-conf.elc anthy-isearch.elc anthy-kyuri.elc leim-list.elc
++#ELCFILES = anthy.elc anthy-dic.elc anthy-azik.elc anthy-conf.elc anthy-isearch.elc anthy-kyuri.elc leim-list.elc
++ELCFILES =
+ if ELISP
+ lisp_LISP = $(ELISP_FILES)
+ endif
diff --git a/meta-openembedded/meta-oe/recipes-support/anthy/anthy/target-helpers.patch b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/target-helpers.patch
new file mode 100644
index 000000000..d22c3562a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/anthy/anthy/target-helpers.patch
@@ -0,0 +1,111 @@
+diff -Nurp anthy-9100h.org/calctrans/Makefile.am anthy-9100h/calctrans/Makefile.am
+--- anthy-9100h.org/calctrans/Makefile.am 2007-10-27 23:02:59.000000000 +0900
++++ anthy-9100h/calctrans/Makefile.am 2014-11-11 17:14:42.152999991 +0900
+@@ -15,31 +15,31 @@ dict_source_files = anthy.cand_info anth
+
+ update_params:
+ rm -f parsed_data2
+- ./proccorpus $(srcdir)/corpus.?.txt > parsed_data
+- ./calctrans parsed_data -o $(srcdir)/corpus_info
+- ./calctrans parsed_data -e -o $(srcdir)/weak_words
++ proccorpus $(srcdir)/corpus.?.txt > parsed_data
++ calctrans parsed_data -o $(srcdir)/corpus_info
++ calctrans parsed_data -e -o $(srcdir)/weak_words
+ make do_update_params
+
+ update_params0:
+ rm -f parsed_data2
+- ./proccorpus $(srcdir)/corpus.0.txt > parsed_data
+- ./calctrans parsed_data -o $(srcdir)/corpus_info
+- ./calctrans parsed_data -e -o $(srcdir)/weak_words
++ proccorpus $(srcdir)/corpus.0.txt > parsed_data
++ calctrans parsed_data -o $(srcdir)/corpus_info
++ calctrans parsed_data -e -o $(srcdir)/weak_words
+ make do_update_params
+
+ update_params2:
+- ./proccorpus $(srcdir)/corpus.?.txt >> parsed_data2
+- ./calctrans parsed_data parsed_data2 -o $(srcdir)/corpus_info
+- ./calctrans parsed_data parsed_data2 -e -o $(srcdir)/weak_words
++ proccorpus $(srcdir)/corpus.?.txt >> parsed_data2
++ calctrans parsed_data parsed_data2 -o $(srcdir)/corpus_info
++ calctrans parsed_data parsed_data2 -e -o $(srcdir)/weak_words
+ make do_update_params
+
+ do_update_params:
+- ./calctrans -c $(srcdir)/corpus_info
++ calctrans -c $(srcdir)/corpus_info
+ rm -f $(dict_source_files)
+ make $(dict_source_files)
+
+-$(dict_source_files): $(srcdir)/corpus_info $(srcdir)/weak_words calctrans
+- ./calctrans -c $(srcdir)/corpus_info $(srcdir)/weak_words
++$(dict_source_files): $(srcdir)/corpus_info $(srcdir)/weak_words
++ calctrans -c $(srcdir)/corpus_info $(srcdir)/weak_words
+
+ noinst_DATA = $(dict_source_files)
+ CLEANFILES = $(dict_source_files) parsed_data parsed_data2 anthy.feature_info
+diff -Nurp anthy-9100h.org/depgraph/Makefile.am anthy-9100h/depgraph/Makefile.am
+--- anthy-9100h.org/depgraph/Makefile.am 2008-11-29 21:46:14.000000000 +0900
++++ anthy-9100h/depgraph/Makefile.am 2014-11-11 17:12:03.813999991 +0900
+@@ -9,11 +9,11 @@ CLEANFILES = anthy.dep
+ EXTRA_DIST = indepword.txt $(DEPWORDS)
+
+ # Generate the dictionary
+-noinst_PROGRAMS = mkdepgraph
+-mkdepgraph_SOURCES = mkdepgraph.c
+-mkdepgraph_LDADD = ../src-main/libanthy.la ../src-worddic/libanthydic.la
++#noinst_PROGRAMS = mkdepgraph
++#mkdepgraph_SOURCES = mkdepgraph.c
++#mkdepgraph_LDADD = ../src-main/libanthy.la ../src-worddic/libanthydic.la
+
+-anthy.dep : mkdepgraph $(DEPWORDS)
+- ./mkdepgraph
++anthy.dep : $(DEPWORDS)
++ mkdepgraph
+
+ noinst_DATA = anthy.dep
+diff -Nurp anthy-9100h.org/mkanthydic/Makefile.am anthy-9100h/mkanthydic/Makefile.am
+--- anthy-9100h.org/mkanthydic/Makefile.am 2007-04-14 18:01:10.000000000 +0900
++++ anthy-9100h/mkanthydic/Makefile.am 2014-11-11 17:10:34.792999991 +0900
+@@ -3,12 +3,12 @@ noinst_SCRIPTS =
+ CLEANFILES = anthy.dic
+ INCLUDES = -I$(top_srcdir)/ -DSRCDIR=\"$(srcdir)\"
+
+-noinst_PROGRAMS = mkfiledic
+-mkfiledic_SOURCES = mkfiledic.c
+-mkfiledic_LDADD = ../src-diclib/libdiclib.la
++#noinst_PROGRAMS = mkfiledic
++#mkfiledic_SOURCES = mkfiledic.c
++#mkfiledic_LDADD = ../src-diclib/libdiclib.la
+
+-anthy.dic : mkfiledic ../mkworddic/anthy.wdic ../depgraph/anthy.dep ../calctrans/anthy.cand_info ../calctrans/anthy.trans_info ../calctrans/anthy.corpus_array ../calctrans/anthy.corpus_bucket
+- ./mkfiledic
++anthy.dic : ../mkworddic/anthy.wdic ../depgraph/anthy.dep ../calctrans/anthy.cand_info ../calctrans/anthy.trans_info ../calctrans/anthy.corpus_array ../calctrans/anthy.corpus_bucket
++ mkfiledic
+
+
+ # To install
+diff -Nurp anthy-9100h.org/mkworddic/Makefile.am anthy-9100h/mkworddic/Makefile.am
+--- anthy-9100h.org/mkworddic/Makefile.am 2009-01-23 12:31:31.000000000 +0900
++++ anthy-9100h/mkworddic/Makefile.am 2014-11-11 17:13:31.946999992 +0900
+@@ -26,14 +26,14 @@ DIC_FILES = @top_srcdir@/alt-cannadic/gc
+ @top_srcdir@/mkworddic/udict
+
+ # Generate the dictionary
+-noinst_PROGRAMS = mkworddic
+-mkworddic_SOURCES = mkdic.c writewords.c mkudic.c calcfreq.c mkdic.h
+-mkworddic_LDADD = ../src-worddic/libanthydic.la
++#noinst_PROGRAMS = mkworddic
++#mkworddic_SOURCES = mkdic.c writewords.c mkudic.c calcfreq.c mkdic.h
++#mkworddic_LDADD = ../src-worddic/libanthydic.la
+
+ noinst_DATA = anthy.wdic
+
+-anthy.wdic : mkworddic $(DIC_FILES)
+- ./mkworddic -f ./dict.args
++anthy.wdic : $(DIC_FILES)
++ mkworddic -f ./dict.args
+
+
+ # To install
diff --git a/meta-openembedded/meta-oe/recipes-support/anthy/anthy_9100h.bb b/meta-openembedded/meta-oe/recipes-support/anthy/anthy_9100h.bb
new file mode 100644
index 000000000..a65d324ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/anthy/anthy_9100h.bb
@@ -0,0 +1,45 @@
+DESCRIPTION="Anthy is a system for Japanese input method. It converts Hiragana text to Kana Kanji mixed text."
+AUTHOR = "Anthy Developers <anthy-dev@lists.sourceforge.jp>"
+HOMEPAGE = "http://anthy.sourceforge.jp"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=11f384074d8e93e263b5664ef08a411a"
+
+SRC_URI = "http://osdn.dl.sourceforge.jp/anthy/37536/anthy-9100h.tar.gz \
+ file://not_build_elc.patch \
+ file://2ch_t.patch \
+"
+
+SRC_URI_append_class-target = "file://target-helpers.patch"
+SRC_URI_append_class-native = "file://native-helpers.patch"
+
+SRC_URI[md5sum] = "1f558ff7ed296787b55bb1c6cf131108"
+SRC_URI[sha256sum] = "d256f075f018b4a3cb0d165ed6151fda4ba7db1621727e0eb54569b6e2275547"
+
+DEPENDS_class-target = "anthy-native"
+RDEPENDS_${PN}_class-target = "libanthy0"
+
+inherit autotools pkgconfig
+
+PACKAGES += "${PN}-el libanthy0 libanthy-dev"
+
+FILES_${PN}-dbg += "${libdir}/.debug"
+FILES_libanthy0 = "${libdir}/libanthy.so.* \
+ ${libdir}/libanthydic.so.* \
+ ${libdir}/libanthyinput.so.* \
+"
+
+FILES_libanthy-dev = "${libdir}/libanthy*.la \
+ ${libdir}/libanthy*.a \
+ ${libdir}/libanthy*.so \
+ ${includedir}/anthy \
+ ${libdir}/pkgconfig/anthy.pc \
+"
+
+FILES_${PN}-el = "${datadir}/emacs/*"
+FILES_${PN} = "${datadir}/* \
+ ${bindir}/* \
+ ${sysconfdir}/anthy-conf \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio.inc b/meta-openembedded/meta-oe/recipes-support/asio/asio.inc
new file mode 100644
index 000000000..54f78e41d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Asio is a cross-platform C++ library for network and low-level \
+ I/O programming that provides developers with a consistent asynchronous \
+ model using a modern C++ approach."
+AUTHOR = "Christopher M. Kohlhoff (chris at kohlhoff dot com)"
+HOMEPAGE = "http://think-async.com/Asio"
+SECTION = "libs"
+LICENSE = "BSL-1.0"
+
+DEPENDS = "boost openssl"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${BP}.tar.bz2"
+
+inherit autotools
+
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-Automatically-handle-glibc-variant-of-strerror_r-wit.patch b/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-Automatically-handle-glibc-variant-of-strerror_r-wit.patch
new file mode 100644
index 000000000..4244b97a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-Automatically-handle-glibc-variant-of-strerror_r-wit.patch
@@ -0,0 +1,46 @@
+From 45c855400842fd40f200ae9b7abf9debf4ab5436 Mon Sep 17 00:00:00 2001
+From: Christopher Kohlhoff <chris@kohlhoff.com>
+Date: Sun, 28 Aug 2016 09:21:53 +1000
+Subject: [PATCH] Automatically handle glibc variant of strerror_r without
+ #ifdefs.
+
+---
+Upstream-Status: Backport https://github.com/chriskohlhoff/asio/commit/443bc17d13eb5e37de780ea6e23157493cf7b3b9
+ include/asio/impl/error_code.ipp | 16 +++++++---------
+ 1 file changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/include/asio/impl/error_code.ipp b/include/asio/impl/error_code.ipp
+index ccb70dd..a117658 100644
+--- a/include/asio/impl/error_code.ipp
++++ b/include/asio/impl/error_code.ipp
+@@ -97,20 +97,18 @@ public:
+ #if defined(__sun) || defined(__QNX__) || defined(__SYMBIAN32__)
+ using namespace std;
+ return strerror(value);
+-#elif defined(__MACH__) && defined(__APPLE__) \
+- || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
+- || defined(_AIX) || defined(__hpux) || defined(__osf__) \
+- || defined(__ANDROID__)
+- char buf[256] = "";
+- using namespace std;
+- strerror_r(value, buf, sizeof(buf));
+- return buf;
+ #else
+ char buf[256] = "";
+- return strerror_r(value, buf, sizeof(buf));
++ using namespace std;
++ return strerror_result(strerror_r(value, buf, sizeof(buf)), buf);
+ #endif
+ #endif // defined(ASIO_WINDOWS)
+ }
++
++private:
++ // Helper function to adapt the result from glibc's variant of strerror_r.
++ static const char* strerror_result(int, const char* s) { return s; }
++ static const char* strerror_result(const char* s, const char*) { return s; }
+ };
+
+ } // namespace detail
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-use-POSIX-poll.h-instead-of-sys-poll.h.patch b/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-use-POSIX-poll.h-instead-of-sys-poll.h.patch
new file mode 100644
index 000000000..7f95f5a25
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio/0001-use-POSIX-poll.h-instead-of-sys-poll.h.patch
@@ -0,0 +1,64 @@
+From dac36a170188917e2f61b0394ba8a2f6509ddf3a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <adraszik@tycoint.com>
+Date: Tue, 8 Nov 2016 20:39:55 +0000
+Subject: [PATCH] use POSIX poll.h instead of sys/poll.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+POSIX specifies that <poll.h> is the correct header to
+include for poll()
+ http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html
+whereas <sys/poll.h> is only needed for ancient glibc (<2.3),
+so let's follow POSIX instead.
+
+As a side-effect, this silences numerous compilation warnings
+when compiling against the musl C-library:
+
+In file included from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/socket_types.hpp:57:0,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/impl/error_code.ipp:29,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/error_code.hpp:185,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/throw_error.hpp:19,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/impl/posix_tss_ptr.ipp:23,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/posix_tss_ptr.hpp:74,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/tss_ptr.hpp:27,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/call_stack.hpp:20,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/impl/handler_alloc_hook.ipp:19,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/handler_alloc_hook.hpp:78,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/handler_alloc_helpers.hpp:21,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/bind_handler.hpp:19,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/detail/wrapped_handler.hpp:18,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/io_service.hpp:24,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/basic_io_object.hpp:19,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/basic_socket.hpp:20,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio/basic_datagram_socket.hpp:20,
+ from ../../../../asio-1.10.6/src/examples/cpp03/../../../include/asio.hpp:19,
+ from ../../../../asio-1.10.6/src/examples/cpp03/buffers/reference_counted.cpp:11:
+<sysroot>/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
+ #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
+ ^~~~~~~
+
+etc.
+
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+---
+Upstream-Status: Submitted https://svn.boost.org/trac/boost/ticket/12419
+ include/asio/detail/socket_types.hpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/asio/detail/socket_types.hpp b/include/asio/detail/socket_types.hpp
+index f2600c2..cb61b8e 100644
+--- a/include/asio/detail/socket_types.hpp
++++ b/include/asio/detail/socket_types.hpp
+@@ -54,7 +54,7 @@
+ #else
+ # include <sys/ioctl.h>
+ # if !defined(__SYMBIAN32__)
+-# include <sys/poll.h>
++# include <poll.h>
+ # endif
+ # include <sys/types.h>
+ # include <sys/stat.h>
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio_1.10.6.bb b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.10.6.bb
new file mode 100644
index 000000000..565603984
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.10.6.bb
@@ -0,0 +1,11 @@
+require asio.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=fede5286a78559dd646e355ab0cc8f04"
+
+SRC_URI[md5sum] = "85d014a356a6e004cd30ccd4c9b6a5c2"
+SRC_URI[sha256sum] = "e0d71c40a7b1f6c1334008fb279e7361b32a063e020efd21e40d9d8ff037195e"
+
+SRC_URI += "\
+ file://0001-Automatically-handle-glibc-variant-of-strerror_r-wit.patch \
+ file://0001-use-POSIX-poll.h-instead-of-sys-poll.h.patch \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-include-missing-header-files.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-include-missing-header-files.patch
new file mode 100644
index 000000000..3708f60ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-include-missing-header-files.patch
@@ -0,0 +1,97 @@
+From 7b651793269b6b86f12c43c30b751b86def27222 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 17:56:40 -0700
+Subject: [PATCH] include missing header files
+
+fixes build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ deviate.c | 1 +
+ procdbase.c | 2 +-
+ showgeneric.c | 2 +-
+ showlinux.c | 2 +-
+ showprocs.c | 2 +-
+ showsys.c | 2 +-
+ 6 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/deviate.c b/deviate.c
+index 7cf1b49..8e615af 100644
+--- a/deviate.c
++++ b/deviate.c
+@@ -178,6 +178,7 @@ static const char rcsid[] = "$Id: deviate.c,v 1.45 2010/10/23 14:02:03 gerlof Ex
+ #include <stdio.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <stdlib.h>
+ #include <unistd.h>
+ #include <limits.h>
+ #include <memory.h>
+diff --git a/procdbase.c b/procdbase.c
+index 9cab347..0487d26 100644
+--- a/procdbase.c
++++ b/procdbase.c
+@@ -67,7 +67,7 @@ static const char rcsid[] = "$Id: procdbase.c,v 1.8 2010/04/23 12:19:35 gerlof E
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <string.h>
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "atop.h"
+ #include "photoproc.h"
+diff --git a/showgeneric.c b/showgeneric.c
+index 775afa8..3d5be0e 100644
+--- a/showgeneric.c
++++ b/showgeneric.c
+@@ -268,7 +268,7 @@ static const char rcsid[] = "$Id: showgeneric.c,v 1.71 2010/10/25 19:08:32 gerlo
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <string.h>
+-#include <termio.h>
++#include <termios.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <curses.h>
+diff --git a/showlinux.c b/showlinux.c
+index 6e60754..aba2ee6 100644
+--- a/showlinux.c
++++ b/showlinux.c
+@@ -274,7 +274,7 @@ static const char rcsid[] = "$Id: showlinux.c,v 1.70 2010/10/23 14:04:12 gerlof
+ #include <string.h>
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <termio.h>
++#include <termios.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <curses.h>
+diff --git a/showprocs.c b/showprocs.c
+index 5194524..f0169ad 100644
+--- a/showprocs.c
++++ b/showprocs.c
+@@ -94,7 +94,7 @@ static const char rcsid[] = "$Id: showprocs.c,v 1.15 2011/09/05 11:44:16 gerlof
+ #include <string.h>
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <termio.h>
++#include <termios.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <curses.h>
+diff --git a/showsys.c b/showsys.c
+index 26331be..5a05fe5 100644
+--- a/showsys.c
++++ b/showsys.c
+@@ -80,7 +80,7 @@ static const char rcsid[] = "XXXXXX";
+ #include <string.h>
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <termio.h>
++#include <termios.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <curses.h>
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch
new file mode 100644
index 000000000..ee7419993
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch
@@ -0,0 +1,52 @@
+Update permissions of executable files that remove setuid bit and make everyone
+could read.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/Makefile b/Makefile
+index a65b9b6..21d9828 100644
+--- a/Makefile
++++ b/Makefile
+@@ -66,7 +66,7 @@ systemdinstall: genericinstall
+ chmod 0644 $(DESTDIR)$(SYSDPATH)/atopacct.service
+ cp atop.cronsystemd $(DESTDIR)$(CRNPATH)/atop
+ cp atop-pm.sh $(DESTDIR)$(PMPATHD)
+- chmod 0711 $(DESTDIR)$(PMPATHD)/atop-pm.sh
++ chmod 0755 $(DESTDIR)$(PMPATHD)/atop-pm.sh
+ #
+ # only when making on target system:
+ #
+@@ -91,11 +91,11 @@ sysvinstall: genericinstall
+ #
+ if [ -d $(DESTDIR)$(PMPATH1) ]; \
+ then cp 45atoppm $(DESTDIR)$(PMPATH1); \
+- chmod 0711 $(DESTDIR)$(PMPATH1)/45atoppm; \
++ chmod 0755 $(DESTDIR)$(PMPATH1)/45atoppm; \
+ fi
+ if [ -d $(DESTDIR)$(PMPATH2) ]; \
+ then cp 45atoppm $(DESTDIR)$(PMPATH2); \
+- chmod 0711 $(DESTDIR)$(PMPATH2)/45atoppm; \
++ chmod 0755 $(DESTDIR)$(PMPATH2)/45atoppm; \
+ fi
+ #
+ #
+@@ -139,7 +139,7 @@ genericinstall: atop atopacctd
+ #
+ cp atop $(DESTDIR)$(BINPATH)/atop
+ chown root $(DESTDIR)$(BINPATH)/atop
+- chmod 04711 $(DESTDIR)$(BINPATH)/atop
++ chmod 0755 $(DESTDIR)$(BINPATH)/atop
+ ln -sf atop $(DESTDIR)$(BINPATH)/atopsar
+ cp atopacctd $(DESTDIR)$(SBINPATH)/atopacctd
+ chown root $(DESTDIR)$(SBINPATH)/atopacctd
+@@ -147,7 +147,7 @@ genericinstall: atop atopacctd
+ cp atop $(DESTDIR)$(BINPATH)/atop-$(VERS)
+ ln -sf atop-$(VERS) $(DESTDIR)$(BINPATH)/atopsar-$(VERS)
+ cp atop.daily $(DESTDIR)$(SCRPATH)
+- chmod 0711 $(DESTDIR)$(SCRPATH)/atop.daily
++ chmod 0755 $(DESTDIR)$(SCRPATH)/atop.daily
+ cp man/atop.1 $(DESTDIR)$(MAN1PATH)
+ cp man/atopsar.1 $(DESTDIR)$(MAN1PATH)
+ cp man/atoprc.5 $(DESTDIR)$(MAN5PATH)
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch
new file mode 100644
index 000000000..f1fcbfed7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch
@@ -0,0 +1,33 @@
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/atop-pm.sh b/atop-pm.sh
+index 7f41a86..3ff4ab5 100755
+--- a/atop-pm.sh
++++ b/atop-pm.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ case "$1" in
+ pre) /usr/bin/systemctl stop atop
+diff --git a/atop.daily b/atop.daily
+index 24d33bd..f29bd94 100755
+--- a/atop.daily
++++ b/atop.daily
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ CURDAY=`date +%Y%m%d`
+ LOGPATH=/var/log/atop
+@@ -16,7 +16,7 @@ then
+
+ while ps -p `cat $PIDFILE` > /dev/null
+ do
+- let CNT+=1
++ CNT=$((CNT+1))
+
+ if [ $CNT -gt 5 ]
+ then
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch
new file mode 100644
index 000000000..5994d3e08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch
@@ -0,0 +1,27 @@
+Implement the sub-command status.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/atop.init b/atop.init
+index 108bdc5..9f89fad 100755
+--- a/atop.init
++++ b/atop.init
+@@ -18,6 +18,8 @@
+ # Check existance of binaries
+ [ -f /usr/bin/atop ] || exit 0
+
++[ -f /etc/init.d/functions ] && . /etc/init.d/functions
++
+ PIDFILE=/var/run/atop.pid
+ RETVAL=0
+
+@@ -63,6 +65,7 @@ case "$1" in
+ ;;
+
+ status)
++ status atop
+ ;;
+
+ reload)
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.99_atop b/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.99_atop
new file mode 100644
index 000000000..24ea3f205
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.99_atop
@@ -0,0 +1 @@
+d root root 0755 /var/volatile/log/atop none
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.atop.conf b/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.atop.conf
new file mode 100644
index 000000000..2f230004d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/volatiles.atop.conf
@@ -0,0 +1 @@
+d /var/volatile/log/atop - - - -
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop_2.2.3.bb b/meta-openembedded/meta-oe/recipes-support/atop/atop_2.2.3.bb
new file mode 100644
index 000000000..1ab9e7cf9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop_2.2.3.bb
@@ -0,0 +1,63 @@
+SUMMARY = "Monitor for system resources and process activity"
+DESCRIPTION = "Atop is an ASCII full-screen performance monitor for Linux that \
+is capable of reporting the activity of all processes (even if processes have \
+finished during the interval), daily logging of system and process activity for \
+long-term analysis, highlighting overloaded system resources by using colors, \
+etc. At regular intervals, it shows system-level activity related to the CPU, \
+memory, swap, disks (including LVM) and network layers, and for every process \
+(and thread) it shows e.g. the CPU utilization, memory growth, disk \
+utilization, priority, username, state, and exit code."
+HOMEPAGE = "http://www.atoptool.nl"
+SECTION = "console/utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+
+DEPENDS = "ncurses zlib"
+
+ATOP_VER = "${@'-'.join(d.getVar('PV').rsplit('.', 1))}"
+
+SRC_URI = " \
+ http://www.atoptool.nl/download/${BPN}-${ATOP_VER}.tar.gz \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'file://volatiles.atop.conf', 'file://volatiles.99_atop', d)} \
+ file://0001-include-missing-header-files.patch \
+ file://remove-bashisms.patch \
+ file://fix-permissions.patch \
+ file://sysvinit-implement-status.patch \
+"
+
+SRC_URI[md5sum] = "034dc1544f2ec4e4d2c739d320dc326d"
+SRC_URI[sha256sum] = "c785b8a2355be28b3de6b58a8ea4c4fcab8fadeaa57a99afeb03c66fac8e055d"
+
+S = "${WORKDIR}/${BPN}-${ATOP_VER}"
+
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ make DESTDIR=${D} VERS=${ATOP_VER} SYSDPATH=${systemd_system_unitdir} \
+ PMPATHD=${systemd_unitdir}/system-sleep systemdinstall
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ install -m 644 ${WORKDIR}/volatiles.atop.conf ${D}${sysconfdir}/tmpfiles.d/atop.conf
+ rm -f ${D}${systemd_system_unitdir}/atopacct.service
+ else
+ make DESTDIR=${D} VERS=${ATOP_VER} sysvinstall
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 644 ${WORKDIR}/volatiles.99_atop ${D}${sysconfdir}/default/volatiles/99_atop
+ rm -f ${D}${sysconfdir}/init.d/atopacct
+ fi
+
+ # remove atopacct related files
+ rm -rf ${D}${sbindir} ${D}${mandir}/man8
+}
+
+inherit systemd
+
+SYSTEMD_SERVICE_${PN} = "atop.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+FILES_${PN} += "${systemd_unitdir}/system-sleep"
+
+RDEPENDS_${PN} = "procps"
diff --git a/meta-openembedded/meta-oe/recipes-support/augeas/augeas.inc b/meta-openembedded/meta-oe/recipes-support/augeas/augeas.inc
new file mode 100644
index 000000000..185abae18
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/augeas/augeas.inc
@@ -0,0 +1,33 @@
+SUMMARY = "Augeas configuration API"
+HOMEPAGE = "http://augeas.net/"
+BUGTRACKER = "https://fedorahosted.org/augeas/report/1"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bbb461211a33b134d42ed5ee802b37ff"
+
+SRC_URI = "http://download.augeas.net/${BP}.tar.gz \
+ file://add-missing-argz-conditional.patch \
+ file://sepbuildfix.patch \
+ file://0001-Unset-need_charset_alias-when-building-for-musl.patch \
+ "
+
+DEPENDS = "readline libxml2"
+
+inherit autotools pkgconfig
+
+PACKAGES =+ "${PN}-lenses lib${BPN}"
+
+FILES_${PN}-lenses = "${datadir}/augeas/lenses"
+FILES_lib${BPN} = "${libdir}/lib*${SOLIBS}"
+
+RDEPENDS_lib${BPN} += "${PN}-lenses"
+RRECOMMENDS_lib${BPN} += "${PN}"
+
+LEAD_SONAME = "libaugeas.so"
+
+do_install_append() {
+ rm -fr ${D}${datadir}/vim
+}
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libselinux] = "--with-selinux,--without-selinux,libselinux"
diff --git a/meta-openembedded/meta-oe/recipes-support/augeas/augeas/0001-Unset-need_charset_alias-when-building-for-musl.patch b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/0001-Unset-need_charset_alias-when-building-for-musl.patch
new file mode 100644
index 000000000..0ba7c76a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/0001-Unset-need_charset_alias-when-building-for-musl.patch
@@ -0,0 +1,31 @@
+From 32b15332e2130a54b25f4fbf6f58b407b851dd8f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Apr 2015 17:02:13 -0700
+Subject: [PATCH] Unset need_charset_alias when building for musl
+
+localcharset uses ac_cv_gnu_library_2_1 from glibc21.m4
+which actually shoudl be fixed in gnulib and then all downstream
+projects will get it eventually. For now we apply the fix to
+coreutils
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ gnulib/lib/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am
+index 963b22d..75788d2 100644
+--- a/gnulib/lib/Makefile.am
++++ b/gnulib/lib/Makefile.am
+@@ -463,7 +463,7 @@ install-exec-localcharset: all-local
+ case '$(host_os)' in \
+ darwin[56]*) \
+ need_charset_alias=true ;; \
+- darwin* | cygwin* | mingw* | pw32* | cegcc*) \
++ darwin* | cygwin* | mingw* | pw32* | cegcc* | linux-musl*) \
+ need_charset_alias=false ;; \
+ *) \
+ need_charset_alias=true ;; \
diff --git a/meta-openembedded/meta-oe/recipes-support/augeas/augeas/add-missing-argz-conditional.patch b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/add-missing-argz-conditional.patch
new file mode 100644
index 000000000..368bb4176
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/add-missing-argz-conditional.patch
@@ -0,0 +1,27 @@
+From 9a6e6374da7d7056db0950f0f7d6b8b905009775 Mon Sep 17 00:00:00 2001
+From: Constantin Musca <constantinx.musca@intel.com>
+Date: Fri, 15 Jul 2016 10:04:48 +0300
+Subject: [PATCH] Add missing GL_GENERATE_ARGZ_H conditional
+
+- GL_GENERATE_ARGZ_H is used in gnulib/lib/Makefile.am
+
+Upstream-Status: Pending
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 72b6984..fb9653e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,6 +55,8 @@ AC_ARG_WITH([failmalloc],
+
+ AM_CONDITIONAL([WITH_FAILMALLOC], [test x$with_failmalloc != xno])
+
++AM_CONDITIONAL([GL_GENERATE_ARGZ_H], [test -n "$ARGZ_H"])
++
+ dnl --enable-debug=(yes|no)
+ AC_ARG_ENABLE([debug],
+ [AC_HELP_STRING([--enable-debug=no/yes],
diff --git a/meta-openembedded/meta-oe/recipes-support/augeas/augeas/sepbuildfix.patch b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/sepbuildfix.patch
new file mode 100644
index 000000000..2b18618fb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/augeas/augeas/sepbuildfix.patch
@@ -0,0 +1,31 @@
+From 8a277957a2579e7149c1850675441b288192077c Mon Sep 17 00:00:00 2001
+From: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Date: Fri, 15 Jul 2016 10:04:48 +0300
+Subject: [PATCH] augeas: fix separate builddirs
+
+Ensure that builds in separate builddirs (${B} != ${S}) correctly install the
+lenses files.
+
+Upstream-Status: Pending
+
+RP 2013/4/17
+
+---
+ Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 87d511a..7710b3b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -5,8 +5,8 @@ ACLOCAL_AMFLAGS = -I gnulib/m4
+ lensdir=$(datadir)/augeas/lenses/dist
+ lenstestdir=$(datadir)/augeas/lenses/dist/tests
+
+-dist_lens_DATA=$(wildcard lenses/*.aug)
+-dist_lenstest_DATA=$(wildcard lenses/tests/*.aug)
++dist_lens_DATA=$(wildcard $(top_srcdir)/lenses/*.aug)
++dist_lenstest_DATA=$(wildcard $(top_srcdir)lenses/tests/*.aug)
+
+ EXTRA_DIST=augeas.spec build/ac-aux/move-if-change Makefile.am HACKING.md
+
diff --git a/meta-openembedded/meta-oe/recipes-support/augeas/augeas_1.5.0.bb b/meta-openembedded/meta-oe/recipes-support/augeas/augeas_1.5.0.bb
new file mode 100644
index 000000000..c4f62e747
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/augeas/augeas_1.5.0.bb
@@ -0,0 +1,4 @@
+require augeas.inc
+
+SRC_URI[md5sum] = "01190e455c513124a2dae29a1182c113"
+SRC_URI[sha256sum] = "223bb6e6fe3e9e92277dafd5d34e623733eb969a72a382998d204feab253f73f"
diff --git a/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-avro-c-Fix-build-with-clang-compiler.patch b/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-avro-c-Fix-build-with-clang-compiler.patch
new file mode 100644
index 000000000..01235d8ef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-avro-c-Fix-build-with-clang-compiler.patch
@@ -0,0 +1,37 @@
+From 518bb8ccfb3f3fc143fbd571782f3e40573d01b5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Apr 2017 09:15:04 -0700
+Subject: [PATCH] avro-c: Fix build with clang compiler
+
+Clang advertizes itself to be compatible with gcc 4.2.1
+while that was true several years ago, it now supports
+a lot more newer features, the test to just check gcc
+version should be supplanted with clang check as well
+so atomic support in clang can be asserted as well
+
+Fixes
+
+lang/c/src/avro/refcount.h:301:2: error: "No atomic implementation!"
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lang/c/src/avro/refcount.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/lang/c/src/avro/refcount.h b/lang/c/src/avro/refcount.h
+index 69afa4fc..d76ba057 100644
+--- a/lang/c/src/avro/refcount.h
++++ b/lang/c/src/avro/refcount.h
+@@ -118,7 +118,8 @@ avro_refcount_dec(volatile int *refcount)
+ * GCC intrinsics
+ */
+
+-#elif (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40500
++#elif (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40500 \
++|| defined(__clang__)
+
+ static inline void
+ avro_refcount_set(volatile int *refcount, int value)
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.8.1.bb b/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.8.1.bb
new file mode 100644
index 000000000..276fe2b5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.8.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Apache Avro data serialization system."
+HOMEPAGE = "http://apr.apache.org/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=73bdf70f268f0b3b9c5a83dd7a6f3324"
+
+DEPENDS = "jansson zlib xz"
+PV .= "+git${SRCPV}"
+
+SRCREV = "4b3677c32b879e0e7f717eb95f9135ac654da760"
+SRC_URI = "git://github.com/apache/avro \
+ file://0001-avro-c-Fix-build-with-clang-compiler.patch;patchdir=../../ \
+"
+
+S = "${WORKDIR}/git/lang/c"
+
+LDFLAGS_append_libc-uclibc = " -lm"
+
+inherit cmake
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch
new file mode 100644
index 000000000..8ef774f0f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch
@@ -0,0 +1,29 @@
+configure.ac: add check for NO_GETCONTEXT definition
+
+Signed-off-by: Samuel Martin <s.martin49@gmail.com>
+[yann.morin.1998@free.fr: add a comment, change variable name, use
+ AS_IF, remove debug traces, use AC_CHECK_FUNCS (as suggested by
+ Thomas)]
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+Upstream-Status: Pending
+ configure.ac | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- bdwgc-7.2f.orig/configure.ac 2014-06-01 19:00:47.000000000 +0200
++++ bdwgc-7.2f/configure.ac 2014-12-23 14:13:11.585716713 +0100
+@@ -365,6 +365,12 @@
+ AC_MSG_RESULT($ac_cv_fno_strict_aliasing)
+ fi
+
++# Check for getcontext (uClibc can be configured without it, for example)
++AC_CHECK_FUNCS([getcontext])
++AS_IF([test "$ac_cv_func_getcontext" = "no"],
++ [CFLAGS="$CFLAGS -DNO_GETCONTEXT"
++ CPPFLAGS="$CPPFLAGS -DNO_GETCONTEXT"])
++
+ case "$host" in
+ # While IRIX 6 has libdl for the O32 and N32 ABIs, it's missing for N64
+ # and unnecessary everywhere.
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch
new file mode 100644
index 000000000..4a1849665
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch
@@ -0,0 +1,27 @@
+Add missing header to avoid:
+
+| 1472659610.016355: ../git/pthread_stop_world.c: In function 'GC_brief_async_signal_safe_sleep':
+| 1472659610.0540252: ../git/pthread_stop_world.c:397:22: error: storage size of 'tv' isn't known
+| 1472659610.0540252: struct timeval tv;
+| 1472659610.0540252: ^~
+| 1472659610.054099: ../git/pthread_stop_world.c:397:22: warning: unused variable 'tv' [-Wunused-variable]
+| 1472659610.054099: struct timeval tv;
+| 1472659610.054099: ^~
+| 1472659610.054099: Makefile:1530: recipe for target 'pthread_stop_world.lo' failed
+
+in musl builds.
+
+Upstream-Status: Pending
+
+Index: git/pthread_stop_world.c
+===================================================================
+--- git.orig/pthread_stop_world.c
++++ git/pthread_stop_world.c
+@@ -45,6 +45,7 @@
+ #include <semaphore.h>
+ #include <errno.h>
+ #include <unistd.h>
++#include <sys/time.h>
+ #include "atomic_ops.h"
+
+ /* It's safe to call original pthread_sigmask() here. */
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb
new file mode 100644
index 000000000..dcb68f028
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "A garbage collector for C and C++"
+
+DESCRIPTION = "The Boehm-Demers-Weiser conservative garbage collector can be\
+ used as a garbage collecting replacement for C malloc or C++ new. It allows\
+ you to allocate memory basically as you normally would, without explicitly\
+ deallocating memory that is no longer useful. The collector automatically\
+ recycles memory when it determines that it can no longer be otherwise\
+ accessed.\
+ The collector is also used by a number of programming language\
+ implementations that either use C as intermediate code, want to facilitate\
+ easier interoperation with C libraries, or just prefer the simple collector\
+ interface.\
+ Alternatively, the garbage collector may be used as a leak detector for C\
+ or C++ programs, though that is not its primary goal.\
+ Empirically, this collector works with most unmodified C programs, simply\
+ by replacing malloc with GC_malloc calls, replacing realloc with GC_realloc\
+ calls, and removing free calls."
+
+HOMEPAGE = "http://www.hboehm.info/gc/"
+SECTION = "devel"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.QUICK;md5=4f81f24ec69726c312487c2ac740e9e3"
+
+SRCREV = "8ac1d84a40eb7a431fec1b8097e3f24b48fb23fa"
+SRC_URI = "git://github.com/ivmai/bdwgc.git \
+ file://0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch \
+ file://musl_header_fix.patch \
+ "
+
+FILES_${PN}-doc = "${datadir}"
+
+S = "${WORKDIR}/git"
+
+ARM_INSTRUCTION_SET = "arm"
+
+inherit autotools pkgconfig
+
+# by default use external libatomic-ops
+PACKAGECONFIG ??= "libatomic-ops"
+PACKAGECONFIG[libatomic-ops] = "--with-libatomic-ops=yes,--with-libatomic-ops=no,libatomic-ops"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame/pessimizing-move.patch b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame/pessimizing-move.patch
new file mode 100644
index 000000000..aa5a56ab8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame/pessimizing-move.patch
@@ -0,0 +1,27 @@
+let compiler decide on copy elision
+Fixes compiler errors with clang
+| ../../frame-2.5.0/src/x11/device_x11.cpp:126:13: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
+| std::move(UniqueUFAxis(static_cast<oif::frame::UFAxis*>(axis)));
+| ^
+| ../../frame-2.5.0/src/x11/device_x11.cpp:126:13: note: remove std::move call here
+| std::move(UniqueUFAxis(static_cast<oif::frame::UFAxis*>(axis)));
+| ^~~~~~~~~~ ~
+| 1 error generated.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: frame-2.5.0/src/x11/device_x11.cpp
+===================================================================
+--- frame-2.5.0.orig/src/x11/device_x11.cpp
++++ frame-2.5.0/src/x11/device_x11.cpp
+@@ -122,8 +122,7 @@ UFDeviceX11::UFDeviceX11(Display* displa
+ UFAxis_* axis = new UFAxis(type, valuator_info->min, valuator_info->max,
+ valuator_info->resolution);
+
+- axes_[type] =
+- std::move(UniqueUFAxis(static_cast<oif::frame::UFAxis*>(axis)));
++ axes_[type] = UniqueUFAxis(static_cast<oif::frame::UFAxis*>(axis));
+
+ axis_map_[valuator_info->number] = type;
+
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb
new file mode 100644
index 000000000..da1a2a36f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Frame handles simultaneous touches"
+
+HOMEPAGE = "https://launchpad.net/frame"
+
+LICENSE = "GPLv3 & LGPLv3"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ file://COPYING.GPL3;md5=d32239bcb673463ab874e80d47fae504 \
+"
+
+inherit autotools pkgconfig
+
+SRC_URI = "https://launchpad.net/${BPN}/trunk/v${PV}/+download/${BPN}-${PV}.tar.gz \
+ file://pessimizing-move.patch"
+SRC_URI[md5sum] = "02baa941091c5d198cd1623b3ad36e68"
+SRC_URI[sha256sum] = "cfb9ab52cdccd926f1822a457264d0014c7eb9f4600a72626063dd073b26256f"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = "--enable-x11, --disable-x11, libxi xext virtual/xserver"
+
+PACKAGE_BEFORE_PN += "${PN}-test"
+FILES_${PN}-test = "${bindir}/frame-test*"
+
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/0001-libgeis-Compare-the-first-character-of-string-to-nul.patch b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/0001-libgeis-Compare-the-first-character-of-string-to-nul.patch
new file mode 100644
index 000000000..3b3acab24
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/0001-libgeis-Compare-the-first-character-of-string-to-nul.patch
@@ -0,0 +1,43 @@
+From 1e48821ba109b00e9c2931f12aa206c4ef54fd71 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 24 Apr 2017 12:34:55 -0700
+Subject: [PATCH] libgeis: Compare the first character of string to null
+
+gcc7 wants to be specific when it comes to comparing characters
+and strings
+
+fixes
+
+| ../../../../../../../workspace/sources/geis/libgeis/geis_v1.c: In function '_v1_subscribe_device':
+| ../../../../../../../workspace/sources/geis/libgeis/geis_v1.c:613:20: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libgeis/geis_v1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libgeis/geis_v1.c b/libgeis/geis_v1.c
+index 67045ee..07c0851 100644
+--- a/libgeis/geis_v1.c
++++ b/libgeis/geis_v1.c
+@@ -610,7 +610,7 @@ _v1_subscribe_device(GeisInstance instance,
+ const char **gesture_list)
+ {
+ GeisStatus result = GEIS_UNKNOWN_ERROR;
+- if (gesture_list == GEIS_ALL_GESTURES)
++ if (gesture_list[0][0] == GEIS_ALL_GESTURES)
+ {
+ geis_debug("subscribing device %d for all gestures", device_id);
+ }
+@@ -757,7 +757,7 @@ geis_unsubscribe(GeisInstance instance,
+ GeisGestureType *gesture_list)
+ {
+ GeisStatus status = GEIS_STATUS_NOT_SUPPORTED;
+- if (gesture_list == GEIS_ALL_GESTURES)
++ if (gesture_list[0] == GEIS_ALL_GESTURES)
+ {
+ status = geis_subscription_deactivate(instance->subscription);
+ }
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/fix-indentation-for-gcc6.patch b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/fix-indentation-for-gcc6.patch
new file mode 100644
index 000000000..389e1b3fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis/fix-indentation-for-gcc6.patch
@@ -0,0 +1,14 @@
+--- geis-2.2.17/libgeis/geis_subscription.c.orig 2016-06-17 12:04:21.062938443 -0400
++++ geis-2.2.17/libgeis/geis_subscription.c 2016-06-17 12:05:02.934939172 -0400
+@@ -237,9 +237,10 @@
+ GeisSize i;
+ for (i = 0; i < bag->sub_store_size; ++i)
+ {
+- if (bag->sub_store[i])
++ if (bag->sub_store[i]) {
+ _subscription_unref(bag->sub_store[i]);
+ bag->sub_store[i] = NULL;
++ }
+ }
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb
new file mode 100644
index 000000000..30d41a16e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb
@@ -0,0 +1,55 @@
+SUMMARY = "An implementation of the GEIS interface"
+DESCRIPTION = "An implementation of the GEIS (Gesture Engine Interface and Support) \
+interface\
+GEIS is a library for applications and toolkit programmers which \
+provides a consistent platform independent interface for any \
+system-wide input gesture recognition mechanism."
+
+HOMEPAGE = "https://launchpad.net/geis"
+
+LICENSE = "GPLv3 & LGPLv3"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6 \
+ file://COPYING.GPL;md5=f27defe1e96c2e1ecd4e0c9be8967949 \
+"
+
+inherit autotools pkgconfig python3native lib_package distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+DEPENDS += "grail dbus-glib python3 virtual/libx11 libxext libxi libxcb dbus frame"
+
+SRC_URI = "https://launchpad.net/${BPN}/trunk/${PV}/+download/${BPN}-${PV}.tar.xz \
+ file://fix-indentation-for-gcc6.patch \
+ file://0001-libgeis-Compare-the-first-character-of-string-to-nul.patch \
+ "
+SRC_URI[md5sum] = "2ff9d76a3ea5794516bb02c9d1924faf"
+SRC_URI[sha256sum] = "8a60f5683852094038904e690d23cc5a90a980fc52da67f0f28890baa25c70eb"
+
+EXTRA_OECONF = "--disable-integration-tests"
+
+FILES_${PN}-bin = "${bindir}"
+RDEPENDS_${PN}-bin = " \
+ python3-compression \
+ python3-core \
+ python3-crypt \
+ python3-ctypes \
+ python3-fcntl \
+ python3-misc \
+ python3-pickle \
+ python3-shell \
+ python3-stringold \
+ python3-threading \
+"
+
+FILES_${PN} += " \
+ ${datadir}/geisview \
+ ${libdir}/${PYTHON_DIR}/site-packages/geis* \
+ ${libdir}/${PYTHON_DIR}/site-packages/_*.so \
+"
+
+FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug"
+
+FILES_${PN}-dev += "${libdir}/${PYTHON_DIR}/site-packages/_*.la"
+
+FILES_${PN}-staticdev += "${libdir}/${PYTHON_DIR}/site-packages/_*.a"
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb
new file mode 100644
index 000000000..22fd0f48e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Gesture Recognition And Instantiation Library"
+
+HOMEPAGE = "https://launchpad.net/grail"
+
+LICENSE = "GPLv3 & LGPLv3"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+ file://COPYING.GPL3;md5=d32239bcb673463ab874e80d47fae504 \
+"
+
+inherit autotools pkgconfig
+
+DEPENDS = "frame"
+CXXFLAGS_append_toolchain-clang = " -Wno-pessimizing-move"
+SRC_URI = "https://launchpad.net/${BPN}/trunk/${PV}/+download/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "0df1b3ec6167920f310e2effe6e2ad44"
+SRC_URI[sha256sum] = "5eed1f650f042481daa3a2de5e7d43261fe343b2a1b1e240f3b7fc26572c9df3"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = "--with-x11, --without-x11, libxi"
+
+PACKAGE_BEFORE_PN += "${PN}-test"
+FILES_${PN}-test = "${bindir}/grail-test*"
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-support/ccid/ccid/no-dep-on-libfl.patch b/meta-openembedded/meta-oe/recipes-support/ccid/ccid/no-dep-on-libfl.patch
new file mode 100644
index 000000000..477cc31ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ccid/ccid/no-dep-on-libfl.patch
@@ -0,0 +1,18 @@
+No need to link with libfl.
+
+Upstream-Status: Pending
+Signed-off-by: Jacob Kroon <jacob.kroon@mikrodidakt.se>
+
+Index: ccid-1.4.8/src/Makefile.am
+===================================================================
+--- ccid-1.4.8.orig/src/Makefile.am
++++ ccid-1.4.8/src/Makefile.am
+@@ -53,7 +53,7 @@ PROVIDED_BY_PCSC = debug.c
+ endif
+
+ libccid_la_SOURCES = $(COMMON) $(USB) $(TOKEN_PARSER) $(PROVIDED_BY_PCSC) $(T1)
+-libccid_la_LIBADD = $(LEXLIB) $(LIBUSB_LIBS) $(PTHREAD_LIBS)
++libccid_la_LIBADD = $(LIBUSB_LIBS) $(PTHREAD_LIBS)
+ libccid_la_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) $(PTHREAD_CFLAGS) \
+ $(SYMBOL_VISIBILITY) -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE
+ libccid_la_LDFLAGS = -avoid-version
diff --git a/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.4.24.bb b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.4.24.bb
new file mode 100644
index 000000000..31145d0ef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.4.24.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Generic USB CCID smart card reader driver"
+HOMEPAGE = "http://pcsclite.alioth.debian.org/ccid.html"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+DEPENDS = "virtual/libusb0 pcsc-lite"
+RDEPENDS_${PN} = "pcsc-lite"
+
+SRC_URI = "https://alioth.debian.org/frs/download.php/file/4171/ccid-${PV}.tar.bz2 \
+ file://no-dep-on-libfl.patch \
+"
+
+SRC_URI[md5sum] = "915a03cda85b60fefbe3654cbdc68ca9"
+SRC_URI[sha256sum] = "62cb73c6c009c9799c526f05a05e25f00f0ad86d50f82a714dedcfbf4a7e4176"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/pcsc/"
+FILES_${PN}-dbg += "${libdir}/pcsc/drivers/*/*/*/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_1.14.bb b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_1.14.bb
new file mode 100644
index 000000000..29917c8a1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_1.14.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems."
+AUTHOR = "Sameer Agarwal and Keir Mierle and Others"
+HOMEPAGE = "http://ceres-solver.org/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=35e00f0c4c96a0820a03e0b31e6416be"
+
+SRC_URI = "git://github.com/ceres-solver/ceres-solver.git"
+SRCREV = "facb199f3eda902360f9e1d5271372b7e54febe1"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "libeigen glog"
+
+inherit cmake
+
+# Only a static library and headers are created
+ALLOW_EMPTY_${PN} = "1"
+
+FILES_${PN}-dev += "${libdir}/cmake/*"
diff --git a/meta-openembedded/meta-oe/recipes-support/ckermit/ckermit_302.bb b/meta-openembedded/meta-oe/recipes-support/ckermit/ckermit_302.bb
new file mode 100644
index 000000000..61c08ee27
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ckermit/ckermit_302.bb
@@ -0,0 +1,61 @@
+DESCRIPTION = "C-Kermit is a combined serial and network communication \
+software package offering a consistent, medium-independent, \
+cross-platform approach to connection establishment, terminal \
+sessions, file transfer, character-set translation, and automation \
+of communication tasks."
+HOMEPAGE = "www.kermitproject.org/ck90.html"
+SECTION = "console/network"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.TXT;md5=932ca542d6c6cb8a59a0bcd76ab67cc3"
+
+SRC_URI = "http://www.kermitproject.org/ftp/kermit/archives/cku${PV}.tar.gz;subdir=${BPN}-${PV}"
+SRC_URI[md5sum] = "eac4dbf18b45775e4cdee5a7c74762b0"
+SRC_URI[sha256sum] = "0d5f2cd12bdab9401b4c836854ebbf241675051875557783c332a6a40dac0711"
+
+
+export CC2 = "${CC}"
+export BINDIR = "${bindir}"
+export MANDIR = "${mandir}/man1"
+export INFODIR = "${infodir}"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+# Additional flags. For uclibc we add -DNOARROWKEYS which stops ckermit
+# trying to look inside the stdio headers.
+CKERMIT_ADDITIONAL = ""
+CKERMIT_ADDITIONAL_libc-uclibc = "-DNOARROWKEYS"
+CKERMIT_ADDITIONAL_libc-musl = "-DNOARROWKEYS"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_compile () {
+ # The original makefile doesn't differentiate between CC and CC_FOR_BUILD,
+ # so we build wart manually. Note that you need a ckwart.o with the proper
+ # timestamp to make this hack work:
+ ${BUILD_CC} -c ckwart.c
+ ${BUILD_CC} -o wart ckwart.o
+ ./wart ckcpro.w ckcpro.c
+
+ # read ${S}/ckccfg.txt to understand this :-)
+ oe_runmake wermit CFLAGS="${CFLAGS} -DLINUX -DCK_POSIX_SIG \
+ -DNOTCPOPTS -DLINUXFSSTND -DNOCOTFMC -DPOSIX -DUSE_STRERROR \
+ -DNOSYSLOG -DHAVE_PTMX -DNO_DNS_SRV -DNOGFTIMER \
+ -DNOB_50 -DNOB_75 -DNOB_134 -DNOB_150 -DNOB_200 \
+ -DNOB_1800 -DNOB_3600 -DNOB_7200 -DNOB_76K -DNOB_230K \
+ -DNOB_460K -DNOB_921K \
+ -DNOCSETS -DNONET -DNOUNICODE -DNOHELP -DNODEBUG \
+ -DNOFRILLS -DNOFTP -DNODIAL -DNOPUSH -DNOIKSD -DNOHTTP -DNOFLOAT \
+ -DNOSERVER -DNOSEXP -DNORLOGIN -DNOOLDMODEMS -DNOSSH -DNOLISTEN \
+ -DNORESEND -DNOAUTODL -DNOSTREAMING -DNOHINTS -DNOCKXYZ -DNOLEARN \
+ -DNOMKDIR -DNOPERMS -DNOCKTIMERS -DNOCKREGEX -DNOREALPATH \
+ -DCK_SMALL -DNOLOGDIAL -DNORENAME -DNOWHATAMI \
+ ${CKERMIT_ADDITIONAL}"
+}
+
+do_install () {
+ install -d ${D}${BINDIR} ${D}${MANDIR} ${D}${INFODIR}
+ oe_runmake 'DESTDIR=${D}' install
+ # Fix up dangling symlink
+ rm ${D}${BINDIR}/kermit-sshsub
+ (cd ${D}${BINDIR} && ln -s ${BINDIR}/kermit kermit-sshusb)
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest-2.10.2/fix-cmake-install.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest-2.10.2/fix-cmake-install.patch
new file mode 100644
index 000000000..0feafef5b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest-2.10.2/fix-cmake-install.patch
@@ -0,0 +1,17 @@
+Description: install cmake files into /usr/lib/cmake/cpprestsdk
+Author: Gianfranco Costamagna <locutusofborg@debian.org>
+Upstream-Status: https://github.com/Microsoft/cpprestsdk/pull/737
+Forwarded: https://github.com/Microsoft/cpprestsdk/pull/737
+Last-Update: 2018-04-19
+
+--- cpprest-2.10.2.orig/CMakeLists.txt
++++ cpprest-2.10.2/CMakeLists.txt
+@@ -18,7 +18,7 @@ enable_testing()
+ set(WERROR ON CACHE BOOL "Treat Warnings as Errors.")
+ set(CPPREST_EXCLUDE_WEBSOCKETS OFF CACHE BOOL "Exclude websockets functionality.")
+ set(CPPREST_EXCLUDE_COMPRESSION OFF CACHE BOOL "Exclude compression functionality.")
+-set(CPPREST_EXPORT_DIR lib/cpprestsdk CACHE STRING "Directory to install CMake config files.")
++set(CPPREST_EXPORT_DIR lib/cmake/cpprestsdk CACHE STRING "Directory to install CMake config files.")
+ set(CPPREST_INSTALL_HEADERS ON CACHE BOOL "Install header files.")
+ set(CPPREST_INSTALL ON CACHE BOOL "Add install commands.")
+
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.2.bb b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.2.bb
new file mode 100644
index 000000000..2ba6fc66c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design."
+SECTION = "libs/network"
+HOMEPAGE = "https://github.com/Microsoft/cpprestsdk/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${S}/../license.txt;md5=a2e15b954769218ff912468eecd6a02f"
+DEPENDS = "openssl websocketpp zlib boost"
+
+SRC_URI = "git://github.com/Microsoft/cpprestsdk.git;protocol=https;branch=master"
+
+SRC_URI += "file://fix-cmake-install.patch"
+
+# tag 2.10.2
+SRCREV= "fea848e2a77563cf2a6f28f8eab396fd6e787fbf"
+
+S = "${WORKDIR}/git/Release"
+
+inherit cmake
diff --git a/meta-openembedded/meta-oe/recipes-support/ctapi-common/ctapi-common_1.1-14.bb b/meta-openembedded/meta-oe/recipes-support/ctapi-common/ctapi-common_1.1-14.bb
new file mode 100644
index 000000000..3a049e76d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ctapi-common/ctapi-common_1.1-14.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Common files and packaging infrastructure for CT-API modules"
+HOMEPAGE = "http://fedoraproject.org/"
+SECTION = "System Environment/Libraries"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://../ctapi-common.LICENSE;md5=8744cd52545ecb45befebd0da6f70f0a"
+
+SRC_URI = "http://ftp.riken.jp/Linux/fedora/releases/23/Everything/source/SRPMS/c/${BPN}-${PV}.fc23.src.rpm;extract=ctapi-common.LICENSE \
+ http://ftp.riken.jp/Linux/fedora/releases/23/Everything/source/SRPMS/c/${BPN}-${PV}.fc23.src.rpm;extract=ctapi-common.README"
+SRC_URI[md5sum] = "5b7259ef1c8cd9ae801fca7a5cb548c1"
+SRC_URI[sha256sum] = "87a74eb0a66055c34ba2c5c919e74f3211c5950ae1c2cbab967fdf4137f5de91"
+
+do_compile() {
+ install -pm 644 ${WORKDIR}/ctapi-common.LICENSE LICENSE
+ install -pm 644 ${WORKDIR}/ctapi-common.README README
+ echo ${libdir}/ctapi > ctapi.conf
+}
+
+do_install() {
+ install -Dpm 644 ctapi.conf ${D}${sysconfdir}/ld.so.conf.d/ctapi-${TARGET_ARCH}.conf
+ install -dm 755 ${D}${libdir}/ctapi
+}
+
+FILES_${PN} += "${libdir}/ctapi"
diff --git a/meta-openembedded/meta-oe/recipes-support/daemonize/daemonize_git.bb b/meta-openembedded/meta-oe/recipes-support/daemonize/daemonize_git.bb
new file mode 100644
index 000000000..4790883a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemonize/daemonize_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A tool to run a command as a daemon"
+HOMEPAGE = "http://software.clapper.org/daemonize/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=3cf9084faa88bc8554a9139d8d7dd35f"
+PV = "1.7.7+git${SRCPV}"
+
+inherit autotools
+
+SRCREV = "6b10308b13c13e7b911e75e27bf7e65c30d58799"
+SRC_URI = "git://github.com/bmc/daemonize.git \
+ file://fix-ldflags-for-gnuhash.patch"
+
+S = "${WORKDIR}/git"
+
+EXTRA_AUTORECONF += "--exclude=autoheader"
diff --git a/meta-openembedded/meta-oe/recipes-support/daemonize/files/fix-ldflags-for-gnuhash.patch b/meta-openembedded/meta-oe/recipes-support/daemonize/files/fix-ldflags-for-gnuhash.patch
new file mode 100644
index 000000000..4fa2ee1b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemonize/files/fix-ldflags-for-gnuhash.patch
@@ -0,0 +1,23 @@
+Add the LDFLAGS to the final link to avoid errors with missing GNU_HASH
+
+Upstream-Status: Submitted [https://github.com/bmc/daemonize/pull/22]
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+
+diff --git a/Makefile.in b/Makefile.in
+index 8a4d078..40d3dee 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -24,10 +24,10 @@ LDFLAGS = @LDFLAGS@
+ all: daemonize
+
+ daemonize: daemonize.o getopt.o $(MISSING_OBJECTS)
+- $(CC) $(CFLAGS) -o $@ $^
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+ testdaemon: testdaemon.o
+- $(CC) $(CFLAGS) -o $@ $^
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+ psman: daemonize.ps
+
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-Fix-QA-Issue.patch b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-Fix-QA-Issue.patch
new file mode 100644
index 000000000..30e37cb1d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-Fix-QA-Issue.patch
@@ -0,0 +1,26 @@
+From a86c4209da695909424db0c9108592194a3094b7 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Sat, 6 Aug 2016 00:47:37 +0900
+Subject: [PATCH] daemontools: Fix QA Issue
+
+To fix the QA Issues as following:
+
+ERROR: daemontools-0.76-r0 do_package_qa: QA Issue: No GNU_HASH in the elf binary: '/build-poky/tmp/work/i586-poky-linux/daemontools/0.76-r0/packages-split/daemontools/usr/bin/tai64nlocal'
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ src/conf-ld | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/conf-ld b/src/conf-ld
+index 2a44210..c7e7755 100644
+--- a/src/conf-ld
++++ b/src/conf-ld
+@@ -1,3 +1,3 @@
+-${CC}
++${CC} ${LDFLAGS}
+
+ This will be used to link .o files into an executable.
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch
new file mode 100644
index 000000000..8d9577d5f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch
@@ -0,0 +1,26 @@
+From a43a3327ccd4b06a3bcf0c87d518a97c6b39ac02 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Sat, 6 Aug 2016 02:09:53 +0900
+Subject: [PATCH] daemontools: Fix a warning
+
+To fix the warning as following:
+
+WARNING: daemontools-native-0.76-r0 do_populate_sysroot: File '/build-poky/tmp/sysroots/x86_64-linux/usr/bin/chkshsgr' from daemontools-native was already stripped, this will prevent future debugging!
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ src/conf-ld | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/conf-ld b/src/conf-ld
+index 59a0de7..1d0518a 100644
+--- a/src/conf-ld
++++ b/src/conf-ld
+@@ -1,3 +1,3 @@
+-gcc -s
++gcc
+
+ This will be used to link .o files into an executable.
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-error.h-include-errno.h-instead-of-extern-int.diff b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-error.h-include-errno.h-instead-of-extern-int.diff
new file mode 100644
index 000000000..ce1959782
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-error.h-include-errno.h-instead-of-extern-int.diff
@@ -0,0 +1,25 @@
+From d3e7651e2f2492dd1031d09a99713644b604cab5 Mon Sep 17 00:00:00 2001
+From: Gerrit Pape <pape@smarden.org>
+Date: Wed, 12 Dec 2007 13:44:15 +0000
+Subject: [PATCH] error.h: '#include <errno.h>' instead of 'extern int errno;'
+
+---
+ daemontools-0.76/src/error.h | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git daemontools-0.76.orig/src/error.h daemontools-0.76/src/error.h
+index 086fb55..f7e8273 100644
+--- daemontools-0.76.orig/src/error.h
++++ daemontools-0.76/src/error.h
+@@ -3,7 +3,7 @@
+ #ifndef ERROR_H
+ #define ERROR_H
+
+-extern int errno;
++#include <errno.h>
+
+ extern int error_intr;
+ extern int error_nomem;
+--
+1.5.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff
new file mode 100644
index 000000000..73dce9072
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff
@@ -0,0 +1,47 @@
+From 7ee585cab1d5b68f804a5601a66ae87799c8a7c3 Mon Sep 17 00:00:00 2001
+From: Gerrit Pape <pape@smarden.org>
+Date: Sun, 24 Feb 2008 10:54:26 +0000
+Subject: [PATCH] supervise.c: ./supervise may be a symlink, if it's dangling, create link target
+
+---
+ daemontools-0.76/src/supervise.c | 17 ++++++++++++++++-
+ 1 files changed, 16 insertions(+), 1 deletions(-)
+
+diff --git daemontools-0.76.orig/src/supervise.c daemontools-0.76/src/supervise.c
+index 2482ad2..f43cabf 100644
+--- daemontools-0.76.orig/src/supervise.c
++++ daemontools-0.76/src/supervise.c
+@@ -208,6 +208,8 @@ void doit(void)
+ int main(int argc,char **argv)
+ {
+ struct stat st;
++ int r;
++ char buf[256];
+
+ dir = argv[1];
+ if (!dir || argv[2])
+@@ -232,7 +234,20 @@ int main(int argc,char **argv)
+ if (errno != error_noent)
+ strerr_die4sys(111,FATAL,"unable to stat ",dir,"/down: ");
+
+- mkdir("supervise",0700);
++ if (mkdir("supervise",0700) == -1) {
++ if ((r = readlink("supervise", buf, 256)) != -1) {
++ if (r == 256) {
++ errno = EOVERFLOW;
++ strerr_die1sys(111,"unable to readlink ./supervise: ");
++ }
++ buf[r] = 0;
++ mkdir(buf, 0700);
++ }
++ else {
++ if ((errno != ENOENT) && (errno != EINVAL))
++ strerr_die1sys(111, "unable to readlink ./supervise: ");
++ }
++ }
+ fdlock = open_append("supervise/lock");
+ if ((fdlock == -1) || (lock_exnb(fdlock) == -1))
+ strerr_die4sys(111,FATAL,"unable to acquire ",dir,"/supervise/lock: ");
+--
+1.5.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch
new file mode 100644
index 000000000..f164c2d10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch
@@ -0,0 +1,45 @@
+make sure it can be compiled for cross target
+
+1. never try to compile target binary by native gcc
+2. target's chkshsgr doesn't work on native.
+3. it's wrong to do target tests on native.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+diff -Nurp daemontools-0.76.orig/src/conf-cc daemontools-0.76/src/conf-cc
+--- daemontools-0.76.orig/src/conf-cc 2001-07-13 00:49:49.000000000 +0800
++++ daemontools-0.76/src/conf-cc 2014-11-26 09:34:38.828812162 +0800
+@@ -1,3 +1,3 @@
+-gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings
++${CC} -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings
+
+ This will be used to compile .c files.
+diff -Nurp daemontools-0.76.orig/src/conf-ld daemontools-0.76/src/conf-ld
+--- daemontools-0.76.orig/src/conf-ld 2001-07-13 00:49:49.000000000 +0800
++++ daemontools-0.76/src/conf-ld 2014-11-26 09:34:49.880811730 +0800
+@@ -1,3 +1,3 @@
+-gcc -s
++${CC}
+
+ This will be used to link .o files into an executable.
+diff -Nurp daemontools-0.76.orig/src/Makefile daemontools-0.76/src/Makefile
+--- daemontools-0.76.orig/src/Makefile 2001-07-13 00:49:49.000000000 +0800
++++ daemontools-0.76/src/Makefile 2014-11-26 09:38:47.120802459 +0800
+@@ -165,7 +165,7 @@ hassgprm.h: choose compile hassgprm.h1 h
+
+ hasshsgr.h: chkshsgr choose compile hasshsgr.h1 hasshsgr.h2 load \
+ tryshsgr.c warn-shsgr
+- ./chkshsgr || ( cat warn-shsgr; exit 1 )
++ chkshsgr || ( cat warn-shsgr; exit 1 )
+ ./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h
+
+ haswaitp.h: choose compile haswaitp.h1 haswaitp.h2 load trywaitp.c
+@@ -265,7 +265,7 @@ readproctitle.o: compile error.h readpro
+ rts: envdir envuidgid fghack matchtest multilog pgrphack \
+ readproctitle rts.tests setlock setuidgid softlimit supervise svc \
+ svok svscan svscanboot svstat tai64n tai64nlocal
+- env - /bin/sh rts.tests 2>&1 | cat -v > rts
++ echo "Warning: We can not run test on cross target."
+
+ scan_ulong.o: compile scan.h scan_ulong.c
+ ./compile scan_ulong.c
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb
new file mode 100644
index 000000000..84e9bca0e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb
@@ -0,0 +1,51 @@
+SUMMARY = "DJB daemontools"
+HOMEPAGE = "http://cr.yp.to/daemontools.html"
+DESCRIPTION = "supervise monitors a service. It starts the service and restarts the \
+service if it dies. The companion svc program stops, pauses, or restarts \
+the service on sysadmin request. The svstat program prints a one-line \
+status report. \
+multilog saves error messages to one or more logs. It optionally timestamps \
+each line and, for each log, includes or excludes lines matching specified \
+patterns. It automatically rotates logs to limit the amount of disk space \
+used. If the disk fills up, it pauses and tries again, without losing any \
+data."
+
+SECTION = "System/Servers"
+
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/PD;md5=b3597d12946881e13cb3b548d1173851"
+LICENSE = "PD"
+
+SRC_URI = "http://cr.yp.to/daemontools/${BPN}-${PV}.tar.gz \
+ file://0001-error.h-include-errno.h-instead-of-extern-int.diff \
+ file://0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff "
+
+SRC_URI_append_class-target = "file://cross-compile.patch \
+ file://0001-daemontools-Fix-QA-Issue.patch "
+
+SRC_URI_append_class-native = "file://0001-daemontools-native-Fix-a-warning.patch "
+
+SRC_URI[md5sum] = "1871af2453d6e464034968a0fbcb2bfc"
+SRC_URI[sha256sum] = "a55535012b2be7a52dcd9eccabb9a198b13be50d0384143bd3b32b8710df4c1f"
+
+S = "${WORKDIR}/admin/${BPN}-${PV}"
+
+DEPENDS += "daemontools-native"
+DEPENDS_class-native = ""
+
+do_compile() {
+ ./package/compile
+}
+
+do_install() {
+ install -d ${D}/${bindir}
+}
+
+do_install_append_class-native() {
+ install -m 755 ${S}/compile/chkshsgr ${D}/${bindir}
+}
+
+do_install_append_class-target() {
+ install -m755 ${S}/command/* ${D}/${bindir}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb b/meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb
new file mode 100644
index 000000000..13f20eb94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb
@@ -0,0 +1,54 @@
+SUMMARY = "Miscellaneous utilities specific to Debian"
+SUMMARY_${PN}-cron = "Cron scripts to control automatic debsum checking"
+DESCRIPTION = "A tool for verification of installed package files against \
+MD5 checksums debsums can verify the integrity of installed package files \
+against MD5 checksums installed by the package, or generated from a .deb \
+archive."
+DESCRIPTION_${PN}-cron = "Cron scripts to control automatic system integrity \
+checking via debsums."
+SECTION = "base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=770d751553e6559e9eaefd2e11ccf7e9"
+
+SRC_URI = "http://snapshot.debian.org/archive/debian/20170530T212108Z/pool/main/d/debsums/debsums_2.2.2.tar.xz"
+SRC_URI[md5sum] = "82b0710855a7e5212d4358163a269e79"
+SRC_URI[sha256sum] = "aa61896f93a6bbfe0161c21dcd67529ae8e1ec8c3ccf244523c52c4ad8253d97"
+
+# the package is taken from snapshots.debian.org; that source is static and goes stale
+# so we check the latest upstream from a directory that does get updated
+UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/"
+
+inherit perlnative gettext
+
+do_install() {
+ install -d ${D}/${sysconfdir}/cron.daily ${D}/${sysconfdir}/cron.weekly
+ install -d ${D}/${sysconfdir}/cron.monthly ${D}${sbindir} ${D}${bindir}
+ install -d ${D}${mandir}/man1 ${D}${mandir}/man8
+ install -m 0755 debsums ${D}${bindir}/
+ install -m 0755 rdebsums ${D}${bindir}/
+ install -m 0755 debsums_init ${D}${sbindir}
+ install -m 0644 man/debsums.1 ${D}${mandir}/man1/
+ install -m 0644 man/rdebsums.1 ${D}${mandir}/man1/
+ install -m 0644 man/debsums_init.8 ${D}${mandir}/man8/
+ install -m 0644 debian/cron.daily \
+ ${D}/${sysconfdir}/cron.daily/debsums
+ install -m 0644 debian/cron.weekly \
+ ${D}/${sysconfdir}/cron.weekly/debsums
+ install -m 0644 debian/cron.monthly \
+ ${D}/${sysconfdir}/cron.monthly/debsums
+ # Must exist, defaults to empty.
+ touch ${D}/${sysconfdir}/debsums-ignore
+}
+
+PACKAGES =+ "${PN}-cron"
+
+RDEPENDS_${PN} = "dpkg dpkg-perl libfile-fnmatch-perl perl \
+ perl-module-constant perl-module-digest-md5 \
+ perl-module-errno perl-module-fcntl \
+ perl-module-file-basename perl-module-file-copy \
+ perl-module-file-find perl-module-file-glob \
+ perl-module-file-path perl-module-file-spec \
+ perl-module-file-temp perl-module-getopt-long \
+ perl-module-posix"
+
+FILES_${PN}-cron = "${sysconfdir}/cron.*"
diff --git a/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2.bb b/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2.bb
new file mode 100644
index 000000000..c86eb2e4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Simple program to read/write from/to any location in memory"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://devmem2.c;endline=38;md5=a9eb9f3890384519f435aedf986297cf"
+PR = "r7"
+
+SRC_URI = "http://www.free-electrons.com/pub/mirror/devmem2.c;downloadfilename=devmem2-new.c \
+ file://devmem2-fixups-2.patch;apply=yes;striplevel=0"
+S = "${WORKDIR}"
+
+CFLAGS += "-DFORCE_STRICT_ALIGNMENT"
+
+python do_unpack_append() {
+ os.rename("devmem2-new.c", "devmem2.c")
+}
+
+do_compile() {
+ ${CC} -o devmem2 devmem2.c ${CFLAGS} ${LDFLAGS}
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install devmem2 ${D}${bindir}
+}
+
+SRC_URI[md5sum] = "e23f236e94be4c429aa1ceac0f01544b"
+SRC_URI[sha256sum] = "3b15515693bae1ebd14d914e46d388edfec2175829ea1576a7a0c8606ebbe639"
diff --git a/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch b/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch
new file mode 100644
index 000000000..4517797fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch
@@ -0,0 +1,91 @@
+--- devmem2.c 2004-08-05 01:55:25.000000000 +0200
++++ devmem2_modif.c 2011-01-13 15:48:37.798799784 +0100
+@@ -45,12 +45,16 @@
+ #define MAP_SIZE 4096UL
+ #define MAP_MASK (MAP_SIZE - 1)
+
++static inline void *fixup_addr(void *addr, size_t size);
++
+ int main(int argc, char **argv) {
+ int fd;
+ void *map_base, *virt_addr;
+- unsigned long read_result, writeval;
++ unsigned long read_result, write_val;
+ off_t target;
+ int access_type = 'w';
++ char fmt_str[128];
++ size_t data_size;
+
+ if(argc < 2) {
+ fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n"
+@@ -79,38 +83,51 @@
+ virt_addr = map_base + (target & MAP_MASK);
+ switch(access_type) {
+ case 'b':
++ data_size = sizeof(unsigned char);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned char *) virt_addr);
+ break;
+ case 'h':
++ data_size = sizeof(unsigned short);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned short *) virt_addr);
+ break;
+ case 'w':
++ data_size = sizeof(unsigned long);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned long *) virt_addr);
+ break;
+ default:
+ fprintf(stderr, "Illegal data type '%c'.\n", access_type);
+ exit(2);
+ }
+- printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result);
++ sprintf(fmt_str, "Read at address 0x%%08lX (%%p): 0x%%0%dlX\n", 2*data_size);
++ printf(fmt_str, (unsigned long)target, virt_addr, read_result);
+ fflush(stdout);
+
+ if(argc > 3) {
+- writeval = strtoul(argv[3], 0, 0);
++ write_val = strtoul(argv[3], 0, 0);
+ switch(access_type) {
+ case 'b':
+- *((unsigned char *) virt_addr) = writeval;
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned char));
++ *((unsigned char *) virt_addr) = write_val;
+ read_result = *((unsigned char *) virt_addr);
+ break;
+ case 'h':
+- *((unsigned short *) virt_addr) = writeval;
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned short));
++ *((unsigned short *) virt_addr) = write_val;
+ read_result = *((unsigned short *) virt_addr);
+ break;
+ case 'w':
+- *((unsigned long *) virt_addr) = writeval;
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned long));
++ *((unsigned long *) virt_addr) = write_val;
+ read_result = *((unsigned long *) virt_addr);
+ break;
+ }
+- printf("Written 0x%X; readback 0x%X\n", writeval, read_result);
++ sprintf(fmt_str, "Write at address 0x%%08lX (%%p): 0x%%0%dlX, "
++ "readback 0x%%0%dlX\n", 2*data_size, 2*data_size);
++ printf(fmt_str, (unsigned long)target, virt_addr,
++ write_val, read_result);
+ fflush(stdout);
+ }
+
+@@ -119,3 +136,12 @@
+ return 0;
+ }
+
++static inline void *fixup_addr(void *addr, size_t size)
++{
++#ifdef FORCE_STRICT_ALIGNMENT
++ unsigned long aligned_addr = (unsigned long)addr;
++ aligned_addr &= ~(size - 1);
++ addr = (void *)aligned_addr;
++#endif
++ return addr;
++}
diff --git a/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util-native_0.9.bb b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util-native_0.9.bb
new file mode 100644
index 000000000..aeca23bf2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util-native_0.9.bb
@@ -0,0 +1,15 @@
+require dfu-util_${PV}.bb
+
+inherit native deploy
+
+DEPENDS = "libusb1-native"
+
+SRC_URI += "file://0001-Revert-Makefile.am-Drop-static-dfu-util.patch"
+
+do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_TOOLS}"
+do_deploy() {
+ install -m 0755 src/dfu-util_static ${DEPLOYDIR}/dfu-util-${PV}
+ rm -f ${DEPLOYDIR}/dfu-util
+ ln -sf ./dfu-util-${PV} ${DEPLOYDIR}/dfu-util
+}
+addtask deploy before do_package after do_install
diff --git a/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util/0001-Revert-Makefile.am-Drop-static-dfu-util.patch b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util/0001-Revert-Makefile.am-Drop-static-dfu-util.patch
new file mode 100644
index 000000000..1c6ad0807
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util/0001-Revert-Makefile.am-Drop-static-dfu-util.patch
@@ -0,0 +1,68 @@
+From c2aab3b9ae1febcb6b4c6561a59df1930a57b394 Mon Sep 17 00:00:00 2001
+From: Martin JaMa Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 11 Aug 2011 11:19:52 +0200
+Subject: [PATCH] Revert "Makefile.am: Drop static dfu-util"
+
+This reverts commit fe0426ddc04f503d148c5e5f931f16b8f674f071.
+
+Signed-off-by: Martin JaMa Jansa <Martin.Jansa@gmail.com>
+---
+ configure.ac | 2 +-
+ src/Makefile.am | 22 +++++++++++++++++++++-
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index f5a43b8..6a3757e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -21,7 +21,7 @@ AS_IF([test x$native_libusb = xno], [
+ AC_MSG_ERROR([*** Required libusb-1.0 >= 1.0.0 not installed ***]))
+ ])
+
+-LIBS="$LIBS $USB_LIBS"
++LIBS="$LIBS $USB_LIBS -lpthread"
+ CFLAGS="$CFLAGS $USB_CFLAGS"
+
+ # Checks for header files.
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 70179c4..e8736ee 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,6 +1,6 @@
+ AM_CFLAGS = -Wall -Wextra
+
+-bin_PROGRAMS = dfu-util dfu-suffix dfu-prefix
++bin_PROGRAMS = dfu-util dfu-util_static dfu-suffix dfu-prefix
+ dfu_util_SOURCES = main.c \
+ portable.h \
+ dfu_load.c \
+@@ -19,6 +19,26 @@ dfu_util_SOURCES = main.c \
+ quirks.c \
+ quirks.h
+
++dfu_util_static_SOURCES = main.c \
++ portable.h \
++ dfu_load.c \
++ dfu_load.h \
++ dfu_util.c \
++ dfu_util.h \
++ dfuse.c \
++ dfuse.h \
++ dfuse_mem.c \
++ dfuse_mem.h \
++ dfu.c \
++ dfu.h \
++ usb_dfu.h \
++ dfu_file.c \
++ dfu_file.h \
++ quirks.c \
++ quirks.h
++
++dfu_util_static_LDFLAGS = -static
++
+ dfu_suffix_SOURCES = suffix.c \
+ dfu_file.h \
+ dfu_file.c
+--
+2.7.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util_0.9.bb b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util_0.9.bb
new file mode 100644
index 000000000..76e1552c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/dfu-util/dfu-util_0.9.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "USB Device Firmware Upgrade utility"
+HOMEPAGE = "http://dfu-util.sourceforge.net"
+SECTION = "devel"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://dfu-util.gnumonks.org/releases/${BP}.tar.gz"
+
+inherit autotools pkgconfig
+
+DEPENDS = "libusb1"
+
+SRC_URI[md5sum] = "233bb1e08ef4b405062445d84e28fde6"
+SRC_URI[sha256sum] = "36428c6a6cb3088cad5a3592933385253da5f29f2effa61518ee5991ea38f833"
diff --git a/meta-openembedded/meta-oe/recipes-support/digitemp/digitemp_git.bb b/meta-openembedded/meta-oe/recipes-support/digitemp/digitemp_git.bb
new file mode 100644
index 000000000..460aa1438
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/digitemp/digitemp_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "read temperature sensors in a 1-Wire net"
+SECTION = "util"
+DEPENDS = "libusb1"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=44fee82a1d2ed0676cf35478283e0aa0"
+
+PV = "3.7.1+git${SRCPV}"
+
+SRC_URI = "git://github.com/bcl/digitemp"
+
+SRCREV = "389f67655efa1674f595106c3a47b5ad082609a7"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "ds9097 ds9097u \
+ SYSTYPE='Linux' \
+"
+do_configure() {
+ rm -f digitemp_*
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 digitemp_* ${D}${sbindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/dos2unix/dos2unix_7.4.0.bb b/meta-openembedded/meta-oe/recipes-support/dos2unix/dos2unix_7.4.0.bb
new file mode 100644
index 000000000..8d3c578d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/dos2unix/dos2unix_7.4.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Convert text file line endings between CRLF and LF"
+DESCRIPTION = "The Dos2unix package includes utilities dos2unix and \
+unix2dos to convert plain text files in DOS or Mac format to Unix \
+format and vice versa."
+HOMEPAGE = "http://waterlan.home.xs4all.nl/dos2unix.html"
+SECTION = "support"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=1b78fca784db24f4a40e30b300787f3f"
+
+SRC_URI = "git://git.code.sf.net/p/dos2unix/dos2unix"
+
+# Release 7.4.0
+SRCREV = "1182533bde3c1fe65be2ead465e87671faa2c027"
+
+S = "${WORKDIR}/git/dos2unix"
+
+inherit gettext perlnative
+
+# The dos2unix NLS relies on po4a-native, while po4a recipe is
+# provided by meta-perl layer, so make it optional here, you
+# need have meta-perl in bblayers.conf before enabling nls in
+# PACKAGECONFIG.
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[nls] = "ENABLE_NLS=1,ENABLE_NLS=,po4a-native"
+
+EXTRA_OEMAKE = "${PACKAGECONFIG_CONFARGS} LDFLAGS_USER='${LDFLAGS}'"
+EXTRA_OEMAKE_class-native = "ENABLE_NLS="
+
+do_install () {
+ oe_runmake DESTDIR="${D}${base_prefix}" install
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.3.bb b/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.3.bb
new file mode 100644
index 000000000..18af738fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "versatile resource statics tool"
+DESCRIPTION = "Dstat is a versatile replacement for vmstat, iostat, netstat and ifstat. \
+Dstat overcomes some of their limitations and adds some extra features, more counters \
+and flexibility. Dstat is handy for monitoring systems during performance tuning tests, \
+benchmarks or troubleshooting."
+HOMEPAGE = "http://dag.wiee.rs/home-made/dstat"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS += "asciidoc-native xmlto-native"
+
+SRC_URI = "git://github.com/dagwieers/dstat.git"
+
+SRCREV = "ebace6d4177f8748f35cec87f7a49946046b0a20"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+RDEPENDS_${PN} += "python-core python-misc python-resource python-shell python-unixadmin"
diff --git a/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.1-verbose.patch b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.1-verbose.patch
new file mode 100644
index 000000000..740360606
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.1-verbose.patch
@@ -0,0 +1,19 @@
+Kept to help with debugging
+
+Upstream-Status: Pending
+
+Signed-off-by: Morgan Little <morgan.little@windriver.com>
+
+--- eject-2.1.1/eject.c.tn 2005-08-24 11:27:42.000000000 +0200
++++ eject-2.1.1/eject.c 2005-08-24 11:33:05.000000000 +0200
+@@ -638,7 +638,9 @@
+ unsigned char sense_buffer[32];
+
+ if ((ioctl(fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) {
+- printf("not an sg device, or old sg driver\n");
++ if (v_option) {
++ printf(_("not an sg device, or old sg driver\n"));
++ }
+ return 0;
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-error-return.patch b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-error-return.patch
new file mode 100644
index 000000000..5e13036c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-error-return.patch
@@ -0,0 +1,12 @@
+Upstream-Status: Inappropriate [the upstream is no longer active]
+
+--- eject/eject.c.orig 2013-09-11 18:08:36.000000000 +0800
++++ eject/eject.c 2013-09-11 18:09:05.000000000 +0800
+@@ -207,7 +207,6 @@
+ "If omitted, name defaults to `%s'.\n"
+ "By default tries -r, -s, -f, and -q in order until success.\n"),
+ DEFAULTDEVICE);
+- exit(1);
+ }
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-spaces.patch b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-spaces.patch
new file mode 100644
index 000000000..a16c4b1ce
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-2.1.5-spaces.patch
@@ -0,0 +1,66 @@
+Kept to help with spaces in the mount path
+
+Upstream-Status: Backport
+
+Linux mangles spaces in mount points by changing them to an octal string
+of '\040'. So lets scan the mount point and fix it up by replacing all
+occurrences off '\0##' with the ASCII value of 0##. Requires a writable
+string as input as we mangle in place. Some of this was taken from the
+util-linux package.
+
+Signed-off-by: Morgan Little <morgan.little@windriver.com>
+--- eject/eject.c.ori 2007-06-24 00:08:44 -0700
++++ eject/eject.c 2007-06-24 00:12:44 -0700
+@@ -370,6 +370,30 @@
+
+
+ /*
++ * Linux mangles spaces in mount points by changing them to an octal string
++ * of '\040'. So lets scan the mount point and fix it up by replacing all
++ * occurrences off '\0##' with the ASCII value of 0##. Requires a writable
++ * string as input as we mangle in place. Some of this was taken from the
++ * util-linux package.
++ */
++#define octalify(a) ((a) & 7)
++#define tooctal(s) (64*octalify(s[1]) + 8*octalify(s[2]) + octalify(s[3]))
++#define isoctal(a) (((a) & ~7) == '0')
++static char *DeMangleMount(char *s)
++{
++ char *tmp = s;
++ while ((tmp = strchr(tmp, '\\')) != NULL) {
++ if (isoctal(tmp[1]) && isoctal(tmp[2]) && isoctal(tmp[3])) {
++ tmp[0] = tooctal(tmp);
++ memmove(tmp+1, tmp+4, strlen(tmp)-3);
++ }
++ ++tmp;
++ }
++ return s;
++}
++
++
++/*
+ * Given name, such as foo, see if any of the following exist:
+ *
+ * foo (if foo starts with '.' or '/')
+@@ -884,8 +908,8 @@
+ if (((strcmp(s1, name) == 0) || (strcmp(s2, name) == 0)) ||
+ ((maj != -1) && (maj == mtabmaj) && (min == mtabmin))) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
+@@ -928,8 +952,8 @@
+ rc = sscanf(line, "%1023s %1023s", s1, s2);
+ if (rc >= 2 && s1[0] != '#' && strcmp(s2, name) == 0) {
+ FCLOSE(fp);
+- *deviceName = strdup(s1);
+- *mountName = strdup(s2);
++ *deviceName = DeMangleMount(strdup(s1));
++ *mountName = DeMangleMount(strdup(s2));
+ return 1;
+ }
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-timeout.patch b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-timeout.patch
new file mode 100644
index 000000000..de8146f32
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eject/eject/eject-timeout.patch
@@ -0,0 +1,17 @@
+allow a longer timeout
+
+Upstream-Status: Backport
+
+Signed-off-by: Morgan Little <morgan.little@windriver.com>
+
+--- eject/eject.c.orig 2006-08-07 16:35:15.000000000 +0200
++++ eject/eject.c 2006-08-07 16:35:54.000000000 +0200
+@@ -723,7 +723,7 @@
+ io_hdr.dxfer_len = 0;
+ io_hdr.dxferp = inqBuff;
+ io_hdr.sbp = sense_buffer;
+- io_hdr.timeout = 2000;
++ io_hdr.timeout = 10000;
+
+ io_hdr.cmdp = allowRmBlk;
+ status = ioctl(fd, SG_IO, (void *)&io_hdr);
diff --git a/meta-openembedded/meta-oe/recipes-support/eject/eject_2.1.5.bb b/meta-openembedded/meta-oe/recipes-support/eject/eject_2.1.5.bb
new file mode 100644
index 000000000..49a3d74f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eject/eject_2.1.5.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "Eject allows removable media (typically a CD-ROM, floppy disk, tape, or JAZ or ZIP disk) to be ejected under software control."
+HOMEPAGE = "http://eject.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+inherit autotools gettext update-alternatives
+
+SRC_URI = "http://sources.openembedded.org/${BP}.tar.gz \
+ file://eject-2.1.5-error-return.patch \
+ file://eject-2.1.1-verbose.patch \
+ file://eject-2.1.5-spaces.patch \
+ file://eject-timeout.patch \
+"
+
+SRC_URI[md5sum] = "b96a6d4263122f1711db12701d79f738"
+SRC_URI[sha256sum] = "ef9f7906484cfde4ba223b2682a37058f9a3c7d3bb1adda7a34a67402e2ffe55"
+
+S = "${WORKDIR}/${BPN}"
+
+PR = "r1"
+
+do_compile_prepend() {
+ # PO subdir must be in build directory
+ if [ ! ${S} = ${B} ]; then
+ mkdir -p ${B}/po
+ cp -r ${S}/po/* ${B}/po/
+ fi
+}
+
+ALTERNATIVE_${PN} = "volname eject"
+ALTERNATIVE_LINK_NAME[volname] = "${bindir}/volname"
+ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
+ALTERNATIVE_PRIORITY[volname] = "100"
+ALTERNATIVE_PRIORITY[eject] = "100"
+
+ALTERNATIVE_${PN}-doc = "eject.1"
+ALTERNATIVE_LINK_NAME[eject.1] = "${mandir}/man1/eject.1"
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-hack.patch b/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-hack.patch
new file mode 100644
index 000000000..85abcdcf0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-hack.patch
@@ -0,0 +1,12 @@
+--- enca-1.9/configure.ac.orig 2006-02-15 00:57:39.000000000 -0800
++++ enca-1.9/configure.ac 2006-02-15 00:57:46.000000000 -0800
+@@ -92,9 +92,6 @@
+ dnl And for gtk-doc
+ gtk_CHECK_GTK_DOC
+
+-dnl Check for good random number sources
+-AC_CHECK_FILES(/dev/random /dev/urandom /dev/srandom /dev/arandom)
+-
+ dnl Dirty path hack. Helps some people with badly set up search paths.
+ if test "$prefix" = "NONE"; then
+ LDFLAGS="$LDFLAGS -L$ac_default_prefix/lib"
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-remove-dumbness.patch b/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-remove-dumbness.patch
new file mode 100644
index 000000000..6f6f3e320
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca/configure-remove-dumbness.patch
@@ -0,0 +1,26 @@
+--- enca-1.9/configure.ac.orig 2006-06-29 15:30:44.000000000 +0100
++++ enca-1.9/configure.ac 2006-06-29 15:31:41.000000000 +0100
+@@ -92,14 +92,15 @@
+ dnl And for gtk-doc
+ gtk_CHECK_GTK_DOC
+
+-dnl Dirty path hack. Helps some people with badly set up search paths.
+-if test "$prefix" = "NONE"; then
+- LDFLAGS="$LDFLAGS -L$ac_default_prefix/lib"
+- CPPFLAGS="$CPPFLAGS -I$ac_default_prefix/include"
+-else
+- LDFLAGS="$LDFLAGS -L$prefix/lib"
+- CPPFLAGS="$CPPFLAGS -I$prefix/include"
+-fi
++# This is really dumb code
++#dnl Dirty path hack. Helps some people with badly set up search paths.
++#if test "$prefix" = "NONE"; then
++# LDFLAGS="$LDFLAGS -L$ac_default_prefix/lib"
++# CPPFLAGS="$CPPFLAGS -I$ac_default_prefix/include"
++#else
++# LDFLAGS="$LDFLAGS -L$prefix/lib"
++# CPPFLAGS="$CPPFLAGS -I$prefix/include"
++#fi
+
+ dnl Checks for libraries.
+ ye_CHECK_LIBM
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca/dont-run-tests.patch b/meta-openembedded/meta-oe/recipes-support/enca/enca/dont-run-tests.patch
new file mode 100644
index 000000000..321d1e620
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca/dont-run-tests.patch
@@ -0,0 +1,13 @@
+Index: enca-1.9/Makefile.am
+===================================================================
+--- enca-1.9.orig/Makefile.am 2005-11-24 11:21:32.000000000 +0100
++++ enca-1.9/Makefile.am 2006-04-11 11:14:21.832502904 +0200
+@@ -2,7 +2,7 @@
+ if MAINTAINER_MODE
+ SUBDIRS = tools data script lib src devel-docs test
+ else
+-SUBDIRS = tools script lib src devel-docs test
++SUBDIRS = tools script lib src devel-docs
+ endif
+ man_MANS = man/enca.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca/libenca-003-iconv.patch b/meta-openembedded/meta-oe/recipes-support/enca/enca/libenca-003-iconv.patch
new file mode 100644
index 000000000..dbf0fb8ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca/libenca-003-iconv.patch
@@ -0,0 +1,28 @@
+From 7e144495093187143a3d1589f74c2eac37e4d790 Mon Sep 17 00:00:00 2001
+From: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
+Date: Sun, 4 May 2014 15:49:28 +0200
+Subject: [PATCH] libiconv.m4: Fix AM_ICONV macro usage
+
+This patch come straight from the Buildroot source tree.
+
+Signed-off-by: Bernd Kuhls <berndkuhls@hotmail.com>
+Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
+---
+ m4/libiconv.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/m4/libiconv.m4 b/m4/libiconv.m4
+index fc8c6f8..3a59549 100644
+--- a/m4/libiconv.m4
++++ b/m4/libiconv.m4
+@@ -17,7 +17,7 @@ AC_REQUIRE([AC_C_CONST])dnl
+ dnl
+
+ dnl Use standard iconv test
+-AM_ICONV
++m4_pattern_allow([AM_ICONV])
+ CONVERTOR_LIBS="$CONVERTOR_LIBS $LIBICONV"
+
+ dnl Compile iconvcap.c and run it to determine what encodings iconv actually
+--
+1.9.3
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca/makefile-remove-tools.patch b/meta-openembedded/meta-oe/recipes-support/enca/enca/makefile-remove-tools.patch
new file mode 100644
index 000000000..accfbccd6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca/makefile-remove-tools.patch
@@ -0,0 +1,13 @@
+--- enca-1.9/Makefile.am.orig 2006-06-29 15:34:55.000000000 +0100
++++ enca-1.9/Makefile.am 2006-06-29 15:35:20.000000000 +0100
+@@ -1,8 +1,8 @@
+ # @(#) $Id: Makefile.am,v 1.35 2005/11/24 10:21:32 yeti Exp $
+ if MAINTAINER_MODE
+-SUBDIRS = tools data script lib src devel-docs test
++SUBDIRS = data script lib src devel-docs test
+ else
+-SUBDIRS = tools script lib src devel-docs
++SUBDIRS = script lib src devel-docs
+ endif
+ man_MANS = man/enca.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/enca/enca_1.9.bb b/meta-openembedded/meta-oe/recipes-support/enca/enca_1.9.bb
new file mode 100644
index 000000000..bf19843b2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enca/enca_1.9.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Enca is an Extremely Naive Charset Analyser"
+SECTION = "libs"
+HOMEPAGE = "http://trific.ath.cx/software/enca/"
+
+DEPENDS += "gettext-native"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=24b9569831c46d4818450b55282476b4"
+
+SRC_URI = "http://www.sourcefiles.org/Networking/Tools/Miscellanenous/enca-${PV}.tar.bz2 \
+ file://configure-hack.patch \
+ file://dont-run-tests.patch \
+ file://configure-remove-dumbness.patch \
+ file://makefile-remove-tools.patch \
+ file://libenca-003-iconv.patch "
+
+SRC_URI[md5sum] = "b3581e28d68d452286fb0bfe58bed3b3"
+SRC_URI[sha256sum] = "02acfef2b24a9c842612da49338138311f909f1cd33933520c07b8b26c410f4d"
+
+inherit autotools
+
+do_configure_prepend() {
+ # remove failing test which checks for something that isn't even used
+ sed -i -e '/ye_FUNC_SCANF_MODIF_SIZE_T/d' ${S}/configure.ac
+}
+
+do_configure_append() {
+ sed -i s:-I/usr/include::g ${B}/Makefile
+ sed -i s:-I/usr/include::g ${B}/*/Makefile
+}
+
+do_compile() {
+ cd ${S}/tools && ${BUILD_CC} -o make_hash make_hash.c
+ cd ${B}
+ oe_runmake
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb b/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb
new file mode 100644
index 000000000..6b23bbf78
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Epeg is a small library for handling thumbnails"
+DESCRIPTION = "Insanely fast JPEG/ JPG thumbnail scaling with the minimum fuss and CPU overhead. It makes use of libjpeg features of being able to load an image by only decoding the DCT coefficients needed to reconstruct an image of the size desired."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e7732a9290ea1e4b034fdc15cf49968d \
+ file://COPYING-PLAIN;md5=f59cacc08235a546b0c34a5422133035"
+DEPENDS = "jpeg libexif"
+
+SRC_URI = "git://github.com/mattes/epeg.git"
+SRCREV = "337f55346425fbf2d283e794b702318ef2a74bcb"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb b/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb
new file mode 100644
index 000000000..79b2cc1f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb
@@ -0,0 +1,24 @@
+require espeak.inc
+
+inherit native
+
+PACKAGES = "${PN}"
+FILES_${PN} = "${layout_datadir}"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+TARGET_ARCH = "${MACHINE_ARCH}"
+
+do_compile() {
+ # Fixing byte order of phoneme data files
+ cd "${S}/platforms/big_endian"
+ sed -i '/^ *CC *=/d' Makefile
+ sed -i 's/\(.*BYTE_ORDER\)/#undef BYTE_ORDER\n#define BYTE_ORDER BIG_ENDIAN\n\1/' espeak-phoneme-data.c
+ oe_runmake
+ ./espeak-phoneme-data "${S}/espeak-data"
+ cp -f phondata phonindex phontab "${S}/espeak-data"
+}
+
+do_install() {
+ install -d ${D}${layout_datadir}/espeak-data
+ install -m 0644 ${S}/espeak-data/phon* ${D}${layout_datadir}/espeak-data
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc b/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc
new file mode 100644
index 000000000..60b3f73c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "eSpeak is a compact open source software speech synthesizer"
+SECTION = "base"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://License.txt;md5=cb7a20edb4c9f5f478de6523dcd7362c"
+
+SRC_URI = "http://downloads.sourceforge.net/espeak/espeak-1.48.04-source.zip \
+ file://gcc-narrowing-warning-fix.patch \
+"
+SRC_URI[md5sum] = "cadd7482eaafe9239546bdc09fa244c3"
+SRC_URI[sha256sum] = "bf9a17673adffcc28ff7ea18764f06136547e97bbd9edf2ec612f09b207f0659"
+
+S = "${WORKDIR}/espeak-${PV}-source"
+
+DEPENDS = "portaudio-v19"
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb b/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb
new file mode 100644
index 000000000..552f40413
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb
@@ -0,0 +1,41 @@
+require espeak.inc
+inherit siteinfo
+
+EXTRA_PHONEMES = '${@bb.utils.contains("SITEINFO_ENDIANNESS", "be", "espeak-data (= ${PV})", "", d)}'
+RDEPENDS_${PN} = "portaudio-v19 ${EXTRA_PHONEMES}"
+
+CXXFLAGS += "-DUSE_PORTAUDIO"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+FILES_${PN} += "${datadir}/espeak-data"
+
+do_configure() {
+ # "speak" binary, a TTS engine, uses portaudio in either APIs V18 or V19, use V19
+ cp "${S}/src/portaudio19.h" "${S}/src/portaudio.h"
+}
+
+do_compile() {
+ cd src
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}/espeak
+ install -d ${D}${datadir}/espeak-data
+
+ # we do not ship "speak" binary though.
+ install -m 0755 ${S}/src/espeak ${D}${bindir}
+ install -m 0644 ${S}/src/speak_lib.h ${D}${includedir}/espeak/
+ ln -sf espeak/espeak.h ${D}${includedir}/
+ oe_libinstall -so -C src libespeak ${D}${libdir}
+
+ if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then
+ # the big-endian phon* files are provided by the package espeak-data
+ rm -f ${S}/espeak-data/phon*
+ fi
+
+ cp -prf ${S}/espeak-data/* ${D}${datadir}/espeak-data
+ chown -R root:root ${D}${datadir}/espeak-data
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/files/gcc-narrowing-warning-fix.patch b/meta-openembedded/meta-oe/recipes-support/espeak/files/gcc-narrowing-warning-fix.patch
new file mode 100644
index 000000000..2a9b4607d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/files/gcc-narrowing-warning-fix.patch
@@ -0,0 +1,56 @@
+From f09c83640b9173552fd9277c3a48619b903fa436 Mon Sep 17 00:00:00 2001
+From: "Reece H. Dunn" <msclrhd@gmail.com>
+Date: Wed, 20 Jan 2016 20:48:29 +0000
+Subject: [PATCH] Fix GCC -Wnarrowing warnings.
+
+---
+ src/tr_languages.cpp | 7 ++++---
+ src/translate.h | 2 +-
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+Index: espeak-1.48.04-source/src/tr_languages.cpp
+===================================================================
+--- espeak-1.48.04-source.orig/src/tr_languages.cpp
++++ espeak-1.48.04-source/src/tr_languages.cpp
+@@ -198,8 +198,8 @@ static const unsigned short chars_ignore
+ 0x200d, 1, // zero width joiner
+ 0, 0 };
+
+-const char string_ordinal[] = {0xc2,0xba,0}; // masculine ordinal character, UTF-8
+-
++const unsigned char string_ordinal[] = {0xc2,0xba,0}; // masculine ordinal character, UTF-8
++const unsigned char utf8_null[] = { 0 }; // null string, UTF-8
+
+ static Translator* NewTranslator(void)
+ {//===================================
+@@ -296,7 +296,7 @@ static const char transpose_map_latin[]
+ tr->langopts.replace_chars = NULL;
+ tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English
+ tr->langopts.alt_alphabet_lang = L('e','n');
+- tr->langopts.roman_suffix = "";
++ tr->langopts.roman_suffix = utf8_null;
+
+ SetLengthMods(tr,201);
+ // tr->langopts.length_mods = length_mods_en;
+@@ -758,7 +758,7 @@ Translator *SelectTranslator(const char
+ tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
+ tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_ORDINAL;
+ tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND;
+- tr->langopts.roman_suffix = string_ordinal;
++ tr->langopts.roman_suffix = utf8_null;
+ }
+ else
+ if(name2 == L_pap)
+Index: espeak-1.48.04-source/src/translate.h
+===================================================================
+--- espeak-1.48.04-source.orig/src/translate.h
++++ espeak-1.48.04-source/src/translate.h
+@@ -545,7 +545,7 @@ typedef struct {
+ int decimal_sep;
+ int max_digits; // max number of digits which can be spoken as an integer number (rather than individual digits)
+ const char *ordinal_indicator; // UTF-8 string
+- const char *roman_suffix; // add this (ordinal) suffix to Roman numbers (LANG=an)
++ const unsigned char *roman_suffix; // add this (ordinal) suffix to Roman numbers (LANG=an)
+
+ // bit 0, accent name before the letter name, bit 1 "capital" after letter name
+ int accents;
diff --git a/meta-openembedded/meta-oe/recipes-support/eventlog/eventlog_0.2.13.bb b/meta-openembedded/meta-oe/recipes-support/eventlog/eventlog_0.2.13.bb
new file mode 100644
index 000000000..13eb7943f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/eventlog/eventlog_0.2.13.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Replacement syslog API"
+HOMEPAGE = "http://www.balabit.com/network-security/syslog-ng/opensource-logging-system"
+DESCRIPTION = "The EventLog library aims to be a replacement of the \
+ simple syslog() API provided on UNIX systems. The \
+ major difference between EventLog and syslog is that \
+ EventLog tries to add structure to messages. EventLog \
+ provides an interface to build, format and output an \
+ event record. The exact format and output method can \
+ be customized by the administrator via a configuration \
+ file. his package is the runtime part of the library. \
+"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b8ba8e77bcda9a53fac0fe39fe957767"
+
+SRC_URI = "https://www.balabit.com/downloads/syslog-ng/open-source-edition/3.4.2/source/${BPN}_${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+SRC_URI[md5sum] = "68ec8d1ea3b98fa35002bb756227c315"
+SRC_URI[sha256sum] = "7cb4e6f316daede4fa54547371d5c986395177c12dbdec74a66298e684ac8b85"
diff --git a/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.13.bb b/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.13.bb
new file mode 100644
index 000000000..48c8221a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.13.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Interactive Connectivity Establishment library"
+DESCRIPTION = "Libnice is an implementation of the IETF's draft Interactive Connectivity Establishment standard (ICE)."
+HOMEPAGE = "http://nice.freedesktop.org/wiki/"
+SRC_URI = "http://nice.freedesktop.org/releases/libnice-${PV}.tar.gz"
+SRC_URI[md5sum] = "3226faeaf48a9150ada00da2e2865959"
+SRC_URI[sha256sum] = "61112d9f3be933a827c8365f20551563953af6718057928f51f487bfe88419e1"
+
+LICENSE = "LGPLv2.1 & MPLv1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9c42325015702feda4f4d2f19a55b767 \
+ file://COPYING.LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://COPYING.MPL;md5=3c617710e51cdbe0fc00716f056dfb1a \
+"
+
+DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gupnp] = "--enable-gupnp,--disable-gupnp,gupnp-igd"
+
+inherit autotools pkgconfig gtk-doc gobject-introspection
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug"
+
+do_configure_prepend() {
+ mkdir ${S}/m4 || true
+}
+
+do_compile_append() {
+ for i in $(find ${B} -name "*.pc") ; do
+ sed -i -e s:${STAGING_DIR_TARGET}::g \
+ -e s:/${TARGET_SYS}::g \
+ $i
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/fbset-2.1-fix-makefile-dep.patch b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/fbset-2.1-fix-makefile-dep.patch
new file mode 100644
index 000000000..41ab8af3d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/fbset-2.1-fix-makefile-dep.patch
@@ -0,0 +1,31 @@
+From 3db6782de1de7ca4f1bb9ee7652c4f2808e57539 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 10 Jan 2013 12:24:33 +0800
+Subject: [PATCH] fbset 2.1 fix makefile dep modes.tab.c
+
+Upstream-Status: Inappropriate [no upstream]
+
+fix the error in parallel build:
+make: *** No rule to make target `modes.tab.h', needed by `lex.yy.o'. Stop.
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 61536c1..09183e5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -15,7 +15,7 @@ fbset: fbset.o modes.tab.o lex.yy.o
+
+ fbset.o: fbset.c fbset.h fb.h
+ modes.tab.o: modes.tab.c fbset.h fb.h
+-lex.yy.o: lex.yy.c fbset.h modes.tab.h
++lex.yy.o: lex.yy.c fbset.h modes.tab.c
+
+ lex.yy.c: modes.l
+ $(FLEX) modes.l
+--
+1.7.4.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/makefile.patch b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/makefile.patch
new file mode 100644
index 000000000..82b1c61e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-2.1/makefile.patch
@@ -0,0 +1,11 @@
+--- fbset-2.1/Makefile.orig 2006-05-28 04:04:27.412095480 +0200
++++ fbset-2.1/Makefile 2006-05-28 04:14:05.379231120 +0200
+@@ -2,7 +2,7 @@
+ # Linux Frame Buffer Device Configuration
+ #
+
+-CC = gcc -Wall -O2 -I.
++CFLAGS = -Wall -O2 -I.
+ BISON = bison -d
+ FLEX = flex
+ INSTALL = install
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes.bb b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes.bb
new file mode 100644
index 000000000..5f6f9909b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Default display timings and resolutions for fbset"
+HOMEPAGE = "http://users.telenet.be/geertu/Linux/fbdev/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PV = "0.1.0"
+PR = "r6"
+
+SRC_URI = "file://fb.modes"
+S = "${WORKDIR}"
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/fb.modes ${D}${sysconfdir}
+}
+
+inherit allarch
+
+# fb.modes file is MACHINE_ARCH, base.bbclass correctly changes it to MACHINE_ARCH, but too late for allarch.bbclass
+# to disable "all" behavior (found when comparing qemuarm and qemux86 signatures)
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CONFFILES_${PN} = "${sysconfdir}/fb.modes"
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/fb.modes b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/fb.modes
new file mode 100644
index 000000000..ba5e6ed71
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/fb.modes
@@ -0,0 +1,3 @@
+# By default there is nothing in this file just a reminder to define some
+# modes in OE
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/om-gta01/fb.modes b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/om-gta01/fb.modes
new file mode 100644
index 000000000..446d23dd8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/om-gta01/fb.modes
@@ -0,0 +1,29 @@
+# Timings for GTA01 VGA and QVGA mode
+
+mode "480x640"
+ # D: 26.000 MHz, H: 43.334 kHz, V: 65.657 Hz
+ geometry 480 640 480 640 16
+ timings 38461 104 8 2 16 8 2
+ accel false
+endmode
+
+mode "vga"
+ # D: 26.000 MHz, H: 43.334 kHz, V: 65.657 Hz
+ geometry 480 640 480 640 16
+ timings 38461 104 8 2 16 8 2
+ accel false
+endmode
+
+mode "240x320"
+ # D: 8.475 MHz, H: 24.635 kHz, V: 75.569 Hz
+ geometry 240 320 240 320 16
+ timings 118000 88 8 2 2 8 2
+ accel false
+endmode
+
+mode "qvga"
+ # D: 8.475 MHz, H: 24.635 kHz, V: 75.569 Hz
+ geometry 240 320 240 320 16
+ timings 118000 88 8 2 2 8 2
+ accel false
+endmode
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/omap3-pandora/fb.modes b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/omap3-pandora/fb.modes
new file mode 100644
index 000000000..0c87401b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/omap3-pandora/fb.modes
@@ -0,0 +1,6 @@
+mode "800x480-65"
+ # D: 36.001 MHz, H: 34.124 kHz, V: 64.998 Hz
+ geometry 800 480 800 480 16
+ timings 27777 40 214 10 34 1 1
+ rgba 5/11,6/5,5/0,0/0
+endmode
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemuarm/fb.modes b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemuarm/fb.modes
new file mode 100644
index 000000000..111456479
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemuarm/fb.modes
@@ -0,0 +1,17 @@
+# QEMU versatilepb machine, qemuarm in OE
+
+mode "vga" "640x480"
+ geometry 640 480 640 480 16
+endmode
+
+mode "vga-portrait" "480x640"
+ geometry 480 640 480 640 16
+endmode
+
+mode "qvga" "320x240"
+ geometry 320 240 320 240 16
+endmode
+
+mode "qvga-portrait" "240x320"
+ geometry 240 320 240 320 16
+endmode
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemumips/fb.modes b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemumips/fb.modes
new file mode 100644
index 000000000..111456479
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset-modes/qemumips/fb.modes
@@ -0,0 +1,17 @@
+# QEMU versatilepb machine, qemuarm in OE
+
+mode "vga" "640x480"
+ geometry 640 480 640 480 16
+endmode
+
+mode "vga-portrait" "480x640"
+ geometry 480 640 480 640 16
+endmode
+
+mode "qvga" "320x240"
+ geometry 320 240 320 240 16
+endmode
+
+mode "qvga-portrait" "240x320"
+ geometry 240 320 240 320 16
+endmode
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset/0001-fbset-including-asm-types.h-is-needed-on-all-linux-s.patch b/meta-openembedded/meta-oe/recipes-support/fbset/fbset/0001-fbset-including-asm-types.h-is-needed-on-all-linux-s.patch
new file mode 100644
index 000000000..7f45dbea8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset/0001-fbset-including-asm-types.h-is-needed-on-all-linux-s.patch
@@ -0,0 +1,34 @@
+From 06edd88833da93361d5408b880fbb890df332497 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 19 Jan 2016 01:55:47 +0000
+Subject: [PATCH] fbset: including asm/types.h is needed on all linux systems
+
+including asm/types.h is needed to get Linux typedef's like
+__s32 and so on which are independent of C library therefore this
+define should not be guarded by __GLIBC__ but by __linux__
+
+Helps to compile it on musl systems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ fbset.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fbset.h b/fbset.h
+index 9b1d2ac..0d8def8 100644
+--- a/fbset.h
++++ b/fbset.h
+@@ -15,7 +15,7 @@
+ #include <stdio.h>
+ #include <sys/types.h>
+
+-#ifdef __GLIBC__
++#ifdef __linux__
+ #include <asm/types.h>
+ #endif
+
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fbset/fbset_2.1.bb b/meta-openembedded/meta-oe/recipes-support/fbset/fbset_2.1.bb
new file mode 100644
index 000000000..fbf834da1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fbset/fbset_2.1.bb
@@ -0,0 +1,38 @@
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php for a copy of the license)
+#
+# Filename: fbset_2.1.bb
+# Date: 28-May-06
+
+SUMMARY = "The fbset console tool"
+HOMEPAGE = "http://users.telenet.be/geertu/Linux/fbdev/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://fbset.c;endline=19;md5=bf326f82cdfcac391af208f019c5603f"
+RRECOMMENDS_${PN} = "fbset-modes"
+DEPENDS = "bison-native flex-native"
+
+PR = "r4"
+
+SRC_URI = "http://ftp.debian.org/debian/pool/main/f/fbset/fbset_2.1.orig.tar.gz \
+ file://makefile.patch \
+ file://fbset-2.1-fix-makefile-dep.patch \
+ file://0001-fbset-including-asm-types.h-is-needed-on-all-linux-s.patch \
+"
+
+inherit update-alternatives
+
+do_install() {
+ install -d ${D}${sbindir} ${D}${datadir}/man/man8 ${D}${datadir}/man/man5
+ install -m 0755 ${B}/fbset ${D}${sbindir}/fbset.real
+ install -m 0644 ${B}/*.5 ${D}${datadir}/man/man5
+ install -m 0644 ${B}/*.8 ${D}${datadir}/man/man8
+}
+
+ALTERNATIVE_fbset = "fbset"
+ALTERNATIVE_LINK_NAME[fbset] = "${sbindir}/fbset"
+ALTERNATIVE_TARGET[fbset] = "${sbindir}/fbset.real"
+ALTERNATIVE_PRIORITY[fbset] = "55"
+
+SRC_URI[md5sum] = "40ed9608f46d787bfb65fd1269f7f459"
+SRC_URI[sha256sum] = "517fa062d7b2d367f931a1c6ebb2bef84907077f0ce3f0c899e34490bbea9338"
diff --git a/meta-openembedded/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch b/meta-openembedded/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch
new file mode 100644
index 000000000..6340f42f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch
@@ -0,0 +1,80 @@
+From 97af5a2efbe30726ce4d7c921efed6afc32a314f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 25 Dec 2016 13:41:19 +0100
+Subject: [PATCH] NEON autodetection segfaults: assume neon present
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If TUNE_FEATURES contain 'neon' we can assume our machine supports it
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ simd-support/neon.c | 46 +---------------------------------------------
+ 1 file changed, 1 insertion(+), 45 deletions(-)
+
+diff --git a/simd-support/neon.c b/simd-support/neon.c
+index 86b2cb6..8d6537e 100644
+--- a/simd-support/neon.c
++++ b/simd-support/neon.c
+@@ -23,54 +23,10 @@
+
+ #if HAVE_NEON
+
+-/* check for an environment where signals are known to work */
+-#if defined(unix) || defined(linux)
+- # include <signal.h>
+- # include <setjmp.h>
+-
+- static jmp_buf jb;
+-
+- static void sighandler(int x)
+- {
+- UNUSED(x);
+- longjmp(jb, 1);
+- }
+-
+- static int really_have_neon(void)
+- {
+- void (*oldsig)(int);
+- oldsig = signal(SIGILL, sighandler);
+- if (setjmp(jb)) {
+- signal(SIGILL, oldsig);
+- return 0;
+- } else {
+- /* paranoia: encode the instruction in binary because the
+- assembler may not recognize it without -mfpu=neon */
+- /*asm volatile ("vand q0, q0, q0");*/
+- asm volatile (".long 0xf2000150");
+- signal(SIGILL, oldsig);
+- return 1;
+- }
+- }
+-
+- int X(have_simd_neon)(void)
+- {
+- static int init = 0, res;
+-
+- if (!init) {
+- res = really_have_neon();
+- init = 1;
+- }
+- return res;
+- }
+-
+-
+-#else
+-/* don't know how to autodetect NEON; assume it is present */
++/* autodetect NEON broken; assume it is present */
+ int X(have_simd_neon)(void)
+ {
+ return 1;
+ }
+-#endif
+
+ #endif
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fftw/fftw_3.3.7.bb b/meta-openembedded/meta-oe/recipes-support/fftw/fftw_3.3.7.bb
new file mode 100644
index 000000000..aae6ec952
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fftw/fftw_3.3.7.bb
@@ -0,0 +1,80 @@
+DESCRIPTION = "FFTW"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+SRC_URI = " \
+ http://www.fftw.org/fftw-${PV}.tar.gz \
+ file://0001-NEON-autodetection-segfaults-assume-neon-present.patch \
+"
+SRC_URI[md5sum] = "0d5915d7d39b3253c1cc05030d79ac47"
+SRC_URI[sha256sum] = "3b609b7feba5230e8f6dd8d245ddbefac324c5a6ae4186947670d9ac2cd25573"
+
+inherit autotools pkgconfig
+
+# we had multiple recipes in the past
+PROVIDES = "fftwl fftwf"
+
+EXTRA_OECONF = "--disable-fortran --enable-shared --enable-threads"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+FFTW_NEON = "${@bb.utils.contains('TUNE_FEATURES', 'neon', '--enable-neon', '', d)}"
+FFTW_NEON_class-native = ""
+
+do_configure() {
+ # configure fftw
+ rm -rf ${WORKDIR}/build-fftw
+ mkdir -p ${B}
+ cd ${B}
+ # full (re)configure
+ autotools_do_configure
+ mv ${B} ${WORKDIR}/build-fftw
+
+ # configure fftwl
+ rm -rf ${WORKDIR}/build-fftwl
+ mkdir -p ${B}
+ cd ${B}
+ # configure only
+ oe_runconf --enable-long-double
+ mv ${B} ${WORKDIR}/build-fftwl
+
+ # configure fftwf
+ rm -rf ${WORKDIR}/build-fftwf
+ mkdir -p ${B}
+ cd ${B}
+ # configure only
+ oe_runconf --enable-single ${FFTW_NEON}
+ mv ${B} ${WORKDIR}/build-fftwf
+}
+
+do_compile() {
+ for lib in fftw fftwl fftwf; do
+ cd ${WORKDIR}/build-$lib
+ autotools_do_compile
+ done
+}
+
+do_install() {
+ for lib in fftw fftwl fftwf; do
+ cd ${WORKDIR}/build-$lib
+ autotools_do_install
+ done
+}
+
+
+PACKAGES =+ "libfftw libfftwl libfftwf"
+FILES_libfftw = "${libdir}/libfftw3.so.* ${libdir}/libfftw3_*.so.*"
+FILES_libfftwl = "${libdir}/libfftw3l.so.* ${libdir}/libfftw3l_*.so.*"
+FILES_libfftwf = "${libdir}/libfftw3f.so.* ${libdir}/libfftw3f_*.so.*"
+
+PACKAGES =+ "fftw-wisdom fftwl-wisdom fftwf-wisdom fftw-wisdom-to-conf"
+FILES_fftw-wisdom = "${bindir}/fftw-wisdom"
+FILES_fftwl-wisdom = "${bindir}/fftwl-wisdom"
+FILES_fftwf-wisdom = "${bindir}/fftwf-wisdom"
+FILES_fftw-wisdom-to-conf = "${bindir}/fftw-wisdom-to-conf"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+RDEPENDS_${PN}-dev = "libfftw libfftwl libfftwf"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk-native.bb b/meta-openembedded/meta-oe/recipes-support/fltk/fltk-native.bb
new file mode 100644
index 000000000..2636287e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk-native.bb
@@ -0,0 +1,21 @@
+require ${BPN}.inc
+
+DEPENDS = "zlib-native jpeg-native libpng-native libxext-native libxft-native"
+
+inherit native
+
+EXTRA_OECMAKE += " \
+ -DOPTION_BUILD_SHARED_LIBS=OFF \
+ -DOPTION_USE_THREADS=OFF \
+ -DOPTION_USE_XDBE=OFF \
+ -DOPTION_USE_XFT=OFF \
+ -DOPTION_BUILD_EXAMPLES=OFF \
+ -DOPTION_USE_XINERAMA=OFF \
+ -DOPTION_USE_XFIXES=OFF \
+ -DOPTION_USE_XCURSOR=OFF \
+"
+
+do_install_append() {
+ # make sure native fltk-config is not used accidentaly
+ rm -f ${D}${bindir}/fltk-config
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb
new file mode 100644
index 000000000..ec9e04bed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb
@@ -0,0 +1,46 @@
+require ${BPN}.inc
+
+DEPENDS = "alsa-lib zlib jpeg libpng libxext libxft"
+
+inherit distro_features_check binconfig lib_package gtk-icon-cache mime
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += "file://0003-CMake-build-Force-shared-libs-with-unsuffixed-names.patch"
+
+EXTRA_OECMAKE = " \
+ -DOPTION_BUILD_SHARED_LIBS=ON \
+ -DOPTION_USE_THREADS=ON \
+ -DOPTION_USE_XDBE=ON \
+ -DOPTION_USE_XFT=ON \
+ -DFLTK_CONFIG_PATH=${libdir}/cmake \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)}"
+
+PACKAGECONFIG[examples] = "-DOPTION_BUILD_EXAMPLES=ON,-DOPTION_BUILD_EXAMPLES=OFF,"
+PACKAGECONFIG[cairo] = "-DOPTION_CAIRO=ON,-DOPTION_CAIRO=OFF,cairo"
+PACKAGECONFIG[opengl] = "-DOPTION_USE_GL=ON,-DOPTION_USE_GL=OFF,virtual/libgl"
+PACKAGECONFIG[xinerama] = "-DOPTION_USE_XINERAMA=ON,-DOPTION_USE_XINERAMA=OFF,libxinerama"
+PACKAGECONFIG[xfixes] = "-DOPTION_USE_XFIXES=ON,-DOPTION_USE_XFIXES=OFF,libxfixes"
+PACKAGECONFIG[xcursor] = "-DOPTION_USE_XCURSOR=ON,-DOPTION_USE_XCURSOR=OFF,libxcursor"
+
+do_install_append() {
+ sed -i -e 's,${STAGING_DIR_HOST},,g' ${D}${bindir}/fltk-config
+}
+
+python populate_packages_prepend () {
+ if (d.getVar('DEBIAN_NAMES')):
+ d.setVar('PKG_${BPN}', 'libfltk${PV}')
+}
+
+LEAD_SONAME = "libfltk.so"
+
+# .desktop / icons / mime only necessary for fluid app
+FILES_${PN}-bin += " \
+ ${datadir}/applications \
+ ${datadir}/icons \
+ ${datadir}/mime \
+"
+
+# cmake files
+FILES_${PN}-dev += "${datadir}/fltk"
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk.inc b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.inc
new file mode 100644
index 000000000..dbe700af0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.inc
@@ -0,0 +1,21 @@
+SUMMARY = "FLTK is a cross-platform C++ GUI toolkit"
+HOMEPAGE = "http://www.fltk.org"
+SECTION = "libs"
+LICENSE = "LGPLv2 & FLTK"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f6b26344a24a941a01a5b0826e80b5ca"
+
+SRC_URI = " \
+ http://fltk.org/pub/fltk/1.3.4/${BP}-source.tar.gz \
+ file://disable_test.patch \
+ file://fltk-no-freetype-config.patch \
+ file://0001-Fl_Preferences.cxx-do-not-use-dlopen-in-case-glibc-s.patch \
+ file://0002-always-build-fluid-and-export-pointers.patch \
+"
+
+PV = "1.3.4-1"
+SRC_URI[md5sum] = "d7fcd27ab928648e1a1366dd2e273970"
+SRC_URI[sha256sum] = "7fb2c8882433ce694e6900c94fda505e8f4ed3fa9c7e597007098a33b85c53f4"
+
+inherit cmake pkgconfig
+
+TARGET_CC_ARCH += "${LDFLAGS} -DXFT_MAJOR=2"
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0001-Fl_Preferences.cxx-do-not-use-dlopen-in-case-glibc-s.patch b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0001-Fl_Preferences.cxx-do-not-use-dlopen-in-case-glibc-s.patch
new file mode 100644
index 000000000..e6e68a0cb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0001-Fl_Preferences.cxx-do-not-use-dlopen-in-case-glibc-s.patch
@@ -0,0 +1,39 @@
+From e76a062338063615c069fedc5a143cc38c34d9b2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 28 Feb 2017 01:00:21 +0100
+Subject: [PATCH] Fl_Preferences.cxx: do not use dlopen in case glibc's headers
+ are missing
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| /home/work/x86_64-linux/fltk-native/1.3.4-1-r0/fltk-1.3.4-1/src/Fl_Preferences.cxx: In static member function ‘static int Fl_Plugin_Manager::load(const char*)’:
+| /home/work/x86_64-linux/fltk-native/1.3.4-1-r0/fltk-1.3.4-1/src/Fl_Preferences.cxx:1741:27: error: ‘RTLD_LAZY’ was not declared in this scope
+| dl = dlopen(filename, RTLD_LAZY);
+| ^~~~~~~~~
+| /home/work/x86_64-linux/fltk-native/1.3.4-1-r0/fltk-1.3.4-1/src/Fl_Preferences.cxx:1741:36: error: ‘dlopen’ was not declared in this scope
+| dl = dlopen(filename, RTLD_LAZY);
+| ^
+| src/CMakeFiles/fltk.dir/build.make:1217: recipe for target 'src/CMakeFiles/fltk.dir/Fl_Preferences.cxx.o' failed
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ src/Fl_Preferences.cxx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Fl_Preferences.cxx b/src/Fl_Preferences.cxx
+index 1233bb1..7857b9b 100644
+--- a/src/Fl_Preferences.cxx
++++ b/src/Fl_Preferences.cxx
+@@ -1737,7 +1737,7 @@ int Fl_Plugin_Manager::load(const char *filename) {
+ HMODULE dl = LoadLibrary(filename);
+ #else
+ void * dl = NULL;
+-# if HAVE_DLSYM
++# if HAVE_DLSYM && HAVE_DLFCN_H
+ dl = dlopen(filename, RTLD_LAZY);
+ # endif
+ #endif
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0002-always-build-fluid-and-export-pointers.patch b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0002-always-build-fluid-and-export-pointers.patch
new file mode 100644
index 000000000..cca977c66
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0002-always-build-fluid-and-export-pointers.patch
@@ -0,0 +1,31 @@
+From 16010cb1a69ea2326d8102b7f1e34b65aca4b278 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 28 Feb 2017 01:20:42 +0100
+Subject: [PATCH] always build fluid and export pointers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ CMake/export.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMake/export.cmake b/CMake/export.cmake
+index 968186a..95e04eb 100644
+--- a/CMake/export.cmake
++++ b/CMake/export.cmake
+@@ -21,7 +21,7 @@
+ # final config and export
+ #######################################################################
+ # Set the fluid executable path
+-if(CMAKE_CROSSCOMPILING)
++if(FALSE)
+ find_file(FLUID_PATH
+ NAMES fluid fluid.exe
+ PATHS ENV PATH
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0003-CMake-build-Force-shared-libs-with-unsuffixed-names.patch b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0003-CMake-build-Force-shared-libs-with-unsuffixed-names.patch
new file mode 100644
index 000000000..1f2f8aecf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/0003-CMake-build-Force-shared-libs-with-unsuffixed-names.patch
@@ -0,0 +1,41 @@
+From bc38fb41044503c9debf5710910c51dd29674b6a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 15 Dec 2017 22:14:01 +0100
+Subject: [PATCH] CMake build: Force shared libs with unsuffixed names
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For windows build sake CMake complains when a project wants to build shared and
+static libraries with same name. This caused the authors of fltk to generate
+libraries with names suffixed by '_SHARED' when building fltk with cmake -
+autotools builds do not suffix.
+
+Reasons to build shared libs with correct names:
+
+* Shared libraries are the preferred choice for embedded devices
+* There are projects (e.g yoshimi) expecting shared libraries with unsuffixed
+ names - as created by autotools build. These projects link against static
+ libraries by accident causing unusable binaries.
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ CMake/macros.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMake/macros.cmake b/CMake/macros.cmake
+index 4def62d..ab675f0 100644
+--- a/CMake/macros.cmake
++++ b/CMake/macros.cmake
+@@ -49,7 +49,7 @@ macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
+ PROPERTIES
+ VERSION ${FLTK_VERSION_FULL}
+ SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
+- PREFIX "lib" # for MSVC static/shared coexistence
++ OUTPUT_NAME ${LIBNAME} CLEAN_DIRECT_OUTPUT 1
+ )
+ endif (${LIBTYPE} STREQUAL "SHARED")
+
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk/disable_test.patch b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/disable_test.patch
new file mode 100644
index 000000000..1f5fd25e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/disable_test.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.orig 2015-11-26 15:35:31.485357862 +0800
++++ b/Makefile 2015-11-26 15:35:37.037357764 +0800
+@@ -18,7 +18,7 @@
+
+ include makeinclude
+
+-DIRS = $(IMAGEDIRS) src $(CAIRODIR) fluid test documentation
++DIRS = $(IMAGEDIRS) src $(CAIRODIR) fluid documentation
+
+ all: makeinclude fltk-config
+ for dir in $(DIRS); do\
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk/fltk-no-freetype-config.patch b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/fltk-no-freetype-config.patch
new file mode 100644
index 000000000..2a9915bea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk/fltk-no-freetype-config.patch
@@ -0,0 +1,40 @@
+From 699420d306cadbb5285942e09f4383d84b01985d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 13 Jan 2017 13:21:23 +0100
+Subject: [PATCH] replace freetype-config by pkg-config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index f0efd48..3af5ecb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1006,12 +1006,12 @@ case $host_os_gui in
+
+ xft_found=no
+ if test x$enable_xft != xno; then
+- AC_PATH_PROG(FTCONFIG, freetype-config)
++ AC_PATH_PROG(PKGCONFIG,pkg-config)
+
+- if test "x$FTCONFIG" != x; then
+- CPPFLAGS="`$FTCONFIG --cflags` $CPPFLAGS"
+- CFLAGS="`$FTCONFIG --cflags` $CFLAGS"
+- CXXFLAGS="`$FTCONFIG --cflags` $CXXFLAGS"
++ if test "x$PKGCONFIG" != x; then
++ CPPFLAGS="`$PKGCONFIG --cflags xft` $CPPFLAGS"
++ CFLAGS="`$PKGCONFIG --cflags xft` $CFLAGS"
++ CXXFLAGS="`$PKGCONFIG --cflags xft` $CXXFLAGS"
+
+ AC_CHECK_LIB(fontconfig, FcPatternCreate)
+ AC_CHECK_HEADER(X11/Xft/Xft.h,
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch
new file mode 100644
index 000000000..a567cba92
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch
@@ -0,0 +1,27 @@
+From 368989526c32cdf9d680a397fede3cb773fa2609 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Fri, 28 Jul 2017 16:31:41 -0400
+Subject: [PATCH] Fix gstreamer-1.0 detection
+
+Upstream State: Backport
+
+---
+ cmake/FindGStreamer_1_0.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/FindGStreamer_1_0.cmake b/cmake/FindGStreamer_1_0.cmake
+index 3aa8fc6..6fbc0ec 100644
+--- a/cmake/FindGStreamer_1_0.cmake
++++ b/cmake/FindGStreamer_1_0.cmake
+@@ -59,7 +59,7 @@ macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _library)
+
+ string(REGEX MATCH "(.*)>=(.*)" _dummy "${_pkgconfig_name}")
+ if ("${CMAKE_MATCH_2}" STREQUAL "")
+- pkg_check_modules(PC_${_component_prefix} "${_pkgconfig_name} >= ${GStreamer_FIND_VERSION}")
++ pkg_check_modules(PC_${_component_prefix} "${_pkgconfig_name} >= ${GSTREAMER_1_0_MINIMUM_VERSION}")
+ else ()
+ pkg_check_modules(PC_${_component_prefix} ${_pkgconfig_name})
+ endif ()
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch
new file mode 100644
index 000000000..0d7dcc28d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch
@@ -0,0 +1,31 @@
+Subject: [PATCH] winpr-makecert: Build with install RPATH
+
+As we are installing "winpr-makecert" manually, we do want
+to refer to the library in DESTDIR, not the one resting in
+the build tree.
+
+Update it for 2.0.0.
+
+Signed-off-by: Manuel Bachmann <manuel.bachmann@iot.bzh>
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ winpr/tools/makecert-cli/CMakeLists.txt | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/winpr/tools/makecert-cli/CMakeLists.txt b/winpr/tools/makecert-cli/CMakeLists.txt
+index 74afa09..8d00ef1 100644
+--- a/winpr/tools/makecert-cli/CMakeLists.txt
++++ b/winpr/tools/makecert-cli/CMakeLists.txt
+@@ -44,6 +44,9 @@ set(${MODULE_PREFIX}_LIBS winpr-tools)
+
+ target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
+
++set_target_properties(${MODULE_NAME} PROPERTIES
++ BUILD_WITH_INSTALL_RPATH 1)
++
+ set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Tools")
+
+ install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT tools EXPORT WinPRTargets)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
new file mode 100644
index 000000000..88aec9c41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
@@ -0,0 +1,86 @@
+# Copyright (C) 2010-2012 O.S. Systems Software Ltda. All Rights Reserved
+# Released under the MIT license
+
+DESCRIPTION = "FreeRDP RDP client & server library"
+HOMEPAGE = "http://www.freerdp.com"
+DEPENDS = "openssl alsa-lib pcsc-lite"
+SECTION = "net"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pkgconfig cmake gitpkgv
+
+PV = "2.0.0+gitr${SRCPV}"
+PKGV = "${GITPKGVTAG}"
+
+SRCREV = "1648deb435ad52206f7aa2afe4b4dff71d9329bc"
+SRC_URI = "git://github.com/FreeRDP/FreeRDP.git \
+ file://winpr-makecert-Build-with-install-RPATH.patch \
+ file://0001-Fix-gstreamer-1.0-detection.patch \
+"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE += " \
+ -DWITH_ALSA=ON \
+ -DWITH_PCSC=ON \
+ -DWITH_FFMPEG=OFF \
+ -DWITH_CUNIT=OFF \
+ -DWITH_NEON=OFF \
+ -DBUILD_STATIC_LIBS=OFF \
+ -DCMAKE_POSITION_INDEPENDANT_CODE=ON \
+ -DWITH_MANPAGES=OFF \
+"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'directfb pam pulseaudio wayland x11', d)}\
+ gstreamer cups \
+"
+
+X11_DEPS = "virtual/libx11 libxinerama libxext libxcursor libxv libxi libxrender libxfixes libxdamage libxrandr libxkbfile"
+PACKAGECONFIG[x11] = "-DWITH_X11=ON -DWITH_XINERAMA=ON -DWITH_XEXT=ON -DWITH_XCURSOR=ON -DWITH_XV=ON -DWITH_XI=ON -DWITH_XRENDER=ON -DWITH_XFIXES=ON -DWITH_XDAMAGE=ON -DWITH_XRANDR=ON -DWITH_XKBFILE=ON,-DWITH_X11=OFF,${X11_DEPS}"
+PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland"
+PACKAGECONFIG[directfb] = "-DWITH_DIRECTFB=ON,-DWITH_DIRECTFB=OFF,directfb"
+PACKAGECONFIG[pam] = "-DWITH_PAM=ON,-DWITH_PAM=OFF,libpam"
+PACKAGECONFIG[pulseaudio] = "-DWITH_PULSEAUDIO=ON,-DWITH_PULSEAUDIO=OFF,pulseaudio"
+PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER_1_0=ON,-DWITH_GSTREAMER_1_0=OFF,gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[cups] = "-DWITH_CUPS=ON,-DWITH_CUPS=OFF,cups"
+
+PACKAGES =+ "libfreerdp"
+
+LEAD_SONAME = "libfreerdp.so"
+FILES_libfreerdp = "${libdir}/lib*${SOLIBS}"
+
+PACKAGES_DYNAMIC += "^libfreerdp-plugin-.*"
+
+# we will need winpr-makecert to generate TLS certificates
+do_install_append () {
+ install -d ${D}${bindir}
+ install -m755 winpr/tools/makecert-cli/winpr-makecert ${D}${bindir}
+ rm -rf ${D}${libdir}/cmake
+ rm -rf ${D}${libdir}/freerdp
+}
+
+python populate_packages_prepend () {
+ freerdp_root = d.expand('${libdir}/freerdp')
+
+ do_split_packages(d, freerdp_root, '^(audin_.*)\.so$',
+ output_pattern='libfreerdp-plugin-%s',
+ description='FreeRDP plugin %s',
+ prepend=True, extra_depends='libfreerdp-plugin-audin')
+
+ do_split_packages(d, freerdp_root, '^(rdpsnd_.*)\.so$',
+ output_pattern='libfreerdp-plugin-%s',
+ description='FreeRDP plugin %s',
+ prepend=True, extra_depends='libfreerdp-plugin-rdpsnd')
+
+ do_split_packages(d, freerdp_root, '^(tsmf_.*)\.so$',
+ output_pattern='libfreerdp-plugin-%s',
+ description='FreeRDP plugin %s',
+ prepend=True, extra_depends='libfreerdp-plugin-tsmf')
+
+ do_split_packages(d, freerdp_root, '^([^-]*)\.so$',
+ output_pattern='libfreerdp-plugin-%s',
+ description='FreeRDP plugin %s',
+ prepend=True, extra_depends='')
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb b/meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb
new file mode 100644
index 000000000..63d9acf05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb
@@ -0,0 +1,48 @@
+SUMMARY = "gd is a library used to create PNG, JPEG, or WBMP images"
+DESCRIPTION = "The gd graphics library allows your code to quickly draw images \
+complete with lines, arcs, text, multiple colors, cut and paste from other \
+images, and flood fills, and to write out the result as a PNG or JPEG file. \
+This is particularly useful in Web applications, where PNG and JPEG are two \
+of the formats accepted for inline images by most browsers. Note that gd is not \
+a paint program."
+HOMEPAGE = "http://libgd.bitbucket.org/"
+
+SECTION = "libs"
+LICENSE = "GD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=07384b3aa2e0d39afca0d6c40286f545"
+
+DEPENDS = "freetype libpng jpeg zlib tiff"
+
+SRC_URI = "git://github.com/libgd/libgd.git;branch=GD-2.2 \
+ "
+
+SRCREV = "8255231b68889597d04d451a72438ab92a405aba"
+
+S = "${WORKDIR}/git"
+
+inherit autotools binconfig gettext pkgconfig
+
+EXTRA_OECONF += " --disable-rpath \
+ --with-jpeg=${STAGING_LIBDIR}/.. \
+ --with-freetype=yes \
+ --without-fontconfig \
+ --without-webp \
+ --without-xpm \
+ --without-x \
+ "
+
+EXTRA_OEMAKE = 'LDFLAGS="${LDFLAGS}"'
+
+do_install_append() {
+ # cleanup buildpaths from gdlib.pc
+ sed -i -e 's#${STAGING_DIR_HOST}##g' ${D}${libdir}/pkgconfig/gdlib.pc
+}
+
+PACKAGES += "${PN}-tools"
+
+FILES_${PN} = "${libdir}/lib*${SOLIBS}"
+FILES_${PN}-tools = "${bindir}/*"
+
+PROVIDES += "${PN}-tools"
+RPROVIDES_${PN}-tools = "${PN}-tools"
+RDEPENDS_${PN}-tools = "perl perl-module-strict"
diff --git a/meta-openembedded/meta-oe/recipes-support/gflags/gflags_2.2.0.bb b/meta-openembedded/meta-oe/recipes-support/gflags/gflags_2.2.0.bb
new file mode 100644
index 000000000..28b652a64
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gflags/gflags_2.2.0.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "The gflags package contains a C++ library that implements commandline flags processing. It includes built-in support for standard types such as string and the ability to define flags in the source file in which they are used"
+
+HOMEPAGE = "https://github.com/gflags/gflags"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=c80d1a3b623f72bb85a4c75b556551df"
+
+SRC_URI = "git://github.com/gflags/gflags.git"
+SRCREV = "f8a0efe03aa69b3336d8e228b37d4ccb17324b88"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+
+inherit cmake
+
+EXTRA_OECMAKE="-DBUILD_SHARED_LIBS=ON -DREGISTER_INSTALL_PREFIX=OFF -DLIB_INSTALL_DIR=${baselib}"
+
+PACKAGES =+ "${PN}-bash-completion"
+FILES_${PN}-bash-completion += "${bindir}/gflags_completions.sh"
+RDEPENDS_${PN}-bash-completion = "bash bash-completion"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/glog/glog/0001-configure.ac-Allow-user-to-disable-gflags.patch b/meta-openembedded/meta-oe/recipes-support/glog/glog/0001-configure.ac-Allow-user-to-disable-gflags.patch
new file mode 100644
index 000000000..596281ff6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/glog/glog/0001-configure.ac-Allow-user-to-disable-gflags.patch
@@ -0,0 +1,35 @@
+From 0fabde0515e180c53961c27346dd7a79cffa4c1f Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+Date: Thu, 11 Aug 2016 11:49:36 +0200
+Subject: [PATCH] configure.ac: Allow user to disable gflags
+
+Under some circumstances like cross-compilation, the user might not want
+to enable support for gflags.
+
+This patch allows support for --without-gflags
+
+Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+---
+ configure.ac | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7b4d21e7ae8a..eba5e5cda1ea 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -136,7 +136,11 @@ AC_ARG_WITH(gflags, AS_HELP_STRING[--with-gflags=GFLAGS_DIR],
+ CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
+ LIBS="$LIBS $GFLAGS_LIBS"
+ )
+-AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
++if test x"$with_gflags" = x"no"; then
++ ac_cv_have_libgflags=0
++else
++ AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
++fi
+ if test x"$ac_cv_have_libgflags" = x"1"; then
+ AC_DEFINE(HAVE_LIB_GFLAGS, 1, [define if you have google gflags library])
+ if test x"$GFLAGS_LIBS" = x""; then
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.4.bb b/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.4.bb
new file mode 100644
index 000000000..d7c1974c6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.4.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "The glog library implements application-level logging. This \
+library provides logging APIs based on C++-style streams and various helper \
+macros."
+HOMEPAGE = "https://github.com/google/glog"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dc9db360e0bbd4e46672f3fd91dd6c4b"
+
+DEPENDS = "libunwind"
+
+SRC_URI = " \
+ git://github.com/google/glog.git \
+ file://0001-configure.ac-Allow-user-to-disable-gflags.patch \
+"
+
+SRCREV = "d8cb47f77d1c31779f3ff890e1a5748483778d6a"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gflags] = ",--without-gflags,gflags,"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb b/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb
new file mode 100644
index 000000000..b72ffa9a1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb
@@ -0,0 +1,36 @@
+SUMMARY = "The GNU portability library"
+DESCRIPTION = "A collection of software subroutines which are designed to \
+be usable on many operating systems. The goal of the project \
+is to make it easy for free software authors to make their \
+software run on many operating systems. Since source is designed \
+to be copied from gnulib, it is not a library per-se, as much \
+as a collection of portable idioms to be used in other projects."
+
+HOMEPAGE = "http://www.gnu.org/software/gnulib/"
+SECTION = "devel"
+LICENSE = "LGPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=56a22a6e5bcce45e2c8ac184f81412b5"
+SRCREV = "b23000de1e47c7d580e0e220966dd1ee42a5e5bc"
+
+SRC_URI = "git://git.sv.gnu.org/gnulib;protocol=git \
+"
+
+S = "${WORKDIR}/git"
+
+do_install () {
+ cd ${S}
+ git checkout master
+ git clone ${S} ${D}/${datadir}/gnulib
+}
+
+do_patch[noexec] = "1"
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_package[noexec] = "1"
+do_packagedata[noexec] = "1"
+deltask package_write_ipk
+deltask package_write_deb
+deltask package_write_rpm
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Support-Atomic-ops-on-clang.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Support-Atomic-ops-on-clang.patch
new file mode 100644
index 000000000..2fd21c278
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Support-Atomic-ops-on-clang.patch
@@ -0,0 +1,31 @@
+From aa0a63209af6813d87255ec3ab339f2dbbf27d6d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 6 Mar 2017 13:38:46 -0800
+Subject: [PATCH] Support Atomic ops on clang
+
+clang pretends to be gcc 4.2 which is a lie
+it actually supports a lot more features then
+gcc 4.2, here it depends on gcc 4.7 to enable
+the atomics and fails for clang
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Pending
+
+---
+ src/base/atomicops.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/base/atomicops.h b/src/base/atomicops.h
+index dac95be..390733c 100644
+--- a/src/base/atomicops.h
++++ b/src/base/atomicops.h
+@@ -124,7 +124,7 @@
+ #include "base/atomicops-internals-linuxppc.h"
+ #elif defined(__GNUC__) && defined(__mips__)
+ #include "base/atomicops-internals-mips.h"
+-#elif defined(__GNUC__) && GCC_VERSION >= 40700
++#elif defined(__GNUC__) && GCC_VERSION >= 40700 || defined(__clang__)
+ #include "base/atomicops-internals-gcc.h"
+ #elif defined(__clang__) && CLANG_VERSION >= 30400
+ #include "base/atomicops-internals-gcc.h"
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Use-ucontext_t-instead-of-struct-ucontext.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Use-ucontext_t-instead-of-struct-ucontext.patch
new file mode 100644
index 000000000..b3033621b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-Use-ucontext_t-instead-of-struct-ucontext.patch
@@ -0,0 +1,34 @@
+From 230cd84486145c5bb1d69d4c9a544e00adbcc9b5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Jul 2017 13:21:21 -0700
+Subject: [PATCH] Use ucontext_t instead of struct ucontext
+
+Newer glibc has dropped the ucontext tag from exposing
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/stacktrace_powerpc-linux-inl.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/stacktrace_powerpc-linux-inl.h b/src/stacktrace_powerpc-linux-inl.h
+index 3b3843b..a301a46 100644
+--- a/src/stacktrace_powerpc-linux-inl.h
++++ b/src/stacktrace_powerpc-linux-inl.h
+@@ -53,7 +53,6 @@
+ #elif defined(HAVE_UCONTEXT_H)
+ #include <ucontext.h> // for ucontext_t
+ #endif
+-typedef ucontext ucontext_t;
+
+ // PowerPC64 Little Endian follows BE wrt. backchain, condition register,
+ // and LR save area, so no need to adjust the reading struct.
+@@ -202,7 +201,7 @@ static int GET_STACK_TRACE_OR_FRAMES {
+ struct rt_signal_frame_32 {
+ char dummy[64 + 16];
+ siginfo_t info;
+- struct ucontext uc;
++ ucontext_t uc;
+ // We don't care about the rest, since IP value is at 'uc' field.A
+ } *sigframe = reinterpret_cast<rt_signal_frame_32*>(current);
+ result[n] = (void*) sigframe->uc.uc_mcontext.uc_regs->gregs[PT_NIP];
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-disbale-heap-checkers-and-debug-allocator-on-musl.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-disbale-heap-checkers-and-debug-allocator-on-musl.patch
new file mode 100644
index 000000000..ab3ceb964
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-disbale-heap-checkers-and-debug-allocator-on-musl.patch
@@ -0,0 +1,26 @@
+From 06605158852f9364519391fa11070ba5ec4303e9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 08:07:17 -0700
+Subject: [PATCH] disbale heap checkers and debug allocator on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Pending
+
+---
+ configure.ac | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 70b49a3..8154c5c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -51,6 +51,8 @@ case "$host" in
+ *-cygwin*) default_enable_heap_checker=no; default_enable_cpu_profiler=no;;
+ *-freebsd*) default_enable_heap_checker=no;;
+ *-darwin*) default_enable_heap_checker=no;;
++ *-musl*) default_enable_heap_checker=no; default_enable_heap_profiler=no;
++ default_enable_debugalloc=no; default_enable_libunwind=no;
+ esac
+
+ # Currently only backtrace works on s390.
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch
new file mode 100644
index 000000000..0a72ff27c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch
@@ -0,0 +1,59 @@
+From 034e7da08c3fbffcba8cf8d4e24a71a16558db5a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 15:51:28 -0700
+Subject: [PATCH] fix build with musl libc
+
+Patch from https://github.com/gperftools/gperftools/pull/765/
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure.ac | 1 +
+ src/malloc_hook_mmap_linux.h | 8 ++++++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b42fea3..70b49a3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -188,6 +188,7 @@ AC_HEADER_STDC
+ AC_CHECK_TYPES([__int64]) # defined in some windows platforms
+ AC_CHECK_TYPES([struct mallinfo],,, [#include <malloc.h>])
+ AC_CHECK_TYPES([Elf32_Versym],,, [#include <elf.h>]) # for vdso_support.h
++AC_CHECK_FUNCS(__sbrk) # for intercepting glibc memory allocator
+ AC_CHECK_FUNCS(sbrk) # for tcmalloc to get memory
+ AC_CHECK_FUNCS(geteuid) # for turning off services when run as root
+ AC_CHECK_FUNCS(fork) # for the pthread_atfork setup
+diff --git a/src/malloc_hook_mmap_linux.h b/src/malloc_hook_mmap_linux.h
+index 79ac4e3..d444635 100755
+--- a/src/malloc_hook_mmap_linux.h
++++ b/src/malloc_hook_mmap_linux.h
+@@ -46,6 +46,10 @@
+ #include <errno.h>
+ #include "base/linux_syscall_support.h"
+
++#ifndef __GLIBC__
++typedef off64_t __off64_t;
++#endif
++
+ // The x86-32 case and the x86-64 case differ:
+ // 32b has a mmap2() syscall, 64b does not.
+ // 64b and 32b have different calling conventions for mmap().
+@@ -168,7 +172,7 @@ extern "C" void* mmap64(void *start, size_t length, int prot, int flags,
+ return result;
+ }
+
+-# if !defined(__USE_FILE_OFFSET64) || !defined(__REDIRECT_NTH)
++# if defined(__GLIBC__) && (!defined(__USE_FILE_OFFSET64) || !defined(__REDIRECT_NTH))
+
+ extern "C" void* mmap(void *start, size_t length, int prot, int flags,
+ int fd, off_t offset) __THROW {
+@@ -206,7 +210,7 @@ extern "C" void* mremap(void* old_addr, size_t old_size, size_t new_size,
+ return result;
+ }
+
+-#ifndef __UCLIBC__
++#if HAVE___SBRK
+ // libc's version:
+ extern "C" void* __sbrk(ptrdiff_t increment);
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-include-fcntl.h-for-loff_t-definition.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-include-fcntl.h-for-loff_t-definition.patch
new file mode 100644
index 000000000..4c63e73b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-include-fcntl.h-for-loff_t-definition.patch
@@ -0,0 +1,26 @@
+From a16a73f0819d26219ee83cd98eea82786d7c1755 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 19:28:17 -0700
+Subject: [PATCH] include fcntl.h for loff_t definition
+
+Fixes
+linux_syscall_support.h:2641:26: error: 'loff_t' has not been declared
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/base/linux_syscall_support.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/base/linux_syscall_support.h b/src/base/linux_syscall_support.h
+index 85347a2..70431ca 100644
+--- a/src/base/linux_syscall_support.h
++++ b/src/base/linux_syscall_support.h
+@@ -162,6 +162,7 @@ extern "C" {
+ #include <unistd.h>
+ #include <linux/unistd.h>
+ #include <endian.h>
++#include <fcntl.h>
+
+ #ifdef __mips__
+ /* Include definitions of the ABI currently in use. */
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/disable_libunwind_aarch64.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/disable_libunwind_aarch64.patch
new file mode 100644
index 000000000..c3c578418
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/disable_libunwind_aarch64.patch
@@ -0,0 +1,30 @@
+From 564f800e3e24647c095f7a321bf3ebdccfbf762d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 12:02:04 -0700
+Subject: [PATCH] Disable libunwind on aarch64
+
+Fixes hangs when using libtcmalloc.so
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ configure.ac | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 8154c5c..063b260 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -69,6 +69,11 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __PPC64__])],
+ [default_enable_libunwind=yes
+ default_tcmalloc_pagesize=8])
+
++# Disable libunwind linking on aarch64 by default.
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __aarch64__])],
++ [default_enable_libunwind=no],
++ [default_enable_libunwind=yes])
++
+ AC_ARG_ENABLE([cpu-profiler],
+ [AS_HELP_STRING([--disable-cpu-profiler],
+ [do not build the cpu profiler])],
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/sgidef.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/sgidef.patch
new file mode 100644
index 000000000..10274a6de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/sgidef.patch
@@ -0,0 +1,25 @@
+From 259b420444c52463795b4b582a2ab7511149eea7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 16 Oct 2017 21:26:40 -0700
+Subject: [PATCH] sgidef.h does not exist on musl and its not needed to compile
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+---
+ src/base/linux_syscall_support.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/base/linux_syscall_support.h b/src/base/linux_syscall_support.h
+index 70431ca..b23ca59 100644
+--- a/src/base/linux_syscall_support.h
++++ b/src/base/linux_syscall_support.h
+@@ -164,7 +164,7 @@ extern "C" {
+ #include <endian.h>
+ #include <fcntl.h>
+
+-#ifdef __mips__
++#if defined(__mips__) && defined(__glibc__)
+ /* Include definitions of the ABI currently in use. */
+ #include <sgidefs.h>
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.6.1.bb b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.6.1.bb
new file mode 100644
index 000000000..ecac6c5cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.6.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Fast, multi-threaded malloc() and nifty performance analysis tools"
+HOMEPAGE = "https://github.com/gperftools/gperftools"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=762732742c73dc6c7fbe8632f06c059a"
+DEPENDS += "libunwind"
+
+SRCREV = "bf840dec0495e17f5c8403e68e10b9d6bf05c559"
+SRC_URI = "git://github.com/gperftools/gperftools \
+ file://0001-Support-Atomic-ops-on-clang.patch \
+ file://0001-Use-ucontext_t-instead-of-struct-ucontext.patch \
+ file://0001-fix-build-with-musl-libc.patch \
+ file://0001-include-fcntl.h-for-loff_t-definition.patch \
+ file://0001-disbale-heap-checkers-and-debug-allocator-on-musl.patch \
+ file://disable_libunwind_aarch64.patch \
+ file://sgidef.patch \
+ "
+
+inherit autotools
+
+S = "${WORKDIR}/git"
+
+# Disable thumb1
+# {standard input}: Assembler messages:
+# {standard input}:434: Error: lo register required -- `ldr pc,[sp]'
+# Makefile:4538: recipe for target 'src/base/libtcmalloc_la-linuxthreads.lo' failed
+ARM_INSTRUCTION_SET_armv5 = "arm"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm/0001-Use-sigemptyset-API-instead-of-__sigemptyset.patch b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/0001-Use-sigemptyset-API-instead-of-__sigemptyset.patch
new file mode 100644
index 000000000..a9198166a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/0001-Use-sigemptyset-API-instead-of-__sigemptyset.patch
@@ -0,0 +1,34 @@
+From 52e6cf052b1f938fcca1bc24d578fe0bfd972988 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 25 Jun 2017 07:25:33 -0700
+Subject: [PATCH] Use sigemptyset API instead of __sigemptyset
+
+__sigemptyset has been removed from glibc public
+API headers in upcoming (2.26) release onwards
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ src/prog/gpm-root.y | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/prog/gpm-root.y b/src/prog/gpm-root.y
+index 5126c65..76c896c 100644
+--- a/src/prog/gpm-root.y
++++ b/src/prog/gpm-root.y
+@@ -1196,11 +1196,7 @@ int main(int argc, char **argv)
+ LOG_DAEMON : LOG_USER);
+ /* reap your zombies */
+ childaction.sa_handler=reap_children;
+-#if defined(__GLIBC__)
+- __sigemptyset(&childaction.sa_mask);
+-#else /* __GLIBC__ */
+ sigemptyset(&childaction.sa_mask);
+-#endif /* __GLIBC__ */
+ childaction.sa_flags=0;
+ sigaction(SIGCHLD,&childaction,NULL);
+
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm/gpm.service.in b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/gpm.service.in
new file mode 100644
index 000000000..ee6c040fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/gpm.service.in
@@ -0,0 +1,9 @@
+[Unit]
+Description=Virtual console mouse server
+
+[Service]
+Type=forking
+ExecStart=@bindir@/gpm -m /dev/input/mice -t imps2
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm/init b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/init
new file mode 100644
index 000000000..2dcf9ab04
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/init
@@ -0,0 +1,32 @@
+#! /bin/sh
+
+# Grab the common functions
+#. /etc/init.d/functions
+
+# FIXME:
+# Add a configuration file for GPM here
+
+test -x /usr/sbin/gpm || exit 0
+
+case "$1" in
+ start)
+ if [ ! -p /dev/gpmdata ]; then
+ mkfifo /dev/gpmdata
+ fi
+
+ echo "Starting GPM:"
+ start-stop-daemon -S -x /usr/sbin/gpm -- -R -m /dev/psaux -t ps2
+ ;;
+ stop)
+ echo "Stopping GPM:"
+ start-stop-daemon -K -x /usr/sbin/gpm
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ usage /etc/init.d/gpm
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm/no-docs.patch b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/no-docs.patch
new file mode 100644
index 000000000..3faef84ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/no-docs.patch
@@ -0,0 +1,18 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: gpm-1.99.7/Makefile.in
+===================================================================
+--- gpm-1.99.7.orig/Makefile.in 2008-07-24 03:36:35.000000000 -0700
++++ gpm-1.99.7/Makefile.in 2010-06-22 18:28:45.269507001 -0700
+@@ -19,7 +19,7 @@
+ # user-overridable flags, but it's also all the implicit rule looks at.
+ # missing ?
+
+-SUBDIRS = src doc contrib
++SUBDIRS = src
+
+
+ ### simple, but effective rules
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm/processcreds.patch b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/processcreds.patch
new file mode 100644
index 000000000..d647eca0a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm/processcreds.patch
@@ -0,0 +1,12 @@
+Index: gpm-1.99.7/src/daemon/processconn.c
+===================================================================
+--- gpm-1.99.7.orig/src/daemon/processconn.c 2010-09-29 17:36:18.571782951 +0400
++++ gpm-1.99.7/src/daemon/processconn.c 2010-09-29 17:42:44.659991758 +0400
+@@ -20,6 +20,7 @@
+ *
+ ********/
+
++#define _GNU_SOURCE
+ #include <sys/socket.h> /* accept */
+ #include <stdlib.h> /* malloc */
+ #include <unistd.h> /* close */
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb b/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb
new file mode 100644
index 000000000..51c4dd639
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "GPM (General Purpose Mouse) is a mouse server \
+for the console and xterm, with sample clients included \
+(emacs, etc)."
+SECTION = "console/utils"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760"
+
+PV = "1.99.7+git${SRCREV}"
+PR = "r2"
+SRCREV = "1fd19417b8a4dd9945347e98dfa97e4cfd798d77"
+
+DEPENDS = "ncurses"
+
+SRC_URI = "git://github.com/telmich/gpm;protocol=git \
+ file://init \
+ file://no-docs.patch \
+ file://processcreds.patch \
+ file://gpm.service.in \
+ file://0001-Use-sigemptyset-API-instead-of-__sigemptyset.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep update-rc.d systemd
+
+INITSCRIPT_NAME = "gpm"
+INITSCRIPT_PARAMS = "defaults"
+
+do_configure_prepend() {
+ (cd ${S};./autogen.sh;cd -)
+}
+
+do_install_append () {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ sed 's:@bindir@:${bindir}:' < ${WORKDIR}/gpm.service.in >${D}${systemd_system_unitdir}/gpm.service
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -D -m 0755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/gpm
+ fi
+ install -D -m 0644 ${S}/src/headers/gpm.h ${D}${includedir}/gpm.h
+ ln -s libgpm.so.2 ${D}${libdir}/libgpm.so
+}
+
+SYSTEMD_SERVICE_${PN} = "gpm.service"
+
+FILES_${PN} += "${datadir}/emacs"
diff --git a/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-Append-instead-of-overriding-LDFLAGS.patch b/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-Append-instead-of-overriding-LDFLAGS.patch
new file mode 100644
index 000000000..09a60127a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-Append-instead-of-overriding-LDFLAGS.patch
@@ -0,0 +1,26 @@
+From d67e93ada37d7237983fd10894c18b92f4243d50 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 08:51:45 -0700
+Subject: [PATCH] Makefile: Append instead of overriding LDFLAGS
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 28557ff..deed94c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -29,7 +29,7 @@ OPT_FLAGS := -O2
+ # for older versions of grsecurity, comment the above line and uncomment the below:
+ #OPT_FLAGS := $(shell if [ "`uname -m`" != "sparc64" ] && [ "`uname -m`" != "x86_64" ]; then echo "-O2" ; else echo "-O2 -m64" ; fi)
+ CFLAGS := $(OPT_FLAGS) -fPIE -Wcast-qual -DGRSEC_DIR=\"$(GRSEC_DIR)\" -D_LARGEFILE64_SOURCE
+-LDFLAGS= -pie
++LDFLAGS+= -pie
+ INSTALL = /usr/bin/install -c
+
+ # FHS
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-remove-strip.patch b/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-remove-strip.patch
new file mode 100644
index 000000000..f0c697c7b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gradm/gradm/0001-Makefile-remove-strip.patch
@@ -0,0 +1,61 @@
+From fbf7b9e5a8e2978acd5b0a7a8311912a080ee9b9 Mon Sep 17 00:00:00 2001
+From: Qian Lei <qianl.fnst@cn.fujitsu.com>
+Date: Thu, 18 Dec 2014 11:09:01 +0800
+Subject: [PATCH] Makefile: remove strip
+
+Avoid QA error by removing strip from Makefile
+
+[...]
+ERROR: QA Issue: File '/sbin/gradm' from gradm was already stripped,
+this will prevent future debugging! [already-stripped]
+ERROR: QA Issue: File '/sbin/grlearn' from gradm was already stripped,
+this will prevent future debugging! [already-stripped]
+[...]
+
+Upstream-Status: Pending
+
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+
+---
+ Makefile | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 6c33fee..3570a4e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -24,7 +24,6 @@ MKNOD=/bin/mknod
+ #CC=/usr/bin/diet /usr/bin/gcc
+ CC=/usr/bin/gcc
+ FIND=/usr/bin/find
+-STRIP=/usr/bin/strip
+ LIBS := $(shell if [ "`uname -m`" != "sparc64" -a "`uname -m`" != "x86_64" ]; then echo "-lfl" ; else echo "" ; fi)
+ OPT_FLAGS := -O2
+ # for older versions of grsecurity, comment the above line and uncomment the below:
+@@ -140,15 +139,12 @@ install: $(GRADM_BIN) gradm.8 policy grlearn
+ @mkdir -p $(DESTDIR)/sbin
+ @echo "Installing gradm..."
+ @$(INSTALL) -m 0755 $(GRADM_BIN) $(DESTDIR)/sbin
+- @$(STRIP) $(DESTDIR)/sbin/$(GRADM_BIN)
+ @if [ -f $(GRADM_PAM) ] ; then \
+ echo "Installing gradm_pam..." ; \
+ $(INSTALL) -m 4755 $(GRADM_PAM) $(DESTDIR)/sbin ; \
+- $(STRIP) $(DESTDIR)/sbin/$(GRADM_PAM) ; \
+ fi
+ @echo "Installing grlearn..."
+ @$(INSTALL) -m 0700 grlearn $(DESTDIR)/sbin
+- @$(STRIP) $(DESTDIR)/sbin/grlearn
+ @mkdir -p -m 700 $(DESTDIR)$(GRSEC_DIR)
+ @if [ ! -f $(DESTDIR)$(GRSEC_DIR)/policy ] ; then \
+ if [ -f $(DESTDIR)$(GRSEC_DIR)/acl ] ; then \
+@@ -168,6 +164,7 @@ install: $(GRADM_BIN) gradm.8 policy grlearn
+ $(MKNOD) -m 0622 $(DESTDIR)/dev/grsec c 1 13 ; \
+ fi \
+ fi
++ @mkdir -p $(DESTDIR)/etc/udev/rules.d
+ @if [ -d $(DESTDIR)/etc/udev/rules.d ] ; then \
+ echo "ACTION!=\"add|change\", GOTO=\"permissions_end\"" > $(DESTDIR)/etc/udev/rules.d/80-grsec.rules ; \
+ echo "KERNEL==\"grsec\", MODE=\"0622\"" >> $(DESTDIR)/etc/udev/rules.d/80-grsec.rules ; \
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gradm/gradm_3.1.bb b/meta-openembedded/meta-oe/recipes-support/gradm/gradm_3.1.bb
new file mode 100644
index 000000000..1a4261a9e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gradm/gradm_3.1.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Administration program for the grsecurity RBAC syste"
+DESCRIPTION = "\
+gradm is the userspace RBAC parsing and authentication program for \
+grsecurity grsecurity aims to be a complete security system. gradm \
+performs several tasks for the RBAC system including authenticated \
+via a password to the kernel and parsing rules to be passed to the \
+kernel"
+HOMEPAGE = "http://grsecurity.net/index.php"
+SECTION = "admin"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4641e94ec96f98fabc56ff9cc48be14b"
+DEPENDS = "flex-native bison-native ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+SRC_URI = "http://grsecurity.net/stable/${BP}-201507191652.tar.gz \
+ file://0001-Makefile-remove-strip.patch \
+ file://0001-Makefile-Append-instead-of-overriding-LDFLAGS.patch \
+ "
+SRC_URI[md5sum] = "ecec72d3a9b6d84c00eda97957b707b6"
+SRC_URI[sha256sum] = "2f14c357bf0459e502a4e108b76c3f6240aa484762d07bb1687796b9b9297a50"
+
+S = "${WORKDIR}/gradm"
+
+inherit autotools-brokensep
+
+do_compile() {
+ oe_runmake 'CC=${CC}' \
+ 'OPT_FLAGS=${CFLAGS}' \
+ 'LLEX=${STAGING_BINDIR_NATIVE}/lex' \
+ 'FLEX=${STAGING_BINDIR_NATIVE}/flex' \
+ 'BISON=${STAGING_BINDIR_NATIVE}/bison' \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', ' ', 'nopam', d)}
+}
+
+do_install() {
+ oe_runmake 'CC=${CC}' \
+ 'DESTDIR=${D}' \
+ 'LLEX=${STAGING_BINDIR_NATIVE}/lex' \
+ 'FLEX=${STAGING_BINDIR_NATIVE}/flex' \
+ 'BISON=${STAGING_BINDIR_NATIVE}/bison' \
+ install
+
+ # The device nodes are generated by postinstall or udev
+ rm -rf ${D}/dev
+}
+
+pkg_postinst_${PN}() {
+ # make sure running on the target
+ if [ x"$D" != "x" ]; then
+ exit 1
+ fi
+ /bin/mknod -m 0622 /dev/grsec c 1 13
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/gsl/gsl.inc b/meta-openembedded/meta-oe/recipes-support/gsl/gsl.inc
new file mode 100644
index 000000000..40613930b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gsl/gsl.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "GNU Scientific Library"
+HOMEPAGE = "http://www.gnu.org/software/gsl/"
+SECTION = "libs"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit autotools pkgconfig binconfig
+
+LEAD_SONAME = "libgsl.so"
diff --git a/meta-openembedded/meta-oe/recipes-support/gsl/gsl_1.15.bb b/meta-openembedded/meta-oe/recipes-support/gsl/gsl_1.15.bb
new file mode 100644
index 000000000..620e7804c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gsl/gsl_1.15.bb
@@ -0,0 +1,7 @@
+include gsl.inc
+
+SRC_URI = "${GNU_MIRROR}/gsl/gsl-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "494ffefd90eef4ada678c306bab4030b"
+SRC_URI[sha256sum] = "85b907e57902e2b7606ef3aef960302ffdd13bd9dc5b8fcbfa75e4f0bf340ea3"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-Fix-out-of-tree-builds.patch b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-Fix-out-of-tree-builds.patch
new file mode 100644
index 000000000..5ceb4bf02
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-Fix-out-of-tree-builds.patch
@@ -0,0 +1,178 @@
+From 8a10b6bd556426616e93f15639f369defbeca33f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 14 Aug 2017 11:58:58 -0700
+Subject: [PATCH] Fix out of tree builds
+
+When build dir is not same as sourcedir then the build failed due
+to use of $(srcdir) variable which assumes source = build therefore
+replace that with top_srcdir
+
+Additionally move the conditional addition of sources to Makefile.am
+instead of adding it in configure.ac, since then we can use top_srcdir
+variable to access those sources too otherwise its not possible to
+specify the right dir for these sources
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted[https://sourceforge.net/p/gsoap2/patches/171/]
+
+ configure.ac | 5 +++--
+ gsoap/Makefile.am | 14 +++++++-------
+ gsoap/samples/autotest/Makefile.am | 8 ++++----
+ gsoap/samples/databinding/Makefile.am | 8 ++++----
+ gsoap/wsdl/Makefile.am | 15 +++++++++------
+ 5 files changed, 27 insertions(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0631c18..c36e696 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -265,7 +265,7 @@ if test "x$with_openssl" = "xyes"; then
+ WSDL2H_EXTRA_FLAGS="-DWITH_OPENSSL -DWITH_GZIP"
+ # an ugly hack to get httpda and smdevp plugins to conditionally
+ # compile with wsdl2h when OPENSSL is available
+- WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} ../plugin/httpda.c ../plugin/smdevp.c ../plugin/threads.c -lssl -lcrypto -lz"
++ WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} -lssl -lcrypto -lz"
+ SAMPLE_INCLUDES=
+ SAMPLE_SSL_LIBS="-lssl -lcrypto -lz"
+ WSDL2H_SOAP_CPP_LIB="libgsoapssl++.a"
+@@ -289,12 +289,13 @@ else
+ SAMPLE_INCLUDES=
+ WSDL2H_SOAP_CPP_LIB="libgsoap++.a"
+ fi
++AM_CONDITIONAL(WITH_OPENSSL, test "x$with_openssl" = "xyes" -a "x$with_gnutls" != "xyes")
++AC_SUBST(WITH_OPENSSL)
+ AC_SUBST(WSDL2H_EXTRA_FLAGS)
+ AC_SUBST(WSDL2H_EXTRA_LIBS)
+ AC_SUBST(SAMPLE_INCLUDES)
+ AC_SUBST(SAMPLE_SSL_LIBS)
+ AC_SUBST(WSDL2H_SOAP_CPP_LIB)
+-
+ # enable the compile of the samples
+ AC_ARG_ENABLE(samples,
+ [ --enable-samples enable compile for the gsoap samples],
+diff --git a/gsoap/Makefile.am b/gsoap/Makefile.am
+index 7273b82..9c0c89f 100644
+--- a/gsoap/Makefile.am
++++ b/gsoap/Makefile.am
+@@ -13,26 +13,26 @@ AM_CXXFLAGS = $(SOAPCPP2_DEBUG) -D$(platform)
+ AM_CFLAGS = $(SOAPCPP2_DEBUG) -D$(platform)
+
+ # Install all soapcpp2 and wsdl2h files into ${prefix}/share/gsoap
+-nobase_pkgdata_DATA = $(srcdir)/import/* $(srcdir)/plugin/* $(srcdir)/WS/* $(srcdir)/custom/* $(srcdir)/extras/*
++nobase_pkgdata_DATA = $(top_srcdir)/gsoap/import/* $(top_srcdir)/gsoap/plugin/* $(top_srcdir)/gsoap/WS/* $(top_srcdir)/gsoap/custom/* $(top_srcdir)/gsoap/extras/*
+
+ ## we cannot build stdsoap2.o from 2 different sources (stdsoap2.cpp and stdsoap2.c), so we need an intermediate target:
+ stdsoap2_ck.c: stdsoap2.cpp
+- $(LN_S) -f $(srcdir)/stdsoap2.cpp stdsoap2_ck.c
++ $(LN_S) -f $(top_srcdir)/gsoap/stdsoap2.cpp stdsoap2_ck.c
+
+ stdsoap2_cpp.cpp: stdsoap2.cpp
+- $(LN_S) -f $(srcdir)/stdsoap2.cpp stdsoap2_cpp.cpp
++ $(LN_S) -f $(top_srcdir)/gsoap/stdsoap2.cpp stdsoap2_cpp.cpp
+
+ stdsoap2_ck_cpp.cpp: stdsoap2.cpp
+- $(LN_S) -f $(srcdir)/stdsoap2.cpp stdsoap2_ck_cpp.cpp
++ $(LN_S) -f $(top_srcdir)/gsoap/stdsoap2.cpp stdsoap2_ck_cpp.cpp
+
+ stdsoap2_ssl.c: stdsoap2.cpp
+- $(LN_S) -f $(srcdir)/stdsoap2.cpp stdsoap2_ssl.c
++ $(LN_S) -f $(top_srcdir)/gsoap/stdsoap2.cpp stdsoap2_ssl.c
+
+ stdsoap2_ssl_cpp.cpp: stdsoap2.cpp
+- $(LN_S) -f $(srcdir)/stdsoap2.cpp stdsoap2_ssl_cpp.cpp
++ $(LN_S) -f $(top_srcdir)/gsoap/stdsoap2.cpp stdsoap2_ssl_cpp.cpp
+ ## do the same fo dom.cpp since we want to link it into the cpp libs and dom.c into the c libs
+ dom_cpp.cpp: dom.cpp
+- $(LN_S) -f $(srcdir)/dom.cpp dom_cpp.cpp
++ $(LN_S) -f $(top_srcdir)/gsoap/dom.cpp dom_cpp.cpp
+
+ lib_LIBRARIES = libgsoap.a libgsoap++.a libgsoapck.a libgsoapck++.a libgsoapssl.a libgsoapssl++.a
+
+diff --git a/gsoap/samples/autotest/Makefile.am b/gsoap/samples/autotest/Makefile.am
+index 36adf51..61e514c 100644
+--- a/gsoap/samples/autotest/Makefile.am
++++ b/gsoap/samples/autotest/Makefile.am
+@@ -6,13 +6,13 @@
+ AUTOMAKE_OPTIONS = subdir-objects foreign 1.4
+
+ CPPFLAGS=-I$(top_srcdir)/gsoap -I$(top_srcdir)/gsoap/plugin
+-AM_LDFLAGS=$(CPPFLAGS) -I$(srcdir) -L$(srcdir)
++AM_LDFLAGS=$(CPPFLAGS) -I$(top_srcdir)/gsoap/samples/autotest -L$(top_srcdir)/gsoap/samples/autotest
+ SOAP=$(top_srcdir)/gsoap/src/soapcpp2$(EXEEXT)
+ WSDL=$(top_srcdir)/gsoap/wsdl/wsdl2h$(EXEEXT)
+-WSDL_FLAGS=-d -P -t $(srcdir)/typemap.dat
++WSDL_FLAGS=-d -P -t $(top_srcdir)/gsoap/samples/autotest/typemap.dat
+ SOAP_FLAGS=-SL -T -I$(top_srcdir)/gsoap/import -I$(top_srcdir)/gsoap/custom
+-WSDLINPUT=$(srcdir)/examples.wsdl
+-SOAPHEADER=$(srcdir)/examples.h
++WSDLINPUT=$(top_srcdir)/gsoap/samples/autotest/examples.wsdl
++SOAPHEADER=$(top_srcdir)/gsoap/samples/autotest/examples.h
+ SOAP_CPP_SRC=soapC.cpp soapServer.cpp
+ SOAP_CPP_LIB=$(top_builddir)/gsoap/libgsoap++.a
+
+diff --git a/gsoap/samples/databinding/Makefile.am b/gsoap/samples/databinding/Makefile.am
+index 892d4fd..86ad482 100644
+--- a/gsoap/samples/databinding/Makefile.am
++++ b/gsoap/samples/databinding/Makefile.am
+@@ -6,13 +6,13 @@
+ AUTOMAKE_OPTIONS = subdir-objects foreign 1.4
+
+ CPPFLAGS=$(SAMPLE_INCLUDES) -I$(top_srcdir)/gsoap -I$(top_srcdir)/gsoap/plugin
+-AM_LDFLAGS=$(AM_CPPFLAGS) -I$(srcdir) -L$(srcdir)
++AM_LDFLAGS=$(AM_CPPFLAGS) -I$(top_srcdir)/gsoap/samples/databinding -L$(top_srcdir)/gsoap/samples/databinding
+ SOAP=$(top_srcdir)/gsoap/src/soapcpp2$(EXEEXT)
+ WSDL=$(top_srcdir)/gsoap/wsdl/wsdl2h$(EXEEXT)
+-WSDL_FLAGS=-g -t $(srcdir)/addresstypemap.dat
++WSDL_FLAGS=-g -t $(top_srcdir)/gsoap/samples/databinding/addresstypemap.dat
+ SOAP_FLAGS=-0 -CS -p address -I$(top_srcdir)/gsoap/import
+-WSDLINPUT=$(srcdir)/address.xsd
+-SOAPHEADER=$(srcdir)/address.h
++WSDLINPUT=$(top_srcdir)/gsoap/samples/databinding/address.xsd
++SOAPHEADER=$(top_srcdir)/gsoap/samples/databinding/address.h
+ SOAP_CPP_SRC=addressC.cpp
+ SOAP_CPP_LIB=$(top_builddir)/gsoap/libgsoap++.a
+
+diff --git a/gsoap/wsdl/Makefile.am b/gsoap/wsdl/Makefile.am
+index b8da5db..9f2aefa 100644
+--- a/gsoap/wsdl/Makefile.am
++++ b/gsoap/wsdl/Makefile.am
+@@ -6,14 +6,14 @@
+ AUTOMAKE_OPTIONS = foreign 1.4
+
+ # INCLUDES=-I$(top_srcdir)/gsoap
+-# AM_LDFLAGS=$(INCLUDES) -I$(srcdir) -L$(srcdir)
+-AM_LDFLAGS=-L$(srcdir) -I$(top_srcdir)/gsoap -I$(top_srcdir)/gsoap/plugin
++# AM_LDFLAGS=$(INCLUDES) -I$(top_srcdir)/gsoap/wsdl -L$(top_srcdir)/gsoap/wsdl
++AM_LDFLAGS=-L$(top_srcdir)/gsoap/wsdl -I$(top_srcdir)/gsoap -I$(top_srcdir)/gsoap/plugin
+ AM_CPPFLAGS=-I$(top_srcdir)/gsoap -I$(top_srcdir)/gsoap/plugin
+ SOAP=$(top_builddir)/gsoap/src/soapcpp2$(EXEEXT)
+ SOAP_CPP_LIB=$(top_builddir)/gsoap/$(WSDL2H_SOAP_CPP_LIB)
+ SOAP_CPP_SRC=wsdlC.cpp
+-SOAPHEADER=$(srcdir)/wsdl.h
+-SOAP_FLAGS=-SC -pwsdl -I$(srcdir) -I$(top_srcdir)/gsoap/import
++SOAPHEADER=$(top_srcdir)/gsoap/wsdl/wsdl.h
++SOAP_FLAGS=-SC -pwsdl -I$(top_srcdir)/gsoap/wsdl -I$(top_srcdir)/gsoap/import
+ BUILT_SOURCES=$(SOAP_CPP_SRC)
+ # WSDL2H_EXTRA_FLAGS=-DWITH_OPENSSL -DWITH_GZIP # defined in configure.in
+ # WSDL2H_EXTRA_LIBS=-lssl -lcrypto -lz # defined in configure.in
+@@ -24,11 +24,14 @@ $(SOAP_CPP_SRC) : $(SOAPHEADER)
+ #LIBS=
+
+ bin_PROGRAMS=wsdl2h
+-
++if WITH_OPENSSL
++wsdl2h_LDADD=$(SOAP_CPP_LIB) $(top_srcdir)/gsoap/plugin/httpda.c $(top_srcdir)/gsoap/plugin/smdevp.c $(top_srcdir)/gsoap/plugin/threads.c $(WSDL2H_EXTRA_LIBS)
++else
++wsdl2h_LDADD=$(SOAP_CPP_LIB) $(WSDL2H_EXTRA_LIBS)
++endif
+ wsdl2h_CFLAGS=$(C_DEBUG_FLAGS) $(SOAPCPP2_NO_C_LOCALE) $(WSDL2H_EXTRA_FLAGS)
+ wsdl2h_CXXFLAGS=$(C_DEBUG_FLAGS) $(SOAPCPP2_NO_C_LOCALE) $(WSDL2H_EXTRA_FLAGS) $(WSDL2H_IMPORTPATH)
+ wsdl2h_CPPFLAGS=$(AM_CPPFLAGS) $(SOAPCPP2_NONAMESPACES) -D$(platform)
+ wsdl2h_SOURCES=wsdl2h.cpp wsdl.cpp wadl.cpp schema.cpp types.cpp service.cpp soap.cpp mime.cpp wsp.cpp bpel.cpp $(SOAP_CPP_SRC)
+-wsdl2h_LDADD=$(SOAP_CPP_LIB) $(WSDL2H_EXTRA_LIBS)
+
+ CLEANFILES= *~ *C.cpp *H.h *Stub.h *.nsmap
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-stdgsoap2-Fix-build-with-musl.patch b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-stdgsoap2-Fix-build-with-musl.patch
new file mode 100644
index 000000000..571cbe540
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap/0001-stdgsoap2-Fix-build-with-musl.patch
@@ -0,0 +1,63 @@
+From db260fbc7af4c73c997c485a0c69c61594a0e59c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 19:48:50 -0700
+Subject: [PATCH] stdgsoap2: Fix build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gsoap/stdsoap2.c | 2 +-
+ gsoap/stdsoap2.cpp | 4 ++--
+ gsoap/stdsoap2.h | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/gsoap/stdsoap2.c b/gsoap/stdsoap2.c
+index 58e9df4..62389e1 100644
+--- a/gsoap/stdsoap2.c
++++ b/gsoap/stdsoap2.c
+@@ -4462,7 +4462,7 @@ tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
+ return soap->error = SOAP_EOM;
+ return SOAP_OK;
+ }
+-#if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__)
++#if defined(LINUX) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__)
+ if (gethostbyname_r(addr, &hostent, soap->buf, sizeof(soap->buf), &host, &soap->errnum) < 0)
+ host = NULL;
+ #elif defined(_AIX43) || ((defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R))
+diff --git a/gsoap/stdsoap2.cpp b/gsoap/stdsoap2.cpp
+index 58e9df4..b637161 100644
+--- a/gsoap/stdsoap2.cpp
++++ b/gsoap/stdsoap2.cpp
+@@ -4462,7 +4462,7 @@ tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
+ return soap->error = SOAP_EOM;
+ return SOAP_OK;
+ }
+-#if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__)
++#if defined(LINUX) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__)
+ if (gethostbyname_r(addr, &hostent, soap->buf, sizeof(soap->buf), &host, &soap->errnum) < 0)
+ host = NULL;
+ #elif defined(_AIX43) || ((defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R))
+@@ -19658,7 +19658,7 @@ soap_strerror(struct soap *soap)
+ {
+ #ifndef WIN32
+ # ifdef HAVE_STRERROR_R
+-# if defined(_GNU_SOURCE) && !defined(__ANDROID__)
++# if defined(_GNU_SOURCE) && !defined(__ANDROID__) && defined(__GLIBC__)
+ return strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* GNU-specific */
+ # else
+ strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* XSI-compliant */
+diff --git a/gsoap/stdsoap2.h b/gsoap/stdsoap2.h
+index 07a3952..c6ace4c 100644
+--- a/gsoap/stdsoap2.h
++++ b/gsoap/stdsoap2.h
+@@ -947,7 +947,7 @@ extern "C" {
+ # endif
+ #elif defined(SOCKLEN_T)
+ # define SOAP_SOCKLEN_T SOCKLEN_T
+-#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__) || defined(_XOPEN_SOURCE)
++#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__) || defined(_XOPEN_SOURCE) || defined (LINUX)
+ # define SOAP_SOCKLEN_T socklen_t
+ #elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
+ # define SOAP_SOCKLEN_T int
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.51.bb b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.51.bb
new file mode 100644
index 000000000..887584461
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.51.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "The gSOAP toolkit provides a unique SOAP-to-C/C++ language binding \
+for the development of SOAP Web Services and clients."
+SECTION = "devel"
+LICENSE = "GPL-2.0-with-OpenSSL-exception"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4f40a941379143186f9602242c3fb729 \
+ file://GPLv2_license.txt;md5=a33672dbe491b6517750a0389063508b"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}2/${BPN}_${PV}.zip \
+ file://0001-Fix-out-of-tree-builds.patch \
+ file://0001-stdgsoap2-Fix-build-with-musl.patch \
+ "
+SRC_URI[md5sum] = "212951d6e1435bb51fa4320f458809ea"
+SRC_URI[sha256sum] = "3e7bb24a9e492f5cb86daca34054c9787152f1d7b70add36b789d03816d5ffa1"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
+
+S = "${WORKDIR}/${BPN}-2.8"
+
+PARALLEL_MAKE = ""
+
+EXTRA_OEMAKE_class-target = "SOAP=${STAGING_BINDIR_NATIVE}/soapcpp2"
+
+DEPENDS = "openssl zlib flex bison"
+DEPENDS_append_class-target = " gsoap-native"
+
+do_install_append() {
+ install -d ${D}${libdir}
+ for lib in libgsoapssl libgsoapssl++ libgsoap libgsoapck++ libgsoap++ libgsoapck
+ do
+ oe_libinstall -C gsoap $lib ${D}${libdir}
+ done
+}
+
+do_install_class-native() {
+ oe_runmake DESTDIR=${D} BINDIR=${D}${bindir} install
+}
+
+FILES_${PN} = "${bindir}/wsdl2h ${bindir}/soapcpp2"
+FILES_${PN} += "${datadir}"
+FILES_${PN}-staticdev = "${libdir}"
+FILES_${PN}-dev = "${includedir}"
+RRECOMMENDS_${PN}-dev = "${PN}-staticdev"
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/0001-backtrace-Replace-struct-ucontext-with-ucontext_t.patch b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/0001-backtrace-Replace-struct-ucontext-with-ucontext_t.patch
new file mode 100644
index 000000000..cfffa2ed0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/0001-backtrace-Replace-struct-ucontext-with-ucontext_t.patch
@@ -0,0 +1,37 @@
+From d195f8cfe41991573128ccdcd3a0ed0267aa5e33 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 28 Jun 2017 19:44:46 -0700
+Subject: [PATCH] backtrace: Replace struct ucontext with ucontext_t
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/backtrace.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/backtrace.c b/src/backtrace.c
+index 69bee99..dc35f8f 100644
+--- a/src/backtrace.c
++++ b/src/backtrace.c
+@@ -42,7 +42,7 @@
+ #define MAX_BTSIZE 64
+
+ void backtrace_handler(int n, siginfo_t *ist, void *extra) {
+- static struct ucontext *puc;
++ static ucontext_t *puc;
+ static void *btinfo[MAX_BTSIZE];
+ static char **messages = NULL;
+ static size_t btsize = 0;
+@@ -58,7 +58,7 @@ void backtrace_handler(int n, siginfo_t *ist, void *extra) {
+
+ #define SIC_CASE(c) case c: strerr = #c
+
+- puc = (struct ucontext *)extra;
++ puc = (ucontext_t *)extra;
+ switch(n) {
+ case SIGSEGV:
+ switch(ist->si_code) {
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-0.3-beta15-autodetect-717479.patch b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-0.3-beta15-autodetect-717479.patch
new file mode 100644
index 000000000..1ec6a61b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-0.3-beta15-autodetect-717479.patch
@@ -0,0 +1,92 @@
+Auto-detect disks if none specified
+
+Refer to:
+https://bugzilla.redhat.com/show_bug.cgi?id=717479
+
+Index: hddtemp-0.3-beta15/doc/hddtemp.8
+===================================================================
+--- hddtemp-0.3-beta15.orig/doc/hddtemp.8
++++ hddtemp-0.3-beta15/doc/hddtemp.8
+@@ -19,7 +19,7 @@
+ hddtemp \- Utility to monitor hard drive temperature
+ .SH SYNOPSIS
+ .B hddtemp
+-.RI [ options ] " [type:]disk" ...
++.RI [ options ] " [[type:]disk]" ...
+ .SH "DESCRIPTION"
+ .PP
+ .B hddtemp
+@@ -35,7 +35,8 @@ You can specify one or more device drive
+ with a
+ .B type
+ like PATA, SATA or SCSI to force hddtemp too use one of these type
+-(because detection can fail).
++(because detection can fail). If no paths are specified, autodetection of
++installed drives is attempted.
+
+
+ .SH "OPTIONS"
+Index: hddtemp-0.3-beta15/src/hddtemp.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/hddtemp.c
++++ hddtemp-0.3-beta15/src/hddtemp.c
+@@ -54,6 +54,7 @@
+ #include <linux/hdreg.h>
+ #include <ctype.h>
+ #include <assert.h>
++#include <glob.h>
+
+ // Application specific includes
+ #include "ata.h"
+@@ -255,6 +256,7 @@ int main(int argc, char* argv[]) {
+ int ret = 0;
+ int show_db;
+ struct disk * ldisks;
++ glob_t diskglob;
+
+ backtrace_sigsegv();
+ backtrace_sigill();
+@@ -423,11 +425,6 @@ int main(int argc, char* argv[]) {
+ exit(0);
+ }
+
+- if(argc - optind <= 0) {
+- fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n"));
+- exit(1);
+- }
+-
+ if(debug) {
+ /* argc = optind + 1;*/
+ quiet = 1;
+@@ -438,6 +435,23 @@ int main(int argc, char* argv[]) {
+ exit(1);
+ }
+
++ memset(&diskglob, 0, sizeof(glob_t));
++ if(argc - optind <= 0) {
++ if(glob("/dev/[hs]d[a-z]", 0, NULL, &diskglob) == 0) {
++ argc = diskglob.gl_pathc;
++ argv = diskglob.gl_pathv;
++ optind = 0;
++ } else {
++ argc = 0;
++ }
++ }
++
++ if(argc - optind <= 0) {
++ globfree(&diskglob);
++ fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n"));
++ exit(1);
++ }
++
+ init_bus_types();
+
+ /* collect disks informations */
+@@ -531,6 +545,7 @@ int main(int argc, char* argv[]) {
+ else {
+ do_direct_mode(ldisks);
+ }
++ globfree(&diskglob);
+
+ return ret;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-no-nls-support.patch b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-no-nls-support.patch
new file mode 100644
index 000000000..8f6b9c3c4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp-no-nls-support.patch
@@ -0,0 +1,66 @@
+diff -ru hddtemp-0.3-beta15.orig/configure.in hddtemp-0.3-beta15/configure.in
+--- hddtemp-0.3-beta15.orig/configure.in 2005-10-17 20:14:19.000000000 +0100
++++ hddtemp-0.3-beta15/configure.in 2008-06-27 00:00:46.000000000 +0100
+@@ -17,6 +17,7 @@
+ # append the host alias to the tools for cross compiling
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(fcntl.h)
++AC_CHECK_HEADERS(iconv.h)
+ AC_CHECK_HEADERS(netinet/in.h)
+ AC_CHECK_TYPE(in_addr_t, ,[AC_DEFINE_UNQUOTED([in_addr_t], [uint32_t], [Define to 'uint32_t' if <netinet/in.h> does not define.])], [#include <netinet/in.h>])
+
+@@ -29,6 +30,8 @@
+ AM_GNU_GETTEXT
+ #AM_GNU_GETTEXT([external])
+
++AC_CHECK_FUNCS([bindtextdomain textdomain iconv])
++
+ dnl reasonable guesses for where stuff is installed
+ dnl if we don't do that now, the config.h will use ${prefix}
+ dnl for DEFAULT_DATABASE_PATH.
+diff -ru hddtemp-0.3-beta15.orig/src/hddtemp.c hddtemp-0.3-beta15/src/hddtemp.c
+--- hddtemp-0.3-beta15.orig/src/hddtemp.c 2006-04-19 03:37:35.000000000 +0100
++++ hddtemp-0.3-beta15/src/hddtemp.c 2008-06-26 23:59:40.000000000 +0100
+@@ -276,8 +276,12 @@
+ backtrace_sigbus();
+
+ setlocale (LC_ALL, "");
++#ifdef HAVE_BINDTEXTDOMAIN
+ bindtextdomain (PACKAGE, LOCALEDIR);
++#endif
++#ifdef HAVE_TEXTDOMAIN
+ textdomain (PACKAGE);
++#endif
+
+ show_db = debug = numeric = quiet = wakeup = af_hint = syslog_interval = 0;
+ unit = DEFAULT;
+diff -ru hddtemp-0.3-beta15.orig/src/utf8.c hddtemp-0.3-beta15/src/utf8.c
+--- hddtemp-0.3-beta15.orig/src/utf8.c 2006-04-19 03:37:02.000000000 +0100
++++ hddtemp-0.3-beta15/src/utf8.c 2008-06-27 00:02:15.000000000 +0100
+@@ -23,7 +23,9 @@
+
+ // Standard includes
+ #include <stdlib.h>
++#ifdef HAVE_ICONV_H
+ #include <iconv.h>
++#endif
+ #include <langinfo.h>
+ #include <locale.h>
+ #include <string.h>
+@@ -34,6 +36,7 @@
+
+ static char *iconv_from_utf8_to_locale(const char *string, const char* fallback_string)
+ {
++#ifdef HAVE_ICONV
+ const size_t buffer_inc = 80; // Increment buffer size in 80 bytes step
+ const char *charset;
+ iconv_t cd;
+@@ -93,6 +96,8 @@
+ if (dest_buffer != NULL)
+ free(dest_buffer); // free buffer
+ free(src_buffer); // free string
++#endif
++
+ return strdup(fallback_string); // and return fallback string
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp.db b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp.db
new file mode 100644
index 000000000..7b0cbd93e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp.db
@@ -0,0 +1,531 @@
+#
+# Insert a regular expression for support of the model or the serie of your hard drive.
+# If you don't know what to put in the second field, put the number
+# that appears most often for your brand :o)
+# A value of zero meens that we know that the drive doesn't have
+# a temperature sensor (you can set the unit to C or F).
+#
+############################################################################
+# The following list was found at (http://www.almico.com/forumharddisks.php)
+# If your drive is in the list send me a mail.
+#
+# Manufacturer Model Size Notes
+# FUJITSU FUJITSU MPF3102AH 10.0GB
+# FUJITSU FUJITSU MPG3204AH E 20.0GB
+# FUJITSU FUJITSU MPG3307AT 30.0GB
+# FUJITSU FUJITSU MPG3409AH 40.0GB
+# FUJITSU FUJITSU MPG3409AH EF 40.0GB
+# HITACHI HITACHI_DK23CA-10 9.8GB
+# HITACHI HITACHI_DK23CA-15 14.7GB
+# SAMSUNG SAMSUNG SV3012H 29.4GB
+# SEAGATE ST310210A 10.0GB
+# SEAGATE ST310211A 9.8GB
+# SEAGATE ST310215A 10.0GB
+# SEAGATE ST315320A 14.9GB
+# SEAGATE ST320410A 19.6GB
+# SEAGATE ST320413A 19.6GB
+# SEAGATE ST320420A 19.9GB
+# SEAGATE ST330610A 29.3GB
+# SEAGATE ST330620A 29.3GB
+# SEAGATE ST330621A 29.3GB
+# SEAGATE ST330630A 29.9GB
+# SEAGATE ST340016A 39.1GB
+# SEAGATE ST340810ACE 39.1GB
+# SEAGATE ST380020ACE 78.2GB
+# WESTERN DIGITAL WDC AC210200D 10.0GB
+# WESTERN DIGITAL WDC AC29100D 8.9GB
+# WESTERN DIGITAL WDC AC420400D 19.9GB
+# WESTERN DIGITAL WDC WD102AA 10.0GB
+#
+#################################################
+
+########################################
+############# ExcelStor drives
+########################################
+# "ExcelStor Technology CT215" ??? ? "ExcelStor CT215"
+"ExcelStor Technology J3.0" 194 C "ExcelStor Technology 3xy (xy GB)"
+"ExcelStor Technology J6.0" 194 C "ExcelStor Technology 6xy (xy GB)"
+"ExcelStor Technology J680" 194 C "ExcelStor Technology J680 (80 GB)"
+"ExcelStor Technology J860" 194 C "ExcelStor Technology J860 (60 GB)"
+"ExcelStor Technology J880" 194 C "ExcelStor Technology J880 (80 GB)"
+
+
+
+########################################
+############# Fujitsu drives
+########################################
+"FUJITSU MHM2100AT" 0 C "Fujitsu MHM2100AT"
+
+"FUJITSU MHN2150AT" 194 C "Fujitsu MHN2150AT"
+"FUJITSU MHN2200AT" 194 C "Fujitsu MHN2200AT"
+"FUJITSU MHN2300AT" 194 C "Fujitsu MHN2300AT"
+
+"FUJITSU MHR2020AT" 194 C "Fujitsu MHR2020AT"
+"FUJITSU MHR2030AT" 194 C "Fujitsu MHR2030AT"
+
+"FUJITSU MHS2030AT" 194 C "Fujitsu MHS2030AT"
+"FUJITSU MHS2040AT" 194 C "Fujitsu MHS2040AT"
+"FUJITSU MHS2060AT" 194 C "Fujitsu MHS2060AT (Apple PowerBook G4)"
+
+"FUJITSU MHT2030AC" 194 C "Fujitsu Mobile 30GB, 2MB, 4200RPM (automotive)"
+
+"FUJITSU MHT2030AT" 194 C "Fujitsu MHT2030AT"
+"FUJITSU MHT2040AH" 194 C "Fujitsu MHT2040AH"
+"FUJITSU MHT2040AT" 194 C "Fujitsu MHT2040AT"
+"FUJITSU MHT2060AH" 194 C "Fujitsu MHT2060AH"
+"FUJITSU MHT2060AT" 194 C "Fujitsu MHT2060AT"
+"FUJITSU MHT2080AH" 194 C "Fujitsu MHT2080AH"
+
+"FUJITSU MHU2100AT" 194 C "Fujitsu MHU2100AT 100GB, 8MB (4200RPM)"
+
+"FUJITSU MHV2100AH" 194 C "FUJITSU MHV2100AH"
+"FUJITSU MHV2100AT" 194 C "FUJITSU MHV2100AT"
+"FUJITSU MHV2100BH" 194 C "FUJITSU MHV2100BH"
+"FUJITSU MHV2060AH" 194 C "FUJITSU MHV2060AH"
+"FUJITSU MHV2080[AB]H" 194 C "FUJITSU MHV2080AH"
+
+"FUJITSU MPF3204AH" 194 C "Fujitsu MPF3204AH"
+
+"FUJITSU MPG3204AT.*" 194 C "Fujitsu MPG3204AT"
+"FUJITSU MPG3307AT" 194 C "Fujitsu MPG3307AT"
+"FUJITSU MPG3409AT.*" 194 C "Fujitsu MPG3409AT E"
+"FUJITSU MPG3409AH.*" 194 C "Fujitsu MPG3409AH E"
+"FUJITSU MPG3204AH" 194 C "Fujitsu MPG3204AH"
+"FUJITSU MPG3102AT E" 194 C "FUJITSU MPG3102AT E"
+
+
+
+########################################
+############# Hitachi drives
+########################################
+"HITACHI_DK13FA-40B" 194 C "Hitachi DK13FA-40B"
+"HITACHI_DK228A-65" 0 C "Hitachi DK228A-65"
+"HITACHI_DK23CA-(15|20|30|30B|75)" 194 C "Hitachi DK23CA series"
+"HITACHI_DK23DA-[234]0" 194 C "Hitachi DK23DA series"
+"HITACHI_DK23EA-[2346]0" 194 C "Hitachi DK23EA series"
+"HITACHI_DK23EB-40" 194 C "Hitachi DK23EB series"
+"HITACHI_DK23FA-[468]0" 194 C "Hitachi DK23FA series"
+"HITACHI_DK23FB-[46]0" 194 C "Hitachi DK23FB series"
+
+"HDS722516VLAT[28]0" 194 C "Hitachi Deskstar 7K250 160GB 2/8MB cache"
+"HDS722525VLAT80" 194 C "Hitachi Deskstar 7K250 200/250GB, 7200RPM, 8MB, Parallel-ATA"
+"HDS722512VLAT80" 194 C "Hitachi Deskstar 7K250 80GB"
+"HDS722540VLAT20" 194 C "Hitachi Deskstar 7K250, 40GB, 7200RPM, 2MB cache"
+"HDS722580VLAT20" 194 C "Deskstar 7K250 60GB"
+"HDS724040KLSA80" 194 C "Hitachi Deskstar 7K250 400GB, 7200RPM, 8MB, Serial-ATA"
+"HDS728080PLAT20" 194 C "Hitachi Deskstar 7K80 80GB"
+
+"HDS722525VLSA80" 194 C "Hitachi Deskstar 7K250 250GB, 7200RPM, 8MB, SATA"
+"HDS722516VLSA80" 194 C "Hitachi Deskstar 7K250 160GB 8Mo cache SATA"
+"HDS722580VLSA80" 194 C "Hitachi Deskstar 7K250 80GB SATA"
+"HDS728040PLAT20" 194 C "Hitachi Deskstar 7K80 40GB"
+
+"HDS724040KLAT80" 194 C "Hitachi Deskstar 7K400 400GB 8Mo cache PATA"
+
+"HDT7225(16|25)DLAT80" 194 C "Hitachi Deskstar T7K250 series, 7200RPM, 8MB, PATA"
+"HDT722516DLA380 V43O" 194 C "Hitachi T7K250 SATA"
+"HDT722525DLA380" 194 C "Hitachi Deskstar T7K250 250GB 8Mo cache SATAII"
+"HDT725050VLA360" 194 C "Hitachi Deskstar T7K500 500GB, 7200RPM, 16MB, SATA II"
+
+"HTE721010G9AT00" 194 C "Hitachi Travelstar 100GB (7200RPM)"
+"HTE726060M9AT00" 194 C "Hitachi Travelstar 60GB (7200RPM)"
+"HTS424030M9AT00" 194 C "Hitachi Travelstar 30GB (4200RPM)"
+"HTS424040M9AT00" 194 C "Hitachi Travelstar 4K40 40GB 2MB cache (4200RPM)"
+"HTS541010G9SA00" 194 C "Hitachi Travelstar 100GB SATA"
+"HTS541040G9AT00" 194 C "Hitachi Travelstar 40GB (5400RPM)"
+"HTS541080G9AT00" 194 C "Hitachi Travelstar 80GB (5400RPM)"
+"HTS548020M9AT00" 194 C "Hitachi Travelstar 20GB (5400RPM)"
+"HTS548030M9AT00" 194 C "Hitachi Travelstar 30GB (5400RPM)"
+"HTS548040M9AT00" 194 C "Hitachi Travelstar 40GB (5400RPM)"
+"HTS548060M9AT00" 194 C "Hitachi Travelstar 60GB (5400RPM)"
+"HTS548080M9AT00" 194 C "Hitachi Travelstar 80GB (5400RPM)"
+"HTS721080G9AT00" 194 C "Hitachi Travelstar 7K100 80GB (7200RPM)"
+"HTS726060M9AT00" 194 C "Hitachi Travelstar 60GB"
+
+
+########################################
+############# IBM drives
+########################################
+
+# DJSA serie is using F0h command to report temperature and also have
+# SMART capabilties but it was reported not to work.
+# "DJSA-2(30|32|10|20|05)" 0 C "IBM Travelstar 20GN, 32GH, 30GT series"
+
+"IBM-DARA-212000" 0 C "IBM Travelstar 12GN"
+"IBM-DTTA-35*" 0 C "IBM Deskstar 16GP serie"
+
+# according to specifications they do not seems to have sensor
+# but I prefer waiting for a report
+#"IBM-DTTA-37*" 0 C "IBM Deskstar 14GXP serie"
+
+"IBM-DJNA-35.*" 231 C "IBM Deskstar 25 GP serie"
+"IBM-DJNA-37.*" 231 C "IBM Deskstar 22 GXP serie"
+"IBM-DHEA-(34330|36480)" 0 C "IBM Deskstar 5 serie"
+"IBM-DHEA-(34331|36481|38451)" 0 C "IBM Deskstar 8 serie"
+"IBM-DPTA-37.*" 231 C "IBM Deskstar 34GXP serie"
+"IBM-DPTA-35.*" 231 C "IBM Deskstar 37GP serie"
+"IBM-DTLA-30[57]0[123467][05]" 194 C "IBM Deskstar 40GV & 75GXP series"
+"IC25N0[1234]0ATCS04-0" 194 C "IBM Travelstar 40GN serie"
+"IC25N0[24]0ATC[SX]05-0" 194 C "IBM Travelstar 40GNX serie"
+"IC25N0(10|15|20|30)ATDA04-0" 194 C "IBM Travelstar 30GN serie"
+"IC25N0[23468]0ATMR04*" 194 C "Hitachi Travelstar 80GN"
+"IC25T048ATDA05-0" 194 C "IBM Travelstar 48GH serie"
+"IC25T060ATC[SX]05-0" 194 C "IBM Travelstar 60GH serie"
+"IC35L0[12346]0AVER07" 194 C "IBM Deskstar 60GXP serie"
+"IC35L[01][02468]0AVV[AN]07*" 194 C "IBM Deskstar 120GXP serie"
+"IC35L[01][23689]0AVV207*" 194 C "IBM Deskstar 180GXP serie"
+
+########################################
+############# Maxtor drives
+########################################
+#"Maxtor 2B0[012][04568]H1" ??? C "Maxtor Fireball 541DX"
+"Maxtor 2F0[234]0[LJ]0" 194 C "Maxtor Fireball 3"
+# which one must I trust ?
+#"Maxtor 4D040H2" 9 C "Maxtor DiamondMax D540X-4D"
+#"Maxtor 4D040H2" 0 C "Maxtor 4D040H2"
+#"Maxtor 4D080H4" 12 C "Maxtor DiamondMax D540X-4D"
+#"Maxtor 4D060H3" 12 C "Maxtor DiamondMax D540X-4D"
+#"Maxtor 4D080H4" 9 C "Maxtor DiamondMax D540X-4D"
+"MAXTOR 4K0[468]0H[234]" 194 C "Maxtor DiamondMax D540X serie"
+"MAXTOR 4K020H1" 194 C "Maxtor 4K020H1"
+"Maxtor 4A300J0" 194 C "Maxtor MaxLine II 300GB 5400RPM"
+"Maxtor 4[RA](25|16|12|08|06)0[LJ]0" 194 C "Maxtor DiamondMax 16"
+"Maxtor 5(1024|1369|2049|2732|3073|4098)U(2|3|4|6|8)" 0 C "Maxtor DiamondMax Plus 40"
+"Maxtor 5A250J0" 194 C "Maxtor MaXline II 250GB 5400RPM"
+"Maxtor 5A300J0" 194 C "Maxtor 5A300J0"
+"Maxtor 5T0[24]0H[24]" 0 C "Maxtor DiamondMax Plus 60"
+"Maxtor 6E0[234]0L0" 194 C "Maxtor DiamondMax Plus 8"
+"MAXTOR 6L0[2468]0[LJ][1234]" 194 C "Maxtor DiamondMax Plus D740X family"
+"Maxtor 6V320F0" 194 C "Maxtor Diamond Max 10 SATA II 320 GB"
+"Maxtor 6Y(06|08|12|16|20|25)0[LPM]0" 194 C "Maxtor DiamondMax Plus 9"
+"Maxtor 7L300[RS]0" 194 C "Maxtor 7L300R0 MaxLine+III 300GB 7200rpm"
+"Maxtor 7Y250[PM]0" 194 C "Maxtor MaXLine Plus II 250GB 7200RPM"
+"Maxtor 94098U8" 11 C "Maxtor DiamondMax 40 94098U8"
+
+#"Maxtor 6(B|L)(08|12|16|20|25|30)0[RSPM]0" 194 C "Maxtor DiamondMax Plus 10"
+"Maxtor 6B080M0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATA"
+"Maxtor 6B120M0" 194 C "Maxtor DiamondMax 10 120GB 8MB SATA"
+"Maxtor 6B160M0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATA"
+"Maxtor 6B160P0" 194 C "Maxtor DiamondMax 10 160GB 8MB ATA/133"
+"Maxtor 6B200M0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATA"
+"Maxtor 6B200P0" 194 C "Maxtor DiamondMax 10 200GB 8MB ATA/133"
+"Maxtor 6B250R0" 194 C "Maxtor DiamondMax 10 250GB 16MB ATA/133"
+"Maxtor 6B250S0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATA"
+"Maxtor 6B300R0" 194 C "Maxtor DiamondMax 10 300GB 16MB ATA/133"
+"Maxtor 6B300S0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATA"
+"Maxtor 6L080L0" 194 C "Maxtor DiamondMax 10 80GB 2MB ATA/133 RoHS"
+"Maxtor 6L080M0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATA RoHS"
+"Maxtor 6L080P0" 194 C "Maxtor DiamondMax 10 80GB 8MB ATA/133 RoHS"
+"Maxtor 6L120M0" 194 C "Maxtor DiamondMax 10 120GB 8MB SATA RoHS"
+"Maxtor 6L120P0" 194 C "Maxtor DiamondMax 10 120GB 8MB ATA/133 RoHS"
+"Maxtor 6L160M0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATA RoHS"
+"Maxtor 6L160P0" 194 C "Maxtor DiamondMax 10 160GB 8MB ATA/133 RoHS"
+"Maxtor 6L200M0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATA RoHS"
+"Maxtor 6L200P0" 194 C "Maxtor DiamondMax 10 200GB 8MB ATA/133 RoHS"
+"Maxtor 6L250R0" 194 C "Maxtor DiamondMax 10 250GB 16MB ATA/133 RoHS"
+"Maxtor 6L250S0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATA RoHS"
+"Maxtor 6L300R0" 194 C "Maxtor DiamondMax 10 300GB 16MB ATA/133 RoHS"
+"Maxtor 6L300S0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATA RoHS"
+"Maxtor 6V080E0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATAII RoHS"
+"Maxtor 6V160E0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATAII RoHS"
+"Maxtor 6V200E0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATAII RoHS"
+"Maxtor 6V250F0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATAII RoHS"
+"Maxtor 6V300F0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATAII RoHS"
+
+
+
+########################################
+############# Quantum drives
+########################################
+"QUANTUM FIREBALLP AS40.0" 0 C "Quantum Fireball AS40"
+"QUANTUM FIREBALL CX10.2A" 0 C "Quantum Fireball CX10.2A"
+#"QUANTUM FIREBALLlct10 20" 4 C "Quantum Fireball CT10 20GB"
+# I suspect the QUANTUM FIREBALL_TM2110A to have a sensor in field 9...
+# "QUANTUM FIREBALL_TM2110A" 9 C "Quantum Fireball TM2110A"
+
+
+
+########################################
+############# Samsung drives
+########################################
+# somenone reported a problem with the SP8004H which reports a temperature
+# 10°C below the ambient temperature
+"SAMSUNG HA(200|250)JC" 194 C "Samsung SpinPoint V120CE series"
+"SAMSUNG HD160JJ" 194 C "Samsung 160GB, 7200RPM, 8MB cache, SATA"
+"SAMSUNG HD160JJ/P" 194 C "Samsung SpinPoint P80 SD 160GB (7200RPM, 8MB cache)"
+"SAMSUNG HD[30|32|40][01]L[DJ]" 194 C "Samsung SpinPoint T133 series (300-400MB)"
+"SAMSUNG HD250KD" 194 C "Samsung SpinPoint T133 series (250 MB PATA)"
+"SAMSUNG HD321KJ" 194 C "Samsung Spinpoint T166 (7200RPM, 16MB cache) - SATA"
+"SAMSUNG HD501LJ" 194 C "Samsung HD501LJ"
+"SAMSUNG MP0(302|402|603|804)H" 194 C "Samsung SpinPoint M40 2.5inch"
+"SAMSUNG SW0434A" 0 C "Samsung SW0434A"
+"SAMSUNG SP(2001|4002|6003|8004|40A2)H" 194 C "Samsung SpinPoint P40 serie"
+"SAMSUNG SP(0612|0802|1203|1604|0812|1213|1614)N" 194 C "Samsung SpinPoint P80 serie"
+"SAMSUNG SP(0612|0802|1203|1604|0812|1213|1614)C" 194 C "Samsung SpinPoint P80 series - SATA"
+"SAMSUNG SP0411N" 194 C "Samsung SpinPoint PL40 serie"
+"SAMSUNG SP0822N" 194 C "Samsung SP0822N"
+"SAMSUNG SP(0812|1213|1614)C" 194 C "Samsung Spinpoint 160G SATA"
+"SAMSUNG SP2[05]14N" 194 C "Samsung SpinPoint P120 series (7200RPM, 8MB cache)"
+"SAMSUNG SP2[05]04C" 194 C "Samsung SpinPoint P120 series - SATA"
+"SAMSUNG SV0432A" 0 C "Samsung SV0432A"
+"SAMSUNG SV3002H" 0 C "Samsung SpinPoint V30 serie"
+"SAMSUNG SV(2001|4002|4012|6003|8004)H" 194 C "Samsung SpinPoint V40 serie"
+#"SAMSUNG SV(0221|0602|0813|1204)H" 9 C "Samsung SpinPoint V60 serie"
+#"SAMSUNG SV1204H" 194 C "Samsung 120G"
+"SAMSUNG SV(0401|0802|1203|1604)N" 194 C "Samsung SpinPoint V80 serie"
+"SAMSUNG SV4012H" 194 C "Samsung 40GB, 5400RPM, 2MB cache"
+
+########################################
+############# Seagate drives
+########################################
+"Seagate Technology 1275MB - ST31276A" 0 C "Seagate ST31276A"
+"ST3412A" 0 C "Seagate ST3412A"
+"ST38641A" 0 C "Seagate ST38641A"
+"ST310014A" 194 C "Seagate ST310014A"
+"ST310210A" 0 C "Seagate ST310210A"
+"ST310211A" 194 C "Seagate ST310211A"
+"ST310220A" 0 C "Seagate ST310220A"
+# SEAGATE ST313021A 13.0GB
+"ST313021A" 0 C "Seagate U8 ST313021A"
+"ST310240A" 0 C "Seagate Medalist 10240 Ultra ATA-3"
+"ST315320A" 194 C "Seagate ST315320A"
+"ST320423A" 0 C "Seagate U10 20423, Ultra ATA/66"
+"ST320011A" 194 C "Seagate ST320011A"
+"ST320014A" 194 C "Seagate ST320014A (5400 rpm, 20Gb)"
+"ST320410A" 194 C "Seagate ST320410A"
+"ST320413A" 194 C "Seagate ST320413A"
+"ST320414A" 194 C "Seagate ST320414A"
+"ST320420A" 194 C "Seagate Barracuda II ST320420A"
+"ST330013A" 194 C "Seagate ST330013A Barracuda ATA V 30GB, 7200 rpm"
+"ST330620A" 194 C "Seagate ST330620A"
+"ST330621A" 194 C "Seagate ST330621A"
+"ST330630A" 194 C "Seagate Barracuda ST330630A"
+"ST340014A" 194 C "Seagate Barracuda 7200.7 40Gb"
+"ST340015A" 194 C "Seagate Barracuda 5400.1 40GB"
+"ST340016A" 194 C "Seagate ST340016A"
+"ST340810A" 194 C "Seagate U Series 40810 (40Gb, Ultra ATA/100, 5400 rpm)"
+"ST340823A" 194 C "Seagate U Series 5 40823"
+"ST340824A" 194 C "Seagate Barracuda III"
+"ST360015A" 194 C "Seagate Barracuda V ST360015A"
+"ST360020A" 194 C "Seagate U Series 60020"
+"ST360021A" 194 C "Seagate Barracuda IV ST360021A"
+"ST380011A" 194 C "Seagate Barracuda 7200.7 80GB"
+"ST380012A" 194 C "Seagate ST380012A 80GB"
+"ST380013A" 194 C "Seagate Barracuda 7200.7 80GB"
+"ST380013AS" 194 C "Seagate Barracuda 7200.7 80GB (Serial ATA)"
+"ST380020A" 194 C "Seagate U Series 80020 (80Gb, Ultra ATA/100, 5400 rpm)"
+"ST380021A" 194 C "Seagate Barracuda IV ST380021A"
+"ST380022A" 194 C "Seagate Barracuda U7 80022, Ultra ATA/100"
+"ST380023A" 194 C "Seagate Barracuda V ST380023A"
+"ST380817AS" 194 C "Seagate Barracuda 7200.7 80GB - SATA"
+"ST39111A" 194 C "Seagate ST39111A (from Sun Ultra)"
+"ST3120020A" 194 C "Seagate ST3120020A"
+"ST3120022A" 194 C "Seagate Baraccuda 7200.7 120GB"
+"ST3120023A" 194 C "Seagate Barracuda V ST3120023A"
+"ST3120024A" 194 C "Seagate Barracuda V ST3120024A"
+"ST3120025ACE" 194 C "Seagate Barracuda V ST3120025ACE"
+"ST3120026A" 194 C "Seagate Barracuda V ST3120026A"
+"ST3160021A" 194 C "Seagate Barracuda 7200.7 - ST3160021A"
+"ST3160023(A|AS)" 194 C "Seagate Barracuda V ST3160023A and AS (160Gb, ATA100 or Serial ATA)"
+"ST316081[12](A|AS)" 194 C "Seagate Barracuda 7200.9 160GB"
+"ST3160827AS" 194 C "Seagate Barracuda 7200.7 160GB (Serial ATA)"
+"ST3200021A" 194 C "Seagate Barracuda 7200.7 Plus 200GB"
+"ST3200822(A|AS)" 194 C "Seagate Barracuda 7200.7 Plus 200GB (PATA or SATA)"
+"ST3200826A" 194 C "Seagate Barracuda 7200.8 200GB"
+"ST3250623A" 194 C "Seagate Barracuda 7200.16 250GB"
+"ST3250624AS" 194 C "Seagate Barracuda 7200.9 250GB SATA"
+"ST3250624NS" 194 C "Seagate NL35 SATA (RAID-Edition) 7200 250GB"
+"ST3250823A" 194 C "Seagate Barracuda 7200.8 250GB"
+"ST3250823A" 194 C "Seagate Barracuda 7200.7 Plus 250GB"
+"ST3250823NS" 194 C "Seagate NL35 SATA (RAID-Edition) 7200 250GB"
+"ST3300831A" 194 C "Seagate 300GB ST3300831A"
+"ST3400832A" 194 C "Seagate Barracuda 7200.8 Plus 400GB"
+"ST3400633(A|AS)" 194 C "Seagate Barracuda 7200.7 400 GB"
+"ST3500630NS" 194 C "Seagate"
+"ST3400632NS" 194 C "Seagate"
+"ST380[28]110(A|AS)" 194 C "Seagate Barracuda 7200.9 80 GB"
+"ST910021A" 194 C "Seagate Momentus 7200.1 100GB"
+"ST910082[35]A" 194 C "Seagate Momentus 5400.2 100GB"
+"ST9120821A" 194 C "Seagate Momentus 5400.2 120GB"
+"ST94019A" 194 C "Seagate ST94019A"
+"ST94813A" 194 C "Seagate Momentus 5400.2 40GB"
+"ST94[08]11A" 194 C "Seagate ST94011A"
+"ST960821A" 194 C "Seagate ST960821A"
+"ST960822A" 194 C "Seagate Momentus 5400.2 60GB"
+"ST96812AS" 194 C "Seagate Momentus 5400.2 60GB SATA"
+"ST9808211A" 194 C "Seagate Momentus 5400.2 80GB"
+"ST98823AS" 194 C "Seagate Momentus 5400.2 80GB SATA"
+
+########################################
+############# TOSHIBA Laptops
+########################################
+"MK4313MAT" 220 C "Toshiba MK4313MAT"
+"TOSHIBA MK1032GAX" 194 C "Toshiba MK1032GAX"
+"TOSHIBA MK1032GSX" 194 C "Toshiba MK1032GSX"
+"TOSHIBA MK1517GAP" 0 C "Toshiba MK1517GAP"
+"TOSHIBA MK2018GAS" 226 F "Toshiba MK2018GAS"
+"TOSHIBA MK2023GAS" 194 C "Toshiba MK2023GAS"
+
+"TOSHIBA MK3017GAP" 0 C "Toshiba MK3017GAP"
+"TOSHIBA MK3021GAS" 194 C "Toshiba MK3021GAS"
+"TOSHIBA MK3025GAS" 194 C "Toshiba MK3025GAS"
+
+#"TOSHIBA MK4019GAX" 222 C "Toshiba MK4019GAX"
+"TOSHIBA MK4021GAS" 194 C "Toshiba MK4021GAS"
+"TOSHIBA MK4025GAS" 194 C "Toshiba MK4025GAS 40 Go"
+"TOSHIBA MK4026GAS" 194 C "Toshiba MK4026GAS 40 Go"
+"TOSHIBA MK4032GAX" 194 C "Toshiba MK4032GAX"
+
+"TOSHIBA MK6021GAS" 194 C "Toshiba MK6021GAS"
+"TOSHIBA MK6022GAX" 194 C "Toshiba MK6022GAX"
+"TOSHIBA MK6025GAS" 194 C "Toshiba MK6025GAS"
+"TOSHIBA MK6026GAX" 194 C "Toshiba MK6026GAX"
+"TOSHIBA MK8025GAS" 194 C "Toshiba MK8025GAS"
+"TOSHIBA MK8026GAX" 194 C "Toshiba MK8026GAX"
+"TOSHIBA MK8032GSX" 194 C "Toshiba MK8032GSX"
+
+"MK4025GAS" 194 C "Toshiba MK4025GAS"
+
+
+########################################
+############# Western Digital drives
+########################################
+# WDC AC310100B and WDC AC2850F are reported not working
+# no more informations were given
+"WDC AC22000L" 0 C "Western Digital Caviar AC22000"
+"WDC AC420400D" 231 C "Western Digital Caviar AC420400D"
+"WDC AC418000D" 231 C "Western Digital AC418000D"
+"WDC WD135BA" 231 C "Western Digital WD135BA"
+
+"WDC WD100EB-00BHF0" 0 C "Western Digital 100EB-00BHF0"
+"WDC WD200BB-00AUA1" 0 C "Western Digital Caviar WD200BB"
+#"WDC WD200BB-60DGA0" 0 C "Western Digital Caviar WD200BB"
+"WDC WD300BB-00CAA0" 0 C "Western Digital WD300BB"
+"WDC WD360GD-00FNA0" 194 C "Western Digital SATA Raptor 36.7GB"
+"WDC WD400BB-00CAA0" 0 C "Western Digital 400BB-00CAA0"
+"WDC WD400BB-00[DJ][KH]A0" 194 C "Western Digital Caviar WD400BB"
+"WDC WD400BB-23JHC0" 194 C "Western Digital 23JHC0"
+#"WDC WD400BB-00GFA0" 0 C ""
+"WDC WD400BB-55HEA0" 194 C "Western Digital Caviar WD400BB"
+"WDC WD400BB-(18CA|00DE)A0" 0 C "Western Digital Caviar WD400BB"
+"WDC WD400BB-75FJA1" 194 C "Western Digital Caviar WD400BB"
+"WDC WD400EB-00CPF0" 0 C "Western Digital 400EB-00CPF0"
+"WDC WD400JB-00(JJ|FM|FS)A0" 194 C "Western Digital Caviar 40GB Special Edition 8MB"
+"WDC WD400JB-00ETA0" 194 C "Western Digital 400JB-00ETA0"
+"WDC WD400JB-00JJC0" 194 C "Western Digital 400JB-00JJC0 40GB"
+"WDC WD400LB-00DNA0" 194 C "Western Digital 400LB-00DNA0"
+"WDC WD400UE-22HCT0" 194 C "Western Digital 40GB Notebook HDD"
+"WDC WD400VE-75HDT1" 194 C "Western Digital Scorpio 40GB"
+"WDC WD600BB-32BSA0" 0 C "Western Digital 600BB-32BSA0"
+"WDC WD600JB-00ETA0" 194 C "Western Digital 600JB-00ETA0"
+"WDC WD600LB-00DNA0" 194 C "Western Digital 60GB"
+"WDC WD600VE-75HDT0" 194 C "Western Digital 600VE-75HDT0"
+"WDC WD600VE-00HDT0" 194 C "Western Digital 600VE-00HDT0"
+"WDC WD740GD-00FL21.0" 194 C "Western Digital SATA Raptor"
+"WDC WD740GD-([05]0FL[AC][01]|75FLA1)" 194 C "Western Digital SATA Raptor 74GB 8MB"
+"WDC WD800BB-00CAA1" 0 C "Western Digital WD800BB-00CAA1"
+"WDC WD800BB-(00|22)DKA0" 194 C "Western Digital WD800BB 80 Go"
+"WDC WD800BB-32CCB0" 194 C "Western Digital 800BB-32CCB0"
+"WDC WD800BB-55HEA0" 194 C "Western Digital 800BB-55HEA0"
+"WDC WD800BB-00JHA0" 194 C "Western Digital 800BB-00JHA0"
+"WDC WD800BB-00JKA0" 194 C "Western Digital 800BB-00JKA0"
+"WDC WD800BB-55JKA0" 194 C "Western Digital 800BB-55JKA0"
+"WDC WD800BB-75FRA0" 194 C "Western Digital Caviar WD800BB"
+"WDC WD800JB-00CRA1" 0 C "Western Digital Caviar WD800JB"
+"WDC WD800JB-00(ET|FM|FS)A0" 194 C "Western Digital Caviar 80GB Special Edition 8MB"
+"WDC WD800JB-00JJ[AC]0" 194 C "Western Digital WD800JB"
+"WDC WD800JD-(00|55|75)(HK|JR|JN)[AC]0" 194 C "Western Digital SATA 80GB, 8MB Cache"
+"WDC WD800LB-(00|55)DNA0" 194 C "Western Digital Caviar WD800LB 80 Go ATA-100"
+"WDC WD800VE-07HDT0" 194 C "Western Digital 800VE-07HDT0"
+"WDC WD1200BB-00(FTA|GUA)0" 194 C "Western Digital Caviar EIDE 2MB Cache"
+"WDC WD1200JB-00(EV|FU|GV|RE)A0" 194 C "Western Digital Caviar 120GB Special Edition 8MB"
+"WDC WD1200JB-22GVA0" 194 C "Western Digital Caviar 120GB"
+"WDC WD1200JD-00(FYB|GBB|HBC)0" 194 C "Western Digital WD1200JD"
+"WDC WD1200LB-55EDA0" 194 C "Western Digital WD1220LB"
+"WDC WD1200SB-01KB[AC]0" 194 C "Western Digital Caviar RE (Raid Edition) 120 GB"
+"WDC WD1600BB-00DWA0" 194 C "Western Digital Caviar WD1600BB"
+"WDC WD1600JB-(00EV|00FU|00GV|22GV|75GV)A0" 194 C "Western Digital Caviar 160GB Special Edition 8MB"
+"WDC WD2000BB-00FTA0" 194 C "Western Digital WD2000BB"
+"WDC WD2000JB-(00EV|32EV|34EV|00FU|00GV|55GV|98GV|00KF)A0" 194 C "Western Digital Caviar 200GB Special Edition 8MB"
+"WDC WD2000JB-00GVC0" 194 C "Western Digital WD2000JB"
+"WDC WD2000JD-00FYB0" 194 C "Western Digital WD2000JD"
+"WDC WD2000JS-00MHB1" 194 C "Western Digital SATA 200GB"
+"WDC WD2500JB-(00RE|00EV|00FU|32FU|00GV|55GV)A0" 194 C "Western Digital Caviar 250GB Special Edition 8MB"
+"WDC WD2500JB-00GVC0" 194 C "Western Digital 250GB"
+"WDC WD2500JD-(00G|32H|75H)BB0" 194 C "Western Digital SATA Caviar 250GB Special Edition 8MB"
+"WDC WD2500JD-40HBC0" 194 C "Western Digital WD2500JD-40HBC0"
+"WDC WD2500PB-98FBA0" 194 C "Western Digital Caviar 250GB Special Edition 8MB"
+"WDC WD2500PD-00FZB1" 194 C "Western Digital WD2500PD-00FZB1"
+"WDC WD2500SD-01KCB0" 194 C "Western Digital Caviar RE 250GB 8MB"
+"WDC WD3000JB-00KFA0" 194 C "Western Digital WD3000JB"
+"WDC WD3200JB-00KFA0" 194 C "Western Digital Caviar 320GB 8MB"
+"WDC WD4000KD-00NAB0" 194 C "Western Digital Caviar SE16 400GB 16MB"
+"WDC WD4000YR-01PLB0" 194 C "Western Digital Caviar RE2 400GB 16MB"
+"WD4000YS-01MPB0" 194 C "Western Digital RE2 7200 SATA II 400 GB"
+
+# not sure for next
+# "WDC WD1200JB-00CRA1" 9 C "Western Digital 1200JB-00CRA1"
+# "WDC WD273BA" 9 C "Western Digital WD273BA"
+
+
+
+
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+########################################################################################################################
+
+"ST3750640AS" 194 C "Seagate Barracuda 7200.10 SATA 750GB"
+"ST3750840AS" 194 C "Seagate Barracuda 7200.10 SATA 750GB"
+"ST3500630AS" 194 C "Seagate Barracuda 7200.10 SATA 500GB"
+"ST3500830AS" 194 C "Seagate Barracuda 7200.10 SATA 500GB"
+"ST3400620AS" 194 C "Seagate Barracuda 7200.10 SATA 400GB"
+"ST3400620A" 194 C "Seagate Barracuda 7200.10 400GB"
+"ST3400820AS" 194 C "Seagate Barracuda 7200.10 SATA 400GB"
+"ST3320620AS" 194 C "Seagate Barracuda 7200.10 SATA 320GB"
+"ST3320820AS" 194 C "Seagate Barracuda 7200.10 SATA 320GB"
+"ST3300620AS" 194 C "Seagate Barracuda 7200.10 SATA 300GB"
+"ST3300820AS" 194 C "Seagate Barracuda 7200.10 SATA 300GB"
+"ST3250620AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB"
+"ST3250820AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB"
+"ST3250410AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB"
+"ST3250310AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB"
+"ST3200820AS" 194 C "Seagate Barracuda 7200.10 SATA 200GB"
+"ST3160815AS" 194 C "Seagate Barracuda 7200.10 SATA 160GB"
+"ST3160215AS" 194 C "Seagate Barracuda 7200.10 SATA 160GB"
+"ST3120815AS" 194 C "Seagate Barracuda 7200.10 SATA 120GB"
+"ST3120215AS" 194 C "Seagate Barracuda 7200.10 SATA 120GB"
+"ST380815AS" 194 C "Seagate Barracuda 7200.10 SATA 80GB"
+"ST380215AS" 194 C "Seagate Barracuda 7200.10 SATA 80GB"
+"ST340815AS" 194 C "Seagate Barracuda 7200.10 SATA 40GB"
+"ST340215AS" 194 C "Seagate Barracuda 7200.10 SATA 40GB"
+"ST3300622AS" 194 C "Seagate Barracuda 7200.9 SATA2.5 300GB"
+"ST3300831A" 194 C "Seagate Barracuda 7200.8 PATA 300GB"
+
+"Maxtor 7(L|V)250(F|R|S)0" 194 C "Maxtor MaXLine III 250GB 7200rpm"
+"Maxtor 7(L|V)300(F|R|S)0" 194 C "Maxtor MaXLine III 300GB 7200rpm"
+"MAXTOR STM3320620AS" 194 C ""
+
+"WDC WD1500ADFD-00NLR[01]" 194 C "Western Digital Raptor 150GB"
+"WDC WD1600JS-00NCB1" 194 C "Western Digital Caviar 1600JS 160GB Sata"
+"WDC WD1600SD-01KCC0" 194 C "Western Digital Caviar RE Serial ATA series"
+"WDC WD2500JD-57HBC0" 194 C "Western Digital Caviar SE (Serial ATA) 250 GB"
+"WDC WD2500JS" 194 C "Western Digital WD2500JS"
+"WDC WD2500JS-41MVB1" 194 C "Western Digital SATAII Caviar 250GB Special Edition 8MB"
+"WDC WD2500JD-00HBB0" 194 C "Western Digital SATA 250GB"
+"WDC WD2500KS-00MJB0" 194 C "Western Digital SATA-II Caviar 250GB Special Edition 16MB"
+"WDC WD2500YD-01NVB1" 194 C "Western Digital Caviar RE 250GB 16MB"
+"WDC WD3000JS-00PDB0" 194 C "Western Digital WD3000JS"
+"WDC WD3200KS-00PFB0" 194 C "Western Digital Caviar 320GB 16MB"
+"WDC WD3200JD-22KLB0" 194 C "Western Digital Caviar SE 320GB 8MB"
+"WDC WD3200SD-01KNB0" 194 C "Western Digital Caviar RE 320GB SATA 8MB"
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp_0.3-beta15-52.diff b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp_0.3-beta15-52.diff
new file mode 100644
index 000000000..057b1fd1d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/hddtemp_0.3-beta15-52.diff
@@ -0,0 +1,2288 @@
+Megapatch from debian
+
+Original URL: http://ftp.debian.org/debian/pool/main/h/hddtemp/hddtemp_0.3-beta15-52.diff.gz
+
+Filtered with:
+ filterdiff -p1 -x README -x 'debian/*'
+
+
+Upstream-Status: unmaintained
+
+Index: hddtemp-0.3-beta15/doc/hddtemp.8
+===================================================================
+--- hddtemp-0.3-beta15.orig/doc/hddtemp.8
++++ hddtemp-0.3-beta15/doc/hddtemp.8
+@@ -58,6 +58,10 @@ Execute hddtemp in TCP/IP daemon mode (p
+ .B \-f, \-\-file=\fIfile\fI
+ Specify the database file to use.
+ .TP
++.B \-F, \-\-foreground
++Don't fork into the background even in daemon mode. This is useful
++when running under a process supervisor.
++.TP
+ .B \-l, \-\-listen=\fIaddr\fR
+ Listen on a specific address. \fIaddr\fR is a string containing a
+ host name or a numeric host address string. The numeric host address
+@@ -80,6 +84,9 @@ seconds.
+ .B \-q, \-\-quiet
+ Don't check if the drive is supported.
+ .TP
++.B \-u, \-\-unit=\fIC|F\fR
++Force output temperature either in Celsius or Fahrenheit.
++.TP
+ .B \-v, \-\-version
+ Display hddtemp version number.
+ .TP
+@@ -96,7 +103,7 @@ Listen on IPv6 sockets only.
+ .SH "DRIVE DATABASE"
+ If you know your drive has a temperature sensor but it is being
+ reported unsupported, tell me which model and which manufacturer it
+-is, and/or just add a new entry in /usr/share/misc/hddtemp.db. Each
++is, and/or just add a new entry in /etc/hddtemp.db. Each
+ line of hddtemp.db is either a comment, a blank line or a line
+ containing:
+ .TP
+@@ -112,7 +119,7 @@ set of drives from its model name or fro
+ Feedback is welcome (see the REPORT section below).
+
+ .SH "TCP/IP DAEMON MODE"
+-Exemple of type forcing:
++Example of type forcing:
+ .PP
+ # hddtemp SATA:/dev/sda PATA:/dev/hda
+ .PP
+@@ -120,7 +127,7 @@ To test
+ .B hddtemp
+ in daemon mode, start it like this:
+ .PP
+-# hddtemp -d /dev/hd[abcd]
++# hddtemp \-d /dev/hd[abcd]
+ .PP
+ .PP
+ and use
+@@ -165,8 +172,8 @@ and 12 are often reported to match a tem
+ investigation they do not. But fields 194 (which is the standard
+ field for temperature) and 231 are good candidates.
+ .PP
+-Then, you can send me a report with outputs from `hddtemp --debug ...',
+-`smartctl' or `hdparm -i ...', and/or add an entry in hddtemp.db
++Then, you can send me a report with outputs from `hddtemp \-\-debug ...',
++`smartctl' or `hdparm \-i ...', and/or add an entry in hddtemp.db
+ yourself.
+
+ .SH "BUGS"
+@@ -183,5 +190,5 @@ supported on i386 architectures only.
+ .PP
+ Emmanuel Varagnat (hddtemp@guzu.net).
+ .PP
+-This manual page was originaly written by Aurelien Jarno <aurel32@debian.org>,
++This manual page was originally written by Aurelien Jarno <aurel32@debian.org>,
+ for the Debian GNU/Linux system (but may be used by others).
+Index: hddtemp-0.3-beta15/po/fr.po
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/fr.po
++++ hddtemp-0.3-beta15/po/fr.po
+@@ -7,9 +7,9 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: fr\n"
+-"Report-Msgid-Bugs-To: hddtemp@guzu.net\n"
+-"POT-Creation-Date: 2005-02-25 22:43+0100\n"
+-"PO-Revision-Date: 2003-06-03 00:58GMT+1\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
++"PO-Revision-Date: 2011-08-30 16:38+0200\n"
+ "Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n"
+ "Language-Team: FRANCAIS <fr@li.org>\n"
+ "MIME-Version: 1.0\n"
+@@ -17,23 +17,7 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "X-Generator: KBabel 1.0.1\n"
+
+-#: src/hddtemp.c:112
+-#, c-format
+-msgid ""
+-"\n"
+-"Regexp%s| Value | Description\n"
+-"------%s---------------------\n"
+-msgstr ""
+-"\n"
+-"Regexp%s| Valeur | Description\n"
+-"------%s----------------------\n"
+-
+-#: src/hddtemp.c:118
+-#, c-format
+-msgid "%s%s| %5d | %s\n"
+-msgstr "%s%s| %5d | %s\n"
+-
+-#: src/hddtemp.c:161
++#: src/hddtemp.c:156
+ #, c-format
+ msgid ""
+ "\n"
+@@ -46,7 +30,7 @@ msgstr ""
+ "Modèle: %s\n"
+ "\n"
+
+-#: src/hddtemp.c:188
++#: src/hddtemp.c:189
+ #, c-format
+ msgid ""
+ "WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
+@@ -60,75 +44,60 @@ msgstr ""
+ "net).\n"
+ "ATTENTION : Voir les options --help, --debug et --drivebase.\n"
+
+-#: src/hddtemp.c:192
++#: src/hddtemp.c:197
+ #, c-format
+ msgid "%s: %s: no sensor\n"
+ msgstr "%s: %s : pas de capteur\n"
+
+-#: src/hddtemp.c:197
+-#, c-format
+-msgid ""
+-"WARNING: Drive %s doesn't appear in the database of supported drives\n"
+-"WARNING: But using a common value, it reports something.\n"
+-"WARNING: Note that the temperature shown could be wrong.\n"
+-"WARNING: See --help, --debug and --drivebase options.\n"
+-"WARNING: And don't forget you can add your drive to hddtemp.db\n"
+-msgstr ""
+-"ATTENTION : Le lecteur %s n'apparait pas dans la base de données des "
+-"lecteurs supportés\n"
+-"ATTENTION : Mais en utilisant une valeur courante, il renvoie quelque "
+-"chose.\n"
+-"ATTENTION : Notez que la température renvoyée peut être erronée.\n"
+-"ATTENTION : Voir les options --help, --debug et --drivebase.\n"
+-"ATTENTION : Et n'oubliez pas d'ajouter votre lecteur au fichier hddtemp.db\n"
+-
+-#: src/hddtemp.c:202
++#: src/hddtemp.c:211
+ #, c-format
+ msgid "%s: %s: %d%sC or %sF\n"
+ msgstr "%s: %s : %d%sC ou %sF\n"
+
+-#: src/hddtemp.c:214
++#: src/hddtemp.c:235
+ #, c-format
+ msgid "%s: %s: drive is sleeping\n"
+ msgstr "%s: %s : le lecteur est en veille\n"
+
+-#: src/hddtemp.c:217
++#: src/hddtemp.c:242
+ #, c-format
+-msgid "%s: %s: known drive, but it doesn't have a temperature sensor.\n"
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
+ msgstr ""
+ "%s: %s: lecteur connu, mais il ne possède pas de capteur de température.\n"
+
+-#: src/hddtemp.c:220
++#: src/hddtemp.c:246
+ #, c-format
+ msgid "ERROR: %s: %s: unknown returned status\n"
+ msgstr "ERREUR : %s : %s : status inconnu\n"
+
+-#: src/hddtemp.c:235
++#: src/hddtemp.c:261
+ #, c-format
+ msgid ""
+ "\n"
+ "If one of the field value seems to match the temperature, be sure to read\n"
+-"the hddtemp man page before sending me a report (section REPORT). Thanks.\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:308
++#: src/hddtemp.c:338
+ #, c-format
+ msgid "ERROR: invalid separator.\n"
+ msgstr "ERREUR : séparateur invalide.\n"
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr "ERREUR : numéro de port invalide.\n"
+
+-#: src/hddtemp.c:329
+-#, fuzzy, c-format
++#: src/hddtemp.c:371
++#, c-format
+ msgid ""
+-" Usage: hddtemp [OPTIONS] DISK1 [DISK2]...\n"
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
+ "\n"
+ " hddtemp displays the temperature of drives supplied in argument.\n"
+ " Drives must support S.M.A.R.T.\n"
+ "\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
+ " -b --drivebase : display database file content that allow hddtemp to\n"
+ " recognize supported drives.\n"
+ " -D --debug : display various S.M.A.R.T. fields and their values.\n"
+@@ -138,6 +107,7 @@ msgid ""
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
+ "default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
+ "mode).\n"
+ " -n --numeric : print only the temperature.\n"
+@@ -145,6 +115,8 @@ msgid ""
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon "
+ "mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -153,11 +125,14 @@ msgid ""
+ "\n"
+ "Report bugs or new drives to <hddtemp@guzu.net>.\n"
+ msgstr ""
+-" Utilisation: hddtemp [OPTIONS] DISQUE1 [DISQUE2]...\n"
++" Utilisation: hddtemp [OPTIONS] [TYPE:]DISQUE1 [[TYPE:]DISQUE2]...\n"
+ "\n"
+ " hddtemp affiche la température des lecteurs passés en argument.\n"
+ " Les lecteurs doivent avoir le support S.M.A.R.T.\n"
+ "\n"
++" TYPE peut être SATA, PATA ou SCSI. Si le type est omis, hddtemp essaiera\n"
++" de le deviner.\n"
++"\n"
+ " -b --drivebase : affiche le contenu du fichier de base de donnée "
+ "qui \n"
+ " permet à hddtemp de reconnaître les lecteurs "
+@@ -172,6 +147,7 @@ msgstr ""
+ "défaut).\n"
+ " -f --file=FILE : specifie le fichier à utiliser comme base de "
+ "données.\n"
++" -F --foreground : ne pas démoniser, rester au premier plan.\n"
+ " -l --listen=addr : écoute sur une interface spécifique (en mode démon "
+ "TCP/IP).\n"
+ " -n --numeric : affiche seulement la température.\n"
+@@ -180,6 +156,8 @@ msgstr ""
+ "démon TCP/IP).\n"
+ " -S --syslog=s : enregistre la température dans syslog tous les s "
+ "secondes.\n"
++" -u --unit=[C|F] : affiche la température en degrés Celsius ou "
++"Fahrenheit.\n"
+ " -q --quiet : ne vérifie pas si le lecteur est supporté.\n"
+ " -v --version : affiche la version de hddtemp.\n"
+ " -w --wake-up : réveiller le lecteur si nécessaire.\n"
+@@ -188,62 +166,95 @@ msgstr ""
+ "\n"
+ "Report bugs or new drives to <hddtemp@guzu.net>.\n"
+
+-#: src/hddtemp.c:522
++#: src/hddtemp.c:402
+ #, c-format
+ msgid "hddtemp version %s\n"
+ msgstr "hddtemp version %s\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:418
+ #, c-format
+ msgid "ERROR: invalid interval.\n"
+ msgstr "ERREUR : intervalle invalide.\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:438
++#, c-format
+ msgid "Too few arguments: you must specify one drive, at least.\n"
+ msgstr "Trop peu d'arguments : vous devez spécifier au moins un lecteur.\n"
+
+-#: src/hddtemp.c:557
++#: src/hddtemp.c:448
++#, c-format
+ msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
+ msgstr ""
+ "ERREUR: impossible d'utiliser les options --debug et --daemon ou --syslog en "
+ "même temps.\n"
+
+-#: src/hddtemp.c:583
++#: src/hddtemp.c:505
+ #, c-format
+ msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
+ msgstr ""
+ "ERREUR: %s: impossible de déterminer le type de bus (ou ce type de bus est "
+ "inconnu)\n"
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr "inconnu"
+
+-#: src/ata.c:98
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
+ #, c-format
+-msgid "field(%d)\t = %d\n"
+-msgstr "champ(%d)\t = %d\n"
+-
+-#: src/ata.c:167
+ msgid "S.M.A.R.T. not available"
+ msgstr "S.M.A.R.T. non disponible"
+
+-#: src/db.c:180
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"Regexp%s| Valeur | Description\n"
++"------%s----------------------\n"
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
++msgstr "%s%s| %5d | %s\n"
++
++#: src/db.c:236
+ #, c-format
+ msgid "hddtemp: can't open %1$s: %2$s\n"
+ msgstr "hddtemp: ne peut ouvrir %1$s: %2$s\n"
+
+-#: src/db.c:194
++#: src/db.c:250
+ #, c-format
+ msgid "ERROR: syntax error at line %1$d in %2$s\n"
+ msgstr "ERREUR: erreur de syntaxe à la ligne %1$d: %2$s\n"
+
+-#: src/db.c:201
++#: src/db.c:257
+ #, c-format
+ msgid " ERROR: line exceed %1$d characters in %2$s.\n"
+ msgstr " ERREUR: ligne exécdant %1$d caractères dans %2$s.\n"
+
+-#: src/scsi.c:112 src/scsi.c:130
++#: src/scsi.c:111 src/scsi.c:129
+ #, c-format
+ msgid "log sense failed : %s"
+ msgstr "echec de 'log sense' : %s "
++
++#~ msgid ""
++#~ "WARNING: Drive %s doesn't appear in the database of supported drives\n"
++#~ "WARNING: But using a common value, it reports something.\n"
++#~ "WARNING: Note that the temperature shown could be wrong.\n"
++#~ "WARNING: See --help, --debug and --drivebase options.\n"
++#~ "WARNING: And don't forget you can add your drive to hddtemp.db\n"
++#~ msgstr ""
++#~ "ATTENTION : Le lecteur %s n'apparait pas dans la base de données des "
++#~ "lecteurs supportés\n"
++#~ "ATTENTION : Mais en utilisant une valeur courante, il renvoie quelque "
++#~ "chose.\n"
++#~ "ATTENTION : Notez que la température renvoyée peut être erronée.\n"
++#~ "ATTENTION : Voir les options --help, --debug et --drivebase.\n"
++#~ "ATTENTION : Et n'oubliez pas d'ajouter votre lecteur au fichier hddtemp."
++#~ "db\n"
++
++#~ msgid "field(%d)\t = %d\n"
++#~ msgstr "champ(%d)\t = %d\n"
+Index: hddtemp-0.3-beta15/po/ru.po
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/ru.po
++++ hddtemp-0.3-beta15/po/ru.po
+@@ -6,8 +6,8 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: hddtemp 0.3-beta3\n"
+-"Report-Msgid-Bugs-To: hddtemp@guzu.net\n"
+-"POT-Creation-Date: 2005-02-25 22:43+0100\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
+ "PO-Revision-Date: 2003-03-08 16:42+0300\n"
+ "Last-Translator: Michael Shigorin <mike@altlinux.ru>\n"
+ "Language-Team: Russian <ru@li.org>\n"
+@@ -15,23 +15,7 @@ msgstr ""
+ "Content-Type: text/plain; charset=koi8-r\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: src/hddtemp.c:112
+-#, c-format
+-msgid ""
+-"\n"
+-"Regexp%s| Value | Description\n"
+-"------%s---------------------\n"
+-msgstr ""
+-"\n"
+-"òÅÇÜËÓ%s| úÎÁÞ. | ïÐÉÓÁÎÉÅ \n"
+-"------%s---------------------\n"
+-
+-#: src/hddtemp.c:118
+-#, c-format
+-msgid "%s%s| %5d | %s\n"
+-msgstr ""
+-
+-#: src/hddtemp.c:161
++#: src/hddtemp.c:156
+ #, c-format
+ msgid ""
+ "\n"
+@@ -40,7 +24,7 @@ msgid ""
+ "\n"
+ msgstr ""
+
+-#: src/hddtemp.c:188
++#: src/hddtemp.c:189
+ #, c-format
+ msgid ""
+ "WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
+@@ -53,72 +37,59 @@ msgstr ""
+ "÷îéíáîéå: åÓÌÉ ×Ù ÔÏÞÎÏ ÚÎÁÅÔÅ, ÞÔÏ ÄÁÔÞÉË ÅÓÔØ, ÎÁÐÉÛÉÔÅ hddtemp@guzu.net\n"
+ "÷îéíáîéå: (ÓÍ. ÏÐÃÉÉ --help, --debug É --drivebase).\n"
+
+-#: src/hddtemp.c:192
++#: src/hddtemp.c:197
+ #, c-format
+ msgid "%s: %s: no sensor\n"
+ msgstr "%s: %s: ÎÅÔ ÄÁÔÞÉËÁ\n"
+
+-#: src/hddtemp.c:197
+-#, c-format
+-msgid ""
+-"WARNING: Drive %s doesn't appear in the database of supported drives\n"
+-"WARNING: But using a common value, it reports something.\n"
+-"WARNING: Note that the temperature shown could be wrong.\n"
+-"WARNING: See --help, --debug and --drivebase options.\n"
+-"WARNING: And don't forget you can add your drive to hddtemp.db\n"
+-msgstr ""
+-"÷îéíáîéå: äÉÓË %s ÎÅ ×ËÌÀÞÅÎ × ÂÁÚÕ ÄÁÎÎÙÈ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÈ ÐÒÉ×ÏÄÏ×.\n"
+-"÷îéíáîéå: îÏ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÒÁÓÐÒÏÓÔÒÁÎÅÎÎÙÈ ÐÁÒÁÍÅÔÒÏ× ÏÎ ÞÔÏ-ÔÏ ×ÙÄÁÅÔ.\n"
+-"÷îéíáîéå: úÁÍÅÔØÔÅ, ÞÔÏ ÐÏËÁÚÁÎÎÁÑ ÔÅÍÐÅÒÁÔÕÒÁ ÍÏÖÅÔ ÔÁËÏ×ÏÊ ÎÅ Ñ×ÌÑÔØÓÑ.\n"
+-"÷îéíáîéå: óÍ. ÏÐÃÉÉ --help, --debug É --drivebase.\n"
+-"÷îéíáîéå: é ÎÅ ÚÁÂÕÄØÔÅ, ÞÔÏ ÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÐÒÉ×ÏÄ × hddtemp.db\n"
+-
+-#: src/hddtemp.c:202
++#: src/hddtemp.c:211
+ #, c-format
+ msgid "%s: %s: %d%sC or %sF\n"
+ msgstr "%s: %s: %d%sC ÉÌÉ %sF\n"
+
+-#: src/hddtemp.c:214
++#: src/hddtemp.c:235
+ #, c-format
+ msgid "%s: %s: drive is sleeping\n"
+ msgstr "%s: %s: ÎÅÔ ÄÁÔÞÉËÁ\n"
+
+-#: src/hddtemp.c:217
+-#, c-format
+-msgid "%s: %s: known drive, but it doesn't have a temperature sensor.\n"
++#: src/hddtemp.c:242
++#, fuzzy, c-format
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
+ msgstr "%s: %s: ÉÚ×ÅÓÔÎÙÊ ÄÉÓË, ÎÅ ÓÏÄÅÒÖÁÝÉÊ ÄÁÔÞÉËÁ ÔÅÍÐÅÒÁÔÕÒÙ.\n"
+
+-#: src/hddtemp.c:220
++#: src/hddtemp.c:246
+ #, c-format
+ msgid "ERROR: %s: %s: unknown returned status\n"
+ msgstr "ïûéâëá: %s: %s: ÎÅÉÚ×ÅÓÔÎÙÊ ÓÔÁÔÕÓ ×ÏÚ×ÒÁÔÁ\n"
+
+-#: src/hddtemp.c:235
++#: src/hddtemp.c:261
+ #, c-format
+ msgid ""
+ "\n"
+ "If one of the field value seems to match the temperature, be sure to read\n"
+-"the hddtemp man page before sending me a report (section REPORT). Thanks.\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:308
++#: src/hddtemp.c:338
+ #, c-format
+ msgid "ERROR: invalid separator.\n"
+ msgstr "ïûéâëá: ÎÅ×ÅÒÎÙÊ ÒÁÚÄÅÌÉÔÅÌØ.\n"
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr "ïýéâëá: ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÏÒÔÁ.\n"
+
+-#: src/hddtemp.c:329
++#: src/hddtemp.c:371
+ #, fuzzy, c-format
+ msgid ""
+-" Usage: hddtemp [OPTIONS] DISK1 [DISK2]...\n"
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
+ "\n"
+ " hddtemp displays the temperature of drives supplied in argument.\n"
+ " Drives must support S.M.A.R.T.\n"
+ "\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
+ " -b --drivebase : display database file content that allow hddtemp to\n"
+ " recognize supported drives.\n"
+ " -D --debug : display various S.M.A.R.T. fields and their values.\n"
+@@ -128,6 +99,7 @@ msgid ""
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
+ "default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
+ "mode).\n"
+ " -n --numeric : print only the temperature.\n"
+@@ -135,6 +107,8 @@ msgid ""
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon "
+ "mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -168,59 +142,90 @@ msgstr ""
+ "\n"
+ "óÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ É ÄÁÎÎÙÅ ÄÌÑ ÄÉÓËÏ× ÏÔÐÒÁ×ÌÑÊÔÅ ÎÁ <hddtemp@guzu.net>.\n"
+
+-#: src/hddtemp.c:522
++#: src/hddtemp.c:402
+ #, c-format
+ msgid "hddtemp version %s\n"
+ msgstr "÷ÅÒÓÉÑ hddtemp: %s\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:418
+ #, fuzzy, c-format
+ msgid "ERROR: invalid interval.\n"
+ msgstr "ïûéâëá: ÎÅ×ÅÒÎÙÊ ÒÁÚÄÅÌÉÔÅÌØ.\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:438
++#, c-format
+ msgid "Too few arguments: you must specify one drive, at least.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:557
+-#, fuzzy
++#: src/hddtemp.c:448
++#, fuzzy, c-format
+ msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
+ msgstr "ïûéâëá: ÏÄÎÏ×ÒÅÍÅÎÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ --debug É --daemon ÎÅÄÏÐÕÓÔÉÍÏ.\n"
+
+-#: src/hddtemp.c:583
++#: src/hddtemp.c:505
+ #, c-format
+ msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
+ msgstr "ïûéâëá: %s: ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÔÉÐ ÛÉÎÙ\n"
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr "ÎÅÉÚ×."
+
+-#: src/ata.c:98
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
+ #, c-format
+-msgid "field(%d)\t = %d\n"
+-msgstr "ÐÏÌÅ(%d)\t = %d\n"
+-
+-#: src/ata.c:167
+ msgid "S.M.A.R.T. not available"
+ msgstr "S.M.A.R.T. ÎÅÄÏÓÔÕÐÅÎ"
+
+-#: src/db.c:180
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"òÅÇÜËÓ%s| úÎÁÞ. | ïÐÉÓÁÎÉÅ \n"
++"------%s---------------------\n"
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
++msgstr ""
++
++#: src/db.c:236
+ #, c-format
+ msgid "hddtemp: can't open %1$s: %2$s\n"
+ msgstr "hddtemp: ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ %1$s: %2$s\n"
+
+-#: src/db.c:194
++#: src/db.c:250
+ #, c-format
+ msgid "ERROR: syntax error at line %1$d in %2$s\n"
+ msgstr "óÉÎÔÁËÓÉÞÅÓËÁÑ ïûéâëá × ÓÔÒÏËÅ %1$d ÆÁÊÌÁ %2$s\n"
+
+-#: src/db.c:201
++#: src/db.c:257
+ #, c-format
+ msgid " ERROR: line exceed %1$d characters in %2$s.\n"
+ msgstr "ïûéâëá: ÓÔÒÏËÁ ÄÌÉÎÎÅÅ %1$d ÓÉÍ×ÏÌÏ× × %2$s.\n"
+
+-#: src/scsi.c:112 src/scsi.c:130
++#: src/scsi.c:111 src/scsi.c:129
+ #, c-format
+ msgid "log sense failed : %s"
+ msgstr ""
++
++#~ msgid ""
++#~ "WARNING: Drive %s doesn't appear in the database of supported drives\n"
++#~ "WARNING: But using a common value, it reports something.\n"
++#~ "WARNING: Note that the temperature shown could be wrong.\n"
++#~ "WARNING: See --help, --debug and --drivebase options.\n"
++#~ "WARNING: And don't forget you can add your drive to hddtemp.db\n"
++#~ msgstr ""
++#~ "÷îéíáîéå: äÉÓË %s ÎÅ ×ËÌÀÞÅÎ × ÂÁÚÕ ÄÁÎÎÙÈ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÈ ÐÒÉ×ÏÄÏ×.\n"
++#~ "÷îéíáîéå: îÏ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÒÁÓÐÒÏÓÔÒÁÎÅÎÎÙÈ ÐÁÒÁÍÅÔÒÏ× ÏÎ ÞÔÏ-ÔÏ "
++#~ "×ÙÄÁÅÔ.\n"
++#~ "÷îéíáîéå: úÁÍÅÔØÔÅ, ÞÔÏ ÐÏËÁÚÁÎÎÁÑ ÔÅÍÐÅÒÁÔÕÒÁ ÍÏÖÅÔ ÔÁËÏ×ÏÊ ÎÅ "
++#~ "Ñ×ÌÑÔØÓÑ.\n"
++#~ "÷îéíáîéå: óÍ. ÏÐÃÉÉ --help, --debug É --drivebase.\n"
++#~ "÷îéíáîéå: é ÎÅ ÚÁÂÕÄØÔÅ, ÞÔÏ ÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÐÒÉ×ÏÄ × hddtemp.db\n"
++
++#~ msgid "field(%d)\t = %d\n"
++#~ msgstr "ÐÏÌÅ(%d)\t = %d\n"
+Index: hddtemp-0.3-beta15/po/sv.po
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/sv.po
++++ hddtemp-0.3-beta15/po/sv.po
+@@ -6,8 +6,8 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: hddtemp 0.3-beta14-4\n"
+-"Report-Msgid-Bugs-To: hddtemp@guzu.net\n"
+-"POT-Creation-Date: 2005-02-25 22:43+0100\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
+ "PO-Revision-Date: 2005-11-02 19:03+0100\n"
+ "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+ "Language-Team: Swedish <sv@li.org>\n"
+@@ -17,23 +17,7 @@ msgstr ""
+ "X-Poedit-Language: swe\n"
+ "X-Poedit-Country: swe\n"
+
+-#: src/hddtemp.c:112
+-#, c-format
+-msgid ""
+-"\n"
+-"Regexp%s| Value | Description\n"
+-"------%s---------------------\n"
+-msgstr ""
+-"\n"
+-"Regexp%s| Värde | Beskrivning\n"
+-"------%s---------------------\n"
+-
+-#: src/hddtemp.c:118
+-#, c-format
+-msgid "%s%s| %5d | %s\n"
+-msgstr "%s%s| %5d | %s\n"
+-
+-#: src/hddtemp.c:161
++#: src/hddtemp.c:156
+ #, c-format
+ msgid ""
+ "\n"
+@@ -46,7 +30,7 @@ msgstr ""
+ "Modell: %s\n"
+ "\n"
+
+-#: src/hddtemp.c:188
++#: src/hddtemp.c:189
+ #, c-format
+ msgid ""
+ "WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
+@@ -60,76 +44,63 @@ msgstr ""
+ "net).\n"
+ "VARNING: Se --help, --debug och --drivebase flaggorna.\n"
+
+-#: src/hddtemp.c:192
++#: src/hddtemp.c:197
+ #, c-format
+ msgid "%s: %s: no sensor\n"
+ msgstr "%s: %s: ingen sensor\n"
+
+-#: src/hddtemp.c:197
+-#, c-format
+-msgid ""
+-"WARNING: Drive %s doesn't appear in the database of supported drives\n"
+-"WARNING: But using a common value, it reports something.\n"
+-"WARNING: Note that the temperature shown could be wrong.\n"
+-"WARNING: See --help, --debug and --drivebase options.\n"
+-"WARNING: And don't forget you can add your drive to hddtemp.db\n"
+-msgstr ""
+-"VARNING: Disken %s verkar inte finnas i databasen över diskar som stöds\n"
+-"VARNING: Men använder man ett vanligt värde rapporterar den något.\n"
+-"VARNING: Notera att temperaturen som visas kan vara felaktig.\n"
+-"VARNING: Se --help, --debug och --drivebase flaggorna.\n"
+-"VARNING: Och glöm inte att du kan lägga till din disk till hddtemp.db\n"
+-
+-#: src/hddtemp.c:202
++#: src/hddtemp.c:211
+ #, c-format
+ msgid "%s: %s: %d%sC or %sF\n"
+ msgstr "%s: %s: %d%sC eller %sF\n"
+
+-#: src/hddtemp.c:214
++#: src/hddtemp.c:235
+ #, c-format
+ msgid "%s: %s: drive is sleeping\n"
+ msgstr "%s: %s: disken sover\n"
+
+-#: src/hddtemp.c:217
+-#, c-format
+-msgid "%s: %s: known drive, but it doesn't have a temperature sensor.\n"
++#: src/hddtemp.c:242
++#, fuzzy, c-format
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
+ msgstr "%s: %s: känd disk men den har ingen temperatursensor.\n"
+
+-#: src/hddtemp.c:220
++#: src/hddtemp.c:246
+ #, c-format
+ msgid "ERROR: %s: %s: unknown returned status\n"
+ msgstr "FEL: %s: %s: okänd returnerad status\n"
+
+-#: src/hddtemp.c:235
+-#, c-format
++#: src/hddtemp.c:261
++#, fuzzy, c-format
+ msgid ""
+ "\n"
+ "If one of the field value seems to match the temperature, be sure to read\n"
+-"the hddtemp man page before sending me a report (section REPORT). Thanks.\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
+ msgstr ""
+ "\n"
+ "Om ett av fältvärdena verkar matcha temperaturen, var säker på att du\n"
+ "läst manualsidan för hddtemp före du skickar en rapport till mig (sektionen\n"
+ "REPORT). Tack.\n"
+
+-#: src/hddtemp.c:308
++#: src/hddtemp.c:338
+ #, c-format
+ msgid "ERROR: invalid separator.\n"
+ msgstr "FEL: ogiltig separator.\n"
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr "FEL: ogiltigt portnummer.\n"
+
+-#: src/hddtemp.c:329
+-#, c-format
++#: src/hddtemp.c:371
++#, fuzzy, c-format
+ msgid ""
+-" Usage: hddtemp [OPTIONS] DISK1 [DISK2]...\n"
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
+ "\n"
+ " hddtemp displays the temperature of drives supplied in argument.\n"
+ " Drives must support S.M.A.R.T.\n"
+ "\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
+ " -b --drivebase : display database file content that allow hddtemp to\n"
+ " recognize supported drives.\n"
+ " -D --debug : display various S.M.A.R.T. fields and their values.\n"
+@@ -139,6 +110,7 @@ msgid ""
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
+ "default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
+ "mode).\n"
+ " -n --numeric : print only the temperature.\n"
+@@ -146,6 +118,8 @@ msgid ""
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon "
+ "mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -184,61 +158,91 @@ msgstr ""
+ "\n"
+ "Rapportera buggar eller nya hårddiskar till <hddtemp@guzu.net>.\n"
+
+-#: src/hddtemp.c:522
++#: src/hddtemp.c:402
+ #, c-format
+ msgid "hddtemp version %s\n"
+ msgstr "hddtemp version %s\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:418
+ #, c-format
+ msgid "ERROR: invalid interval.\n"
+ msgstr "FEL: ogiltigt intervall.\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:438
++#, c-format
+ msgid "Too few arguments: you must specify one drive, at least.\n"
+ msgstr "För få argument: du måste specificera åtminstone en disk.\n"
+
+-#: src/hddtemp.c:557
++#: src/hddtemp.c:448
++#, c-format
+ msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
+ msgstr ""
+ "FEL: kan inte använda --debug och --daemon eller --syslog flaggorna "
+ "tillsammans.\n"
+
+-#: src/hddtemp.c:583
++#: src/hddtemp.c:505
+ #, c-format
+ msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
+ msgstr ""
+ "FEL: %s: kan inte fastställa busstyp (eller så är denna busstyp okänd)\n"
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr "okänd"
+
+-#: src/ata.c:98
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
+ #, c-format
+-msgid "field(%d)\t = %d\n"
+-msgstr "fält(%d)\t = %d\n"
+-
+-#: src/ata.c:167
+ msgid "S.M.A.R.T. not available"
+ msgstr "S.M.A.R.T. är inte tillgänglig"
+
+-#: src/db.c:180
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"Regexp%s| Värde | Beskrivning\n"
++"------%s---------------------\n"
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
++msgstr "%s%s| %5d | %s\n"
++
++#: src/db.c:236
+ #, c-format
+ msgid "hddtemp: can't open %1$s: %2$s\n"
+ msgstr "hddtemp: kan inte öppna %1$s: %2$s\n"
+
+-#: src/db.c:194
++#: src/db.c:250
+ #, c-format
+ msgid "ERROR: syntax error at line %1$d in %2$s\n"
+ msgstr "FEL: syntaxfel på rad %1$d i %2$s\n"
+
+-#: src/db.c:201
++#: src/db.c:257
+ #, c-format
+ msgid " ERROR: line exceed %1$d characters in %2$s.\n"
+ msgstr " FEL: raden överstiger %1$d tecken i %2$s.\n"
+
+-#: src/scsi.c:112 src/scsi.c:130
++#: src/scsi.c:111 src/scsi.c:129
+ #, c-format
+ msgid "log sense failed : %s"
+ msgstr "igenkänning av logg misslyckades : %s"
++
++#~ msgid ""
++#~ "WARNING: Drive %s doesn't appear in the database of supported drives\n"
++#~ "WARNING: But using a common value, it reports something.\n"
++#~ "WARNING: Note that the temperature shown could be wrong.\n"
++#~ "WARNING: See --help, --debug and --drivebase options.\n"
++#~ "WARNING: And don't forget you can add your drive to hddtemp.db\n"
++#~ msgstr ""
++#~ "VARNING: Disken %s verkar inte finnas i databasen över diskar som stöds\n"
++#~ "VARNING: Men använder man ett vanligt värde rapporterar den något.\n"
++#~ "VARNING: Notera att temperaturen som visas kan vara felaktig.\n"
++#~ "VARNING: Se --help, --debug och --drivebase flaggorna.\n"
++#~ "VARNING: Och glöm inte att du kan lägga till din disk till hddtemp.db\n"
++
++#~ msgid "field(%d)\t = %d\n"
++#~ msgstr "fält(%d)\t = %d\n"
+Index: hddtemp-0.3-beta15/po/pt.po
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/pt.po
++++ hddtemp-0.3-beta15/po/pt.po
+@@ -7,7 +7,7 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: hddtemp 0.3-beta14\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2005-02-25 22:43+0100\n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
+ "PO-Revision-Date: 2006-03-29 23:22+0000\n"
+ "Last-Translator: Miguel Figueiredo <elmig@debianp.org>\n"
+ "Language-Team: Portuguese <traduz@debianpt.org>\n"
+@@ -15,23 +15,7 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: src/hddtemp.c:112
+-#, c-format
+-msgid ""
+-"\n"
+-"Regexp%s| Value | Description\n"
+-"------%s---------------------\n"
+-msgstr ""
+-"\n"
+-"Regexp%s| Valor | Descrição\n"
+-"------%s-------------------\n"
+-
+-#: src/hddtemp.c:118
+-#, c-format
+-msgid "%s%s| %5d | %s\n"
+-msgstr "%s%s| %5d | %s\n"
+-
+-#: src/hddtemp.c:161
++#: src/hddtemp.c:156
+ #, c-format
+ msgid ""
+ "\n"
+@@ -44,7 +28,7 @@ msgstr ""
+ "Modelo: %s\n"
+ "\n"
+
+-#: src/hddtemp.c:188
++#: src/hddtemp.c:189
+ #, c-format
+ msgid ""
+ "WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
+@@ -54,79 +38,68 @@ msgid ""
+ msgstr ""
+ "AVISO: O disco %s não parece ter um sensor de temperatura.\n"
+ "AVISO: Isto não significa que não tem nenhum.\n"
+-"AVISO: Se tem a certeza que tem um, por favor contacte-me (hddtemp@guzu.net).\n"
++"AVISO: Se tem a certeza que tem um, por favor contacte-me (hddtemp@guzu."
++"net).\n"
+ "AVISO: Veja as opções --help, --debug e --drivebase.\n"
+
+-#: src/hddtemp.c:192
++#: src/hddtemp.c:197
+ #, c-format
+ msgid "%s: %s: no sensor\n"
+ msgstr "%s: %s: sem sensor\n"
+
+-#: src/hddtemp.c:197
+-#, c-format
+-msgid ""
+-"WARNING: Drive %s doesn't appear in the database of supported drives\n"
+-"WARNING: But using a common value, it reports something.\n"
+-"WARNING: Note that the temperature shown could be wrong.\n"
+-"WARNING: See --help, --debug and --drivebase options.\n"
+-"WARNING: And don't forget you can add your drive to hddtemp.db\n"
+-msgstr ""
+-"AVISO: O disco %s não parece estar na base de dados de discos suportados\n"
+-"AVISO: Mas ao utilizar um valor usual, relata alguma coisa.\n"
+-"AVISO: Note que a temperatura mostrada pode estar errada.\n"
+-"AVISO: Veja as opções --help, --debug e --frivebase.\n"
+-"AVISO: E não se esqueça de adicionar o seu disco a hddtemp.db\n"
+-
+-#: src/hddtemp.c:202
++#: src/hddtemp.c:211
+ #, c-format
+ msgid "%s: %s: %d%sC or %sF\n"
+ msgstr "%s: %s: %d%sC ou %sF\n"
+
+-#: src/hddtemp.c:214
++#: src/hddtemp.c:235
+ #, c-format
+ msgid "%s: %s: drive is sleeping\n"
+ msgstr "%s: %s: o disco está adormecido\n"
+
+-#: src/hddtemp.c:217
+-#, c-format
+-msgid "%s: %s: known drive, but it doesn't have a temperature sensor.\n"
++#: src/hddtemp.c:242
++#, fuzzy, c-format
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
+ msgstr "%s: %s: disco conhecido, mas não tem um sensor de temperatura.\n"
+
+-#: src/hddtemp.c:220
++#: src/hddtemp.c:246
+ #, c-format
+ msgid "ERROR: %s: %s: unknown returned status\n"
+ msgstr "ERRO: %s: %s: estado devolvido desconhecido\n"
+
+-#: src/hddtemp.c:235
+-#, c-format
++#: src/hddtemp.c:261
++#, fuzzy, c-format
+ msgid ""
+ "\n"
+ "If one of the field value seems to match the temperature, be sure to read\n"
+-"the hddtemp man page before sending me a report (section REPORT). Thanks.\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
+ msgstr ""
+ "\n"
+-"Se um dos campos de valores parecer coincidir com a temperatura, assegure-se\n"
++"Se um dos campos de valores parecer coincidir com a temperatura, assegure-"
++"se\n"
+ "que lê a página do manual hddtemp antes de me enviar um relatório (secção\n"
+ "REPORT). Obrigado.\n"
+
+-#: src/hddtemp.c:308
++#: src/hddtemp.c:338
+ #, c-format
+ msgid "ERROR: invalid separator.\n"
+ msgstr "ERRO: separador inválido.\n"
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr "ERRO: número de port inválido\n"
+
+-#: src/hddtemp.c:329
+-#, c-format
++#: src/hddtemp.c:371
++#, fuzzy, c-format
+ msgid ""
+-" Usage: hddtemp [OPTIONS] DISK1 [DISK2]...\n"
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
+ "\n"
+ " hddtemp displays the temperature of drives supplied in argument.\n"
+ " Drives must support S.M.A.R.T.\n"
+ "\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
+ " -b --drivebase : display database file content that allow hddtemp to\n"
+ " recognize supported drives.\n"
+ " -D --debug : display various S.M.A.R.T. fields and their values.\n"
+@@ -136,6 +109,7 @@ msgid ""
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
+ "default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
+ "mode).\n"
+ " -n --numeric : print only the temperature.\n"
+@@ -143,6 +117,8 @@ msgid ""
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon "
+ "mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -156,19 +132,23 @@ msgstr ""
+ " hddtemp mostra a temperatura dos discos indicados no argumento.\n"
+ " Os discos têm de suportar S.M.A.R.T.\n"
+ "\n"
+-" -b --drivebase : mostrar o conteúdo do ficheiro de base de dados que\n"
++" -b\t --drivebase : mostrar o conteúdo do ficheiro de base de dados que\n"
+ " permite ao hddtemp reconhecer os discos suportados.\n"
+-" -D --debug : mostrar vários campos S.M.A.R.T. e os seus valores.\n"
+-" Útil para encontrar um valor que pareça coincidir com "
+-" a temperatura e/ou para me enviar um relatório.\n"
++" -D\t --debug : mostrar vários campos S.M.A.R.T. e os seus valores.\n"
++" Útil para encontrar um valor que pareça coincidir "
++"com a temperatura e/ou para me enviar um relatório.\n"
+ " (feito para cada disco indicado).\n"
+-" -d --daemon : correr o hddtemp no modo daemon TCP/IP\n (porto %d por omissão.)\n"
++" -d --daemon : correr o hddtemp no modo daemon TCP/IP\n"
++" (porto %d por omissão.)\n"
+ " -f --file=FILE : especificar o ficheiro de base de dados a utilizar.\n"
+-" -l --listen=addr : escutar um interface específico (no modo daemon TCP/IP).\n"
++" -l --listen=addr : escutar um interface específico (no modo daemon TCP/"
++"IP).\n"
+ " -n --numeric : escrever apenas a temperatura.\n"
+ " -p --port=# : port para escutar (no modo daemon TCP/IP).\n"
+-" -s --separator=C : separador a utilizar entre campos (no modo daemon TCP/IP).\n"
+-" -S --syslog=s : registar a temperatura para o syslog a cada s segundos.\n"
++" -s --separator=C : separador a utilizar entre campos (no modo daemon "
++"TCP/IP).\n"
++" -S --syslog=s : registar a temperatura para o syslog a cada s "
++"segundos.\n"
+ " -q --quiet : não verificar se o disco é suportado.\n"
+ " -v --version : mostrar o número da versão do hddtemp.\n"
+ " -w --wake-up : acordar o disco se necessário.\n"
+@@ -177,58 +157,93 @@ msgstr ""
+ "\n"
+ "Relatar bugs ou novos discos para <hddtemp@guzu.net>.\n"
+
+-#: src/hddtemp.c:522
++#: src/hddtemp.c:402
+ #, c-format
+ msgid "hddtemp version %s\n"
+ msgstr "hddtemp versão %s\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:418
+ #, c-format
+ msgid "ERROR: invalid interval.\n"
+ msgstr "ERRO: intervalo inválido.\n"
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:438
++#, c-format
+ msgid "Too few arguments: you must specify one drive, at least.\n"
+-msgstr "Número de argumentos insuficiente: tem de especificar pelo menos um disco.\n"
++msgstr ""
++"Número de argumentos insuficiente: tem de especificar pelo menos um disco.\n"
+
+-#: src/hddtemp.c:557
++#: src/hddtemp.c:448
++#, c-format
+ msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
+-msgstr "ERRO: não pode utilizar em conjunto as opções --debug e --daemon ou --syslog.\n"
++msgstr ""
++"ERRO: não pode utilizar em conjunto as opções --debug e --daemon ou --"
++"syslog.\n"
+
+-#: src/hddtemp.c:583
++#: src/hddtemp.c:505
+ #, c-format
+ msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
+-msgstr "ERRO: %s: não é possível determinar o tipo do bus (ou este tipo de bus é desconhecido)\n"
++msgstr ""
++"ERRO: %s: não é possível determinar o tipo do bus (ou este tipo de bus é "
++"desconhecido)\n"
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr "desconhecido"
+
+-#: src/ata.c:98
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
+ #, c-format
+-msgid "field(%d)\t = %d\n"
+-msgstr "campo(%d)\t = %d\n"
+-
+-#: src/ata.c:167
+ msgid "S.M.A.R.T. not available"
+ msgstr "S.M.A.R.T. não está disponível"
+
+-#: src/db.c:180
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"Regexp%s| Valor | Descrição\n"
++"------%s-------------------\n"
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
++msgstr "%s%s| %5d | %s\n"
++
++#: src/db.c:236
+ #, c-format
+ msgid "hddtemp: can't open %1$s: %2$s\n"
+ msgstr "hddtemp: não pode abrir %1$s: %2$s\n"
+
+-#: src/db.c:194
++#: src/db.c:250
+ #, c-format
+ msgid "ERROR: syntax error at line %1$d in %2$s\n"
+ msgstr "ERRO: erro de sintaxe na linha %1$d em %2$s\n"
+
+-#: src/db.c:201
++#: src/db.c:257
+ #, c-format
+ msgid " ERROR: line exceed %1$d characters in %2$s.\n"
+ msgstr " ERRO: a linha execedeu %1$d caracteres em %2$s.\n"
+
+-#: src/scsi.c:112 src/scsi.c:130
++#: src/scsi.c:111 src/scsi.c:129
+ #, c-format
+ msgid "log sense failed : %s"
+ msgstr "detecção de log falhou: %s"
++
++#~ msgid ""
++#~ "WARNING: Drive %s doesn't appear in the database of supported drives\n"
++#~ "WARNING: But using a common value, it reports something.\n"
++#~ "WARNING: Note that the temperature shown could be wrong.\n"
++#~ "WARNING: See --help, --debug and --drivebase options.\n"
++#~ "WARNING: And don't forget you can add your drive to hddtemp.db\n"
++#~ msgstr ""
++#~ "AVISO: O disco %s não parece estar na base de dados de discos suportados\n"
++#~ "AVISO: Mas ao utilizar um valor usual, relata alguma coisa.\n"
++#~ "AVISO: Note que a temperatura mostrada pode estar errada.\n"
++#~ "AVISO: Veja as opções --help, --debug e --frivebase.\n"
++#~ "AVISO: E não se esqueça de adicionar o seu disco a hddtemp.db\n"
++
++#~ msgid "field(%d)\t = %d\n"
++#~ msgstr "campo(%d)\t = %d\n"
+Index: hddtemp-0.3-beta15/po/de.po
+===================================================================
+--- /dev/null
++++ hddtemp-0.3-beta15/po/de.po
+@@ -0,0 +1,250 @@
++# German translation of hddtemp.
++# Copyright (C) 2008 Free Software Foundation, Inc.
++# This file is distributed under the same license as the hddtemp package.
++# Vinzenz Vietzke <vinz@v1nz.org>, 2008.
++# ,
++#
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: hddtemp 0.3-beta15-44\n"
++"Report-Msgid-Bugs-To: hddtemp@packages.debian.org\n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
++"PO-Revision-Date: 2011-08-30 16:40+0200\n"
++"Last-Translator: Vinzenz Vietzke <vinz@v1nz.org>\n"
++"Language-Team: <debian-l10n-german@lists.debian.org>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit"
++
++#: src/hddtemp.c:156
++#, c-format
++msgid ""
++"\n"
++"================= hddtemp %s ==================\n"
++"Model: %s\n"
++"\n"
++msgstr ""
++"\n"
++"================= hddtemp %s ==================\n"
++"Modell: %s\n"
++"\n"
++
++#: src/hddtemp.c:189
++#, c-format
++msgid ""
++"WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
++"WARNING: This doesn't mean it hasn't got one.\n"
++"WARNING: If you are sure it has one, please contact me (hddtemp@guzu."
++"net).\n"
++"WARNING: See --help, --debug and --drivebase options.\n"
++msgstr ""
++"WARNUNG: Laufwerk %s scheint keinen Temperatur-Sensor zu haben.\n"
++"WARNUNG: Das bedeutet nicht, dass es keinen besitzt.\n"
++"WARNUNG: Falls Sie sicher sind, dass es einen besitzt, kontaktieren Sie "
++"mich bitte (hddtemp@guzu.net).\n"
++"WARNUNG: Siehe Optionen --help, --debug und --drivebase.\n"
++
++#: src/hddtemp.c:197
++#, c-format
++msgid "%s: %s: no sensor\n"
++msgstr "%s: %s: kein Sensor\n"
++
++#: src/hddtemp.c:211
++#, c-format
++msgid "%s: %s: %d%sC or %sF\n"
++msgstr "%s: %s: %d%s°C oder %s°F\n"
++
++#: src/hddtemp.c:235
++#, c-format
++msgid "%s: %s: drive is sleeping\n"
++msgstr "%s: %s: Laufwerk schläft\n"
++
++#: src/hddtemp.c:242
++#, c-format
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
++msgstr ""
++"%s: %s: Laufwerk unterstützt, aber es hat keinen Temperatur-Sensor.\n"
++
++#: src/hddtemp.c:246
++#, c-format
++msgid "ERROR: %s: %s: unknown returned status\n"
++msgstr "FEHLER: %s: %s: zurückgegebener Status unbekannt\n"
++
++#: src/hddtemp.c:261
++#, c-format
++msgid ""
++"\n"
++"If one of the field value seems to match the temperature, be sure to read\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
++msgstr ""
++"\n"
++"Falls einer der Feldwerte der Temperatur zu entsprechen scheint, stellen "
++"Sie\n"
++"sicher, die hddtemp-Handbuchseite gelesen zu haben, bevor Sie einen "
++"Bericht\n"
++"senden (Abschnitt BERICHT). Danke.\n"
++
++#: src/hddtemp.c:338
++#, c-format
++msgid "ERROR: invalid separator.\n"
++msgstr "FEHLER: ungültiges Trennzeichen.\n"
++
++#: src/hddtemp.c:349
++#, c-format
++msgid "ERROR: invalid port number.\n"
++msgstr "FEHLER: ungültige Portnummer.\n"
++
++#: src/hddtemp.c:371
++#, c-format
++msgid ""
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
++"\n"
++" hddtemp displays the temperature of drives supplied in argument.\n"
++" Drives must support S.M.A.R.T.\n"
++"\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
++" -b --drivebase : display database file content that allow hddtemp "
++"to\n"
++" recognize supported drives.\n"
++" -D --debug : display various S.M.A.R.T. fields and their "
++"values.\n"
++" Useful to find a value that seems to match the\n"
++" temperature and/or to send me a report.\n"
++" (done for every drive supplied).\n"
++" -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
++"default.)\n"
++" -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
++" -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
++"mode).\n"
++" -n --numeric : print only the temperature.\n"
++" -p --port=# : port to listen to (in TCP/IP daemon mode).\n"
++" -s --separator=C : separator to use between fields (in TCP/IP daemon "
++"mode).\n"
++" -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
++" -q --quiet : do not check if the drive is supported.\n"
++" -v --version : display hddtemp version number.\n"
++" -w --wake-up : wake-up the drive if need.\n"
++" -4 : listen on IPv4 sockets only.\n"
++" -6 : listen on IPv6 sockets only.\n"
++"\n"
++"Report bugs or new drives to <hddtemp@guzu.net>.\n"
++msgstr ""
++" Verwendung: hddtemp [OPTIONEN] [TYP:]LAUFWERK1 [[TYP:]LAUFWERK2]...\n"
++"\n"
++" hddtemp zeigt die Temperatur der via Argument angegeben Laufwerke.\n"
++" Laufwerke müssen S.M.A.R.T. unterstützen.\n"
++"\n"
++" TYP kann SATA, PATA oder SCSI sein. Falls ausgelassen, wird hddtemp \n"
++" versuchen, diesen zu erraten.\n"
++"\n"
++" -b --drivebase : Datenbank-Datei-Inhalt anzeigen, der hddtemp "
++"erlaubt\n"
++" unterstützte Laufwerke zu erkennen.\n"
++" -D --debug : verschiedene S.M.A.R.T.-Felder und deren Werte "
++"anzeigen.\n"
++" Nützlich, um Werte zu finden, die der Temperatur "
++"entsprechen\n"
++" und/oder um mir einen Bericht zu senden.\n"
++" (bereits erledigt für jedes bereitgestellte "
++"Laufwerk).\n"
++" -d --daemon : hddtemp im TCP/IP-Daemon-Modus ausführen "
++"(Standardmäßig Port %d)\n"
++" -f --file=DATEI : zu verwendende Datenbank-Datei festlegen.\n"
++" -F --foreground : nicht daemonisieren, im Vordergrund bleiben.\n"
++" -l --listen=addr : auf einer bestimmten Schnittstelle auf Anfragen "
++"warten (im TCP/IP-Daemon-Modus).\n"
++" -n --numeric : nur die Temperatur ausgeben.\n"
++" -p --port=# : Port, auf dem auf Anfragen gewartet werden soll "
++"(im TCP/IP-Daemon-Modus).\n"
++" -s --separator=C : Trennzeichen zur Verwendung zwischen Feldern (im "
++"TCP/IP-Daemon-Modus).\n"
++" -S --syslog=s : Temperatur alle s Sekunden in das syslog "
++"eintragen.\n"
++" -u --unit=[C|F] : Ausgabe der Temperatur entweder in Celsius oder "
++"Fahrenheit erzwingen.\n"
++" -q --quiet : nicht prüfen, ob das Laufwerk unterstützt wird.\n"
++" -v --version : Versionsnummer von hddtemp anzeigen.\n"
++" -w --wake-up : Laufwerk bei Bedarf aufwecken.\n"
++" -4 : nur auf IPv4-Sockets auf Anfragen warten.\n"
++" -6 : nur auf IPv6-Sockets auf Anfragen warten.\n"
++"\n"
++"Fehler oder neue Laufwerke an <hddtemp@guzu.net> melden.\n"
++
++#: src/hddtemp.c:402
++#, c-format
++msgid "hddtemp version %s\n"
++msgstr "hddtemp Version %s\n"
++
++#: src/hddtemp.c:418
++#, c-format
++msgid "ERROR: invalid interval.\n"
++msgstr "FEHLER: ungültiges Intervall.\n"
++
++#: src/hddtemp.c:438
++#, c-format
++msgid "Too few arguments: you must specify one drive, at least.\n"
++msgstr "Zu wenige Argumente: Sie müssen mindestens ein Laufwerk angeben.\n"
++
++#: src/hddtemp.c:448
++#, c-format
++msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
++msgstr ""
++"FEHLER: kann Optionen --debug und --daemon oder --syslog nicht zusammen "
++"verwenden.\n"
++
++#: src/hddtemp.c:505
++#, c-format
++msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
++msgstr ""
++"FEHLER: %s: kann Bus-Typ nicht ermitteln (oder dieser Bus-Typ ist "
++"unbekannt)\n"
++
++#: src/ata.c:66 src/scsi.c:64
++msgid "unknown"
++msgstr "unbekannt"
++
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
++#, c-format
++msgid "S.M.A.R.T. not available"
++msgstr "S.M.A.R.T. nicht verfügbar"
++
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"Regexp%s| Wert | Beschreibung\n"
++"------%s---------------------\n"
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
++msgstr "%s%s| %5d | %s\n"
++
++#: src/db.c:236
++#, c-format
++msgid "hddtemp: can't open %1$s: %2$s\n"
++msgstr "hddtemp: kann %1$s nicht öffnen: %2$s\n"
++
++#: src/db.c:250
++#, c-format
++msgid "ERROR: syntax error at line %1$d in %2$s\n"
++msgstr "FEHLER: Syntaxfehler in Zeile %1$d in %2$s\n"
++
++#: src/db.c:257
++#, c-format
++msgid " ERROR: line exceed %1$d characters in %2$s.\n"
++msgstr " FEHLER: Zeile überschreitet %1$d Zeichen in %2$s.\n"
++
++#: src/scsi.c:111 src/scsi.c:129
++#, c-format
++msgid "log sense failed : %s"
++msgstr "Protokoll-Erkennung fehlgeschlagen : %s"
+Index: hddtemp-0.3-beta15/po/LINGUAS
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/LINGUAS
++++ hddtemp-0.3-beta15/po/LINGUAS
+@@ -1,2 +1,2 @@
+ # Set of available languages.
+-fr pt ru sv
++de fr pt ru sv
+Index: hddtemp-0.3-beta15/po/hddtemp.pot
+===================================================================
+--- hddtemp-0.3-beta15.orig/po/hddtemp.pot
++++ hddtemp-0.3-beta15/po/hddtemp.pot
+@@ -1,35 +1,22 @@
+-
+-# Copyright (C) 2006 Free Software Foundation, Inc.
+-# This file is distributed under the same license as the 'hddtemp' package.
+-# Emmanuel VARAGNAT <hddtemp@guzu.net>, 2006.
++# SOME DESCRIPTIVE TITLE.
++# Copyright (C) YEAR Free Software Foundation, Inc.
++# This file is distributed under the same license as the PACKAGE package.
++# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+ #
+ #, fuzzy
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: PACKAGE VERSION\n"
+-"Report-Msgid-Bugs-To: hddtemp@guzu.net\n"
+-"POT-Creation-Date: 2005-02-25 22:43+0100\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2006-06-29 16:24+0200\n"
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+-"Last-Translator: Emmanuel Varagnat <hddtemp@guzu.net>\n"
++"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+ "Language-Team: LANGUAGE <LL@li.org>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=CHARSET\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: src/hddtemp.c:112
+-#, c-format
+-msgid ""
+-"\n"
+-"Regexp%s| Value | Description\n"
+-"------%s---------------------\n"
+-msgstr ""
+-
+-#: src/hddtemp.c:118
+-#, c-format
+-msgid "%s%s| %5d | %s\n"
+-msgstr ""
+-
+-#: src/hddtemp.c:161
++#: src/hddtemp.c:156
+ #, c-format
+ msgid ""
+ "\n"
+@@ -38,7 +25,7 @@ msgid ""
+ "\n"
+ msgstr ""
+
+-#: src/hddtemp.c:188
++#: src/hddtemp.c:189
+ #, c-format
+ msgid ""
+ "WARNING: Drive %s doesn't seem to have a temperature sensor.\n"
+@@ -47,67 +34,59 @@ msgid ""
+ "WARNING: See --help, --debug and --drivebase options.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:192
+-#, c-format
+-msgid "%s: %s: no sensor\n"
+-msgstr ""
+-
+ #: src/hddtemp.c:197
+ #, c-format
+-msgid ""
+-"WARNING: Drive %s doesn't appear in the database of supported drives\n"
+-"WARNING: But using a common value, it reports something.\n"
+-"WARNING: Note that the temperature shown could be wrong.\n"
+-"WARNING: See --help, --debug and --drivebase options.\n"
+-"WARNING: And don't forget you can add your drive to hddtemp.db\n"
++msgid "%s: %s: no sensor\n"
+ msgstr ""
+
+-#: src/hddtemp.c:202
++#: src/hddtemp.c:211
+ #, c-format
+ msgid "%s: %s: %d%sC or %sF\n"
+ msgstr ""
+
+-#: src/hddtemp.c:214
++#: src/hddtemp.c:235
+ #, c-format
+ msgid "%s: %s: drive is sleeping\n"
+ msgstr ""
+
+-#: src/hddtemp.c:217
++#: src/hddtemp.c:242
+ #, c-format
+-msgid "%s: %s: known drive, but it doesn't have a temperature sensor.\n"
++msgid "%s: %s: drive supported, but it doesn't have a temperature sensor.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:220
++#: src/hddtemp.c:246
+ #, c-format
+ msgid "ERROR: %s: %s: unknown returned status\n"
+ msgstr ""
+
+-#: src/hddtemp.c:235
++#: src/hddtemp.c:261
+ #, c-format
+ msgid ""
+ "\n"
+ "If one of the field value seems to match the temperature, be sure to read\n"
+-"the hddtemp man page before sending me a report (section REPORT). Thanks.\n"
++"the hddtemp man page before sending a report (section REPORT). Thanks.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:308
++#: src/hddtemp.c:338
+ #, c-format
+ msgid "ERROR: invalid separator.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:329
++#: src/hddtemp.c:371
+ #, c-format
+ msgid ""
+-" Usage: hddtemp [OPTIONS] DISK1 [DISK2]...\n"
++" Usage: hddtemp [OPTIONS] [TYPE:]DISK1 [[TYPE:]DISK2]...\n"
+ "\n"
+ " hddtemp displays the temperature of drives supplied in argument.\n"
+ " Drives must support S.M.A.R.T.\n"
+ "\n"
++" TYPE could be SATA, PATA or SCSI. If omitted hddtemp will try to guess.\n"
++"\n"
+ " -b --drivebase : display database file content that allow hddtemp to\n"
+ " recognize supported drives.\n"
+ " -D --debug : display various S.M.A.R.T. fields and their values.\n"
+@@ -117,6 +96,7 @@ msgid ""
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by "
+ "default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++" -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon "
+ "mode).\n"
+ " -n --numeric : print only the temperature.\n"
+@@ -124,6 +104,8 @@ msgid ""
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon "
+ "mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
++" -u --unit=[C|F] : force output temperature either in Celsius or "
++"Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -133,58 +115,69 @@ msgid ""
+ "Report bugs or new drives to <hddtemp@guzu.net>.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:522
++#: src/hddtemp.c:402
+ #, c-format
+ msgid "hddtemp version %s\n"
+ msgstr ""
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:418
+ #, c-format
+ msgid "ERROR: invalid interval.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:547
++#: src/hddtemp.c:438
++#, c-format
+ msgid "Too few arguments: you must specify one drive, at least.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:557
++#: src/hddtemp.c:448
++#, c-format
+ msgid "ERROR: can't use --debug and --daemon or --syslog options together.\n"
+ msgstr ""
+
+-#: src/hddtemp.c:583
++#: src/hddtemp.c:505
+ #, c-format
+ msgid "ERROR: %s: can't determine bus type (or this bus type is unknown)\n"
+ msgstr ""
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr ""
+
+-#: src/ata.c:98
++#: src/ata.c:85 src/ata.c:104 src/scsi.c:91
+ #, c-format
+-msgid "field(%d)\t = %d\n"
++msgid "S.M.A.R.T. not available"
+ msgstr ""
+
+-#: src/ata.c:167
+-msgid "S.M.A.R.T. not available"
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++
++#: src/db.c:121
++#, c-format
++msgid "%s%s| %5d | %s\n"
+ msgstr ""
+
+-#: src/db.c:180
++#: src/db.c:236
+ #, c-format
+ msgid "hddtemp: can't open %1$s: %2$s\n"
+ msgstr ""
+
+-#: src/db.c:194
++#: src/db.c:250
+ #, c-format
+ msgid "ERROR: syntax error at line %1$d in %2$s\n"
+ msgstr ""
+
+-#: src/db.c:201
++#: src/db.c:257
+ #, c-format
+ msgid " ERROR: line exceed %1$d characters in %2$s.\n"
+ msgstr ""
+
+-#: src/scsi.c:112 src/scsi.c:130
++#: src/scsi.c:111 src/scsi.c:129
+ #, c-format
+ msgid "log sense failed : %s"
+ msgstr ""
+Index: hddtemp-0.3-beta15/src/sata.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/sata.c
++++ hddtemp-0.3-beta15/src/sata.c
+@@ -118,11 +118,22 @@ static enum e_gettemp sata_get_temperatu
+ int i;
+ u16 * p;
+
+- if(dsk->db_entry && dsk->db_entry->attribute_id == 0) {
++ if(dsk->db_entry->attribute_id == 0) {
+ close(dsk->fd);
+ dsk->fd = -1;
+ return GETTEMP_NOSENSOR;
+ }
++
++ switch(ata_get_powermode(dsk->fd)) {
++ case PWM_STANDBY:
++ case PWM_SLEEPING:
++ if (!wakeup)
++ return GETTEMP_DRIVE_SLEEP;
++ case PWM_UNKNOWN:
++ case PWM_ACTIVE: /* active or idle */
++ default:
++ break;
++ }
+
+ /* get SMART values */
+ if(sata_enable_smart(dsk->fd) != 0) {
+@@ -154,24 +165,15 @@ static enum e_gettemp sata_get_temperatu
+ }
+
+ /* temperature */
+- if(dsk->db_entry && dsk->db_entry->attribute_id > 0)
+- field = sata_search_temperature(values, dsk->db_entry->attribute_id);
+- else
+- field = sata_search_temperature(values, DEFAULT_ATTRIBUTE_ID);
++ field = sata_search_temperature(values, dsk->db_entry->attribute_id);
+
+ if(field)
+ dsk->value = *(field+3);
+
+ if(dsk->db_entry && dsk->value != -1)
+ return GETTEMP_KNOWN;
+- else {
+- if(dsk->value != -1) {
+- return GETTEMP_GUESS;
+- }
+- else {
+- return GETTEMP_UNKNOWN;
+- }
+- }
++ else
++ return GETTEMP_UNKNOWN;
+
+ /* never reached */
+ }
+Index: hddtemp-0.3-beta15/src/satacmds.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/satacmds.c
++++ hddtemp-0.3-beta15/src/satacmds.c
+@@ -39,7 +39,7 @@
+ #include <sys/ioctl.h>
+ #include <scsi/sg.h>
+ #include <linux/hdreg.h>
+-#include <netinet/in.h>
++#include <byteswap.h>
+
+ // Application specific includes
+ #include "satacmds.h"
+@@ -80,8 +80,8 @@ int sata_pass_thru(int device, unsigned
+
+ ret = scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+
+- /* Verify SATA magics */
+- if (sense[0] != 0x72 || sense[7] != 0x0e || sense[9] != 0x0e || sense[10] != 0x00)
++ /* Verify SATA magic */
++ if (sense[0] != 0x72)
+ return 1;
+ else
+ return ret;
+@@ -95,10 +95,10 @@ void sata_fixstring(unsigned char *s, in
+ p = s;
+ end = &s[bytecount & ~1]; /* bytecount must be even */
+
+- /* convert from big-endian to host byte order */
++ /* convert from big-endian to string order */
+ for (p = end ; p != s;) {
+ unsigned short *pp = (unsigned short *) (p -= 2);
+- *pp = ntohs(*pp);
++ *pp = bswap_16(*pp);
+ }
+
+ /* strip leading blanks */
+Index: hddtemp-0.3-beta15/src/backtrace.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/backtrace.c
++++ hddtemp-0.3-beta15/src/backtrace.c
+@@ -16,9 +16,10 @@
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#define _GNU_SOURCE
+ #include <features.h>
+
+-#if defined(__i386__) && defined(__GLIBC__)
++#if (defined(__i386__) || defined(__x86_64__)) && defined(__GLIBC__)
+
+ #include <execinfo.h>
+
+@@ -31,8 +32,12 @@
+ #include <bits/sigcontext.h>
+ #include <sys/param.h>
+
+-#define __USE_GNU
+ #include <ucontext.h>
++#if defined(__i386__)
++# define REG_IP REG_EIP
++#elif defined(__x86_64__)
++# define REG_IP REG_RIP
++#endif
+
+ #define MAX_BTSIZE 64
+
+@@ -42,7 +47,6 @@ void backtrace_handler(int n, siginfo_t
+ static char **messages = NULL;
+ static size_t btsize = 0;
+ static size_t i;
+- static unsigned int old_eip, old_ebp;
+ static char *strerr = "???";
+ static FILE *fstrm;
+
+@@ -61,10 +65,10 @@ void backtrace_handler(int n, siginfo_t
+ SIC_CASE(SEGV_MAPERR);
+ SIC_CASE(SEGV_ACCERR);
+ }
+- fprintf(fstrm, "=== SEGFAULT (%s) : invalid access to %p, in 0x%08x\n",
++ fprintf(fstrm, "=== SEGFAULT (%s) : invalid access to %p, in %p\n",
+ strerr,
+ ist->si_addr,
+- puc->uc_mcontext.gregs[REG_EIP]);
++ (void*)puc->uc_mcontext.gregs[REG_IP]);
+ break;
+ case SIGILL:
+ switch(ist->si_code) {
+@@ -77,10 +81,10 @@ void backtrace_handler(int n, siginfo_t
+ SIC_CASE(ILL_COPROC);
+ SIC_CASE(ILL_BADSTK);
+ }
+- fprintf(fstrm, "=== ILLEGAL INSTR (%s) : invalid access to %p, in 0x%08x\n",
++ fprintf(fstrm, "=== ILLEGAL INSTR (%s) : invalid access to %p, in %p\n",
+ strerr,
+ ist->si_addr,
+- puc->uc_mcontext.gregs[REG_EIP]);
++ (void*)puc->uc_mcontext.gregs[REG_IP]);
+ break;
+ case SIGBUS:
+ switch(ist->si_code) {
+@@ -88,10 +92,10 @@ void backtrace_handler(int n, siginfo_t
+ SIC_CASE(BUS_ADRERR);
+ SIC_CASE(BUS_OBJERR);
+ }
+- fprintf(fstrm, "=== BUS ERROR (%p) : invalid access to %p, in 0x%08x\n",
++ fprintf(fstrm, "=== BUS ERROR (%p) : invalid access to %p, in %p\n",
+ strerr,
+ ist->si_addr,
+- puc->uc_mcontext.gregs[REG_EIP]);
++ (void*)puc->uc_mcontext.gregs[REG_IP]);
+ break;
+ }
+ fflush(fstrm);
+@@ -101,7 +105,7 @@ void backtrace_handler(int n, siginfo_t
+ /*
+ old_eip = *(unsigned int*)((void*)&n-4);
+ old_ebp = *(unsigned int*)((void*)&n-8);
+- *(unsigned int*)((void*)&n-4) = puc->uc_mcontext.gregs[REG_EIP];
++ *(unsigned int*)((void*)&n-4) = puc->uc_mcontext.gregs[REG_IP];
+ *(unsigned int*)((void*)&n-8) = puc->uc_mcontext.gregs[REG_EBP];
+
+ btsize = backtrace(btinfo, MAX_BTSIZE);
+@@ -111,14 +115,14 @@ void backtrace_handler(int n, siginfo_t
+ */
+
+ btsize = backtrace(btinfo, MAX_BTSIZE);
+- btinfo[1] = (void*) puc->uc_mcontext.gregs[REG_EIP];
++ btinfo[1] = (void*) puc->uc_mcontext.gregs[REG_IP];
+
+ messages = backtrace_symbols(btinfo, btsize);
+
+ for(i = 1;
+ i < btsize;
+ i++)
+- fprintf(fstrm, "[%d] #%d: %s\n", getpid(), i, messages[i]);
++ fprintf(fstrm, "[%d] #%zu: %s\n", getpid(), i, messages[i]);
+ fflush(fstrm);
+ fclose(fstrm);
+
+Index: hddtemp-0.3-beta15/src/daemon.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/daemon.c
++++ hddtemp-0.3-beta15/src/daemon.c
+@@ -163,19 +163,16 @@ void daemon_send_msg(struct disk *ldisks
+
+ switch(dsk->ret) {
+ case GETTEMP_NOT_APPLICABLE:
+- n = snprintf(msg, sizeof(msg), "%s%c%s%c%s%c%c",
++ n = snprintf(msg, sizeof(msg), "%s%c%s%cNA%c*",
+ dsk->drive, separator,
+ dsk->model, separator,
+- "NA", separator,
+- '*');
++ separator);
+ break;
+- case GETTEMP_GUESS:
+ case GETTEMP_UNKNOWN:
+- n = snprintf(msg, sizeof(msg), "%s%c%s%c%s%c%c",
++ n = snprintf(msg, sizeof(msg), "%s%c%s%cUNK%c*",
+ dsk->drive, separator,
+- dsk->model, separator,
+- "UNK", separator,
+- '*');
++ dsk->model, separator,
++ separator);
+ break;
+ case GETTEMP_KNOWN:
+ n = snprintf(msg, sizeof(msg), "%s%c%s%c%d%c%c",
+@@ -185,26 +182,23 @@ void daemon_send_msg(struct disk *ldisks
+ get_unit(dsk));
+ break;
+ case GETTEMP_NOSENSOR:
+- n = snprintf(msg, sizeof(msg), "%s%c%s%c%s%c%c",
++ n = snprintf(msg, sizeof(msg), "%s%c%s%cNOS%c*",
+ dsk->drive, separator,
+ dsk->model, separator,
+- "NOS", separator,
+- '*');
++ separator);
+ break;
+ case GETTEMP_DRIVE_SLEEP:
+- n = snprintf(msg, sizeof(msg), "%s%c%s%c%s%c%c",
++ n = snprintf(msg, sizeof(msg), "%s%c%s%cSLP%c*",
+ dsk->drive, separator,
+ dsk->model, separator,
+- "SLP", separator,
+- '*');
++ separator);
+ break;
+ case GETTEMP_ERROR:
+ default:
+- n = snprintf(msg, sizeof(msg), "%s%c%s%c%s%c%c",
++ n = snprintf(msg, sizeof(msg), "%s%c%s%cERR%c*",
+ dsk->drive, separator,
+ (dsk->model) ? dsk->model : "???", separator,
+- "ERR", separator,
+- '*');
++ separator);
+ break;
+ }
+ write(cfd,&separator, 1);
+@@ -222,14 +216,11 @@ void daemon_syslog(struct disk *ldisks)
+ for(dsk = ldisks; dsk; dsk = dsk->next) {
+ switch(dsk->ret) {
+ case GETTEMP_KNOWN:
+- case GETTEMP_GUESS:
+- value_to_unit(dsk);
+-
+ syslog(LOG_INFO, "%s: %s: %d %c",
+ dsk->drive,
+ dsk->model,
+- dsk->value,
+- dsk->db_entry->unit);
++ value_to_unit(dsk),
++ get_unit(dsk));
+ break;
+ case GETTEMP_DRIVE_SLEEP:
+ syslog(LOG_WARNING, _("%s: %s: drive is sleeping"),
+@@ -270,28 +261,30 @@ void do_daemon_mode(struct disk *ldisks)
+ fd_set deffds;
+ time_t next_time;
+
+- switch(fork()) {
+- case -1:
+- perror("fork");
+- exit(2);
+- break;
+- case 0:
+- break;
+- default:
+- exit(0);
+- }
+-
+- setsid();
+-
+- switch(fork()) {
+- case -1:
+- perror("fork");
+- exit(2);
+- break;
+- case 0:
+- break;
+- default:
+- exit(0);
++if (!foreground) {
++ switch(fork()) {
++ case -1:
++ perror("fork");
++ exit(2);
++ break;
++ case 0:
++ break;
++ default:
++ exit(0);
++ }
++
++ setsid();
++
++ switch(fork()) {
++ case -1:
++ perror("fork");
++ exit(2);
++ break;
++ case 0:
++ break;
++ default:
++ exit(0);
++ }
+ }
+ chdir("/");
+ umask(0);
+Index: hddtemp-0.3-beta15/src/hddtemp.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/hddtemp.c
++++ hddtemp-0.3-beta15/src/hddtemp.c
+@@ -75,7 +75,7 @@ char * listen_addr;
+ char separator = SEPARATOR;
+
+ struct bustype * bus[BUS_TYPE_MAX];
+-int tcp_daemon, debug, quiet, numeric, wakeup, af_hint;
++int tcp_daemon, debug, quiet, numeric, wakeup, foreground, af_hint;
+
+ static enum { DEFAULT, CELSIUS, FAHRENHEIT } unit;
+
+@@ -194,23 +194,7 @@ static void display_temperature(struct d
+ if (numeric && quiet)
+ printf("0\n");
+ else
+- printf(_("%s: %s: no sensor\n"), dsk->drive, dsk->model);
+-
+- break;
+- case GETTEMP_GUESS:
+-
+- if(!quiet)
+- fprintf(stderr,
+- _("WARNING: Drive %s doesn't appear in the database of supported drives\n"
+- "WARNING: But using a common value, it reports something.\n"
+- "WARNING: Note that the temperature shown could be wrong.\n"
+- "WARNING: See --help, --debug and --drivebase options.\n"
+- "WARNING: And don't forget you can add your drive to hddtemp.db\n"), dsk->drive);
+-
+- if (! numeric)
+- printf(_("%s: %s: %d%sC or %sF\n"), dsk->drive, dsk->model, dsk->value, degree, degree);
+- else
+- printf("%d\n", value_to_unit(dsk));
++ fprintf(stderr, _("%s: %s: no sensor\n"), dsk->drive, dsk->model);
+
+ break;
+ case GETTEMP_KNOWN:
+@@ -232,14 +216,14 @@ static void display_temperature(struct d
+ if (numeric && quiet)
+ printf("0\n");
+ else
+- printf(_("%s: %s: drive is sleeping\n"), dsk->drive, dsk->model);
++ fprintf(stderr, _("%s: %s: drive is sleeping\n"), dsk->drive, dsk->model);
+
+ break;
+ case GETTEMP_NOSENSOR:
+ if (numeric && quiet)
+ printf("0\n");
+ else
+- printf(_("%s: %s: drive supported, but it doesn't have a temperature sensor.\n"), dsk->drive, dsk->model);
++ fprintf(stderr, _("%s: %s: drive supported, but it doesn't have a temperature sensor.\n"), dsk->drive, dsk->model);
+
+ break;
+ default:
+@@ -268,8 +252,9 @@ void do_direct_mode(struct disk *ldisks)
+
+ int main(int argc, char* argv[]) {
+ int i, c, lindex = 0, db_loaded = 0;
++ int ret = 0;
+ int show_db;
+- struct disk * ldisks;
++ struct disk * ldisks;
+
+ backtrace_sigsegv();
+ backtrace_sigill();
+@@ -283,7 +268,7 @@ int main(int argc, char* argv[]) {
+ textdomain (PACKAGE);
+ #endif
+
+- show_db = debug = numeric = quiet = wakeup = af_hint = syslog_interval = 0;
++ show_db = debug = numeric = quiet = wakeup = af_hint = syslog_interval = foreground = 0;
+ unit = DEFAULT;
+ portnum = PORT_NUMBER;
+ listen_addr = NULL;
+@@ -298,6 +283,7 @@ int main(int argc, char* argv[]) {
+ {"drivebase", 0, NULL, 'b'},
+ {"debug", 0, NULL, 'D'},
+ {"file", 1, NULL, 'f'},
++ {"foreground", 0, NULL, 'F'},
+ {"listen", 1, NULL, 'l'},
+ {"version", 0, NULL, 'v'},
+ {"port", 1, NULL, 'p'},
+@@ -309,7 +295,7 @@ int main(int argc, char* argv[]) {
+ {0, 0, 0, 0}
+ };
+
+- c = getopt_long (argc, argv, "bDdf:l:hp:qs:u:vnw46S:", long_options, &lindex);
++ c = getopt_long (argc, argv, "bDdf:l:hp:qs:u:vnw46FS:", long_options, &lindex);
+ if (c == -1)
+ break;
+
+@@ -386,12 +372,13 @@ int main(int argc, char* argv[]) {
+ " (done for every drive supplied).\n"
+ " -d --daemon : run hddtemp in TCP/IP daemon mode (port %d by default.)\n"
+ " -f --file=FILE : specify database file to use.\n"
++ " -F --foreground : don't daemonize, stay in foreground.\n"
+ " -l --listen=addr : listen on a specific interface (in TCP/IP daemon mode).\n"
+ " -n --numeric : print only the temperature.\n"
+ " -p --port=# : port to listen to (in TCP/IP daemon mode).\n"
+ " -s --separator=C : separator to use between fields (in TCP/IP daemon mode).\n"
+ " -S --syslog=s : log temperature to syslog every s seconds.\n"
+- " -u --unit=[C|F] : force output temperature either in Celius or Fahrenheit.\n"
++ " -u --unit=[C|F] : force output temperature either in Celsius or Fahrenheit.\n"
+ " -q --quiet : do not check if the drive is supported.\n"
+ " -v --version : display hddtemp version number.\n"
+ " -w --wake-up : wake-up the drive if need.\n"
+@@ -422,6 +409,9 @@ int main(int argc, char* argv[]) {
+ }
+ }
+ break;
++ case 'F':
++ foreground = 1;
++ break;
+ default:
+ exit(1);
+ }
+@@ -493,6 +483,7 @@ int main(int argc, char* argv[]) {
+ if( (dsk->fd = open(dsk->drive, O_RDONLY | O_NONBLOCK)) < 0) {
+ snprintf(dsk->errormsg, MAX_ERRORMSG_SIZE, "open: %s\n", strerror(errno));
+ dsk->type = ERROR;
++ ret = 1;
+ continue;
+ }
+
+@@ -505,6 +496,7 @@ int main(int argc, char* argv[]) {
+
+ ldisks = dsk->next;
+ free(dsk);
++ ret = 1;
+ continue;
+ }
+
+@@ -518,11 +510,17 @@ int main(int argc, char* argv[]) {
+ db_loaded = 1;
+ }
+
++ dsk->db_entry = (struct harddrive_entry *)malloc(sizeof(struct harddrive_entry));
+ dbe = is_a_supported_drive(dsk->model);
+- if(dbe) {
+- dsk->db_entry = (struct harddrive_entry *)malloc(sizeof(struct harddrive_entry));
++ if(dbe)
+ memcpy(dsk->db_entry, dbe, sizeof(struct harddrive_entry));
+- }
++ else {
++ dsk->db_entry->regexp = "";
++ dsk->db_entry->description = "";
++ dsk->db_entry->attribute_id = DEFAULT_ATTRIBUTE_ID;
++ dsk->db_entry->unit = 'C';
++ dsk->db_entry->next = NULL;
++ }
+ }
+ }
+
+@@ -534,5 +532,5 @@ int main(int argc, char* argv[]) {
+ do_direct_mode(ldisks);
+ }
+
+- return 0;
++ return ret;
+ }
+Index: hddtemp-0.3-beta15/src/ata.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/ata.c
++++ hddtemp-0.3-beta15/src/ata.c
+@@ -75,7 +75,7 @@ static enum e_gettemp ata_get_temperatur
+ int i;
+ u16 * p;
+
+- if(dsk->db_entry && dsk->db_entry->attribute_id == 0) {
++ if(dsk->db_entry->attribute_id == 0) {
+ close(dsk->fd);
+ dsk->fd = -1;
+ return GETTEMP_NOSENSOR;
+@@ -140,24 +140,15 @@ static enum e_gettemp ata_get_temperatur
+ */
+
+ /* temperature */
+- if(dsk->db_entry && dsk->db_entry->attribute_id > 0)
+- field = ata_search_temperature(values, dsk->db_entry->attribute_id);
+- else
+- field = ata_search_temperature(values, DEFAULT_ATTRIBUTE_ID);
++ field = ata_search_temperature(values, dsk->db_entry->attribute_id);
+
+ if(field)
+ dsk->value = *(field+3);
+
+- if(dsk->db_entry && dsk->value != -1)
++ if(dsk->value != -1)
+ return GETTEMP_KNOWN;
+- else {
+- if(dsk->value != -1) {
+- return GETTEMP_GUESS;
+- }
+- else {
+- return GETTEMP_UNKNOWN;
+- }
+- }
++ else
++ return GETTEMP_UNKNOWN;
+
+ /* never reached */
+ }
+Index: hddtemp-0.3-beta15/src/hddtemp.h
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/hddtemp.h
++++ hddtemp-0.3-beta15/src/hddtemp.h
+@@ -39,8 +39,6 @@ enum e_gettemp {
+ GETTEMP_ERROR, /* Error */
+ GETTEMP_NOT_APPLICABLE, /* */
+ GETTEMP_UNKNOWN, /* Drive is not in database */
+- GETTEMP_GUESS, /* Not in database, but something was guessed, user must
+- check that the temperature returned is correct */
+ GETTEMP_KNOWN, /* Drive appear in database */
+ GETTEMP_NOSENSOR, /* Drive appear in database but is known to have no sensor */
+ GETTEMP_DRIVE_SLEEP /* Drive is sleeping */
+@@ -78,7 +76,7 @@ struct bustype {
+
+ extern struct bustype * bus[BUS_TYPE_MAX];
+ extern char errormsg[MAX_ERRORMSG_SIZE];
+-extern int tcp_daemon, debug, quiet, wakeup, af_hint;
++extern int tcp_daemon, debug, quiet, wakeup, af_hint, foreground;
+ extern char separator;
+ extern long portnum, syslog_interval;
+ extern char * listen_addr;
+Index: hddtemp-0.3-beta15/src/scsicmds.c
+===================================================================
+--- hddtemp-0.3-beta15.orig/src/scsicmds.c
++++ hddtemp-0.3-beta15/src/scsicmds.c
+@@ -147,6 +147,7 @@ int scsi_inquiry(int device, unsigned ch
+ return 1;
+ else {
+ scsi_fixstring(buffer + 8, 24);
++ buffer[32] = 0;
+ return 0;
+ }
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/init b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/init
new file mode 100644
index 000000000..0df8f67f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp/init
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+# skeleton example file to build /etc/init.d/ scripts.
+# This file should be used to construct scripts for /etc/init.d.
+#
+# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
+# Modified for Debian GNU/Linux
+# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
+#
+# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
+#
+
+### BEGIN INIT INFO
+# Provides: hddtemp
+# Required-Start: $remote_fs $syslog $network
+# Required-Stop: $remote_fs $syslog $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: disk temperature monitoring daemon
+# Description: hddtemp is a disk temperature monitoring daemon
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+NAME=hddtemp
+DAEMON=/usr/sbin/$NAME
+DESC="disk temperature monitoring daemon"
+
+DISKS="/dev/hd[a-z] /dev/hd[a-z][a-z]"
+DISKS="$DISKS /dev/sd[a-z] /dev/sd[a-z][a-z]"
+DISKS="$DISKS /dev/sr[a-z] /dev/sr[a-z][a-z]"
+INTERFACE="0.0.0.0"
+PORT="7634"
+SEPARATOR="|"
+RUN_SYSLOG="0"
+
+# Reads config file (will override defaults above)
+[ -r /etc/default/hddtemp ] && . /etc/default/hddtemp
+
+if [ -n "$RUN_SYSLOG" ] && [ "$RUN_SYSLOG" != "0" ] ; then
+ SYSLOG_ARG="-S $RUN_SYSLOG"
+fi
+
+if [ "$RUN_DAEMON" = "true" ] || [ "$RUN_DAEMON" = "yes" ] ; then
+ DAEMON_ARG="-d -l $INTERFACE -p $PORT -s $SEPARATOR"
+fi
+
+[ -x "$DAEMON" ] || exit 0
+
+. /lib/lsb/init-functions
+
+case "$1" in
+ start)
+ # master switch
+ if [ -n "$DAEMON_ARG" ] || [ -n "$SYSLOG_ARG" ] ; then
+ log_daemon_msg "Starting $DESC" "$NAME:"
+ CDROMS_LIST=$(sed -ne 's/^drive name:\t\+\(.*\)$/ \/dev\/\1/p' /proc/sys/dev/cdrom/info 2>/dev/null) || :
+ CDROMS_LIST="$CDROMS_LIST $(grep -sl '^ide-scsi ' /proc/ide/hd*/driver | awk -F / '{ print "/dev/"$4 }')"
+ for disk in $DISKS ; do
+ echo $CDROMS_LIST | grep -wq $disk && continue
+ echo $DISKS_NOPROBE | grep -wq $disk && continue
+ if $DAEMON -wn $OPTIONS $disk 2>/dev/null | grep -q '^[0-9]\+$' ; then
+ DISKS_LIST="$DISKS_LIST $disk";
+ fi
+ done
+ if [ -n "$DISKS_LIST" ] || [ -n "$DISKS_NOPROBE" ] ; then
+ start-stop-daemon --start --quiet --exec $DAEMON -- $DAEMON_ARG $SYSLOG_ARG $OPTIONS $DISKS_NOPROBE $DISKS_LIST
+ ret=$?
+ log_progress_msg "$DISKS_NOPROBE$DISKS_LIST"
+ log_end_msg $ret
+ else
+ log_progress_msg "no disks with monitoring capability were found."
+ log_end_msg 0
+ fi
+ fi
+ ;;
+ stop)
+ # master switch
+ if [ "$RUN_DAEMON" = "true" ] || [ "$RUN_DAEMON" = "yes" ] || [ "$RUN_SYSLOG" != "0" ] ; then
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ start-stop-daemon --stop --oknodo --exec $DAEMON --retry 30
+ log_end_msg $?
+ fi
+ ;;
+ force-reload|reload)
+ exit 3
+ ;;
+ restart)
+ $0 stop && $0 start
+ ;;
+ status)
+ status_of_proc $DAEMON $NAME
+ exit $?
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp_0.3-beta15.bb b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp_0.3-beta15.bb
new file mode 100644
index 000000000..4a871bf4f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hddtemp/hddtemp_0.3-beta15.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Hard disk temperature monitor daemon"
+SECTION = "console/network"
+LICENSE = "GPLv2+"
+
+PR = "r1"
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/hddtemp/hddtemp-0.3-beta15.tar.bz2 \
+ file://hddtemp-no-nls-support.patch \
+ file://hddtemp_0.3-beta15-52.diff \
+ file://hddtemp-0.3-beta15-autodetect-717479.patch \
+ file://0001-backtrace-Replace-struct-ucontext-with-ucontext_t.patch \
+ file://hddtemp.db \
+ file://init \
+"
+
+SRC_URI[md5sum] = "8b829339e1ae9df701684ec239021bb8"
+SRC_URI[sha256sum] = "618541584054093d53be8a2d9e81c97174f30f00af91cb8700a97e442d79ef5b"
+
+LIC_FILES_CHKSUM = "file://GPL-2;md5=eb723b61539feef013de476e68b5c50a"
+
+inherit autotools gettext update-rc.d
+
+FILES_${PN} += "/usr/share/misc/hddtemp.db"
+
+do_install_append() {
+ install -d ${D}/usr/share/misc/
+ install -m 0644 ${WORKDIR}/hddtemp.db ${D}/usr/share/misc/hddtemp.db
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/init ${D}${sysconfdir}/init.d/hddtemp
+}
+
+INITSCRIPT_NAME = "hddtemp"
+INITSCRIPT_PARAMS = "start 99 2 3 4 5 . stop 20 0 1 6 ."
diff --git a/meta-openembedded/meta-oe/recipes-support/hidapi/hidapi_git.bb b/meta-openembedded/meta-oe/recipes-support/hidapi/hidapi_git.bb
new file mode 100644
index 000000000..a34797ff5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hidapi/hidapi_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Multi-platform library to interface with USB and Bluetooth HID-Class devices"
+AUTHOR = "Alan Ott"
+HOMEPAGE = "http://www.signal11.us/oss/hidapi/"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause | GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7c3949a631240cb6c31c50f3eb696077"
+DEPENDS = "libusb udev"
+PV = "0.7.99+0.8.0-rc1+git${SRCPV}"
+
+SRCREV = "d17db57b9d4354752e0af42f5f33007a42ef2906"
+SRC_URI = "git://github.com/signal11/hidapi.git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Use-pkg-config.patch b/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Use-pkg-config.patch
new file mode 100644
index 000000000..fc0d86e33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Use-pkg-config.patch
@@ -0,0 +1,39 @@
+We need to use pkg-config to find the ncurses library instead of the
+ncurses*-config applications.
+
+Signed-off-by: Paul Barker <pbarker@toganlabs.com>
+Signed-off-by: Robert Joslyn <robert.joslyn@redrectangle.org>
+
+Upstream-status: Inappropriate
+ (`ncurses*-config` can be used outside of OpenEmbedded)
+
+diff --git a/configure.ac b/configure.ac
+index 559dc4d..77aea22 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -185,10 +185,10 @@ m4_define([HTOP_CHECK_LIB],
+
+ AC_ARG_ENABLE(unicode, [AS_HELP_STRING([--enable-unicode], [enable Unicode support])], ,enable_unicode="yes")
+ if test "x$enable_unicode" = xyes; then
+- HTOP_CHECK_SCRIPT([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
+- HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
+- HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw5-config",
+- HTOP_CHECK_SCRIPT([ncurses], [addnwstr], [HAVE_LIBNCURSESW], "ncurses5-config",
++ HTOP_CHECK_SCRIPT([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW], "pkg-config ncursesw6",
++ HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "pkg-config ncursesw6",
++ HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "pkg-config ncursesw5",
++ HTOP_CHECK_SCRIPT([ncurses], [addnwstr], [HAVE_LIBNCURSESW], "pkg-config ncurses5",
+ HTOP_CHECK_LIB([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW],
+ HTOP_CHECK_LIB([ncursesw], [addnwstr], [HAVE_LIBNCURSESW],
+ HTOP_CHECK_LIB([ncurses], [addnwstr], [HAVE_LIBNCURSESW],
+@@ -201,8 +201,8 @@ if test "x$enable_unicode" = xyes; then
+ [AC_CHECK_HEADERS([ncurses/curses.h],[:],
+ [AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
+ else
+- HTOP_CHECK_SCRIPT([ncurses6], [refresh], [HAVE_LIBNCURSES], "ncurses6-config",
+- HTOP_CHECK_SCRIPT([ncurses], [refresh], [HAVE_LIBNCURSES], "ncurses5-config",
++ HTOP_CHECK_SCRIPT([ncurses6], [refresh], [HAVE_LIBNCURSES], "pkg-config ncurses6",
++ HTOP_CHECK_SCRIPT([ncurses], [refresh], [HAVE_LIBNCURSES], "pkg-config ncurses5",
+ HTOP_CHECK_LIB([ncurses6], [refresh], [HAVE_LIBNCURSES],
+ HTOP_CHECK_LIB([ncurses], [refresh], [HAVE_LIBNCURSES],
+ missing_libraries="$missing_libraries libncurses"
diff --git a/meta-openembedded/meta-oe/recipes-support/htop/htop_2.1.0.bb b/meta-openembedded/meta-oe/recipes-support/htop/htop_2.1.0.bb
new file mode 100644
index 000000000..33508f984
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/htop/htop_2.1.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Interactive process viewer"
+HOMEPAGE = "http://hisham.hm/htop"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c312653532e8e669f30e5ec8bdc23be3"
+
+DEPENDS = "ncurses"
+
+SRC_URI = "http://hisham.hm/htop/releases/${PV}/${BP}.tar.gz \
+ file://0001-Use-pkg-config.patch"
+SRC_URI[md5sum] = "f262b66ad6c194782f4d3a80627e84c8"
+SRC_URI[sha256sum] = "3260be990d26e25b6b49fc9d96dbc935ad46e61083c0b7f6df413e513bf80748"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "proc \
+ cgroup \
+ taskstats \
+ unicode \
+ linux-affinity \
+ delayacct"
+PACKAGECONFIG[proc] = "--enable-proc,--disable-proc"
+PACKAGECONFIG[openvz] = "--enable-openvz,--disable-openvz"
+PACKAGECONFIG[cgroup] = "--enable-cgroup,--disable-cgroup"
+PACKAGECONFIG[vserver] = "--enable-vserver,--disable-vserver"
+PACKAGECONFIG[taskstats] = "--enable-taskstats,--disable-taskstats"
+PACKAGECONFIG[unicode] = "--enable-unicode,--disable-unicode"
+PACKAGECONFIG[linux-affinity] = "--enable-linux-affinity,--disable-linux-affinity"
+PACKAGECONFIG[hwloc] = "--enable-hwloc,--disable-hwloc,hwloc"
+PACKAGECONFIG[setuid] = "--enable-setuid,--disable-setuid"
+PACKAGECONFIG[delayacct] = "--enable-delayacct,--disable-delayacct,libnl"
+
+do_configure_prepend () {
+ rm -rf ${S}/config.h
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb b/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb
new file mode 100644
index 000000000..5feea8987
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "A spell checker and morphological analyzer library"
+HOMEPAGE = "http://hunspell.github.io/"
+LICENSE = "GPLv3 | LGPLv3"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+"
+
+SRC_URI = "https://github.com/${BPN}/${BPN}/archive/v${PV}.tar.gz"
+SRC_URI[md5sum] = "1a54504cb470aafa6530bb372a10dc04"
+SRC_URI[sha256sum] = "3cd9ceb062fe5814f668e4f22b2fa6e3ba0b339b921739541ce180cac4d6f4c4"
+
+inherit autotools pkgconfig gettext
+
+RDEPENDS_${PN} = "perl"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
new file mode 100644
index 000000000..679673ba0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Hardware identification and configuration data"
+HOMEPAGE = "https://github.com/vcrhonek/hwdata"
+SECTION = "System/Base"
+
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
+
+PV = "0.298+git${SRCPV}"
+SRCREV = "9030fbd6ab1538f4d77d3cf1e0b463a7ec25b5c4"
+SRC_URI = "git://github.com/vcrhonek/${BPN}.git"
+
+S = "${WORKDIR}/git"
+
+do_configure() {
+ ${S}/configure --datadir=${datadir} --libdir=${libdir}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+FILES_${PN} = "${libdir}/* \
+ ${datadir}/* "
diff --git a/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/avoid-obsolete-gnutls-apis.patch b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/avoid-obsolete-gnutls-apis.patch
new file mode 100644
index 000000000..41fccc3ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/avoid-obsolete-gnutls-apis.patch
@@ -0,0 +1,55 @@
+From 7136a908a056d0e36c89b6e1c39adff8ce2bb1d4 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Wed, 1 Nov 2017 13:17:34 -0700
+Subject: [PATCH] avoid obsolete gnutls apis
+
+The gnutls_*_set_priority() family of functions was marked deprecated
+in gnutls 2.12.x and removed completely in 3.5.x. These functions
+have been superceded by gnutls_priority_set_direct(), which was added
+in gnutls 2.2.0 (released 2007-12-14).
+
+Rather than simply update the custom gnutls_*_set_priority() calls to
+use gnutls_priority_set_direct(), drop the custom priority selection
+completely and use the recommended approach of letting gnutls pick a
+reasonable set of defaults.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ src/tls-gnutls.c | 12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+diff --git a/src/tls-gnutls.c b/src/tls-gnutls.c
+index d7b7c91..749e9ef 100644
+--- a/src/tls-gnutls.c
++++ b/src/tls-gnutls.c
+@@ -48,11 +48,6 @@ tls_pull (struct ikstls_data *data, char *buffer, size_t len)
+ static int
+ tls_handshake (struct ikstls_data **datap, ikstransport *trans, void *sock)
+ {
+- const int protocol_priority[] = { GNUTLS_TLS1, GNUTLS_SSL3, 0 };
+- const int kx_priority[] = { GNUTLS_KX_RSA, 0 };
+- const int cipher_priority[] = { GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_ARCFOUR, 0};
+- const int comp_priority[] = { GNUTLS_COMP_ZLIB, GNUTLS_COMP_NULL, 0 };
+- const int mac_priority[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+ struct ikstls_data *data;
+ int ret;
+
+@@ -81,11 +76,8 @@ tls_handshake (struct ikstls_data **datap, ikstransport *trans, void *sock)
+ return IKS_NOMEM;
+ }
+
+- gnutls_protocol_set_priority (data->sess, protocol_priority);
+- gnutls_cipher_set_priority(data->sess, cipher_priority);
+- gnutls_compression_set_priority(data->sess, comp_priority);
+- gnutls_kx_set_priority(data->sess, kx_priority);
+- gnutls_mac_set_priority(data->sess, mac_priority);
++ gnutls_set_default_priority (data->sess);
++
+ gnutls_credentials_set (data->sess, GNUTLS_CRD_CERTIFICATE, data->cred);
+
+ gnutls_transport_set_push_function (data->sess, (gnutls_push_func) tls_push);
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/fix-configure-option-parsing.patch b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/fix-configure-option-parsing.patch
new file mode 100644
index 000000000..05accdd9c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel/fix-configure-option-parsing.patch
@@ -0,0 +1,62 @@
+From 17a5cf8f70b86d8a2195562e2d9dcccb4fa35c83 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Tue, 31 Oct 2017 20:05:58 -0700
+Subject: [PATCH] fix configure option parsing
+
+Don't over-write with_openssl etc by trying to set to $enablevar
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ configure.ac | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 82e6d2d..823e6c1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -56,17 +56,17 @@ fi
+ dnl Options for overriding TLS checks
+ AC_ARG_WITH([openssl],
+ AS_HELP_STRING([--without-openssl],[disable checking for openssl]),
+- [with_openssl=$enableval],
+- [with_openssl=yes]
++ [],
++ [with_openssl=auto]
+ )
+ AC_ARG_WITH([gnutls],
+ AS_HELP_STRING([--without-gnutls],[disable checking for GNU TLS]),
+- [with_gnutls=$enableval],
+- [with_gnutls=yes]
++ [],
++ [with_gnutls=auto]
+ )
+
+ dnl Check OpenSSL
+-if test "x$with_openssl" = "xyes"; then
++if test "x$with_openssl" != "xno"; then
+ PKG_CHECK_MODULES([OPENSSL], openssl >= 0.9.8, have_openssl=yes, have_openssl=no)
+ if test "x$have_openssl" = "xyes"; then
+ LIBOPENSSL_CFLAGS="$OPENSSL_CFLAGS"
+@@ -78,7 +78,7 @@ if test "x$with_openssl" = "xyes"; then
+ fi
+
+ dnl Check GNU TLS
+-if test "x$with_gnutls" = "xyes"; then
++if test "x$with_gnutls" != "xno"; then
+ if test "x$have_openssl" != "xyes"; then
+ PKG_CHECK_MODULES([GNUTLS], gnutls >= 2.0.0, have_gnutls=yes, have_gnutls=no)
+ if test "x$have_gnutls" = "xyes"; then
+@@ -94,7 +94,7 @@ fi
+ dnl Option for overriding Python check
+ AC_ARG_ENABLE([python],
+ AS_HELP_STRING([--disable-python],[disable checking for Python bindings]),
+- [with_python=$enableval],
++ [],
+ [with_python=yes]
+ )
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb
new file mode 100644
index 000000000..0903e90d7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Fast and portable XML parser and Jabber protocol library"
+HOMEPAGE = "https://github.com/meduketto/iksemel"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+
+SRCREV = "978b733462e41efd5db72bc9974cb3b0d1d5f6fa"
+PV = "1.5+git${SRCPV}"
+
+SRC_URI = "git://github.com/meduketto/iksemel.git;protocol=https \
+ file://fix-configure-option-parsing.patch \
+ file://avoid-obsolete-gnutls-apis.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig lib_package
+
+# TLS support requires either openssl or gnutls (if both are enabled openssl will be used).
+PACKAGECONFIG ?= "gnutls"
+
+PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
+
+EXTRA_OECONF = "--disable-python"
diff --git a/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb
new file mode 100644
index 000000000..669534eaa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb
@@ -0,0 +1,82 @@
+SUMMARY = "ImageMagick is an image convertion tools"
+SECTION = "console/utils"
+LICENSE = "ImageMagick"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dad5a98f173fd3fa6958a1a58c6131c1"
+# FIXME: There are many more checked libraries. All should be added or explicitly disabled to get consistent results.
+DEPENDS = "lcms bzip2 jpeg libpng librsvg tiff zlib fftw freetype"
+
+BASE_PV := "${PV}"
+PV .= "_7"
+SRC_URI = "git://github.com/ImageMagick/ImageMagick.git "
+SRCREV = "e12602b39b5e778240d286b6f9bbbc0fe3fb26c5"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig update-alternatives
+
+# xml disabled because it's using xml2-config --prefix to determine prefix which returns just /usr with our libxml2
+# if someone needs xml support then fix it first
+EXTRA_OECONF = "--program-prefix= --program-suffix=.im7 --without-perl --disable-openmp --without-xml --disable-opencl"
+
+CACHED_CONFIGUREVARS = "ac_cv_sys_file_offset_bits=yes"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[graphviz] = "--with-gvc,--without-gvc,graphviz"
+PACKAGECONFIG[jp2] = "--with-jp2,,jasper"
+PACKAGECONFIG[lzma] = "--with-lzma,--without-lzma,xz"
+PACKAGECONFIG[openjpeg] = "--with-openjp2,--without-openjp2,openjpeg"
+PACKAGECONFIG[pango] = "--with-pango,--without-pango,pango cairo"
+PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
+PACKAGECONFIG[wmf] = "--with-wmf,--without-wmf,libwmf"
+PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 libxext libxt"
+
+FILES_${PN} += "${libdir}/ImageMagick-${BASE_PV}/config-Q16* \
+ ${datadir}/ImageMagick-7"
+
+FILES_${PN}-dev += "${libdir}/ImageMagick-${BASE_PV}/modules-Q16/*/*.a"
+
+FILES_${PN}-dbg += "${libdir}/ImageMagick-${BASE_PV}/modules-Q16/*/.debug/*"
+
+BBCLASSEXTEND = "native"
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE_${PN} = "animate compare composite conjure convert display \
+ identify import mogrify montage stream"
+
+ALTERNATIVE_TARGET[animate] = "${bindir}/animate.im7"
+ALTERNATIVE_TARGET[compare] = "${bindir}/compare.im7"
+ALTERNATIVE_TARGET[composite] = "${bindir}/composite.im7"
+ALTERNATIVE_TARGET[conjure] = "${bindir}/conjure.im7"
+ALTERNATIVE_TARGET[convert] = "${bindir}/convert.im7"
+ALTERNATIVE_TARGET[display] = "${bindir}/display.im7"
+ALTERNATIVE_TARGET[identify] = "${bindir}/identify.im7"
+ALTERNATIVE_TARGET[import] = "${bindir}/import.im7"
+ALTERNATIVE_TARGET[mogrify] = "${bindir}/mogrify.im7"
+ALTERNATIVE_TARGET[montage] = "${bindir}/montage.im7"
+ALTERNATIVE_TARGET[stream] = "${bindir}/stream.im7"
+
+ALTERNATIVE_${PN}-doc = "animate.1 compare.1 composite.1 conjure.1 \
+ convert.1 display.1 identify.1 import.1 mogrify.1 montage.1 stream.1"
+
+ALTERNATIVE_LINK_NAME[animate.1] = "${mandir}/man1/animate.1"
+ALTERNATIVE_TARGET[animate.1] = "${mandir}/man1/animate.im7.1"
+ALTERNATIVE_LINK_NAME[compare.1] = "${mandir}/man1/compare.1"
+ALTERNATIVE_TARGET[compare.1] = "${mandir}/man1/compare.im7.1"
+ALTERNATIVE_LINK_NAME[composite.1] = "${mandir}/man1/composite.1"
+ALTERNATIVE_TARGET[composite.1] = "${mandir}/man1/composite.im7.1"
+ALTERNATIVE_LINK_NAME[conjure.1] = "${mandir}/man1/conjure.1"
+ALTERNATIVE_TARGET[conjure.1] = "${mandir}/man1/conjure.im7.1"
+ALTERNATIVE_LINK_NAME[convert.1] = "${mandir}/man1/convert.1"
+ALTERNATIVE_TARGET[convert.1] = "${mandir}/man1/convert.im7.1"
+ALTERNATIVE_LINK_NAME[display.1] = "${mandir}/man1/display.1"
+ALTERNATIVE_TARGET[display.1] = "${mandir}/man1/display.im7.1"
+ALTERNATIVE_LINK_NAME[identify.1] = "${mandir}/man1/identify.1"
+ALTERNATIVE_TARGET[identify.1] = "${mandir}/man1/identify.im7.1"
+ALTERNATIVE_LINK_NAME[import.1] = "${mandir}/man1/import.1"
+ALTERNATIVE_TARGET[import.1] = "${mandir}/man1/import.im7.1"
+ALTERNATIVE_LINK_NAME[mogrify.1] = "${mandir}/man1/mogrify.1"
+ALTERNATIVE_TARGET[mogrify.1] = "${mandir}/man1/mogrify.im7.1"
+ALTERNATIVE_LINK_NAME[montage.1] = "${mandir}/man1/montage.1"
+ALTERNATIVE_TARGET[montage.1] = "${mandir}/man1/montage.im7.1"
+ALTERNATIVE_LINK_NAME[stream.1] = "${mandir}/man1/stream.1"
+ALTERNATIVE_TARGET[stream.1] = "${mandir}/man1/stream.im7.1"
diff --git a/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb b/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb
new file mode 100644
index 000000000..5030c78a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb
@@ -0,0 +1,19 @@
+SUMMARY = "C and C++ INI Library"
+HOMEPAGE = "http://code.google.com/p/inih/"
+PV = "0.0+gitr${SRCPV}"
+PKGV = "${GITPKGVTAG}"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dae28cbf28207425e0d0b3eb835f4bde"
+
+PR = "r3"
+
+# The github repository provides a cmake and pkg-config integration
+SRCREV = "25078f7156eb8647b3b35dd25f9ae6f8c4ee0589"
+SRC_URI = "git://github.com/OSSystems/inih.git"
+
+S = "${WORKDIR}/git"
+
+inherit gitpkgv cmake
+
+# We don't have libinih since we only have static libraries
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch
new file mode 100644
index 000000000..89b890dda
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch
@@ -0,0 +1,31 @@
+inotify-tools: fix __NR_inotify_add_watch system call number on _MIPS_SIM_ABI64
+
+The correct value should be the same as defined in
+linux/arch/mips/include/uapi/asm/unistd.h
+
+Upstream-Status: Summitted [https://github.com/rvoicilas/inotify-tools/pull/71]
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ libinotifytools/src/inotifytools/inotify-nosys.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libinotifytools/src/inotifytools/inotify-nosys.h b/libinotifytools/src/inotifytools/inotify-nosys.h
+index db76b2c..5f7b11b 100644
+--- a/libinotifytools/src/inotifytools/inotify-nosys.h
++++ b/libinotifytools/src/inotifytools/inotify-nosys.h
+@@ -100,8 +100,8 @@ struct inotify_event {
+ # endif
+ # if _MIPS_SIM == _MIPS_SIM_ABI64
+ # define __NR_inotify_init (__NR_Linux + 243)
+-# define __NR_inotify_add_watch (__NR_Linux + 243)
+-# define __NR_inotify_rm_watch (__NR_Linux + 243)
++# define __NR_inotify_add_watch (__NR_Linux + 244)
++# define __NR_inotify_rm_watch (__NR_Linux + 245)
+ # endif
+ # if _MIPS_SIM == _MIPS_SIM_NABI32
+ # define __NR_inotify_init (__NR_Linux + 247)
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotifywait-fix-compile-error-with-GCC-6.patch b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotifywait-fix-compile-error-with-GCC-6.patch
new file mode 100644
index 000000000..ba042a24b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotifywait-fix-compile-error-with-GCC-6.patch
@@ -0,0 +1,45 @@
+From 7affb288d6c0726e7b1ebc317a878927b6ef0d02 Mon Sep 17 00:00:00 2001
+From: Andrea Galbusera <gizero@gmail.com>
+Date: Tue, 13 Sep 2016 08:10:29 +0200
+Subject: [PATCH] inotifywait: fix compile error with GCC 6
+
+Fails to compile with misleading-indentation error
+
+| src/inotifywait.c: In function 'output_event_csv':
+| src/inotifywait.c:126:5: error: this 'if' clause does not guard... [-Werror=misleading-indentation]
+| if (filename != NULL)
+| ^~
+| src/inotifywait.c:129:2: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
+| printf("%s,", csv_escape( inotifytools_event_to_str( event->mask ) ) );
+| ^~~~~~
+| cc1: all warnings being treated as errors
+
+Fix indentation to resolve.
+
+Upstream-Status: Submitted [https://github.com/rvoicilas/inotify-tools/pull/66]
+
+Signed-off-by: Andrea Galbusera <gizero@gmail.com>
+---
+ src/inotifywait.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/inotifywait.c b/src/inotifywait.c
+index c5ce5e3..404a85b 100644
+--- a/src/inotifywait.c
++++ b/src/inotifywait.c
+@@ -122,9 +122,9 @@ void validate_format( char * fmt ) {
+
+
+ void output_event_csv( struct inotify_event * event ) {
+- char *filename = csv_escape(inotifytools_filename_from_wd(event->wd));
+- if (filename != NULL)
+- printf("%s,", filename);
++ char *filename = csv_escape(inotifytools_filename_from_wd(event->wd));
++ if (filename != NULL)
++ printf("%s,", filename);
+
+ printf("%s,", csv_escape( inotifytools_event_to_str( event->mask ) ) );
+ if ( event->len > 0 )
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb
new file mode 100644
index 000000000..efc753d5b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Command line tools and C library providing a simple interface to inotify"
+AUTHOR = "Rohan McGovern <rohan@mcgovern.id.au>"
+HOMEPAGE = "http://wiki.github.com/rvoicilas/inotify-tools"
+SECTION = "console/devel"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ac6c26e52aea428ee7f56dc2c56424c6"
+
+SRCREV = "1df9af4d6cd0f4af4b1b19254bcf056aed4ae395"
+PV = "3.14+git${SRCPV}"
+
+SRC_URI = "git://github.com/rvoicilas/${BPN} \
+ file://inotifywait-fix-compile-error-with-GCC-6.patch \
+ file://inotify-nosys-fix-system-call-number.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-doxygen"
+
+PACKAGES =+ "libinotifytools"
+
+FILES_libinotifytools = "${libdir}/lib*.so.*"
diff --git a/meta-openembedded/meta-oe/recipes-support/joe/joe/0001-adjust-signature-of-main.patch b/meta-openembedded/meta-oe/recipes-support/joe/joe/0001-adjust-signature-of-main.patch
new file mode 100644
index 000000000..00f48e8a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/joe/joe/0001-adjust-signature-of-main.patch
@@ -0,0 +1,30 @@
+From 27e4639254f2b2eb7d04790bd8cf16ecfcbac1c2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Oct 2016 01:07:16 +0000
+Subject: [PATCH] adjust signature of main()
+
+clang complains about the types of main() function
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/main.c b/main.c
+index 81ba543..ee7506c 100644
+--- a/main.c
++++ b/main.c
+@@ -159,7 +159,7 @@ extern int breakflg;
+
+ unsigned char **mainenv;
+
+-int main(int argc, unsigned char **argv, unsigned char **envv)
++int main(int argc, char **argv, char **envv)
+ {
+ CAP *cap;
+ unsigned char *s;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/joe/joe_3.1.bb b/meta-openembedded/meta-oe/recipes-support/joe/joe_3.1.bb
new file mode 100644
index 000000000..1ad355b5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/joe/joe_3.1.bb
@@ -0,0 +1,17 @@
+SECTION = "console/utils"
+SUMMARY = "Console text editor with good functionality, good choice for vi-haters"
+HOMEPAGE = "http://joe-editor.sourceforge.net/"
+LICENSE = "GPLv1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da10ed7cf8038981c580e11c1d3e8fb6"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/joe-editor/joe-${PV}.tar.gz \
+ file://0001-adjust-signature-of-main.patch \
+ "
+
+PACKAGECONFIG ??= "curses"
+PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses,ncurses-terminfo"
+
+inherit autotools
+
+SRC_URI[md5sum] = "2a6ef018870fca9b7df85401994fb0e0"
+SRC_URI[sha256sum] = "252390e4bc687957f09f334095904c8cc53b39c7b663ed47861ae1d11aef5946"
diff --git a/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.7.bb b/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.7.bb
new file mode 100644
index 000000000..12ccb2050
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.7.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Little cms is a small-footprint, speed optimized color management engine"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6c786c3b7a4afbd3c990f1b81261d516"
+SRC_URI = "${SOURCEFORGE_MIRROR}/lcms/lcms2-${PV}.tar.gz"
+SRC_URI[md5sum] = "06c1626f625424a811fb4b5eb070839d"
+SRC_URI[sha256sum] = "4524234ae7de185e6b6da5d31d6875085b2198bc63b1211f7dde6e2d197d6a53"
+
+DEPENDS = "tiff"
+
+BBCLASSEXTEND = "native"
+
+S = "${WORKDIR}/lcms2-${PV}"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.11.bb b/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.11.bb
new file mode 100644
index 000000000..2f9ac336e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.11.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A graphical front-end for gcov"
+HOMEPAGE = "http://ltp.sourceforge.net/coverage/lcov.php"
+DESCRIPTION = "LCOV is a graphical front-end for GCC's coverage testing \
+tool gcov. It collects gcov data for multiple source files and creates \
+HTML pages containing the source code annotated with coverage information. \
+It also adds overview pages for easy navigation within the file structure. \
+LCOV supports statement, function and branch coverage measurement."
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+RDEPENDS_${PN} += " \
+ gcov \
+ perl \
+ perl-module-filehandle \
+ perl-module-getopt-std \
+ perl-module-digest-sha \
+"
+
+SRC_URI = "http://downloads.sourceforge.net/ltp/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "e79b799ae3ce149aa924c7520e993024"
+SRC_URI[sha256sum] = "c282de8d678ecbfda32ce4b5c85fc02f77c2a39a062f068bd8e774d29ddc9bf8"
+
+do_install() {
+ oe_runmake install PREFIX=${D}
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libatasmart/files/0001-Makefile.am-add-CFLAGS-and-LDFLAGS-definiton.patch b/meta-openembedded/meta-oe/recipes-support/libatasmart/files/0001-Makefile.am-add-CFLAGS-and-LDFLAGS-definiton.patch
new file mode 100644
index 000000000..8c867acca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libatasmart/files/0001-Makefile.am-add-CFLAGS-and-LDFLAGS-definiton.patch
@@ -0,0 +1,41 @@
+From 75c1d3b8667328d874590a5321eb244256b7d932 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <Mingli.Yu@windriver.com>
+Date: Wed, 18 Jan 2017 07:35:58 +0000
+Subject: [PATCH] Makefile.am: add CFLAGS and LDFLAGS definiton
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* When build libatasmart, we need first build strpool in host
+ env. To build strpool, the compiler is host compiler, but
+ the CFLAGS and LDFLAGS are for cross-compiler, so unify them
+ to fix below error.
+ | make -C strpool strpool
+ | make[1]: Entering directory '../libatasmart/0.19-r0/build/strpool'
+ | gcc -DHAVE_CONFIG_H -I. -I../../git/strpool -I.. -isystem../build/tmp/sysroots/x86_64-linux/usr/include -O2 -pipe -O2 -pipe -g -fstack-protector-strong -pie -fpie -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -c -o strpool.o `test -f '../strpool.c' || echo '../../git/strpool/'`../strpool.c
+ | gcc: error: unrecognized command line option ‘-fstack-protector-strong’
+ | make[1]: *** [Makefile:404: strpool.o] Error 1
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+---
+ strpool/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/strpool/Makefile.am b/strpool/Makefile.am
+index b041cea..013fcd3 100644
+--- a/strpool/Makefile.am
++++ b/strpool/Makefile.am
+@@ -17,6 +17,8 @@
+ # <http://www.gnu.org/licenses/>.
+
+ CC = @CC_FOR_BUILD@
++CFLAGS = @BUILD_CFLAGS@
++LDFLAGS = @BUILD_LDFLAGS@
+ AM_CFLAGS = @BUILD_CFLAGS@
+ AM_LDFLAGS = @BUILD_LDFLAGS@
+
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libatasmart/libatasmart_0.19.bb b/meta-openembedded/meta-oe/recipes-support/libatasmart/libatasmart_0.19.bb
new file mode 100644
index 000000000..4cfb73293
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libatasmart/libatasmart_0.19.bb
@@ -0,0 +1,21 @@
+SUMMARY = "ATA S.M.A.R.T. Reading and Parsing Library"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+DEPENDS = "udev"
+
+SRCREV = "de6258940960443038b4c1651dfda3620075e870"
+SRC_URI = "git://git.0pointer.de/libatasmart.git \
+ file://0001-Makefile.am-add-CFLAGS-and-LDFLAGS-definiton.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit autotools lib_package pkgconfig
+
+do_install_append() {
+ sed -i -e s://:/:g -e 's:=${libdir}/libudev.la:-ludev:g' ${D}${libdir}/libatasmart.la
+}
+
+PACKAGES =+ "${PN}-dev-vala"
+FILES_${PN}-dev-vala = "${datadir}/vala"
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/files/0001-remove-python2-support.patch b/meta-openembedded/meta-oe/recipes-support/libbytesize/files/0001-remove-python2-support.patch
new file mode 100644
index 000000000..b57e39fbc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/files/0001-remove-python2-support.patch
@@ -0,0 +1,30 @@
+From 2ddc97b30792817d162f51ec3818376aefbf184e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 3 May 2017 02:05:33 -0400
+Subject: [PATCH] remove python2 support
+
+We use python3 rather than python2 support
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/python/Makefile.am | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/python/Makefile.am b/src/python/Makefile.am
+index 567d0d7..8d9f446 100644
+--- a/src/python/Makefile.am
++++ b/src/python/Makefile.am
+@@ -1,8 +1,3 @@
+-pylibdir = $(shell python -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='${exec_prefix}'))")
+-
+-pybytesizedir = $(pylibdir)/bytesize
+-dist_pybytesize_DATA = bytesize.py __init__.py
+-
+ if WITH_PYTHON3
+ py3libdir = $(shell python3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='${exec_prefix}'))")
+ py3bytesizedir = $(py3libdir)/bytesize
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_0.10.bb b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_0.10.bb
new file mode 100644
index 000000000..690302149
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_0.10.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "The goal of this project is to provide a tiny library that would \
+facilitate the common operations with sizes in bytes."
+HOMEPAGE = "https://github.com/rhinstaller/libbytesize"
+LICENSE = "LGPLv2+"
+SECTION = "devel/lib"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "369127c0edbba7d1a4e2e02486375dd9d379524f"
+PV = "0.10+git${SRCPV}"
+SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master \
+ file://0001-remove-python2-support.patch \
+"
+
+inherit gettext autotools python3native
+
+DEPENDS += " \
+ libpcre \
+ gmp \
+ mpfr \
+"
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/bytesize"
+
+PACKAGECONFIG ??= "python3"
+PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
+PACKAGECONFIG[doc] = "--with-gtk-doc, --without-gtk-doc, gtk-doc-native"
+
+EXTRA_OEMAKE = "py3libdir=${PYTHON_SITEPACKAGES_DIR}"
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch b/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch
new file mode 100644
index 000000000..4e0984f36
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch
@@ -0,0 +1,92 @@
+From 4a89ddffbb14d747adbe3365ace4db87de52ba39 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 16 Sep 2013 16:08:28 +0200
+Subject: [PATCH] build gtk- and gtk3-version for canberra_gtk_play
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ src/Makefile.am | 25 +++++++++++++++----------
+ 1 files changed, 15 insertions(+), 10 deletions(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 56ed96d..fc72e1f 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -319,9 +319,6 @@ endif
+
+ if HAVE_GTK_ANY
+
+-bin_PROGRAMS += \
+- canberra-gtk-play
+-
+ include_HEADERS += \
+ canberra-gtk.h
+
+@@ -329,6 +326,9 @@ endif
+
+ if HAVE_GTK3
+
++bin_PROGRAMS += \
++ canberra-gtk3-play
++
+ lib_LTLIBRARIES += \
+ libcanberra-gtk3.la
+
+@@ -367,6 +367,9 @@ endif
+
+ if HAVE_GTK
+
++bin_PROGRAMS += \
++ canberra-gtk-play
++
+ lib_LTLIBRARIES += \
+ libcanberra-gtk.la
+
+@@ -399,14 +402,17 @@ endif
+
+ if HAVE_GTK3
+
+-canberra_gtk_play_LDADD = \
++canberra_gtk3_play_LDADD = \
+ $(GTK3_LIBS) \
+ libcanberra.la \
+ libcanberra-gtk3.la
+-canberra_gtk_play_CFLAGS = \
++canberra_gtk3_play_CFLAGS = \
+ $(GTK3_CFLAGS)
+
+-else
++canberra_gtk3_play_SOURCES = \
++ canberra-gtk-play.c
++
++endif
+ if HAVE_GTK
+
+ canberra_gtk_play_LDADD = \
+@@ -416,7 +422,9 @@ canberra_gtk_play_LDADD = \
+ canberra_gtk_play_CFLAGS = \
+ $(GTK_CFLAGS)
+
+-endif
++canberra_gtk_play_SOURCES = \
++ canberra-gtk-play.c
++
+ endif
+
+ if HAVE_GTK_ANY
+@@ -424,9 +432,6 @@ if HAVE_GTK_ANY
+ dist_gsdgtkmodules_DATA = \
+ canberra-gtk-module.desktop
+
+-canberra_gtk_play_SOURCES = \
+- canberra-gtk-play.c
+-
+ EXTRA_DIST += \
+ libcanberra-login-sound.desktop.in \
+ libcanberra-ready-sound.desktop.in \
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb b/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb
new file mode 100644
index 000000000..72c93abe1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb
@@ -0,0 +1,62 @@
+SUMMARY = "Implementation of XDG Sound Theme and Name Specifications"
+DESCRIPTION = "Libcanberra is an implementation of the XDG Sound Theme and Name Specifications, for generating event sounds on free desktops."
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://src/canberra.h;beginline=7;endline=24;md5=c616c687cf8da540a14f917e0d23ab03"
+
+DEPENDS = "libtool libvorbis"
+
+inherit autotools gtk-doc
+
+SRC_URI = " \
+ http://0pointer.de/lennart/projects/${BPN}/${BPN}-${PV}.tar.xz \
+ file://0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch \
+"
+SRC_URI[md5sum] = "34cb7e4430afaf6f447c4ebdb9b42072"
+SRC_URI[sha256sum] = "c2b671e67e0c288a69fc33dc1b6f1b534d07882c2aceed37004bf48c601afa72"
+
+EXTRA_OECONF = "\
+ --enable-null \
+ --disable-oss \
+ --disable-tdb \
+ --disable-lynx \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk gtk3', '', d)} \
+"
+PACKAGECONFIG[alsa] = "--enable-alsa, --disable-alsa, alsa-lib"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse, --disable-pulse, pulseaudio"
+PACKAGECONFIG[gstreamer] = "--enable-gstreamer, --disable-gstreamer, gstreamer1.0"
+PACKAGECONFIG[gtk] = "--enable-gtk, --disable-gtk, gtk+"
+PACKAGECONFIG[gtk3] = "--enable-gtk3, --disable-gtk3, gtk+3"
+
+python populate_packages_prepend() {
+ plugindir = d.expand('${libdir}/${BPN}-${PV}/')
+ do_split_packages(d, plugindir, '^libcanberra-(.*)\.so$', 'libcanberra-%s', '%s support library', extra_depends='' )
+ do_split_packages(d, plugindir, '^libcanberra-(.*)\.la$', 'libcanberra-%s', '%s support library', extra_depends='' )
+}
+
+PACKAGES =+ "${PN}-gnome ${PN}-gtk2 ${PN}-gtk3 ${PN}-systemd"
+PACKAGES_DYNAMIC += "^libcanberra-.*"
+
+FILES_${PN} = "${bindir}/ ${libdir}/${BPN}.so.*"
+
+FILES_${PN}-dev += "${datadir}/vala/vapi ${libdir}/*/modules/*.la ${libdir}/*/*.la"
+
+FILES_${PN}-dbg += "${libdir}/${BPN}-${PV}/.debug ${libdir}/gtk-*/modules/.debug"
+
+FILES_${PN}-gtk2 = "${libdir}/${BPN}-gtk.so.* \
+ ${libdir}/gtk-2.0/modules/*.so \
+ ${bindir}/canberra-gtk-play"
+
+# -gtk3 ships a symlink to a .so
+INSANE_SKIP_${PN}-gtk3 = "dev-so"
+FILES_${PN}-gtk3 = "${libdir}/${BPN}-gtk3.so.* \
+ ${libdir}/gtk-3.0/modules/*.so \
+ ${bindir}/canberra-gtk3-play"
+
+FILES_${PN}-gnome = "${libdir}/gnome-settings-daemon-3.0/ \
+ ${datadir}/gdm/ ${datadir}/gnome/"
+
+FILES_${PN}-systemd = "${systemd_unitdir}/system/*.service"
diff --git a/meta-openembedded/meta-oe/recipes-support/libcyusbserial/libcyusbserial_git.bb b/meta-openembedded/meta-oe/recipes-support/libcyusbserial/libcyusbserial_git.bb
new file mode 100644
index 000000000..74b5e21e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libcyusbserial/libcyusbserial_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Enable userspace control of Cypress USB-Serial bridge devices"
+HOMEPAGE = "https://github.com/cyrozap/libcyusbserial"
+BUGTRACKER = "https://github.com/cyrozap/libcyusbserial/issues"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER.txt;md5=4fbd65380cdd255951079008b364516c"
+DEPENDS = "libusb udev"
+
+PV = "1.0.0+git${SRCPV}"
+
+SRCREV = "655e2d544183d094f0e2d119c7e0c6206a0ddb3f"
+SRC_URI = "git://github.com/cyrozap/${BPN}.git"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGES =+ "${PN}-utils"
+FILES_${PN}-utils = "${bindir}/*"
diff --git a/meta-openembedded/meta-oe/recipes-support/libee/libee.inc b/meta-openembedded/meta-oe/recipes-support/libee/libee.inc
new file mode 100644
index 000000000..e5a145ab2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libee/libee.inc
@@ -0,0 +1,39 @@
+SUMMARY = "An Event Expression Library inspired by CEE"
+DESCRIPTION = "The core idea of libee is to provide a small \
+but hopefully convenient API layer above the CEE standard."
+
+HOMEPAGE = "http://www.libee.org"
+SECTION = "base"
+
+LICENSE = "LGPL-2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1c2687de35e36ba3b999136236a66cd6"
+
+SRC_URI = "http://www.libee.org/download/files/download/${BPN}-${PV}.tar.gz\
+ file://libee-parallel-make.patch \
+ file://run-ptest \
+ file://ezapi1.sh \
+"
+
+inherit autotools ptest pkgconfig
+
+DEPENDS += "libestr"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'testbench', '', d)}"
+
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug,,"
+PACKAGECONFIG[testbench] = "--enable-testbench,--disable-testbench,,"
+
+TESTDIR = "tests"
+
+# We presume the tests we are going to install so just build them directly.
+#
+do_compile_ptest() {
+ oe_runmake -C ${TESTDIR} genfile ezapi1
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ install -m 0755 ${B}/${TESTDIR}/genfile ${D}${PTEST_PATH}
+ install -m 0755 ${B}/${TESTDIR}/.libs/ezapi1 ${D}${PTEST_PATH}
+ install -m 0755 ${WORKDIR}/ezapi1.sh ${D}${PTEST_PATH}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libee/libee/ezapi1.sh b/meta-openembedded/meta-oe/recipes-support/libee/libee/ezapi1.sh
new file mode 100755
index 000000000..e9db5e614
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libee/libee/ezapi1.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+echo ---------------------------------------------------------------------------
+echo A very basic test for the event class
+echo ---------------------------------------------------------------------------
+rm -f infile
+./genfile 100 > infile
+./ezapi1 -iinfile
+if [ $? -ne 0 ] ; then
+ echo "FAIL: $0"
+ exit 1
+fi
+echo "PASS: $0"
+rm -f infile
diff --git a/meta-openembedded/meta-oe/recipes-support/libee/libee/libee-parallel-make.patch b/meta-openembedded/meta-oe/recipes-support/libee/libee/libee-parallel-make.patch
new file mode 100644
index 000000000..25e5c6ae0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libee/libee/libee-parallel-make.patch
@@ -0,0 +1,20 @@
+fix parallel compiling problem
+
+without specifying libee_convert_DEPENDENCIES = libee.la, libee_convert
+can't find libee.la when linking as libee is not generated yet.
+
+Upstream-Status: pending
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 08aaa9e..f0c78f7 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -46,5 +46,6 @@ libee_la_LDFLAGS = -version-info 0:0:0
+ libee_convert_SOURCES = convert.c
+ libee_convert_CPPFLAGS = -I$(top_srcdir) $(LIBEE_CFLAGS) $(LIBESTR_CFLAGS) $(LIBXML2_CFLAGS)
+ libee_convert_LDADD = $(LIBEE_LIBS) $(LIBXML2_LIBS) $(LIBESTR_LIBS)
++libee_convert_DEPENDENCIES = libee.la
+
+ include_HEADERS =
diff --git a/meta-openembedded/meta-oe/recipes-support/libee/libee/run-ptest b/meta-openembedded/meta-oe/recipes-support/libee/libee/run-ptest
new file mode 100755
index 000000000..3cb660764
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libee/libee/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+#
+./ezapi1.sh
diff --git a/meta-openembedded/meta-oe/recipes-support/libee/libee_0.4.1.bb b/meta-openembedded/meta-oe/recipes-support/libee/libee_0.4.1.bb
new file mode 100644
index 000000000..ef2c20db5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libee/libee_0.4.1.bb
@@ -0,0 +1,4 @@
+require ${BPN}.inc
+
+SRC_URI[md5sum] = "7bbf4160876c12db6193c06e2badedb2"
+SRC_URI[sha256sum] = "c0dac01938593deee06c3d161e4eda4ecc0fd7317e1321bd96e301aceb7fb027"
diff --git a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.4.bb b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.4.bb
new file mode 100644
index 000000000..bc3b32e38
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.4.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."
+AUTHOR = "Benoît Jacob and Gaël Guennebaud and others"
+HOMEPAGE = "http://eigen.tuxfamily.org/"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad"
+
+SRC_URI = "http://bitbucket.org/eigen/eigen/get/${PV}.tar.bz2;downloadfilename=${BP}.tar.bz2"
+SRC_URI[md5sum] = "a7aab9f758249b86c93221ad417fbe18"
+SRC_URI[sha256sum] = "dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6"
+
+S = "${WORKDIR}/eigen-eigen-5a0156e40feb"
+
+inherit cmake
+
+FILES_${PN} = "${includedir} ${libdir}"
+FILES_${PN}-dev = "${datadir}/eigen3/cmake ${datadir}/cmake/Modules ${datadir}/pkgconfig"
+
+# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
+RDEPENDS_${PN}-dev = ""
+RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
diff --git a/meta-openembedded/meta-oe/recipes-support/libestr/libestr_0.1.10.bb b/meta-openembedded/meta-oe/recipes-support/libestr/libestr_0.1.10.bb
new file mode 100644
index 000000000..9bff4f35a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libestr/libestr_0.1.10.bb
@@ -0,0 +1,11 @@
+SUMMARY = "some essentials for string handling (and a bit more)"
+HOMEPAGE = "http://libestr.adiscon.com/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9d6c993486c18262afba4ca5bcb894d0"
+
+SRC_URI = "http://libestr.adiscon.com/files/download/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "f4c9165a23587e77f7efe65d676d5e8e"
+SRC_URI[sha256sum] = "bd655e126e750edd18544b88eb1568d200a424a0c23f665eb14bbece07ac703c"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/libftdi/libftdi_1.4.bb b/meta-openembedded/meta-oe/recipes-support/libftdi/libftdi_1.4.bb
new file mode 100644
index 000000000..6bea16582
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libftdi/libftdi_1.4.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "libftdi is a library to talk to FTDI chips.\
+FT232BM/245BM, FT2232C/D and FT232/245R using libusb,\
+including the popular bitbang mode."
+HOMEPAGE = "http://www.intra2net.com/en/developer/libftdi/"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1 & GPLv2"
+LIC_FILES_CHKSUM= "\
+ file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe \
+ file://COPYING.LIB;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+"
+
+DEPENDS = "libusb1"
+
+SRC_URI = "http://www.intra2net.com/en/developer/${BPN}/download/${BPN}1-${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "0c09fb2bb19a57c839fa6845c6c780a2"
+SRC_URI[sha256sum] = "ec36fb49080f834690c24008328a5ef42d3cf584ef4060f3a35aa4681cb31b74"
+
+S = "${WORKDIR}/${BPN}1-${PV}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[cpp-wrapper] = "-DFTDI_BUILD_CPP=on -DFTDIPP=on,-DFTDI_BUILD_CPP=off -DFTDIPP=off,boost"
+
+inherit cmake binconfig pkgconfig
+
+EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.24.3.bb b/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.24.3.bb
new file mode 100644
index 000000000..8f580f9ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.24.3.bb
@@ -0,0 +1,23 @@
+SUMMARY = "the Git linkable library"
+HOMEPAGE = "http://libgit2.github.com/"
+LICENSE = "GPL-2.0-with-GCC-exception"
+LIC_FILES_CHKSUM = "file://COPYING;md5=34197a479f637beb9e09e56893f48bc2"
+
+DEPENDS = "curl openssl zlib libssh2"
+
+SRC_URI = "git://github.com/libgit2/libgit2.git;branch=maint/v0.24"
+SRCREV = "4cf1ec7cff28da8838a2f0a9fb330e312ea3f963"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE = "\
+ -DTHREADSAFE=ON \
+ -DBUILD_CLAR=OFF \
+ -DSHA1_TYPE="builtin" \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DBUILD_EXAMPLES=OFF \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
new file mode 100644
index 000000000..cd7750623
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
@@ -0,0 +1,21 @@
+SUMMARY = "C library and tools for interacting with the linux GPIO character device"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2caced0b25dfefd4c601d92bd15116de"
+
+SRC_URI = "https://www.kernel.org/pub/software/libs/libgpiod/${BP}.tar.xz"
+
+inherit autotools pkgconfig
+
+# enable tools
+PACKAGECONFIG ?= "tools"
+
+PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,kmod udev"
+PACKAGECONFIG[tools] = "--enable-tools,--disable-tools,"
+
+PACKAGES =+ " ${PN}-tools"
+
+FILES_${PN}-tools = "${bindir}/*"
+
+RRECOMMENDS_TOOLS = "${@bb.utils.contains('PACKAGECONFIG', 'tools', '${PN}-tools', '',d)}"
+RRECOMMENDS_${PN} += "${RRECOMMENDS_TOOLS}"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb
new file mode 100644
index 000000000..09fb65a08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb
@@ -0,0 +1,4 @@
+require libgpiod.inc
+
+SRC_URI[md5sum] = "2aa1e1a80c3c919ae142ab9a55fb59ca"
+SRC_URI[sha256sum] = "b773e557af1a497f786825462a776b7bf90168e67ee0a5bc5d2473a5674dc38c"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.0.1.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.0.1.bb
new file mode 100644
index 000000000..51499fd72
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.0.1.bb
@@ -0,0 +1,4 @@
+require libgpiod.inc
+
+SRC_URI[md5sum] = "2ca0c3eb17d69e367b6f6a109ca86e41"
+SRC_URI[sha256sum] = "972924195367f5fb045c023d65340c4b7dfc8764499516be446553865208dedc"
diff --git a/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb b/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
new file mode 100644
index 000000000..ba380ed30
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Library for interfacing with IIO devices"
+HOMEPAGE = "https://wiki.analog.com/resources/tools-software/linux-software/libiio"
+SECTION = "libs"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=7c13b3376cea0ce68d2d2da0a1b3a72c"
+
+SRCREV = "fa82974d8bd1fded78e630ab71a7ded1b11d0e33"
+PV = "0.14+git${SRCPV}"
+
+SRC_URI = "git://github.com/analogdevicesinc/libiio.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pythonnative systemd
+
+DEPENDS = " \
+ flex-native bison-native libaio \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
+"
+
+EXTRA_OECMAKE = " \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DUDEV_RULES_INSTALL_DIR=${nonarch_base_libdir}/udev/rules.d \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '-DWITH_SYSTEMD=ON -DSYSTEMD_UNIT_INSTALL_DIR=${systemd_system_unitdir}', '', d)} \
+"
+
+PACKAGECONFIG ??= "USB_BACKEND NETWORK_BACKEND"
+
+PACKAGECONFIG[USB_BACKEND] = "-DWITH_USB_BACKEND=ON,-DWITH_USB_BACKEND=OFF,libusb1,libxml2"
+PACKAGECONFIG[NETWORK_BACKEND] = "-DWITH_NETWORK_BACKEND=ON,-DWITH_NETWORK_BACKEND=OFF,libxml2"
+
+PACKAGES =+ "${PN}-iiod ${PN}-tests ${PN}-python"
+
+RDEPENDS_${PN}-python = "${PN} python-ctypes python-stringold"
+
+FILES_${PN}-iiod = " \
+ ${sbindir}/iiod \
+ ${systemd_system_unitdir}/iiod.service \
+"
+FILES_${PN}-tests = "${bindir}"
+FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
+
+SYSTEMD_PACKAGES = "${PN}-iiod"
+SYSTEMD_SERVICE_${PN}-iiod = "iiod.service"
diff --git a/meta-openembedded/meta-oe/recipes-support/libjs/libjs-jquery_1.7.2.bb b/meta-openembedded/meta-oe/recipes-support/libjs/libjs-jquery_1.7.2.bb
new file mode 100644
index 000000000..7f425cdea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libjs/libjs-jquery_1.7.2.bb
@@ -0,0 +1,25 @@
+SUMMARY = "JavaScript library for dynamic web applications"
+HOMEPAGE = "https://jquery.com/"
+LICENSE = "MIT | BSD | GPL-2"
+LIC_FILES_CHKSUM = "file://usr/share/doc/libjs-jquery/copyright;md5=5d1ec6f95e0a91d38e2f71de93ddb00e"
+
+SRC_URI = "http://kr.archive.ubuntu.com/ubuntu/pool/main/j/jquery/${BPN}_${PV}+debian-1ubuntu1~ubuntu12.04.1_all.deb;subdir=${BP}"
+SRC_URI[md5sum] = "fa511ab67f6e960c5b6d39a4d665e47f"
+SRC_URI[sha256sum] = "190ca18a71e35c8ab2ba73fe5be3c7cc601fe20b45709d801110818f1b602cc1"
+
+JQUERYDIR = "${datadir}/javascript/jquery"
+JQUERYDOCDIR = "${docdir}/libjs-jquery"
+
+do_install() {
+ install -d -m 0755 ${D}${JQUERYDIR}
+ install -m 0644 ${S}${JQUERYDIR}/jquery.js ${D}${JQUERYDIR}/
+ install -m 0644 ${S}${JQUERYDIR}/jquery.min.js ${D}${JQUERYDIR}/
+
+ ln -sf jquery.min.js ${D}${JQUERYDIR}/jquery.lite.js
+ ln -sf jquery.min.js ${D}${JQUERYDIR}/jquery.pack.js
+
+ install -d -m 0644 ${D}${JQUERYDOCDIR}
+ install -m 0644 ${S}${JQUERYDOCDIR}/copyright ${D}${JQUERYDOCDIR}/
+}
+
+FILES_${PN} = "/usr/share/javascript/jquery"
diff --git a/meta-openembedded/meta-oe/recipes-support/libjs/libjs-sizzle_1.10.18.bb b/meta-openembedded/meta-oe/recipes-support/libjs/libjs-sizzle_1.10.18.bb
new file mode 100644
index 000000000..4928b6c3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libjs/libjs-sizzle_1.10.18.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Pure-JavaScript CSS selector engine"
+HOMEPAGE = "https://github.com/jquery/sizzle/wiki"
+LICENSE = "GPL-2.0 & MIT & AFL-2.1"
+LIC_FILES_CHKSUM = "file://MIT-LICENSE.txt;md5=e43aa437a6a1ba421653bd5034333bf9"
+
+SRC_URI = "http://kr.archive.ubuntu.com/ubuntu/pool/universe/s/sizzle/sizzle_1.10.18.orig.tar.gz"
+SRC_URI[md5sum] = "91477c1edeef9f8100ffd6c4d31725b5"
+SRC_URI[sha256sum] = "8e04ab84bb74b2e338dffc63cd2e52b007f1d8af01b3d25da4d2e07f2b5890f8"
+
+S = "${WORKDIR}/sizzle-${PV}"
+
+SIZZLEDIR = "${S}/dist"
+
+do_install() {
+ install -d -m 0755 ${D}/${datadir}/javascript/sizzle/
+ install -m 0644 ${SIZZLEDIR}/*.js ${D}/${datadir}/javascript/sizzle/
+}
+
+FILES_${PN} = "${datadir}/javascript/sizzle/"
diff --git a/meta-openembedded/meta-oe/recipes-support/liblinebreak/liblinebreak_1.2.bb b/meta-openembedded/meta-oe/recipes-support/liblinebreak/liblinebreak_1.2.bb
new file mode 100644
index 000000000..d0463a640
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liblinebreak/liblinebreak_1.2.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Liblinebreak is an implementation of the line breaking algorithm as described in Unicode 5.1.0 Standard Annex 14, Revision 22"
+HOMEPAGE = "http://vimgadgets.sourceforge.net/liblinebreak/"
+SECTION = "libs"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=3715191da62bafb5cfc4ff36195b2ec3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/vimgadgets/liblinebreak/${PV}/liblinebreak-${PV}.tar.gz"
+SRC_URI[md5sum] = "d18039259001ccb24b5dd4648c49c5ad"
+SRC_URI[sha256sum] = "9efcb0cb1afc75ad1e92d2b2dbf4d9c77b072d6656c5f1a150af8b718d0c7b76"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.55.bb b/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.55.bb
new file mode 100644
index 000000000..0930a277b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.55.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "A small C library that is supposed to make it easy to run an HTTP server as part of another application"
+HOMEPAGE = "http://www.gnu.org/software/libmicrohttpd/"
+LICENSE = "LGPL-2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9331186f4f80db7da0e724bdd6554ee5"
+SECTION = "net"
+DEPENDS = "libgcrypt gnutls file"
+
+SRC_URI = "http://ftp.gnu.org/gnu/libmicrohttpd/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "1c20f84a8b9cf692dd50b558b3571a3a"
+SRC_URI[sha256sum] = "0c1cab8dc9f2588bd3076a28f77a7f8de9560cbf2d80e53f9a8696ada80ed0f8"
+
+inherit autotools lib_package pkgconfig gettext
+
+CFLAGS += "-pthread -D_REENTRANT"
+
+EXTRA_OECONF += "--disable-static --with-gnutls=${STAGING_LIBDIR}/../"
+
+PACKAGECONFIG ?= "curl"
+PACKAGECONFIG_append_class-target = "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'largefile', d)} \
+"
+PACKAGECONFIG[largefile] = "--enable-largefile,--disable-largefile,,"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,"
+
+do_compile_append() {
+ sed -i s:-L${STAGING_LIBDIR}::g libmicrohttpd.pc
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/0001-signal.c-SIGCLD-and-SIGCHILD-are-same-on-sytem-V-sys.patch b/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/0001-signal.c-SIGCLD-and-SIGCHILD-are-same-on-sytem-V-sys.patch
new file mode 100644
index 000000000..a43b4b176
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/0001-signal.c-SIGCLD-and-SIGCHILD-are-same-on-sytem-V-sys.patch
@@ -0,0 +1,28 @@
+From f1b9992caf9910f9f7afae401045e42572cc84ff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 1 Apr 2017 08:50:35 -0700
+Subject: [PATCH] signal.c: SIGCLD and SIGCHILD are same on sytem V systems
+
+Musl drops the SIGCLD legacy
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ nih/signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nih/signal.c b/nih/signal.c
+index a241df9..691c8e6 100644
+--- a/nih/signal.c
++++ b/nih/signal.c
+@@ -87,7 +87,7 @@ static const SignalName signal_names[] = {
+ { SIGSTKFLT, "STKFLT" },
+ #endif
+ { SIGCHLD, "CHLD" },
+- { SIGCLD, "CLD" },
++ { SIGCHLD, "CLD" },
+ { SIGCONT, "CONT" },
+ { SIGSTOP, "STOP" },
+ { SIGTSTP, "TSTP" },
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/libnih_1.0.3-4ubuntu16.patch b/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/libnih_1.0.3-4ubuntu16.patch
new file mode 100644
index 000000000..5d125c851
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libnih/libnih-1.0.3/libnih_1.0.3-4ubuntu16.patch
@@ -0,0 +1,3593 @@
+--- libnih-1.0.3.orig/ChangeLog
++++ libnih-1.0.3/ChangeLog
+@@ -1,3 +1,84 @@
++2013-03-13 Steve Langasek <steve.langasek@ubuntu.com>
++
++ * nih/watch.c (nih_watch_walk_filter): New NihFileFilter function
++ passed to nih_dir_walk_scan() to ensure the nih_watch_new() filter
++ function is passed the NihWatch data rather than the data passed to
++ the nih_dir_walk() NihFileVisitor function (LP: #776532).
++
++ * nih/tests/test_watch.c (test_new): New test "with filter and data"
++ to ensure filter is passed correct value.
++
++2013-02-28 James Hunt <james.hunt@ubuntu.com>
++
++ * Removal of gcc 'malloc' function attribute resulting from
++ a clarification in its description which makes its use invalid.
++ (LP: #1123588).
++
++2013-02-05 James Hunt <james.hunt@ubuntu.com>
++
++ * nih/logging.c: nih_log_abort_message(): Remove erroneous check
++ left over from use of __abort_msg weak symbol.
++ * nih/tests/test_logging.c: Remove unecessary check on whether
++ __nih_abort_msg has an address.
++
++2012-12-13 Stéphane Graber <stgraber@ubuntu.com>
++
++ * nih-dbus-tool/type.c, nih-dbus-tool/marshal.c: Update dbus code
++ generator to allow for empty lists for type 'as'. This drops the
++ != NULL check for NULL terminated arrays and moves the iteration
++ loop inside an 'if' statement.
++
++2012-12-11 Dmitrijs Ledkovs <dmitrijs.ledkovs@canonical.com>
++
++ * nih/file.c (nih_dir_walk_scan): Fallback to lstat, if the
++ non-portable dirent.d_type is not available (LP: #672643) (Closes:
++ #695604).
++
++2012-12-10 Petr Lautrbach <plautrba@redhat.com>
++
++ * nih/tests/test_file.c: don't use dirent.d_type (not portable)
++
++2012-10-25 James Hunt <james.hunt@ubuntu.com>
++
++ * nih/logging.c: Use our own __nih_abort_msg rather than the
++ (e)glibc private symbol __abort_msg to avoid upgrade issues (LP: #997359).
++ * nih/tests/test_logging.c: Update tests for __nih_abort_msg.
++
++2011-08-31 James Hunt <james.hunt@ubuntu.com>
++
++ * nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c
++ (test_unix_fd_to_str): Sanity check value before invoking strchr in
++ case it returns address of null (which would give a misleading test
++ pass).
++ * nih-dbus-tool/tests/test_com.netsplit.Nih.Test_proxy.c
++ (test_unix_fd_to_str, test_unix_fd_to_str_sync): Sanity check value
++ before invoking strchr in case it returns address of null (which would
++ give a misleading test pass).
++ * nih/config.c (): nih_config_block_end: Add check to ensure strchr()
++ doesn't return address of null since this would result in a misleading
++ return value of TRUE.
++
++ * nih/string.c (nih_str_split): Fixes to avoid over-running
++ input string and also returning an empty string array entry
++ when repeat is true (LP: #834813).
++ * nih/tests/test_string.c (test_str_split): Added a lot of new
++ tests for nih_str_split().
++
++2011-08-26 James Hunt <james.hunt@ubuntu.com>
++
++ * nih/io.c (nih_io_select_fds): Ensure number of fds being managed
++ is within limits.
++
++ * nih/config.c, nih/error.h, nih/io.c, nih/test_files.h: Correct
++ typos in comments.
++
++2011-06-20 James Hunt <james.hunt@ubuntu.com>
++
++ * nih/watch.c (nih_watch_handle): Handle non-directory watches;
++ previously a file watch resulted in an invalid file path ending in
++ a single slash (LP:#777097).
++ * nih/tests/test_watch.c: Added explicit test for watch on a file.
++
+ 2010-12-23 Scott James Remnant <scott@netsplit.com>
+
+ * NEWS: Release 1.0.3
+--- libnih-1.0.3.orig/nih/watch.c
++++ libnih-1.0.3/nih/watch.c
+@@ -2,8 +2,8 @@
+ *
+ * watch.c - watching of files and directories with inotify
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -71,6 +71,9 @@
+ uint32_t events, uint32_t cookie,
+ const char *name,
+ int *caught_free);
++static int nih_watch_walk_filter (void *data, const char *path,
++ int is_dir)
++ __attribute__ ((warn_unused_result));
+
+
+ /**
+@@ -91,7 +94,7 @@
+ * sub-directories will be automatically watched.
+ *
+ * Additionally, the set of files and directories within @path can be
+- * limited by passing a @filter function which will recieve the paths and
++ * limited by passing a @filter function which will receive the paths and
+ * may return TRUE to indicate that the path received should not be watched.
+ *
+ * When a file is created within @path, or moved from outside this location
+@@ -104,7 +107,7 @@
+ * files that exist under @path when the watch is first added. This only
+ * occurs if the watch can be added.
+ *
+- * This is a very high level wrapped around the inotify API; lower levels
++ * This is a very high level wrapper around the inotify API; lower levels
+ * can be obtained using the inotify API itself and some of the helper
+ * functions used by this one.
+ *
+@@ -185,6 +188,35 @@
+ }
+
+
++ /**
++ * nih_watch_walk_filter:
++ * @data: NihWatch,
++ * @path: path to file,
++ * @is_dir: TRUE if @path is a directory.
++ *
++ * Callback function for nih_dir_walk(), used by nih_watch_add() to wrap
++ * the user-specified NihFileFilter (watch->filter) with a filter that can
++ * take watch itself as an argument.
++ *
++ * Returns: TRUE if the path should be ignored, FALSE otherwise.
++ **/
++static int
++nih_watch_walk_filter (void *data, const char *path, int is_dir)
++{
++ NihWatch *watch;
++
++ watch = (NihWatch *)data;
++
++ nih_assert (watch);
++
++ /* No filter, so accept all files */
++ if (! watch->filter)
++ return FALSE;
++
++ return watch->filter (watch->data, path, is_dir);
++}
++
++
+ /**
+ * nih_watch_handle_by_wd:
+ * @watch: watch to search,
+@@ -295,7 +327,7 @@
+ * one; errors within the walk are warned automatically, so if this
+ * fails, it means we literally couldn't watch the top-level.
+ */
+- if (subdirs && (nih_dir_walk (path, watch->filter,
++ if (subdirs && (nih_dir_walk (path, nih_watch_walk_filter,
+ (NihFileVisitor)nih_watch_add_visitor,
+ NULL, watch) < 0)) {
+ NihError *err;
+@@ -494,12 +526,21 @@
+ return;
+ }
+
++ /* Every other event must come with a name */
++ if (name && *name) {
+
+- /* Every other event must come with a name. */
+- if ((! name) || strchr (name, '/'))
+- return;
++ /* If name refers to a directory, there should be no associated
++ * path - just the name of the path element.
++ */
++ if (strchr (name, '/'))
++ return;
+
+- path = NIH_MUST (nih_sprintf (NULL, "%s/%s", handle->path, name));
++ /* Event occured for file within a watched directory */
++ path = NIH_MUST (nih_sprintf (NULL, "%s/%s", handle->path, name));
++ } else {
++ /* File event occured */
++ path = NIH_MUST (nih_strdup (NULL, handle->path));
++ }
+
+ /* Check the filter */
+ if (watch->filter && watch->filter (watch->data, path,
+--- libnih-1.0.3.orig/nih/hash.h
++++ libnih-1.0.3/nih/hash.h
+@@ -141,7 +141,7 @@
+ * @hash: hash table to iterate,
+ * @iter: name of iterator variable.
+ *
+- * Expans to nested for statements that iterate over each entry in each
++ * Expands to nested for statements that iterate over each entry in each
+ * bin of @hash, except for the bin head pointer, setting @iter to each
+ * entry for the block within the loop. A variable named _@iter_i is used
+ * to iterate the hash bins.
+@@ -203,7 +203,7 @@
+ NihKeyFunction key_function,
+ NihHashFunction hash_function,
+ NihCmpFunction cmp_function)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihList * nih_hash_add (NihHash *hash, NihList *entry);
+ NihList * nih_hash_add_unique (NihHash *hash, NihList *entry);
+--- libnih-1.0.3.orig/nih/main.h
++++ libnih-1.0.3/nih/main.h
+@@ -138,7 +138,7 @@
+
+ NihMainLoopFunc *nih_main_loop_add_func (const void *parent,
+ NihMainLoopCb callback, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void nih_main_term_signal (void *data, NihSignal *signal);
+
+--- libnih-1.0.3.orig/nih/command.h
++++ libnih-1.0.3/nih/command.h
+@@ -123,7 +123,7 @@
+
+ NihCommand *nih_command_join (const void *parent,
+ const NihCommand *a, const NihCommand *b)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih/config.h
++++ libnih-1.0.3/nih/config.h
+@@ -140,10 +140,10 @@
+ char * nih_config_next_token (const void *parent, const char *file,
+ size_t len, size_t *pos, size_t *lineno,
+ const char *delim, int dequote)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * nih_config_next_arg (const void *parent, const char *file,
+ size_t len, size_t *pos, size_t *lineno)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ void nih_config_next_line (const char *file, size_t len,
+ size_t *pos, size_t *lineno);
+
+@@ -155,15 +155,15 @@
+
+ char ** nih_config_parse_args (const void *parent, const char *file,
+ size_t len, size_t *pos, size_t *lineno)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * nih_config_parse_command (const void *parent, const char *file,
+ size_t len, size_t *pos, size_t *lineno)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * nih_config_parse_block (const void *parent, const char *file,
+ size_t len, size_t *pos, size_t *lineno,
+ const char *type)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ int nih_config_skip_block (const char *file, size_t len,
+ size_t *lineno, size_t *pos,
+ const char *type, size_t *endpos)
+--- libnih-1.0.3.orig/nih/io.c
++++ libnih-1.0.3/nih/io.c
+@@ -2,8 +2,8 @@
+ *
+ * io.c - file and socket input/output handling
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -165,6 +165,7 @@
+ nih_assert (readfds != NULL);
+ nih_assert (writefds != NULL);
+ nih_assert (exceptfds != NULL);
++ nih_assert (*nfds <= FD_SETSIZE);
+
+ nih_io_init ();
+
+@@ -186,6 +187,9 @@
+ *nfds = nih_max (*nfds, watch->fd + 1);
+ }
+ }
++
++ /* Re-check in case we exceeded the limit in the loop */
++ nih_assert (*nfds <= FD_SETSIZE);
+ }
+
+ /**
+@@ -901,7 +905,7 @@
+ * read and placed into the receive buffer or queue, and the reader function
+ * is called if set.
+ *
+- * Any data or messaages in the send buffer or queue are written out if the
++ * Any data or messages in the send buffer or queue are written out if the
+ * @events includes NIH_IO_WRITE.
+ *
+ * Errors are handled when data is read, and result in the error handled
+@@ -1211,7 +1215,7 @@
+ * This function is called when the local end of a file descriptor being
+ * managed by NihIo should be closed. Usually this is because the remote
+ * end has been closed (without error) but it can also be because no
+- * error handler was given
++ * error handler was given.
+ *
+ * Normally this just calls the close handler, or if not available, it
+ * closes the file descriptor and frees the structure (which may be
+@@ -1291,7 +1295,7 @@
+ * @io: structure to be destroyed.
+ *
+ * Closes the file descriptor associated with an NihIo structure so that
+- * the structure can be freed. IF an error is caught by closing the
++ * the structure can be freed. If an error is caught by closing the
+ * descriptor, the error handler is called instead of the error being raised;
+ * this allows you to group your error handling in one place rather than
+ * special-case close.
+--- libnih-1.0.3.orig/nih/watch.h
++++ libnih-1.0.3/nih/watch.h
+@@ -156,7 +156,7 @@
+ NihCreateHandler create_handler,
+ NihModifyHandler modify_handler,
+ NihDeleteHandler delete_handler, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_watch_add (NihWatch *watch, const char *path, int subdirs)
+ __attribute__ ((warn_unused_result));
+--- libnih-1.0.3.orig/nih/tree.h
++++ libnih-1.0.3/nih/tree.h
+@@ -344,9 +344,9 @@
+
+ void nih_tree_init (NihTree *tree);
+ NihTree * nih_tree_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ NihTreeEntry *nih_tree_entry_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihTree * nih_tree_add (NihTree *tree, NihTree *node,
+ NihTreeWhere where);
+--- libnih-1.0.3.orig/nih/file.c
++++ libnih-1.0.3/nih/file.c
+@@ -65,7 +65,7 @@
+ /* Prototypes for static functions */
+ static char **nih_dir_walk_scan (const char *path, NihFileFilter filter,
+ void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static int nih_dir_walk_visit (const char *dirname, NihList *dirs,
+ const char *path, NihFileFilter filter,
+ NihFileVisitor visitor,
+@@ -619,6 +619,8 @@
+ struct dirent *ent;
+ char **paths;
+ size_t npaths;
++ int isdir;
++ struct stat statbuf;
+
+ nih_assert (path != NULL);
+
+@@ -640,7 +642,15 @@
+ subpath = NIH_MUST (nih_sprintf (NULL, "%s/%s",
+ path, ent->d_name));
+
+- if (filter && filter (data, subpath, ent->d_type == DT_DIR))
++ if (ent->d_type == DT_UNKNOWN) {
++ if ( lstat (subpath, &statbuf))
++ isdir = 0;
++ else
++ isdir = S_ISDIR(statbuf.st_mode);
++ } else
++ isdir = ent->d_type == DT_DIR;
++
++ if (filter && filter (data, subpath, isdir))
+ continue;
+
+ NIH_MUST (nih_str_array_addp (&paths, NULL, &npaths, subpath));
+--- libnih-1.0.3.orig/nih/alloc.c
++++ libnih-1.0.3/nih/alloc.c
+@@ -119,8 +119,7 @@
+ static inline int nih_alloc_context_free (NihAllocCtx *ctx);
+
+ static inline NihAllocRef *nih_alloc_ref_new (NihAllocCtx *parent,
+- NihAllocCtx *child)
+- __attribute__ ((malloc));
++ NihAllocCtx *child);
+ static inline void nih_alloc_ref_free (NihAllocRef *ref);
+ static inline NihAllocRef *nih_alloc_ref_lookup (NihAllocCtx *parent,
+ NihAllocCtx *child);
+--- libnih-1.0.3.orig/nih/timer.h
++++ libnih-1.0.3/nih/timer.h
+@@ -59,7 +59,7 @@
+ * @months: months (1-12),
+ * @wdays: days of week (0-7).
+ *
+- * Indidcates when scheduled timers should be run, each member is a bit
++ * Indicates when scheduled timers should be run, each member is a bit
+ * field where the bit is 1 if the timer should be run for that value and
+ * 0 if not.
+ **/
+@@ -117,14 +117,14 @@
+
+ NihTimer *nih_timer_add_timeout (const void *parent, time_t timeout,
+ NihTimerCb callback, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ NihTimer *nih_timer_add_periodic (const void *parent, time_t period,
+ NihTimerCb callback, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ NihTimer *nih_timer_add_scheduled (const void *parent,
+ NihTimerSchedule *schedule,
+ NihTimerCb callback, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihTimer *nih_timer_next_due (void);
+ void nih_timer_poll (void);
+--- libnih-1.0.3.orig/nih/config.c
++++ libnih-1.0.3/nih/config.c
+@@ -2,8 +2,8 @@
+ *
+ * config.c - configuration file parsing
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -657,7 +657,7 @@
+ * of the returned string are freed, the returned string will also be
+ * freed.
+ *
+- * Returns: the command found or NULL on raised error.
++ * Returns: the newly allocated command found or NULL on raised error.
+ **/
+ char *
+ nih_config_parse_command (const void *parent,
+@@ -714,7 +714,7 @@
+ * @lineno: line number,
+ * @type: block identifier.
+ *
+- * Extracts a block of text from @line, stopping when the pharse "end @type"
++ * Extracts a block of text from @line, stopping when the phrase "end @type"
+ * is encountered without any quotes or blackslash escaping within it.
+ *
+ * @file may be a memory mapped file, in which case @pos should be given
+@@ -950,7 +950,7 @@
+ return FALSE;
+
+ /* Must be whitespace after */
+- if (! strchr (NIH_CONFIG_WS, file[p + 3]))
++ if (file[p + 3] && ! strchr (NIH_CONFIG_WS, file[p + 3]))
+ return FALSE;
+
+ /* Find the second word */
+--- libnih-1.0.3.orig/nih/option.h
++++ libnih-1.0.3/nih/option.h
+@@ -124,11 +124,11 @@
+ char ** nih_option_parser (const void *parent,
+ int argc, char *argv[],
+ NihOption *options, int break_nonopt)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihOption *nih_option_join (const void *parent,
+ const NihOption *a, const NihOption *b)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_option_count (NihOption *option, const char *arg);
+ int nih_option_int (NihOption *option, const char *arg);
+--- libnih-1.0.3.orig/nih/signal.h
++++ libnih-1.0.3/nih/signal.h
+@@ -76,7 +76,7 @@
+
+ NihSignal * nih_signal_add_handler (const void *parent, int signum,
+ NihSignalHandler handler, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void nih_signal_handler (int signum);
+ void nih_signal_poll (void);
+--- libnih-1.0.3.orig/nih/list.h
++++ libnih-1.0.3/nih/list.h
+@@ -37,7 +37,7 @@
+ * after a known entry, and remove an entry from the list.
+ *
+ * List entries may be created in one of two ways. The most common is to
+- * embed the NihList structure as the frist member of your own structure,
++ * embed the NihList structure as the first member of your own structure,
+ * and initialise it with nih_list_init() after allocating the structure.
+ * Alternatively you may create NihListEntry structures with
+ * nih_list_entry_new() and point at your own data from them.
+@@ -196,10 +196,10 @@
+
+ void nih_list_init (NihList *entry);
+ NihList * nih_list_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihListEntry *nih_list_entry_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+
+ NihList * nih_list_add (NihList *list, NihList *entry);
+--- libnih-1.0.3.orig/nih/logging.c
++++ libnih-1.0.3/nih/logging.c
+@@ -39,11 +39,11 @@
+
+
+ /**
+- * __abort_msg:
++ * __nih_abort_msg:
+ *
+- * A glibc variable that keeps the assertion message in the core dump.
++ * A variable that keeps the assertion message in the core dump.
+ **/
+-extern char *__abort_msg __attribute__ ((weak));
++char *__nih_abort_msg = NULL;
+
+ /**
+ * logger:
+@@ -114,19 +114,16 @@
+ * nih_log_abort_message:
+ * @message: message to be logged.
+ *
+- * Save @message in the glibc __abort_msg variable so it can be retrieved
++ * Save @message in the __nih_abort_msg variable so it can be retrieved
+ * by debuggers if we should crash at this point.
+ **/
+ static void
+ nih_log_abort_message (const char *message)
+ {
+- if (! &__abort_msg)
+- return;
++ if (__nih_abort_msg)
++ nih_discard (__nih_abort_msg);
+
+- if (__abort_msg)
+- nih_discard (__abort_msg);
+-
+- __abort_msg = NIH_MUST (nih_strdup (NULL, message));
++ __nih_abort_msg = NIH_MUST (nih_strdup (NULL, message));
+ }
+
+ /**
+--- libnih-1.0.3.orig/nih/test_files.h
++++ libnih-1.0.3/nih/test_files.h
+@@ -1,7 +1,7 @@
+ /* libnih
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -39,7 +39,7 @@
+ * TEST_FILENAME:
+ * @_var: variable to store filename in.
+ *
+- * Generate a filename that may be used for testing, it's unlinked it if
++ * Generate a filename that may be used for testing, it's unlinked if it
+ * exists and it's up to you to unlink it when done. @_var should be at
+ * least PATH_MAX long.
+ **/
+--- libnih-1.0.3.orig/nih/test_process.h
++++ libnih-1.0.3/nih/test_process.h
+@@ -36,7 +36,7 @@
+ * Spawn a child in which a test can be performed without affecting the
+ * main flow of the process. The pid of the child is stored in @_pid.
+ *
+- * This macro ensures that the child has begun exectution before the
++ * This macro ensures that the child has begun execution before the
+ * parent is allowed to continue through the usual use of a pipe.
+ *
+ * A block of code should follow this macro, which is the code that will
+--- libnih-1.0.3.orig/nih/child.h
++++ libnih-1.0.3/nih/child.h
+@@ -98,7 +98,7 @@
+ NihChildWatch *nih_child_add_watch (const void *parent, pid_t pid,
+ NihChildEvents events,
+ NihChildHandler handler, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void nih_child_poll (void);
+
+--- libnih-1.0.3.orig/nih/alloc.h
++++ libnih-1.0.3/nih/alloc.h
+@@ -299,7 +299,7 @@
+ * It is permissible to take references to foo within its scope, or by
+ * functions called, in which case it will not be freed. Also it is
+ * generally nonsensical to allocate with a parent, since this too will
+- * prevent it from beign freed.
++ * prevent it from being freed.
+ **/
+ #define nih_local __attribute__ ((cleanup(_nih_discard_local)))
+
+@@ -307,11 +307,11 @@
+ NIH_BEGIN_EXTERN
+
+ void * nih_alloc (const void *parent, size_t size)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void * nih_realloc (void *ptr, const void *parent,
+ size_t size)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_free (void *ptr);
+ int nih_discard (void *ptr);
+--- libnih-1.0.3.orig/nih/io.h
++++ libnih-1.0.3/nih/io.h
+@@ -269,7 +269,7 @@
+ NihIoWatch * nih_io_add_watch (const void *parent, int fd,
+ NihIoEvents events,
+ NihIoWatcher watcher, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void nih_io_select_fds (int *nfds, fd_set *readfds,
+ fd_set *writefds, fd_set *exceptfds);
+@@ -278,12 +278,12 @@
+
+
+ NihIoBuffer * nih_io_buffer_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_io_buffer_resize (NihIoBuffer *buffer, size_t grow);
+ char * nih_io_buffer_pop (const void *parent,
+ NihIoBuffer *buffer, size_t *len)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ void nih_io_buffer_shrink (NihIoBuffer *buffer, size_t len);
+ int nih_io_buffer_push (NihIoBuffer *buffer,
+ const char *str, size_t len)
+@@ -291,7 +291,7 @@
+
+
+ NihIoMessage *nih_io_message_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_io_message_add_control (NihIoMessage *message, int level,
+ int type, socklen_t len,
+@@ -300,7 +300,7 @@
+
+ NihIoMessage *nih_io_message_recv (const void *parent, int fd,
+ size_t *len)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ ssize_t nih_io_message_send (NihIoMessage *message, int fd)
+ __attribute__ ((warn_unused_result));
+
+@@ -310,7 +310,7 @@
+ NihIoCloseHandler close_handler,
+ NihIoErrorHandler error_handler,
+ void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ void nih_io_shutdown (NihIo *io);
+ int nih_io_destroy (NihIo *io);
+
+@@ -319,14 +319,14 @@
+
+ char * nih_io_read (const void *parent, NihIo *io,
+ size_t *len)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ int nih_io_write (NihIo *io, const char *str,
+ size_t len)
+ __attribute__ ((warn_unused_result));
+
+ char * nih_io_get (const void *parent, NihIo *io,
+ const char *delim)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int nih_io_printf (NihIo *io, const char *format, ...)
+ __attribute__ ((warn_unused_result, format (printf, 2, 3)));
+--- libnih-1.0.3.orig/nih/test_output.h
++++ libnih-1.0.3/nih/test_output.h
+@@ -61,10 +61,10 @@
+
+ /**
+ * TEST_FEATURE:
+- * @_feat: name of function feature being tested.
++ * @_feat: name of function or group feature being tested.
+ *
+- * Output a message indicating that a sub-test of a function is being
+- * performed, specifically the feature named _feat.
++ * Output a message indicating that a sub-test of a function or
++ * group is being performed, specifically the feature named _feat.
+ **/
+ #define TEST_FEATURE(_feat) \
+ printf ("...%s\n", _feat);
+--- libnih-1.0.3.orig/nih/error.h
++++ libnih-1.0.3/nih/error.h
+@@ -1,7 +1,7 @@
+ /* libnih
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -111,7 +111,7 @@
+ * @message: human-readable message.
+ *
+ * Raises an error with the given details in the current error context,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ *
+ * @message should be a static string, as it will not be freed when the
+@@ -126,7 +126,7 @@
+ * @format: format string for human-readable message.
+ *
+ * Raises an error with the given details in the current error context,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ *
+ * The human-readable message for the error is parsed according to @format,
+@@ -140,7 +140,7 @@
+ * nih_error_raise_system:
+ *
+ * Raises an error with details taken from the current value of errno,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ **/
+ #define nih_error_raise_system() \
+@@ -162,7 +162,7 @@
+ * @error: existing object to raise.
+ *
+ * Raises the existing error object in the current error context,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ *
+ * This is normally used to raise a taken error that has not been handled,
+@@ -182,7 +182,7 @@
+ * @message: human-readable message.
+ *
+ * Raises an error with the given details in the current error context,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ *
+ * Will return from the current function with @retval, which may be left
+@@ -199,7 +199,7 @@
+ * @retval: return value for function.
+ *
+ * Raises an error with details taken from the current value of errno,
+- * if an unhandled error already exists then an error message is emmitted
++ * if an unhandled error already exists then an error message is emitted
+ * through the logging system; you should try to avoid this.
+ *
+ * Will return from the current function with @retval, which may be left
+--- libnih-1.0.3.orig/nih/string.h
++++ libnih-1.0.3/nih/string.h
+@@ -35,60 +35,60 @@
+ NIH_BEGIN_EXTERN
+
+ char * nih_sprintf (const void *parent, const char *format, ...)
+- __attribute__ ((format (printf, 2, 3), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 2, 3), warn_unused_result));
+
+ char * nih_vsprintf (const void *parent, const char *format,
+ va_list args)
+- __attribute__ ((format (printf, 2, 0), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 2, 0), warn_unused_result));
+
+ char * nih_strdup (const void *parent, const char *str)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * nih_strndup (const void *parent, const char *str, size_t len)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * nih_strcat (char **str, const void *parent, const char *src)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * nih_strncat (char **str, const void *parent, const char *src,
+ size_t len)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * nih_strcat_sprintf (char **str, const void *parent,
+ const char *format, ...)
+- __attribute__ ((format (printf, 3, 4), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 3, 4), warn_unused_result));
+ char * nih_strcat_vsprintf (char **str, const void *parent,
+ const char *format, va_list args)
+- __attribute__ ((format (printf, 3, 0), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 3, 0), warn_unused_result));
+
+ char **nih_str_split (const void *parent, const char *str,
+ const char *delim, int repeat)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char **nih_str_array_new (const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char **nih_str_array_add (char ***array, const void *parent, size_t *len,
+ const char *str)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char **nih_str_array_addn (char ***array, const void *parent, size_t *len,
+ const char *str, size_t strlen)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char **nih_str_array_addp (char ***array, const void *parent, size_t *len,
+ void *ptr)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char **nih_str_array_copy (const void *parent, size_t *len,
+ char * const *array)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char **nih_str_array_append (char ***array, const void *parent, size_t *len,
+ char * const *args)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * nih_str_wrap (const void *parent, const char *str, size_t len,
+ size_t first_indent, size_t indent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ size_t nih_str_screen_width (void);
+ char * nih_str_screen_wrap (const void *parent, const char *str,
+ size_t first_indent, size_t indent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih/string.c
++++ libnih-1.0.3/nih/string.c
+@@ -405,7 +405,7 @@
+ const char *ptr;
+
+ /* Skip initial delimiters */
+- while (repeat && strchr (delim, *str))
++ while (repeat && *str && strchr (delim, *str))
+ str++;
+
+ /* Find the end of the token */
+@@ -413,6 +413,13 @@
+ while (*str && (! strchr (delim, *str)))
+ str++;
+
++ /* Don't create an empty string array element in repeat
++ * mode if there is no token (as a result of a
++ * duplicated delimiter character).
++ */
++ if (repeat && (str == ptr))
++ continue;
++
+ if (! nih_str_array_addn (&array, parent, &len,
+ ptr, str - ptr)) {
+ nih_free (array);
+--- libnih-1.0.3.orig/nih/file.h
++++ libnih-1.0.3/nih/file.h
+@@ -82,7 +82,7 @@
+
+ char *nih_file_read (const void *parent, const char *path,
+ size_t *length)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void *nih_file_map (const char *path, int flags, size_t *length)
+ __attribute__ ((warn_unused_result));
+--- libnih-1.0.3.orig/nih/tests/test_option.c
++++ libnih-1.0.3/nih/tests/test_option.c
+@@ -1574,7 +1574,7 @@
+ output = tmpfile ();
+ TEST_CHILD (pid) {
+ TEST_DIVERT_STDOUT (output) {
+- char **args;
++ char **args __attribute__((unused));
+
+ args = nih_option_parser (NULL, argc, argv,
+ options, FALSE);
+@@ -1652,7 +1652,7 @@
+ unsetenv ("COLUMNS");
+
+ TEST_DIVERT_STDOUT (output) {
+- char **args;
++ char **args __attribute__((unused));
+
+ args = nih_option_parser (NULL, argc, argv,
+ options, FALSE);
+--- libnih-1.0.3.orig/nih/tests/test_logging.c
++++ libnih-1.0.3/nih/tests/test_logging.c
+@@ -31,7 +31,7 @@
+ #include <nih/main.h>
+
+
+-extern char *__abort_msg __attribute__ ((weak));
++extern char *__nih_abort_msg;
+
+ static NihLogLevel last_priority = NIH_LOG_UNKNOWN;
+ static char * last_message = NULL;
+@@ -156,68 +156,63 @@
+ }
+
+
+- /* Check that a fatal message is also stored in the glibc __abort_msg
++ /* Check that a fatal message is also stored in the __nih_abort_msg
+ * variable.
+ */
+- if (&__abort_msg) {
+- TEST_FEATURE ("with fatal message");
+- TEST_ALLOC_FAIL {
+- __abort_msg = NULL;
+- last_priority = NIH_LOG_UNKNOWN;
+- last_message = NULL;
+-
+- ret = nih_log_message (NIH_LOG_FATAL,
+- "message with %s %d formatting",
+- "some", 20);
+-
+- TEST_EQ (ret, 0);
+- TEST_EQ (last_priority, NIH_LOG_FATAL);
+- TEST_EQ_STR (last_message, "message with some 20 formatting");
+-
+- TEST_NE_P (__abort_msg, NULL);
+- TEST_ALLOC_PARENT (__abort_msg, NULL);
+- TEST_EQ_STR (__abort_msg, "message with some 20 formatting");
++ TEST_FEATURE ("with fatal message");
++ TEST_ALLOC_FAIL {
++ __nih_abort_msg = NULL;
++ last_priority = NIH_LOG_UNKNOWN;
++ last_message = NULL;
+
+- free (last_message);
+- }
++ ret = nih_log_message (NIH_LOG_FATAL,
++ "message with %s %d formatting",
++ "some", 20);
+
++ TEST_EQ (ret, 0);
++ TEST_EQ (last_priority, NIH_LOG_FATAL);
++ TEST_EQ_STR (last_message, "message with some 20 formatting");
+
+- /* Check that a fatal message can safely overwrite one already stored
+- * in the glibc __abort_msg variable.
+- */
+- TEST_FEATURE ("with second fatal message");
+- TEST_ALLOC_FAIL {
+- TEST_ALLOC_SAFE {
+- msg = nih_strdup (NULL, "test");
+- }
+-
+- __abort_msg = msg;
+- TEST_FREE_TAG (msg);
+-
+- last_priority = NIH_LOG_UNKNOWN;
+- last_message = NULL;
+-
+- ret = nih_log_message (NIH_LOG_FATAL,
+- "message with %s %d formatting",
+- "some", 20);
+-
+- TEST_EQ (ret, 0);
+- TEST_EQ (last_priority, NIH_LOG_FATAL);
+- TEST_EQ_STR (last_message, "message with some 20 formatting");
+-
+- TEST_FREE (msg);
+-
+- TEST_NE_P (__abort_msg, NULL);
+- TEST_ALLOC_PARENT (__abort_msg, NULL);
+- TEST_EQ_STR (__abort_msg, "message with some 20 formatting");
++ TEST_NE_P (__nih_abort_msg, NULL);
++ TEST_ALLOC_PARENT (__nih_abort_msg, NULL);
++ TEST_EQ_STR (__nih_abort_msg, "message with some 20 formatting");
+
+- free (last_message);
+- }
+- } else {
+- printf ("SKIP: __abort_msg not available\n");
++ free (last_message);
+ }
+
+
++ /* Check that a fatal message can safely overwrite one already stored
++ * in the __nih_abort_msg variable.
++ */
++ TEST_FEATURE ("with second fatal message");
++ TEST_ALLOC_FAIL {
++ TEST_ALLOC_SAFE {
++ msg = nih_strdup (NULL, "test");
++ }
++
++ __nih_abort_msg = msg;
++ TEST_FREE_TAG (msg);
++
++ last_priority = NIH_LOG_UNKNOWN;
++ last_message = NULL;
++
++ ret = nih_log_message (NIH_LOG_FATAL,
++ "message with %s %d formatting",
++ "some", 20);
++
++ TEST_EQ (ret, 0);
++ TEST_EQ (last_priority, NIH_LOG_FATAL);
++ TEST_EQ_STR (last_message, "message with some 20 formatting");
++
++ TEST_FREE (msg);
++
++ TEST_NE_P (__nih_abort_msg, NULL);
++ TEST_ALLOC_PARENT (__nih_abort_msg, NULL);
++ TEST_EQ_STR (__nih_abort_msg, "message with some 20 formatting");
++
++ free (last_message);
++ }
++
+ /* Check that the nih_debug macro wraps the call properly and
+ * includes the function in which the message occurred.
+ */
+--- libnih-1.0.3.orig/nih/tests/test_hash.c
++++ libnih-1.0.3/nih/tests/test_hash.c
+@@ -470,7 +470,8 @@
+ test_lookup (void)
+ {
+ NihHash *hash;
+- NihList *entry1, *entry2, *entry3, *ptr;
++ NihList *entry1, *entry2, *ptr;
++ NihList *entry3 __attribute__((unused));
+
+ TEST_FUNCTION ("nih_hash_lookup");
+ hash = nih_hash_string_new (NULL, 0);
+--- libnih-1.0.3.orig/nih/tests/test_main.c
++++ libnih-1.0.3/nih/tests/test_main.c
+@@ -457,7 +457,7 @@
+ test_main_loop (void)
+ {
+ NihMainLoopFunc *func;
+- NihTimer *timer;
++ NihTimer *timer __attribute__((unused));
+ int ret;
+
+ /* Check that we can run through the main loop, and that the
+--- libnih-1.0.3.orig/nih/tests/test_watch.c
++++ libnih-1.0.3/nih/tests/test_watch.c
+@@ -2,8 +2,8 @@
+ *
+ * test_watch.c - test suite for nih/watch.c
+ *
+- * Copyright © 2009 Scott James Remnant <scott@netsplit.com>.
+- * Copyright © 2009 Canonical Ltd.
++ * Copyright © 2011 Scott James Remnant <scott@netsplit.com>.
++ * Copyright © 2011 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+@@ -39,6 +39,8 @@
+ #include <nih/error.h>
+ #include <nih/logging.h>
+
++/* Read "The Hitchhikers Guide to the Galaxy" */
++#define FILTER_VALUE 42
+
+ static int
+ my_filter (void *data,
+@@ -54,6 +56,26 @@
+ return FALSE;
+ }
+
++/* Set by my_filter2 () so it knows if it has already been called */
++static int my_filter2_called = 0;
++
++static int
++my_filter2 (int *value,
++ const char *path,
++ int is_dir)
++{
++ /* we only want to toggle the value once */
++ if (my_filter2_called)
++ return TRUE;
++
++ my_filter2_called = 1;
++
++ nih_assert (value && *value == FILTER_VALUE);
++ *value = 0;
++
++ return FALSE;
++}
++
+ static int create_called = 0;
+ static int modify_called = 0;
+ static int delete_called = 0;
+@@ -553,6 +575,44 @@
+ nih_free (watch);
+ }
+
++ /* Ensure the file filter gets passed the correct data pointer.
++ */
++ TEST_FEATURE ("with filter and data");
++
++ /* Ensure we have a new directory */
++ TEST_FILENAME (dirname);
++ mkdir (dirname, 0755);
++
++ /* Create a single file */
++ strcpy (filename, dirname);
++ strcat (filename, "/foo");
++
++ fd = fopen (filename, "w");
++ fprintf (fd, "test\n");
++ fclose (fd);
++
++ TEST_ALLOC_FAIL {
++ int watch_data = FILTER_VALUE;
++
++ /* Reset required to appease TEST_ALLOC_FAIL */
++ my_filter2_called = 0;
++
++ watch = nih_watch_new (NULL, dirname,
++ TRUE, TRUE,
++ (NihFileFilter)my_filter2,
++ NULL, NULL, NULL,
++ &watch_data);
++
++ TEST_NE_P (watch, NULL);
++
++ /* Ensure the filter was called and changed the value */
++
++ TEST_NE (my_filter2_called, 0);
++ TEST_EQ (watch_data, 0);
++
++ nih_free (watch);
++ }
++
+ strcpy (filename, dirname);
+ strcat (filename, "/bar");
+ chmod (filename, 0755);
+@@ -946,13 +1006,82 @@
+ nih_error_init ();
+
+ TEST_FILENAME (dirname);
+- mkdir (dirname, 0755);
++ TEST_EQ (mkdir (dirname, 0755), 0);
+
+- watch = nih_watch_new (NULL, dirname, TRUE, TRUE, my_filter,
+- my_create_handler, my_modify_handler,
++ TEST_FEATURE ("with watched file");
++ strcpy (filename, dirname);
++ strcat (filename, "/foo");
++
++ /* Create file first since we don't set a create handler on the
++ * watch.
++ */
++ fd = fopen (filename, "w");
++ fprintf (fd, "bar\n");
++ fclose (fd);
++
++ create_called = 0;
++ modify_called = 0;
++ delete_called = 0;
++ logger_called = 0;
++ last_path = NULL;
++ last_watch = NULL;
++ last_data = NULL;
++
++ watch = nih_watch_new (NULL, filename, FALSE, FALSE, NULL,
++ NULL, my_modify_handler,
+ my_delete_handler, &watch);
++ TEST_NE_P (watch, NULL);
++
++ /* Now, modify the existing file to trigger the modify handler. */
++ fd = fopen (filename, "a+");
++ fprintf (fd, "baz\n");
++ fclose (fd);
++
++ nfds = 0;
++ FD_ZERO (&readfds);
++ FD_ZERO (&writefds);
++ FD_ZERO (&exceptfds);
++
++ nih_io_select_fds (&nfds, &readfds, &writefds, &exceptfds);
++ select (nfds, &readfds, &writefds, &exceptfds, NULL);
++ nih_io_handle_fds (&readfds, &writefds, &exceptfds);
++
++ TEST_EQ_STR (watch->path, filename);
++
++ /* Ensure no regression to old behaviour (LP:#777097) */
++ TEST_NE (last_path[ strlen(last_path) - 1 ], '/');
++
++ TEST_EQ_STR (last_path, filename);
++ TEST_EQ (modify_called, 1);
++
++ unlink (filename);
++
++ nfds = 0;
++ FD_ZERO (&readfds);
++ FD_ZERO (&writefds);
++ FD_ZERO (&exceptfds);
++
++ nih_io_select_fds (&nfds, &readfds, &writefds, &exceptfds);
++ select (nfds, &readfds, &writefds, &exceptfds, NULL);
++ nih_io_handle_fds (&readfds, &writefds, &exceptfds);
+
++ TEST_EQ (delete_called, 1);
+
++ rmdir (filename);
++ nih_free (last_path);
++
++ create_called = 0;
++ modify_called = 0;
++ delete_called = 0;
++ logger_called = 0;
++ last_path = NULL;
++ last_watch = NULL;
++ last_data = NULL;
++
++
++ watch = nih_watch_new (NULL, dirname, TRUE, TRUE, my_filter,
++ my_create_handler, my_modify_handler,
++ my_delete_handler, &watch);
+ /* Check that creating a file within the directory being watched
+ * results in the create handler being called, and passed the full
+ * path of the created file to it.
+--- libnih-1.0.3.orig/nih/tests/test_string.c
++++ libnih-1.0.3/nih/tests/test_string.c
+@@ -619,6 +619,215 @@
+ nih_free (array);
+ }
+
++ TEST_FEATURE ("with no repeat and multiple identical delimiter "
++ "characters at string start");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "\t\tthis is a test", " \t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 7);
++ for (i = 0; i < 6; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "");
++ TEST_EQ_STR (array[1], "");
++ TEST_EQ_STR (array[2], "this");
++ TEST_EQ_STR (array[3], "is");
++ TEST_EQ_STR (array[4], "a");
++ TEST_EQ_STR (array[5], "test");
++ TEST_EQ_P (array[6], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple different delimiter "
++ "characters at string start");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, " \tthis is a test", " \t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 7);
++ for (i = 0; i < 6; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "");
++ TEST_EQ_STR (array[1], "");
++ TEST_EQ_STR (array[2], "this");
++ TEST_EQ_STR (array[3], "is");
++ TEST_EQ_STR (array[4], "a");
++ TEST_EQ_STR (array[5], "test");
++ TEST_EQ_P (array[6], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple identical delimiter "
++ "characters within string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "this is a\t\ttest", " \t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 8);
++ for (i = 0; i < 7; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "this");
++ TEST_EQ_STR (array[1], "is");
++ TEST_EQ_STR (array[2], "");
++ TEST_EQ_STR (array[3], "");
++ TEST_EQ_STR (array[4], "a");
++ TEST_EQ_STR (array[5], "");
++ TEST_EQ_STR (array[6], "test");
++ TEST_EQ_P (array[7], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple different delimiter "
++ "characters within string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "this is \n\ta\ttest", " \t\n", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 7);
++ for (i = 0; i < 6; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "this");
++ TEST_EQ_STR (array[1], "is");
++ TEST_EQ_STR (array[2], "");
++ TEST_EQ_STR (array[3], "");
++ TEST_EQ_STR (array[4], "a");
++ TEST_EQ_STR (array[5], "test");
++ TEST_EQ_P (array[6], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple identical delimiter "
++ "characters at string end");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "this is a test ", " \t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 6);
++ for (i = 0; i < 5; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "this");
++ TEST_EQ_STR (array[1], "is");
++ TEST_EQ_STR (array[2], "a");
++ TEST_EQ_STR (array[3], "test");
++ TEST_EQ_STR (array[4], "");
++ TEST_EQ_P (array[5], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple different delimiter "
++ "characters at string end");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "this is a test \t", " \t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 6);
++ for (i = 0; i < 5; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "this");
++ TEST_EQ_STR (array[1], "is");
++ TEST_EQ_STR (array[2], "a");
++ TEST_EQ_STR (array[3], "test");
++ TEST_EQ_STR (array[4], "");
++ TEST_EQ_P (array[5], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple identical delimiter "
++ "characters at beginning, middle and end of string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, " this is\n\n\na test\t\t\t", " \t\n", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 12);
++ for (i = 0; i < 11; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "");
++ TEST_EQ_STR (array[1], "");
++ TEST_EQ_STR (array[2], "");
++ TEST_EQ_STR (array[3], "this");
++ TEST_EQ_STR (array[4], "is");
++ TEST_EQ_STR (array[5], "");
++ TEST_EQ_STR (array[6], "");
++ TEST_EQ_STR (array[7], "a");
++ TEST_EQ_STR (array[8], "test");
++ TEST_EQ_STR (array[9], "");
++ TEST_EQ_STR (array[10], "");
++ TEST_EQ_P (array[11], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with no repeat and multiple different delimiter "
++ "characters at beginning, middle and end of string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, ": \nthis is\t \n:a test:\n ", "\n :\t", FALSE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 13);
++ for (i = 0; i < 12; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "");
++ TEST_EQ_STR (array[1], "");
++ TEST_EQ_STR (array[2], "");
++ TEST_EQ_STR (array[3], "this");
++ TEST_EQ_STR (array[4], "is");
++ TEST_EQ_STR (array[5], "");
++ TEST_EQ_STR (array[6], "");
++ TEST_EQ_STR (array[7], "");
++ TEST_EQ_STR (array[8], "a");
++ TEST_EQ_STR (array[9], "test");
++ TEST_EQ_STR (array[10], "");
++ TEST_EQ_STR (array[11], "");
++ TEST_EQ_P (array[12], NULL);
++
++ nih_free (array);
++ }
+
+ /* Check that we can split a string treating multiple consecutive
+ * matching characters as a single separator to be skipped.
+@@ -645,6 +854,177 @@
+ nih_free (array);
+ }
+
++ /* Check that we can split a string containing multiple
++ * occurences of one of the delimiter characters at the
++ * beginning of the string.
++ */
++ TEST_FEATURE ("with repeat and multiple identical adjacent delimiter characters at string start");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "\n\nhello", " \t\r\n", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 2);
++ for (i = 0; i < 1; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_P (array[1], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple different adjacent delimiter characters at string start");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "\n\r hello", " \t\r\n", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 2);
++ for (i = 0; i < 1; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_P (array[1], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple identical adjacent delimiter "
++ "characters within string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "hello\n\rworld", " \t\n\r", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 3);
++ for (i = 0; i < 2; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_STR (array[1], "world");
++ TEST_EQ_P (array[2], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple different adjacent delimiter "
++ "characters within string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "hello\n\r\tworld", " \t\n\r", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 3);
++ for (i = 0; i < 2; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_STR (array[1], "world");
++ TEST_EQ_P (array[2], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple identical adjacent delimiter "
++ "characters at string end");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "hello\n\n\n\n\n\n\n", " \t\r\n", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 2);
++ for (i = 0; i < 1; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_P (array[1], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple different adjacent delimiter "
++ "characters at string end");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL, "hello \r\t\r\t\n ", " \t\r\n", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 2);
++ for (i = 0; i < 1; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_P (array[1], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple identical adjacent delimiter "
++ "characters at beginning, middle and end of string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL,
++ " hello\n\n\n, world\n\n\n",
++ "\r\t\n ", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 4);
++ for (i = 0; i < 3; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_STR (array[1], ",");
++ TEST_EQ_STR (array[2], "world");
++ TEST_EQ_P (array[3], NULL);
++
++ nih_free (array);
++ }
++
++ TEST_FEATURE ("with repeat and multiple different adjacent delimiter "
++ "characters at beginning, middle and end of string");
++ TEST_ALLOC_FAIL {
++ array = nih_str_split (NULL,
++ "\n \r\thello\n\n\r , \n\t\rworld\t \r\n \n",
++ " \t\n\r", TRUE);
++
++ if (test_alloc_failed) {
++ TEST_EQ_P (array, NULL);
++ continue;
++ }
++
++ TEST_ALLOC_SIZE (array, sizeof (char *) * 4);
++ for (i = 0; i < 3; i++)
++ TEST_ALLOC_PARENT (array[i], array);
++
++ TEST_EQ_STR (array[0], "hello");
++ TEST_EQ_STR (array[1], ",");
++ TEST_EQ_STR (array[2], "world");
++ TEST_EQ_P (array[3], NULL);
++
++ nih_free (array);
++ }
+
+ /* Check that we can give an empty string, and end up with a
+ * one-element array that only contains a NULL pointer.
+--- libnih-1.0.3.orig/nih/tests/test_file.c
++++ libnih-1.0.3/nih/tests/test_file.c
+@@ -724,6 +724,25 @@
+ return FALSE;
+ }
+
++/* find only frodo files */
++static int
++my_filter_frodo_file (void *data,
++ const char *path,
++ int is_dir)
++{
++ char *slash;
++
++ if (is_dir)
++ return FALSE;
++
++ slash = strrchr (path, '/');
++ if (strcmp (slash, "/frodo"))
++ return TRUE;
++
++ return FALSE;
++}
++
++
+ static int logger_called = 0;
+
+ static int
+@@ -905,6 +924,48 @@
+ TEST_EQ_STR (v->path, filename);
+
+ nih_free (visited);
++
++ /* Try also inverse filter */
++ TEST_ALLOC_SAFE {
++ visitor_called = 0;
++ visited = nih_list_new (NULL);
++ }
++
++ ret = nih_dir_walk (dirname, my_filter_frodo_file,
++ my_visitor, NULL, &ret);
++
++ TEST_EQ (ret, 0);
++ TEST_EQ (visitor_called, 4);
++
++ v = (Visited *)visited->next;
++ TEST_EQ (v->data, &ret);
++ TEST_EQ_STR (v->dirname, dirname);
++ strcpy (filename, dirname);
++ strcat (filename, "/bar");
++ TEST_EQ_STR (v->path, filename);
++
++ v = (Visited *)v->entry.next;
++ TEST_EQ (v->data, &ret);
++ TEST_EQ_STR (v->dirname, dirname);
++ strcpy (filename, dirname);
++ strcat (filename, "/bar/frodo");
++ TEST_EQ_STR (v->path, filename);
++
++ v = (Visited *)v->entry.next;
++ TEST_EQ (v->data, &ret);
++ TEST_EQ_STR (v->dirname, dirname);
++ strcpy (filename, dirname);
++ strcat (filename, "/baz");
++ TEST_EQ_STR (v->path, filename);
++
++ v = (Visited *)v->entry.next;
++ TEST_EQ (v->data, &ret);
++ TEST_EQ_STR (v->dirname, dirname);
++ strcpy (filename, dirname);
++ strcat (filename, "/frodo");
++ TEST_EQ_STR (v->path, filename);
++
++ nih_free (visited);
+ }
+
+
+--- libnih-1.0.3.orig/debian/control
++++ libnih-1.0.3/debian/control
+@@ -0,0 +1,81 @@
++Source: libnih
++Section: libs
++Priority: required
++Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
++XSBC-Original-Maintainer: Scott James Remnant <scott@netsplit.com>
++Standards-Version: 3.9.4
++Build-Depends: debhelper (>= 9), pkg-config (>= 0.22), libdbus-1-dev (>= 1.4), libexpat1-dev (>= 2.0.0), dbus (>= 1.4), libc6-dev (>= 2.15~) | libc6.1-dev (>= 2.15~),
++ dh-autoreconf, autopoint, dpkg-dev (>= 1.16.1~)
++# To cross build this package also needs: libdbus-1-dev:native (>= 1.4), libexpat1-dev:native (>= 2.0.0)
++# But :native build-deps are not supported yet, so instead one can do
++# $ apt-get build-dep libnih
++# $ apt-get build-dep libnih -aarmhf
++# instead to get all required build-deps
++Vcs-Bzr: lp:ubuntu/libnih
++XSC-Debian-Vcs-Git: git://git.debian.org/git/collab-maint/libnih.git
++XSC-Debian-Vcs-Browser: http://git.debian.org/?p=collab-maint/libnih.git;a=summary
++Homepage: https://launchpad.net/libnih
++
++Package: libnih1
++Architecture: any
++Pre-Depends: ${misc:Pre-Depends}, ${shlibs:Depends}, ${misc:Depends}
++Multi-Arch: same
++Description: NIH Utility Library
++ libnih is a light-weight "standard library" of C functions to ease the
++ development of other libraries and applications, especially those
++ normally found in /lib.
++ .
++ This package contains the shared library.
++
++Package: libnih-dev
++Priority: optional
++Section: libdevel
++Architecture: any
++Multi-Arch: same
++Depends: libnih1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
++Description: NIH Utility Library (development files)
++ libnih is a light-weight "standard library" of C functions to ease the
++ development of other libraries and applications, especially those
++ normally found in /lib.
++ .
++ This package contains the static library and C header files which are
++ needed for developing software using libnih.
++
++Package: libnih-dbus1
++Architecture: any
++Pre-Depends: ${misc:Pre-Depends}
++Depends: libnih1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
++Multi-Arch: same
++Description: NIH D-Bus Bindings Library
++ libnih-dbus is a D-Bus bindings library that integrates with the main
++ loop provided by libnih.
++ .
++ This package contains the shared library.
++
++Package: libnih-dbus-dev
++Priority: optional
++Section: libdevel
++Architecture: any
++Multi-Arch: same
++Depends: libnih-dbus1 (= ${binary:Version}), libnih-dev (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
++Recommends: nih-dbus-tool (= ${binary:Version})
++Description: NIH D-Bus Bindings Library (development files)
++ libnih-dbus is a D-Bus bindings library that integrates with the main
++ loop provided by libnih.
++ .
++ This package contains the static library and C header files which are
++ needed for developing software using libnih-dbus.
++
++Package: nih-dbus-tool
++Section: devel
++Architecture: any
++Multi-Arch: foreign
++Depends: ${shlibs:Depends}, ${misc:Depends}
++Recommends: libnih-dbus-dev (= ${binary:Version})
++Description: NIH D-Bus Binding Tool
++ nih-dbus-tool generates C source code from the D-Bus Introspection XML
++ data provided by most services; either to make implementing the
++ described objects in C programs or to make proxying to the described
++ remote objects easier.
++ .
++ The generated code requires libnih-dbus-dev to be compiled.
+--- libnih-1.0.3.orig/debian/libnih-dev.install
++++ libnih-1.0.3/debian/libnih-dev.install
+@@ -0,0 +1,6 @@
++lib/*/libnih.a
++lib/*/libnih.so
++usr/include/libnih.h
++usr/include/nih
++usr/lib/*/pkgconfig/libnih.pc
++usr/share/aclocal/libnih.m4
+--- libnih-1.0.3.orig/debian/libnih1.docs
++++ libnih-1.0.3/debian/libnih1.docs
+@@ -0,0 +1,3 @@
++AUTHORS
++NEWS
++README
+--- libnih-1.0.3.orig/debian/libnih-dbus1.install
++++ libnih-1.0.3/debian/libnih-dbus1.install
+@@ -0,0 +1 @@
++lib/*/libnih-dbus.so.*
+--- libnih-1.0.3.orig/debian/libnih1.install
++++ libnih-1.0.3/debian/libnih1.install
+@@ -0,0 +1 @@
++lib/*/libnih.so.*
+--- libnih-1.0.3.orig/debian/rules
++++ libnih-1.0.3/debian/rules
+@@ -0,0 +1,54 @@
++#!/usr/bin/make -f
++
++include /usr/share/dpkg/architecture.mk
++
++%:
++ dh $@ --with autoreconf
++
++
++CFLAGS := -Wall -fstack-protector -fPIE $(shell dpkg-buildflags --get CFLAGS)
++LDFLAGS := -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie $(shell dpkg-buildflags --get LDFLAGS)
++
++override_dh_auto_configure:
++ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
++ dh_auto_configure -- CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
++ --libdir=/lib/$(DEB_HOST_MULTIARCH)
++else
++ dh_auto_configure -B build-dbus-tool/ -- CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
++ --libdir=/lib/$(DEB_BUILD_MULTIARCH) \
++ --host=$(DEB_BUILD_GNU_TYPE)
++ dh_auto_build -B build-dbus-tool/ --parallel
++ dh_auto_configure -- CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
++ NIH_DBUS_TOOL=$(CURDIR)/build-dbus-tool/nih-dbus-tool/nih-dbus-tool \
++ --libdir=/lib/$(DEB_HOST_MULTIARCH)
++endif
++
++override_dh_auto_build:
++ dh_auto_build --parallel
++
++override_dh_auto_test:
++ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
++ dh_auto_test --parallel
++endif
++
++override_dh_auto_install:
++ dh_auto_install -- pkgconfigdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)/pkgconfig
++
++override_dh_makeshlibs:
++ dh_makeshlibs -plibnih1 -V 'libnih1 (>= 1.0.0)'
++ dh_makeshlibs -plibnih-dbus1 -V 'libnih-dbus1 (>= 1.0.0)'
++ dh_makeshlibs -Nlibnih1 -Nlibnih-dbus1
++
++override_dh_shlibdeps:
++ dh_shlibdeps
++ sed -i 's/2\.14/2.15/' debian/*.substvars
++ sed -i 's/>= 2.15)/>= 2.15~)/g' debian/*.substvars
++
++
++# Symlink /usr/share/doc directories together
++override_dh_installdocs:
++ dh_installdocs --link-doc=libnih1
++
++override_dh_clean:
++ rm -rf build-dbus-tool/
++ dh_clean
+--- libnih-1.0.3.orig/debian/compat
++++ libnih-1.0.3/debian/compat
+@@ -0,0 +1 @@
++9
+--- libnih-1.0.3.orig/debian/nih-dbus-tool.install
++++ libnih-1.0.3/debian/nih-dbus-tool.install
+@@ -0,0 +1,2 @@
++usr/bin/nih-dbus-tool
++usr/share/man/man1/nih-dbus-tool.1
+--- libnih-1.0.3.orig/debian/copyright
++++ libnih-1.0.3/debian/copyright
+@@ -0,0 +1,18 @@
++This is the Ubuntu package of libnih, the NIH Utility Library.
++
++Copyright © 2009 Canonical Ltd.
++Copyright © 2009 Scott James Remnant <scott@netsplit.com>
++
++Licence:
++
++This program is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License version 2, as
++published by the Free Software Foundation.
++
++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
++General Public License for more details.
++
++On Ubuntu systems, the complete text of the GNU General Public License
++can be found in ‘/usr/share/common-licenses/GPL-2’.
+--- libnih-1.0.3.orig/debian/libnih-dbus1.postinst
++++ libnih-1.0.3/debian/libnih-dbus1.postinst
+@@ -0,0 +1,53 @@
++#!/bin/sh
++
++set -e
++
++if [ "$1" = configure ]; then
++ # A dependent library of Upstart has changed, so restart Upstart
++ # such that it can safely unmount the root filesystem (LP: #740390)
++
++ # Query running version of Upstart, but only when we know
++ # that initctl will work.
++ #
++ # The calculated version string may be the null string if
++ # Upstart is not running (where for example an alternative
++ # init is running outside a chroot environment) or if the
++ # query failed for some reason. However, the version check
++ # below handles a null version string correctly.
++ UPSTART_VERSION_RUNNING=$(initctl version 2>/dev/null |\
++ awk '{print $3}'|tr -d ')' || :)
++
++ if ischroot; then
++ # Do not honour re-exec when requested from within a
++ # chroot since:
++ #
++ # (a) The version of Upstart outside might not support it.
++ # (b) An isolated environment such as a chroot should
++ # not be able to modify its containing environment.
++ #
++ # A sufficiently new Upstart will actually handle a re-exec
++ # request coming from telinit within a chroot correctly (by
++ # doing nothing) but it's simple enough to perform the check
++ # here and save Upstart the effort.
++ :
++ elif dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 1.6.1; then
++ # We are not running inside a chroot and the running version
++ # of Upstart supports stateful re-exec, so we can
++ # restart immediately.
++ #
++ # XXX: Note that the check on the running version must
++ # remain *indefinitely* since it's the only safe way to
++ # know if stateful re-exec is supported: simply checking
++ # packaged version numbers is not sufficient since
++ # the package could be upgraded multiple times without a
++ # reboot.
++ telinit u || :
++ else
++ # Before we shutdown or reboot, we need to re-exec so that we
++ # can safely remount the root filesystem; we can't just do that
++ # here because we lose state.
++ touch /var/run/init.upgraded || :
++ fi
++fi
++
++#DEBHELPER#
+--- libnih-1.0.3.orig/debian/changelog.DEBIAN
++++ libnih-1.0.3/debian/changelog.DEBIAN
+@@ -0,0 +1,118 @@
++libnih (1.0.3-4) unstable; urgency=low
++
++ * Rebuild for new libc to update versioned dependency; this comes from
++ the __abort_msg dependency, dpkg-shlibs needs overriding since this is
++ actually a weak link, but this rebuild fixes things for now.
++ Closes: #625257.
++
++ -- Scott James Remnant <scott@netsplit.com> Mon, 02 May 2011 15:08:33 -0700
++
++libnih (1.0.3-3) unstable; urgency=low
++
++ * New maintainer. Closes: #624442.
++
++ -- Scott James Remnant <scott@netsplit.com> Thu, 28 Apr 2011 14:26:05 -0700
++
++libnih (1.0.3-2) unstable; urgency=low
++
++ * Bump build dependency on libdbus-1-dev and dbus to (>= 1.4) for Unix file
++ descriptor passing support.
++
++ -- Michael Biebl <biebl@debian.org> Thu, 10 Feb 2011 20:25:18 +0100
++
++libnih (1.0.3-1ubuntu1) natty; urgency=low
++
++ * Rebuild with libc6-dev (>= 2.13~).
++
++ -- Matthias Klose <doko@ubuntu.com> Fri, 18 Feb 2011 12:09:29 +0100
++
++libnih (1.0.3-1) unstable; urgency=low
++
++ * New upstream release.
++ * Bump debhelper compatibility level to 8 and update build dependency
++ accordingly.
++
++ -- Michael Biebl <biebl@debian.org> Mon, 07 Feb 2011 22:19:13 +0100
++
++libnih (1.0.2-2) unstable; urgency=low
++
++ * Install library development files to /usr/lib and not /lib.
++ * Remove libtool *.la files as there are no reverse dependencies referencing
++ them.
++ * Bump Standards-Version to 3.9.1. No further changes.
++
++ -- Michael Biebl <biebl@debian.org> Sun, 02 Jan 2011 21:09:40 +0100
++
++libnih (1.0.2-1ubuntu3) natty; urgency=low
++
++ * Disable some tests on ppc64 to build an initial package.
++
++ -- Matthias Klose <doko@ubuntu.com> Thu, 18 Nov 2010 10:59:38 +0100
++
++libnih (1.0.2-1ubuntu2) maverick; urgency=low
++
++ * Re-add -fPIE to the testsuite on armel, removing all armel-specific tests;
++ current gcc-4.4 don't seem affected by the ICE anymore (see LP #398403).
++
++ -- Loïc Minier <loic.minier@linaro.org> Mon, 23 Aug 2010 10:25:31 +0200
++
++libnih (1.0.2-1ubuntu1) maverick; urgency=low
++
++ * Rebuild with libc6-dev (>= 2.12~), after checking that
++ __abort_msg is available with the same signature in eglibc 2.12.
++ * Don't build the testsuite with -fPIE on armel; LP: #398403.
++
++ -- Matthias Klose <doko@ubuntu.com> Sun, 30 May 2010 02:54:56 +0200
++
++libnih (1.0.2-1) unstable; urgency=low
++
++ * Initial upload to Debian. Closes: #585071
++ * Based on the Ubuntu package for Lucid done by Scott James Remnant with the
++ following changes:
++ - Switch packages to priority optional.
++ - Use binary:Version instead of Source-Version.
++ - Bump Standards-Version to 3.8.4.
++ - Add Homepage and Vcs-* fields.
++ - Don't symlink /usr/share/doc directories.
++ - Refer to versioned /usr/share/common-licenses/GPL-2 file in
++ debian/copyright.
++ - List all symbols explicitly instead of using a wildcard and add symbols
++ introduced in 1.0.1.
++ - Use the symbols files to create the correct version info instead of
++ specifying it manually via shlibs.
++ - Switch to source format 3.0 (quilt).
++ - Add watch file to track new upstream releases.
++
++ -- Michael Biebl <biebl@debian.org> Sun, 13 Jun 2010 23:36:52 +0200
++
++libnih (1.0.1-1) lucid; urgency=low
++
++ * New upstream release:
++ - Add missing __nih_* symbols to linker version script so that we
++ can link Upstart's test suite.
++ - Glibc __abort_msg symbol now only linked as a weak symbol.
++
++ -- Scott James Remnant <scott@ubuntu.com> Thu, 04 Feb 2010 14:53:26 -0800
++
++libnih (1.0.0-2build1) lucid; urgency=low
++
++ * Rebuild to pick up relaxed dependency on libc6, after checking that
++ __abort_msg is available with the same signature in eglibc 2.11.
++ LP: #508702.
++
++ -- Matthias Klose <doko@ubuntu.com> Mon, 18 Jan 2010 16:09:13 +0100
++
++libnih (1.0.0-2) lucid; urgency=low
++
++ * debian/control: Add build-dependency on dbus so the test suite can
++ pass on the buildds.
++
++ -- Scott James Remnant <scott@ubuntu.com> Sat, 28 Nov 2009 23:28:27 +0000
++
++libnih (1.0.0-1) lucid; urgency=low
++
++ * First upstream release. Previously this code was included in the
++ upstart, mountall and ureadahead source packages.
++
++ -- Scott James Remnant <scott@ubuntu.com> Sat, 28 Nov 2009 21:14:00 +0000
++
+--- libnih-1.0.3.orig/debian/libnih1.symbols
++++ libnih-1.0.3/debian/libnih1.symbols
+@@ -0,0 +1,2 @@
++libnih.so.1 libnih1 #MINVER#
++ *@LIBNIH_1_0 1.0.0
+--- libnih-1.0.3.orig/debian/libnih-dbus-dev.install
++++ libnih-1.0.3/debian/libnih-dbus-dev.install
+@@ -0,0 +1,5 @@
++lib/*/libnih-dbus.a
++lib/*/libnih-dbus.so
++usr/include/libnih-dbus.h
++usr/include/nih-dbus
++usr/lib/*/pkgconfig/libnih-dbus.pc
+--- libnih-1.0.3.orig/debian/libnih1.postinst
++++ libnih-1.0.3/debian/libnih1.postinst
+@@ -0,0 +1,53 @@
++#!/bin/sh
++
++set -e
++
++if [ "$1" = configure ]; then
++ # A dependent library of Upstart has changed, so restart Upstart
++ # such that it can safely unmount the root filesystem (LP: #740390)
++
++ # Query running version of Upstart, but only when we know
++ # that initctl will work.
++ #
++ # The calculated version string may be the null string if
++ # Upstart is not running (where for example an alternative
++ # init is running outside a chroot environment) or if the
++ # query failed for some reason. However, the version check
++ # below handles a null version string correctly.
++ UPSTART_VERSION_RUNNING=$(initctl version 2>/dev/null |\
++ awk '{print $3}'|tr -d ')' || :)
++
++ if ischroot; then
++ # Do not honour re-exec when requested from within a
++ # chroot since:
++ #
++ # (a) The version of Upstart outside might not support it.
++ # (b) An isolated environment such as a chroot should
++ # not be able to modify its containing environment.
++ #
++ # A sufficiently new Upstart will actually handle a re-exec
++ # request coming from telinit within a chroot correctly (by
++ # doing nothing) but it's simple enough to perform the check
++ # here and save Upstart the effort.
++ :
++ elif dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 1.6.1; then
++ # We are not running inside a chroot and the running version
++ # of Upstart supports stateful re-exec, so we can
++ # restart immediately.
++ #
++ # XXX: Note that the check on the running version must
++ # remain *indefinitely* since it's the only safe way to
++ # know if stateful re-exec is supported: simply checking
++ # packaged version numbers is not sufficient since
++ # the package could be upgraded multiple times without a
++ # reboot.
++ telinit u || :
++ else
++ # Before we shutdown or reboot, we need to re-exec so that we
++ # can safely remount the root filesystem; we can't just do that
++ # here because we lose state.
++ touch /var/run/init.upgraded || :
++ fi
++fi
++
++#DEBHELPER#
+--- libnih-1.0.3.orig/debian/libnih-dbus1.symbols
++++ libnih-1.0.3/debian/libnih-dbus1.symbols
+@@ -0,0 +1,2 @@
++libnih-dbus.so.1 libnih-dbus1 #MINVER#
++ *@LIBNIH_DBUS_1_0 1.0.0
+--- libnih-1.0.3.orig/debian/changelog
++++ libnih-1.0.3/debian/changelog
+@@ -0,0 +1,213 @@
++libnih (1.0.3-4ubuntu16) raring; urgency=low
++
++ * debian/{libnih1.postinst,libnih-dbus1.postinst}: Force an upgrade to
++ restart Upstart (to pick up new package version) if the running
++ instance supports it.
++ * Merge of important fixes from lp:~upstart-devel/libnih/nih
++ (LP: #776532, LP: #777097, LP: #834813, LP: #1123588).
++
++ -- James Hunt <james.hunt@ubuntu.com> Thu, 14 Mar 2013 09:14:22 +0000
++
++libnih (1.0.3-4ubuntu15) raring; urgency=low
++
++ * Enable cross-building, sans adding :native build-dependencies.
++ See comments in debian/control.
++ * Lintian fixes.
++
++ -- Dmitrijs Ledkovs <dmitrij.ledkov@ubuntu.com> Tue, 08 Jan 2013 15:38:58 +0000
++
++libnih (1.0.3-4ubuntu14) raring; urgency=low
++
++ * Update dbus code generator to allow for empty lists for type 'as'.
++ This drops the != NULL check for NULL terminated arrays and moves the
++ iteration loop inside an 'if' statement.
++
++ -- Stéphane Graber <stgraber@ubuntu.com> Thu, 13 Dec 2012 10:00:27 -0500
++
++libnih (1.0.3-4ubuntu13) raring; urgency=low
++
++ [ Petr Lautrbach <plautrba@redhat.com>, Dmitrijs Ledkovs ]
++ * Fallback to lstat, if dirent.d_type is not available (not portable)
++ (LP: #672643) (Closes: #695604)
++
++ -- Dmitrijs Ledkovs <dmitrij.ledkov@ubuntu.com> Tue, 11 Dec 2012 17:26:52 +0000
++
++libnih (1.0.3-4ubuntu12) raring; urgency=low
++
++ * nih/logging.c: Use our own __nih_abort_msg rather than the (e)glibc
++ private symbol __abort_msg to avoid upgrade issues (LP: #997359).
++ * nih/tests/test_logging.c: Update tests for __nih_abort_msg.
++
++ -- James Hunt <james.hunt@ubuntu.com> Thu, 25 Oct 2012 10:57:30 +0100
++
++libnih (1.0.3-4ubuntu11) quantal; urgency=low
++
++ * Addition of debian/libnih-dbus1.postinst and
++ debian/libnih1.postinst to force Upstart re-exec on shutdown
++ to avoid unmounting disks uncleanly (LP: #740390).
++
++ -- James Hunt <james.hunt@ubuntu.com> Wed, 03 Oct 2012 16:49:40 +0100
++
++libnih (1.0.3-4ubuntu10) quantal; urgency=low
++
++ * Update config.guess,sub for aarch64
++
++ -- Wookey <wookey@wookware.org> Mon, 01 Oct 2012 12:57:05 +0100
++
++libnih (1.0.3-4ubuntu9) precise; urgency=low
++
++ * Mark the nih-dbus-tool package Multi-Arch: foreign so it can be used as
++ a build-dependency of upstart when cross-building.
++
++ -- Steve Langasek <steve.langasek@ubuntu.com> Wed, 15 Feb 2012 22:57:50 -0800
++
++libnih (1.0.3-4ubuntu8) precise; urgency=low
++
++ * libnih1 needs a versioned Pre-Depend on libc6 instead of just a Depend,
++ because libc6 itself uses runlevel from the upstart package in its
++ preinst, which in turn uses libnih1, which needs to be loadable (i.e.,
++ its symbol references resolve). We therefore need to ensure that
++ libnih1's dependencies are always unpacked before libnih1 itself is
++ unpacked. While having something further up the stack (such as upstart,
++ or something on top of upstart) being marked Essential: yes and with the
++ necessary pre-depends would let apt handle this for us with its
++ "immediate configuration" support, but for various reasons we don't want
++ to make upstart essential. LP: #508083.
++
++ -- Steve Langasek <steve.langasek@ubuntu.com> Fri, 10 Feb 2012 12:13:25 -0800
++
++libnih (1.0.3-4ubuntu7) precise; urgency=low
++
++ * Relax dependency on libc6.
++
++ -- Matthias Klose <doko@ubuntu.com> Wed, 08 Feb 2012 23:43:21 +0100
++
++libnih (1.0.3-4ubuntu6) precise; urgency=low
++
++ * Rebuild with libc6-dev (>= 2.15~).
++
++ -- Matthias Klose <doko@ubuntu.com> Wed, 08 Feb 2012 21:48:57 +0100
++
++libnih (1.0.3-4ubuntu5) precise; urgency=low
++
++ * Mark libnih-dev and libnih-dbus-dev Multi-Arch: same as well.
++
++ -- Steve Langasek <steve.langasek@ubuntu.com> Sun, 06 Nov 2011 14:45:07 -0800
++
++libnih (1.0.3-4ubuntu4) precise; urgency=low
++
++ * Make libnih1 and libnih-dbus1 installable using multi-arch.
++
++ -- James Hunt <james.hunt@ubuntu.com> Tue, 01 Nov 2011 14:25:09 -0400
++
++libnih (1.0.3-4ubuntu3) precise; urgency=low
++
++ * Build to install with eglibc-2.15.
++
++ -- Matthias Klose <doko@ubuntu.com> Fri, 14 Oct 2011 14:05:03 +0200
++
++libnih (1.0.3-4ubuntu2) oneiric; urgency=low
++
++ * Use dpkg-buildflags to get the build flags.
++ * Build with the default build flags, don't hard-code -Os. LP: #791315.
++
++ -- Matthias Klose <doko@ubuntu.com> Wed, 15 Jun 2011 16:45:42 +0200
++
++libnih (1.0.3-4ubuntu1) oneiric; urgency=low
++
++ * Merge from debian unstable. Retained Ubuntu Build-Depends and Priority.
++
++ -- James Hunt <james.hunt@ubuntu.com> Mon, 23 May 2011 19:28:19 +0100
++
++libnih (1.0.3-1ubuntu1) natty; urgency=low
++
++ * Rebuild with libc6-dev (>= 2.13~).
++
++ -- Matthias Klose <doko@ubuntu.com> Fri, 18 Feb 2011 12:09:29 +0100
++
++libnih (1.0.3-1) natty; urgency=low
++
++ * New upstream release:
++ - Added support for passing file descriptors over D-Bus to nih-dbus-tool
++
++ -- Scott James Remnant <scott@ubuntu.com> Thu, 23 Dec 2010 22:28:24 +0000
++
++libnih (1.0.2-2) natty; urgency=low
++
++ * Revert the previous upload. It is never acceptable to simply disable
++ tests, especially when it turns out that the test that was disabled
++ was failing because there was a serious bug that could cause kernel
++ panics for people on boot.
++
++ Test suites are here for a reason.
++
++ * Bumped libdbus Build-Dependency to the version with the bug fix that
++ caused the test suite to fail.
++
++ -- Scott James Remnant <scott@ubuntu.com> Wed, 08 Dec 2010 19:40:15 +0000
++
++libnih (1.0.2-1ubuntu3) natty; urgency=low
++
++ * Disable some tests on ppc64 to build an initial package.
++
++ -- Matthias Klose <doko@ubuntu.com> Thu, 18 Nov 2010 10:59:38 +0100
++
++libnih (1.0.2-1ubuntu2) maverick; urgency=low
++
++ * Re-add -fPIE to the testsuite on armel, removing all armel-specific tests;
++ current gcc-4.4 don't seem affected by the ICE anymore (see LP #398403).
++
++ -- Loïc Minier <loic.minier@linaro.org> Mon, 23 Aug 2010 10:25:31 +0200
++
++libnih (1.0.2-1ubuntu1) maverick; urgency=low
++
++ * Rebuild with libc6-dev (>= 2.12~), after checking that
++ __abort_msg is available with the same signature in eglibc 2.12.
++ * Don't build the testsuite with -fPIE on armel; LP: #398403.
++
++ -- Matthias Klose <doko@ubuntu.com> Sun, 30 May 2010 02:54:56 +0200
++
++libnih (1.0.2-1) maverick; urgency=low
++
++ * New upstream release:
++ - Rename AC_COPYRIGHT to NIH_COPYRIGHT to avoid conflict with other
++ packages.
++ - Add serial to libnih.m4
++ - Add NIH_WITH_LOCAL_LIBNIH macro.
++
++ * Fix use of ${Source-Version} to be ${binary:Version}
++ * Add debian/source/format with "1.0" to be future compatible.
++ * Bump standards version.
++
++ -- Scott James Remnant <scott@ubuntu.com> Tue, 27 Apr 2010 10:49:55 -0700
++
++libnih (1.0.1-1) lucid; urgency=low
++
++ * New upstream release:
++ - Add missing __nih_* symbols to linker version script so that we
++ can link Upstart's test suite.
++ - Glibc __abort_msg symbol now only linked as a weak symbol.
++
++ -- Scott James Remnant <scott@ubuntu.com> Thu, 04 Feb 2010 14:53:26 -0800
++
++libnih (1.0.0-2build1) lucid; urgency=low
++
++ * Rebuild to pick up relaxed dependency on libc6, after checking that
++ __abort_msg is available with the same signature in eglibc 2.11.
++ LP: #508702.
++
++ -- Matthias Klose <doko@ubuntu.com> Mon, 18 Jan 2010 16:09:13 +0100
++
++libnih (1.0.0-2) lucid; urgency=low
++
++ * debian/control: Add build-dependency on dbus so the test suite can
++ pass on the buildds.
++
++ -- Scott James Remnant <scott@ubuntu.com> Sat, 28 Nov 2009 23:28:27 +0000
++
++libnih (1.0.0-1) lucid; urgency=low
++
++ * First upstream release. Previously this code was included in the
++ upstart, mountall and ureadahead source packages.
++
++ -- Scott James Remnant <scott@ubuntu.com> Sat, 28 Nov 2009 21:14:00 +0000
+--- libnih-1.0.3.orig/debian/source/format
++++ libnih-1.0.3/debian/source/format
+@@ -0,0 +1 @@
++1.0
+--- libnih-1.0.3.orig/nih-dbus/dbus_proxy.h
++++ libnih-1.0.3/nih-dbus/dbus_proxy.h
+@@ -146,14 +146,14 @@
+ const char *name, const char *path,
+ NihDBusLostHandler lost_handler,
+ void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NihDBusProxySignal *nih_dbus_proxy_connect (NihDBusProxy *proxy,
+ const NihDBusInterface *interface,
+ const char *name,
+ NihDBusSignalHandler handler,
+ void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus/dbus_object.h
++++ libnih-1.0.3/nih-dbus/dbus_object.h
+@@ -61,8 +61,7 @@
+ DBusConnection *connection,
+ const char *path,
+ const NihDBusInterface **interfaces,
+- void *data)
+- __attribute__ ((malloc));
++ void *data);
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus/dbus_util.h
++++ libnih-1.0.3/nih-dbus/dbus_util.h
+@@ -26,7 +26,7 @@
+ NIH_BEGIN_EXTERN
+
+ char *nih_dbus_path (const void *parent, const char *root, ...)
+- __attribute__ ((sentinel, warn_unused_result, malloc));
++ __attribute__ ((sentinel, warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus/dbus_pending_data.h
++++ libnih-1.0.3/nih-dbus/dbus_pending_data.h
+@@ -104,7 +104,7 @@
+ NihDBusReplyHandler handler,
+ NihDBusErrorHandler error_handler,
+ void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus/dbus_proxy.c
++++ libnih-1.0.3/nih-dbus/dbus_proxy.c
+@@ -46,11 +46,11 @@
+ __attribute__ ((warn_unused_result));
+ static char *nih_dbus_proxy_name_rule (const void *parent,
+ NihDBusProxy *proxy)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static int nih_dbus_proxy_signal_destroy (NihDBusProxySignal *proxied);
+ static char *nih_dbus_proxy_signal_rule (const void *parent,
+ NihDBusProxySignal *proxied)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ /* Prototypes for handler functions */
+ static DBusHandlerResult nih_dbus_proxy_name_owner_changed (DBusConnection *connection,
+--- libnih-1.0.3.orig/nih-dbus-tool/symbol.c
++++ libnih-1.0.3/nih-dbus-tool/symbol.c
+@@ -40,10 +40,10 @@
+ /* Prototypes for static functions */
+ static char *symbol_strcat_interface (char **str, const void *parent,
+ const char *format, ...)
+- __attribute__ ((format (printf, 3, 4), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 3, 4), warn_unused_result));
+ static char *symbol_strcat_title (char **str, const void *parent,
+ const char *format, ...)
+- __attribute__ ((format (printf, 3, 4), warn_unused_result, malloc));
++ __attribute__ ((format (printf, 3, 4), warn_unused_result));
+
+
+ /**
+--- libnih-1.0.3.orig/nih-dbus-tool/demarshal.h
++++ libnih-1.0.3/nih-dbus-tool/demarshal.h
+@@ -37,7 +37,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/symbol.h
++++ libnih-1.0.3/nih-dbus-tool/symbol.h
+@@ -28,22 +28,22 @@
+ int symbol_valid (const char *symbol);
+
+ char *symbol_from_name (const void *parent, const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char *symbol_impl (const void *parent, const char *prefix,
+ const char *interface_name, const char *name,
+ const char *postfix)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char *symbol_extern (const void *parent, const char *prefix,
+ const char *interface_symbol, const char *midfix,
+ const char *symbol, const char *postfix)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char *symbol_typedef (const void *parent, const char *prefix,
+ const char *interface_symbol, const char *midfix,
+ const char *symbol, const char *postfix)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/output.h
++++ libnih-1.0.3/nih-dbus-tool/output.h
+@@ -35,9 +35,9 @@
+ __attribute__ ((warn_unused_result));
+
+ char *output_preamble (const void *parent, const char *path)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char *output_sentinel (const void *parent, const char *path)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/parse.h
++++ libnih-1.0.3/nih-dbus-tool/parse.h
+@@ -95,7 +95,7 @@
+
+ ParseStack *parse_stack_push (const void *parent, NihList *stack,
+ ParseStackType type, void *data)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ ParseStack *parse_stack_top (NihList *stack);
+
+ void parse_start_tag (XML_Parser xmlp, const char *tag,
+@@ -103,7 +103,7 @@
+ void parse_end_tag (XML_Parser xmlp, const char *tag);
+
+ Node * parse_xml (const void *parent, int fd, const char *filename)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/type.h
++++ libnih-1.0.3/nih-dbus-tool/type.h
+@@ -94,43 +94,43 @@
+
+ char * type_of (const void * parent,
+ DBusSignatureIter *iter)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ TypeVar * type_var_new (const void *parent, const char *type,
+ const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_var_to_string (const void *parent, TypeVar *var)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_var_layout (const void *parent, NihList *vars)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ TypeFunc * type_func_new (const void *parent, const char *type,
+ const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_func_to_string (const void *parent, TypeFunc *func)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_func_to_typedef (const void *parent, TypeFunc *func)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_func_layout (const void *parent, NihList *funcs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ TypeStruct *type_struct_new (const void *parent, const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_struct_to_string (const void *parent, TypeStruct *structure)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * type_to_const (char **type, const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_to_pointer (char **type, const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_to_static (char **type, const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * type_to_extern (char **type, const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * type_strcat_assert (char **block, const void *parent,
+ TypeVar *var, TypeVar *prev, TypeVar *next)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/argument.h
++++ libnih-1.0.3/nih-dbus-tool/argument.h
+@@ -61,7 +61,7 @@
+
+ Argument *argument_new (const void *parent, const char *name,
+ const char *type, NihDBusArgDir direction)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int argument_start_tag (XML_Parser xmlp, const char *tag,
+ char * const *attr)
+--- libnih-1.0.3.orig/nih-dbus-tool/indent.h
++++ libnih-1.0.3/nih-dbus-tool/indent.h
+@@ -26,9 +26,9 @@
+ NIH_BEGIN_EXTERN
+
+ char *indent (char **str, const void *parent, int level)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char *comment (char **str, const void *parent)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/main.c
++++ libnih-1.0.3/nih-dbus-tool/main.c
+@@ -52,10 +52,10 @@
+ /* Prototypes for local functions */
+ char *source_file_path (const void *parent, const char *output_path,
+ const char *filename)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char *header_file_path (const void *parent, const char *output_path,
+ const char *filename)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+
+ /**
+--- libnih-1.0.3.orig/nih-dbus-tool/signal.h
++++ libnih-1.0.3/nih-dbus-tool/signal.h
+@@ -58,7 +58,7 @@
+ int signal_name_valid (const char *name);
+
+ Signal * signal_new (const void *parent, const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int signal_start_tag (XML_Parser xmlp, const char *tag,
+ char * const *attr)
+@@ -76,18 +76,18 @@
+ char * signal_object_function (const void *parent, const char *prefix,
+ Interface *interface, Signal *signal,
+ NihList *prototypes, NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * signal_proxy_function (const void *parent, const char *prefix,
+ Interface *interface, Signal *signal,
+ NihList *prototypes, NihList *typedefs,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * signal_args_array (const void *parent, const char *prefix,
+ Interface *interface, Signal *signal,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/marshal.c
++++ libnih-1.0.3/nih-dbus-tool/marshal.c
+@@ -49,7 +49,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static char *marshal_array (const void *parent,
+ DBusSignatureIter *iter,
+ const char *iter_name, const char *name,
+@@ -58,7 +58,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static char *marshal_struct (const void *parent,
+ DBusSignatureIter *iter,
+ const char *iter_name, const char *name,
+@@ -67,7 +67,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+
+ /**
+@@ -364,6 +364,7 @@
+ nih_local TypeVar *element_len_var = NULL;
+ nih_local char * block = NULL;
+ nih_local char * vars_block = NULL;
++ nih_local char * loop_block = NULL;
+
+ nih_assert (iter != NULL);
+ nih_assert (iter_name != NULL);
+@@ -448,7 +449,7 @@
+ nih_list_add (locals, &array_iter_var->entry);
+
+ if (dbus_type_is_fixed (element_type)) {
+- if (! nih_strcat_sprintf (&code, parent,
++ if (! nih_strcat_sprintf (&loop_block, parent,
+ "for (size_t %s = 0; %s < %s; %s++) {\n",
+ loop_name, loop_name, len_name, loop_name)) {
+ nih_free (code);
+@@ -456,6 +457,12 @@
+ }
+ } else {
+ if (! nih_strcat_sprintf (&code, parent,
++ "if (%s) {\n",
++ name)) {
++ nih_free (code);
++ return NULL;
++ }
++ if (! nih_strcat_sprintf (&loop_block, parent,
+ "for (size_t %s = 0; %s[%s]; %s++) {\n",
+ loop_name, name, loop_name, loop_name)) {
+ nih_free (code);
+@@ -576,7 +583,7 @@
+ }
+
+
+- if (! nih_strcat_sprintf (&code, parent,
++ if (! nih_strcat_sprintf (&loop_block, parent,
+ "%s"
+ "\n"
+ "%s"
+@@ -590,9 +597,34 @@
+ }
+
+ /* Close the container again */
++ if (! nih_strcat_sprintf (&loop_block, parent,
++ "}\n")) {
++ nih_free (code);
++ return NULL;
++ }
++
++ if (dbus_type_is_fixed (element_type)) {
++ if (! nih_strcat_sprintf (&code, parent,
++ "%s\n", loop_block)) {
++ nih_free (code);
++ return NULL;
++ }
++ }
++ else {
++ if (! indent (&loop_block, NULL, 1)) {
++ nih_free (code);
++ return NULL;
++ }
++
++ if (! nih_strcat_sprintf (&code, parent,
++ "%s"
++ "}\n\n", loop_block)) {
++ nih_free (code);
++ return NULL;
++ }
++ }
++
+ if (! nih_strcat_sprintf (&code, parent,
+- "}\n"
+- "\n"
+ "if (! dbus_message_iter_close_container (&%s, &%s)) {\n"
+ "%s"
+ "}\n",
+--- libnih-1.0.3.orig/nih-dbus-tool/demarshal.c
++++ libnih-1.0.3/nih-dbus-tool/demarshal.c
+@@ -51,7 +51,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static char *demarshal_array (const void *parent,
+ DBusSignatureIter *iter,
+ const char *parent_name,
+@@ -62,7 +62,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ static char *demarshal_struct (const void *parent,
+ DBusSignatureIter *iter,
+ const char *parent_name,
+@@ -73,7 +73,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+
+ /**
+--- libnih-1.0.3.orig/nih-dbus-tool/interface.h
++++ libnih-1.0.3/nih-dbus-tool/interface.h
+@@ -61,7 +61,7 @@
+
+ Interface *interface_new (const void *parent,
+ const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int interface_start_tag (XML_Parser xmlp,
+ const char *tag,
+@@ -81,26 +81,26 @@
+ Interface *interface,
+ int with_handlers,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * interface_signals_array (const void *parent,
+ const char *prefix,
+ Interface *interface,
+ int with_filters,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * interface_properties_array (const void *parent,
+ const char *prefix,
+ Interface *interface,
+ int with_handlers,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * interface_struct (const void *parent,
+ const char *prefix,
+ Interface *interface,
+ int object,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+
+ char * interface_proxy_get_all_function (const void *parent,
+@@ -108,7 +108,7 @@
+ Interface *interface,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * interface_proxy_get_all_notify_function (const void *parent,
+ const char *prefix,
+@@ -116,14 +116,14 @@
+ NihList *prototypes,
+ NihList *typedefs,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * interface_proxy_get_all_sync_function (const void *parent,
+ const char *prefix,
+ Interface *interface,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/method.h
++++ libnih-1.0.3/nih-dbus-tool/method.h
+@@ -62,7 +62,7 @@
+ int method_name_valid (const char *name);
+
+ Method * method_new (const void *parent, const char *name)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int method_start_tag (XML_Parser xmlp, const char *tag,
+ char * const *attr)
+@@ -82,33 +82,33 @@
+ Interface *interface, Method *method,
+ NihList *prototypes, NihList *handlers,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * method_reply_function (const void *parent, const char *prefix,
+ Interface *interface, Method *method,
+ NihList *prototypes, NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * method_proxy_function (const void *parent, const char *prefix,
+ Interface *interface, Method *method,
+ NihList *prototypes, NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * method_proxy_notify_function (const void *parent, const char *prefix,
+ Interface *interface, Method *method,
+ NihList *prototypes, NihList *typedefs,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * method_proxy_sync_function (const void *parent, const char *prefix,
+ Interface *interface, Method *method,
+ NihList *prototypes, NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * method_args_array (const void *parent, const char *prefix,
+ Interface *interface, Method *method,
+ NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/node.h
++++ libnih-1.0.3/nih-dbus-tool/node.h
+@@ -47,7 +47,7 @@
+ int node_path_valid (const char *name);
+
+ Node * node_new (const void *parent, const char *path)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int node_start_tag (XML_Parser xmlp, const char *tag,
+ char * const *attr)
+@@ -59,18 +59,18 @@
+
+ char * node_interfaces_array (const void *parent, const char *prefix,
+ Node *node, int object, NihList *prototypes)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * node_object_functions (const void *parent, const char *prefix,
+ Node *node,
+ NihList *prototypes, NihList *handlers,
+ NihList *structs, NihList *externs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * node_proxy_functions (const void *parent, const char *prefix,
+ Node *node,
+ NihList *prototypes, NihList *structs,
+ NihList *typedefs, NihList *externs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/marshal.h
++++ libnih-1.0.3/nih-dbus-tool/marshal.h
+@@ -35,7 +35,7 @@
+ const char *prefix, const char *interface_symbol,
+ const char *member_symbol, const char *symbol,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/type.c
++++ libnih-1.0.3/nih-dbus-tool/type.c
+@@ -1101,7 +1101,7 @@
+ nih_assert (block != NULL);
+ nih_assert (var != NULL);
+
+- if (! strchr (var->type, '*'))
++ if (! strchr (var->type, '*') || ! strcmp (var->type, "char * const *"))
+ return *block;
+
+ if (next && (! strcmp (next->type, "size_t"))) {
+--- libnih-1.0.3.orig/nih-dbus-tool/property.h
++++ libnih-1.0.3/nih-dbus-tool/property.h
+@@ -65,7 +65,7 @@
+ const char *name,
+ const char *type,
+ NihDBusAccess access)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ int property_start_tag (XML_Parser xmlp, const char *tag,
+ char * const *attr)
+@@ -88,7 +88,7 @@
+ NihList *prototypes,
+ NihList *handlers,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * property_object_set_function (const void *parent,
+ const char *prefix,
+ Interface *interface,
+@@ -96,7 +96,7 @@
+ NihList *prototypes,
+ NihList *handlers,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * property_proxy_get_function (const void *parent,
+ const char *prefix,
+@@ -104,7 +104,7 @@
+ Property *property,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * property_proxy_get_notify_function (const void *parent,
+ const char *prefix,
+ Interface *interface,
+@@ -112,7 +112,7 @@
+ NihList *prototypes,
+ NihList *typedefs,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * property_proxy_set_function (const void *parent,
+ const char *prefix,
+@@ -120,7 +120,7 @@
+ Property *property,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * property_proxy_set_notify_function (const void *parent,
+ const char *prefix,
+ Interface *interface,
+@@ -128,7 +128,7 @@
+ NihList *prototypes,
+ NihList *typedefs,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ char * property_proxy_get_sync_function (const void *parent,
+ const char *prefix,
+@@ -136,14 +136,14 @@
+ Property *property,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ char * property_proxy_set_sync_function (const void *parent,
+ const char *prefix,
+ Interface *interface,
+ Property *property,
+ NihList *prototypes,
+ NihList *structs)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ NIH_END_EXTERN
+
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_main.c
++++ libnih-1.0.3/nih-dbus-tool/tests/test_main.c
+@@ -100,10 +100,10 @@
+
+ extern char *source_file_path (const void *parent, const char *output_path,
+ const char *filename)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+ extern char *header_file_path (const void *parent, const char *output_path,
+ const char *filename)
+- __attribute__ ((warn_unused_result, malloc));
++ __attribute__ ((warn_unused_result));
+
+ void
+ test_source_file_path (void)
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c
++++ libnih-1.0.3/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c
+@@ -12524,6 +12524,7 @@
+ dbus_message_iter_init (reply, &iter);
+
+ dbus_message_iter_get_basic (&iter, &str_value);
++ TEST_NE (str_value[0], '\0');
+ TEST_TRUE (strchr ("0123456789", str_value[0]));
+
+ dbus_message_unref (reply);
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_marshal.c
++++ libnih-1.0.3/nih-dbus-tool/tests/test_marshal.c
+@@ -1479,39 +1479,41 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_i = 0; value[value_i]; value_i++) {\n"
+- "\tDBusMessageIter value_element_iter;\n"
+- "\tconst int16_t * value_element;\n"
+- "\tsize_t value_element_len;\n"
++ "if (value) {\n"
++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n"
++ "\t\tDBusMessageIter value_element_iter;\n"
++ "\t\tconst int16_t * value_element;\n"
++ "\t\tsize_t value_element_len;\n"
+ "\n"
+- "\tvalue_element = value[value_i];\n"
+- "\tvalue_element_len = value_len[value_i];\n"
++ "\t\tvalue_element = value[value_i];\n"
++ "\t\tvalue_element_len = value_len[value_i];\n"
+ "\n"
+
+- "\t/* Marshal an array onto the message */\n"
+- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"n\", &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal an array onto the message */\n"
++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"n\", &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tfor (size_t value_element_i = 0; value_element_i < value_element_len; value_element_i++) {\n"
+- "\t\tint16_t value_element_element;\n"
++ "\t\tfor (size_t value_element_i = 0; value_element_i < value_element_len; value_element_i++) {\n"
++ "\t\t\tint16_t value_element_element;\n"
+ "\n"
+- "\t\tvalue_element_element = value_element[value_element_i];\n"
++ "\t\t\tvalue_element_element = value_element[value_element_i];\n"
+ "\n"
+- "\t\t/* Marshal a int16_t onto the message */\n"
+- "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_INT16, &value_element_element)) {\n"
+- "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\t/* Marshal a int16_t onto the message */\n"
++ "\t\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_INT16, &value_element_element)) {\n"
++ "\t\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\t\treturn -1;\n"
++ "\t\t\t}\n"
++ "\t\t}\n"
++ "\n"
++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+ "\t\t\treturn -1;\n"
+ "\t\t}\n"
+- "\t}\n"
+- "\n"
+- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
+
++ "\t}\n"
+ "}\n"
+ "\n"
+ "if (! dbus_message_iter_close_container (&iter, &value_iter)) {\n"
+@@ -1766,15 +1768,17 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_i = 0; value[value_i]; value_i++) {\n"
+- "\tconst char *value_element;\n"
++ "if (value) {\n"
++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n"
++ "\t\tconst char *value_element;\n"
+ "\n"
+- "\tvalue_element = value[value_i];\n"
++ "\t\tvalue_element = value[value_i];\n"
+ "\n"
+- "\t/* Marshal a char * onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_element)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
++ "\t\t/* Marshal a char * onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_element)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+@@ -1933,35 +1937,39 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_i = 0; value[value_i]; value_i++) {\n"
+- "\tDBusMessageIter value_element_iter;\n"
+- "\tchar * const * value_element;\n"
++ "if (value) {\n"
++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n"
++ "\t\tDBusMessageIter value_element_iter;\n"
++ "\t\tchar * const * value_element;\n"
+ "\n"
+- "\tvalue_element = value[value_i];\n"
++ "\t\tvalue_element = value[value_i];\n"
+ "\n"
+- "\t/* Marshal an array onto the message */\n"
+- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"s\", &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
+- "\n"
+- "\tfor (size_t value_element_i = 0; value_element[value_element_i]; value_element_i++) {\n"
+- "\t\tconst char *value_element_element;\n"
++ "\t\t/* Marshal an array onto the message */\n"
++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"s\", &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\t\tvalue_element_element = value_element[value_element_i];\n"
++ "\t\tif (value_element) {\n"
++ "\t\t\tfor (size_t value_element_i = 0; value_element[value_element_i]; value_element_i++) {\n"
++ "\t\t\t\tconst char *value_element_element;\n"
++ "\n"
++ "\t\t\t\tvalue_element_element = value_element[value_element_i];\n"
++ "\n"
++ "\t\t\t\t/* Marshal a char * onto the message */\n"
++ "\t\t\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_element)) {\n"
++ "\t\t\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\t\t\treturn -1;\n"
++ "\t\t\t\t}\n"
++ "\t\t\t}\n"
++ "\t\t}\n"
+ "\n"
+- "\t\t/* Marshal a char * onto the message */\n"
+- "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_element)) {\n"
+- "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+ "\t\t\treturn -1;\n"
+ "\t\t}\n"
+ "\t}\n"
+- "\n"
+- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
+ "}\n"
+ "\n"
+ "if (! dbus_message_iter_close_container (&iter, &value_iter)) {\n"
+@@ -2194,16 +2202,18 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_item2_i = 0; value_item2[value_item2_i]; value_item2_i++) {\n"
+- "\tconst char *value_item2_element;\n"
++ "if (value_item2) {\n"
++ "\tfor (size_t value_item2_i = 0; value_item2[value_item2_i]; value_item2_i++) {\n"
++ "\t\tconst char *value_item2_element;\n"
+ "\n"
+- "\tvalue_item2_element = value_item2[value_item2_i];\n"
++ "\t\tvalue_item2_element = value_item2[value_item2_i];\n"
+ "\n"
+- "\t/* Marshal a char * onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_item2_iter, DBUS_TYPE_STRING, &value_item2_element)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_item2_iter);\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
++ "\t\t/* Marshal a char * onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_item2_iter, DBUS_TYPE_STRING, &value_item2_element)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_item2_iter);\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+@@ -2642,41 +2652,43 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_i = 0; value[value_i]; value_i++) {\n"
+- "\tDBusMessageIter value_element_iter;\n"
+- "\tconst char * value_element_item0;\n"
+- "\tuint32_t value_element_item1;\n"
+- "\tconst MyStructArrayValueElement *value_element;\n"
++ "if (value) {\n"
++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n"
++ "\t\tDBusMessageIter value_element_iter;\n"
++ "\t\tconst char * value_element_item0;\n"
++ "\t\tuint32_t value_element_item1;\n"
++ "\t\tconst MyStructArrayValueElement *value_element;\n"
+ "\n"
+- "\tvalue_element = value[value_i];\n"
++ "\t\tvalue_element = value[value_i];\n"
+ "\n"
+- "\t/* Marshal a structure onto the message */\n"
+- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_STRUCT, NULL, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a structure onto the message */\n"
++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_STRUCT, NULL, &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tvalue_element_item0 = value_element->item0;\n"
++ "\t\tvalue_element_item0 = value_element->item0;\n"
+ "\n"
+- "\t/* Marshal a char * onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a char * onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tvalue_element_item1 = value_element->item1;\n"
++ "\t\tvalue_element_item1 = value_element->item1;\n"
+ "\n"
+- "\t/* Marshal a uint32_t onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a uint32_t onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+@@ -2912,41 +2924,43 @@
+ "\treturn -1;\n"
+ "}\n"
+ "\n"
+- "for (size_t value_i = 0; value[value_i]; value_i++) {\n"
+- "\tDBusMessageIter value_element_iter;\n"
+- "\tconst char * value_element_item0;\n"
+- "\tuint32_t value_element_item1;\n"
+- "\tconst MyDictEntryArrayValueElement *value_element;\n"
++ "if (value) {\n"
++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n"
++ "\t\tDBusMessageIter value_element_iter;\n"
++ "\t\tconst char * value_element_item0;\n"
++ "\t\tuint32_t value_element_item1;\n"
++ "\t\tconst MyDictEntryArrayValueElement *value_element;\n"
+ "\n"
+- "\tvalue_element = value[value_i];\n"
++ "\t\tvalue_element = value[value_i];\n"
+ "\n"
+- "\t/* Marshal a structure onto the message */\n"
+- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_DICT_ENTRY, NULL, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a structure onto the message */\n"
++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_DICT_ENTRY, NULL, &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tvalue_element_item0 = value_element->item0;\n"
++ "\t\tvalue_element_item0 = value_element->item0;\n"
+ "\n"
+- "\t/* Marshal a char * onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a char * onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tvalue_element_item1 = value_element->item1;\n"
++ "\t\tvalue_element_item1 = value_element->item1;\n"
+ "\n"
+- "\t/* Marshal a uint32_t onto the message */\n"
+- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
+- "\t}\n"
++ "\t\t/* Marshal a uint32_t onto the message */\n"
++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\n"
+- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
+- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
+- "\t\treturn -1;\n"
++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n"
++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n"
++ "\t\t\treturn -1;\n"
++ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_proxy.c
++++ libnih-1.0.3/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_proxy.c
+@@ -27359,6 +27359,7 @@
+ TEST_TRUE (unix_fd_to_str_replied);
+
+ TEST_EQ_P (last_data, parent);
++ TEST_NE (last_str_value[0], '\0');
+ TEST_TRUE (strchr ("0123456789", last_str_value[0]));
+ TEST_ALLOC_PARENT (last_str_value, parent);
+
+@@ -27673,6 +27674,7 @@
+
+ TEST_EQ (ret, 0);
+
++ TEST_NE (str_value[0], '\0');
+ TEST_TRUE (strchr ("0123456789", str_value[0]));
+ TEST_ALLOC_PARENT (str_value, parent);
+
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_property.c
++++ libnih-1.0.3/nih-dbus-tool/tests/test_property.c
+@@ -8733,7 +8733,7 @@
+ TypeVar * var;
+ NihListEntry * attrib;
+ NihDBusProxy * proxy = NULL;
+- void * parent = NULL;
++ void * parent __attribute__((unused)) = NULL;
+ pid_t pid = -1;
+ int status;
+ DBusMessage * method_call;
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_object_function_standard.c
++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_standard.c
+@@ -136,17 +136,19 @@
+ goto enomem;
+ }
+
+- for (size_t output_i = 0; output[output_i]; output_i++) {
+- const char *output_element;
++ if (output) {
++ for (size_t output_i = 0; output[output_i]; output_i++) {
++ const char *output_element;
+
+- output_element = output[output_i];
++ output_element = output[output_i];
+
+- /* Marshal a char * onto the message */
+- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
+- dbus_message_iter_abandon_container (&iter, &output_iter);
+- dbus_message_unref (reply);
+- reply = NULL;
+- goto enomem;
++ /* Marshal a char * onto the message */
++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
++ dbus_message_iter_abandon_container (&iter, &output_iter);
++ dbus_message_unref (reply);
++ reply = NULL;
++ goto enomem;
++ }
+ }
+ }
+
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_reply_function_standard.c
++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_standard.c
+@@ -7,7 +7,6 @@
+ DBusMessageIter output_iter;
+
+ nih_assert (message != NULL);
+- nih_assert (output != NULL);
+
+ /* If the sender doesn't care about a reply, don't bother wasting
+ * effort constructing and sending one.
+@@ -28,16 +27,18 @@
+ return -1;
+ }
+
+- for (size_t output_i = 0; output[output_i]; output_i++) {
+- const char *output_element;
+-
+- output_element = output[output_i];
+-
+- /* Marshal a char * onto the message */
+- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
+- dbus_message_iter_abandon_container (&iter, &output_iter);
+- dbus_message_unref (reply);
+- return -1;
++ if (output) {
++ for (size_t output_i = 0; output[output_i]; output_i++) {
++ const char *output_element;
++
++ output_element = output[output_i];
++
++ /* Marshal a char * onto the message */
++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
++ dbus_message_iter_abandon_container (&iter, &output_iter);
++ dbus_message_unref (reply);
++ return -1;
++ }
+ }
+ }
+
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_reply_function_deprecated.c
++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_deprecated.c
+@@ -7,7 +7,6 @@
+ DBusMessageIter output_iter;
+
+ nih_assert (message != NULL);
+- nih_assert (output != NULL);
+
+ /* If the sender doesn't care about a reply, don't bother wasting
+ * effort constructing and sending one.
+@@ -28,16 +27,18 @@
+ return -1;
+ }
+
+- for (size_t output_i = 0; output[output_i]; output_i++) {
+- const char *output_element;
+-
+- output_element = output[output_i];
+-
+- /* Marshal a char * onto the message */
+- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
+- dbus_message_iter_abandon_container (&iter, &output_iter);
+- dbus_message_unref (reply);
+- return -1;
++ if (output) {
++ for (size_t output_i = 0; output[output_i]; output_i++) {
++ const char *output_element;
++
++ output_element = output[output_i];
++
++ /* Marshal a char * onto the message */
++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
++ dbus_message_iter_abandon_container (&iter, &output_iter);
++ dbus_message_unref (reply);
++ return -1;
++ }
+ }
+ }
+
+--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_object_function_no_input.c
++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_no_input.c
+@@ -88,17 +88,19 @@
+ goto enomem;
+ }
+
+- for (size_t output_i = 0; output[output_i]; output_i++) {
+- const char *output_element;
++ if (output) {
++ for (size_t output_i = 0; output[output_i]; output_i++) {
++ const char *output_element;
+
+- output_element = output[output_i];
++ output_element = output[output_i];
+
+- /* Marshal a char * onto the message */
+- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
+- dbus_message_iter_abandon_container (&iter, &output_iter);
+- dbus_message_unref (reply);
+- reply = NULL;
+- goto enomem;
++ /* Marshal a char * onto the message */
++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) {
++ dbus_message_iter_abandon_container (&iter, &output_iter);
++ dbus_message_unref (reply);
++ reply = NULL;
++ goto enomem;
++ }
+ }
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libnih/libnih_1.0.3.bb b/meta-openembedded/meta-oe/recipes-support/libnih/libnih_1.0.3.bb
new file mode 100644
index 000000000..3e35f4d1f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libnih/libnih_1.0.3.bb
@@ -0,0 +1,38 @@
+# Copyright (c) 2013 LG Electronics, Inc.
+
+SUMMARY = "libnih library"
+HOMEPAGE = "https://launchpad.net/libnih"
+DESCRIPTION = "libnih is a small library for C application development \
+ containing functions that, despite its name, are not implemented \
+ elsewhere in the standard library set. \
+ \
+ libnih is roughly equivalent to other C libraries such as glib, \
+ except that its focus is on a small size and intended for \
+ applications that sit very low in the software stack, especially \
+ outside of /usr. \
+ \
+ It expressly does not reimplement functions that already exist in \
+ libraries ordinarily shipped in /lib such libc6, and does not do \
+ foolish things like invent arbitrary typedefs for perfectly good C types."
+
+SECTION = "libs"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "dbus libnih-native"
+DEPENDS_class-native = "dbus-native"
+
+SRC_URI = "https://launchpad.net/${BPN}/1.0/${PV}/+download/${BP}.tar.gz \
+ file://libnih_1.0.3-4ubuntu16.patch \
+ file://0001-signal.c-SIGCLD-and-SIGCHILD-are-same-on-sytem-V-sys.patch \
+ "
+
+SRC_URI[md5sum] = "db7990ce55e01daffe19006524a1ccb0"
+SRC_URI[sha256sum] = "897572df7565c0a90a81532671e23c63f99b4efde2eecbbf11e7857fbc61f405"
+
+inherit autotools
+inherit gettext
+
+# target libnih requires native nih-dbus-tool
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/liboauth/liboauth_1.0.3.bb b/meta-openembedded/meta-oe/recipes-support/liboauth/liboauth_1.0.3.bb
new file mode 100644
index 000000000..3311da5a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboauth/liboauth_1.0.3.bb
@@ -0,0 +1,16 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "C library implementing OAuth Core RFC 5849"
+HOMEPAGE = "http://liboauth.sourceforge.net"
+LICENSE = "MIT|GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING.MIT;md5=6266718a5241c045c8099d9be48817df \
+ file://COPYING.GPL;md5=0636e73ff0215e8d672dc4c32c317bb3"
+SECTION = "libs"
+DEPENDS = "curl openssl"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "689b46c2b3ab1a39735ac33f714c4f7f"
+SRC_URI[sha256sum] = "0df60157b052f0e774ade8a8bac59d6e8d4b464058cc55f9208d72e41156811f"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/libol/libol/configure.patch b/meta-openembedded/meta-oe/recipes-support/libol/libol/configure.patch
new file mode 100644
index 000000000..87695fb06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libol/libol/configure.patch
@@ -0,0 +1,14 @@
+Index: libol-0.3.18/configure.in
+===================================================================
+--- libol-0.3.18.orig/configure.in 2006-03-27 14:44:52.000000000 +0000
++++ libol-0.3.18/configure.in 2014-07-18 07:05:56.029481372 +0000
+@@ -1,7 +1,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+-AC_INIT(src/abstract_io.c)
++AC_INIT(libol, "0.3.18")
+
+-AM_INIT_AUTOMAKE(libol, "0.3.18", 1)
++AM_INIT_AUTOMAKE([foreign])
+ if test -n "$SNAPSHOT_VERSION"; then
+ VERSION=$VERSION+$SNAPSHOT_VERSION
+ fi
diff --git a/meta-openembedded/meta-oe/recipes-support/libol/libol_0.3.18.bb b/meta-openembedded/meta-oe/recipes-support/libol/libol_0.3.18.bb
new file mode 100644
index 000000000..d7adb2b94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libol/libol_0.3.18.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A tiny C support library"
+HOMEPAGE = "https://my.balabit.com/downloads/libol"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
+
+SRC_URI = "http://www.balabit.com/downloads/libol/0.3/${BP}.tar.gz \
+ file://configure.patch"
+SRC_URI[md5sum] = "cbadf4b7ea276dfa85acc38a1cc5ff17"
+SRC_URI[sha256sum] = "9de3bf13297ff882e02a1e6e5f6bf760a544aff92a9d8a1cf4328a32005cefe7"
+
+inherit autotools binconfig
+
+do_compile_prepend() {
+ install ${S}/utils/make_class.in ${B}/utils
+}
+
+do_install_append() {
+ rm -fr ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/liboop/liboop/explicit_linking.patch b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/explicit_linking.patch
new file mode 100644
index 000000000..05d3bf6f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/explicit_linking.patch
@@ -0,0 +1,20 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -51,7 +51,7 @@ noinst_PROGRAMS = test-oop
+
+ test_oop_SOURCES = test-oop.c
+ test_oop_CFLAGS = $(GLIB2_CFLAGS) $(GLIB_INCLUDES) $(TCL_INCLUDES) $(WWW_INCLUDES)
+-test_oop_LDADD = $(lib_LTLIBRARIES)
++test_oop_LDADD = $(lib_LTLIBRARIES) $(GLIB2_LIBS) $(ADNS_LIBS) $(TCL_LIBS) $(READLINE_LIBS)
+
+ release: dist
+ gzip -dc $(PACKAGE)-$(VERSION).tar.gz | bzip2 -9 \
+--- a/liboop-glib2.pc.in
++++ b/liboop-glib2.pc.in
+@@ -7,5 +7,5 @@ Name: liboop-glib2
+ Description: Event loop management library (GLIB2 support)
+ Version: @VERSION@
+ Requires: liboop = @VERSION@ glib-2.0
+-Libs: -L${libdir} -loop-glib2
++Libs: -L${libdir} -loop-glib2 @GLIB2_LIBS@
+ Cflags: -D_REENTRANT -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-support/liboop/liboop/new-readline-typedef.patch b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/new-readline-typedef.patch
new file mode 100644
index 000000000..0a0242032
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/new-readline-typedef.patch
@@ -0,0 +1,11 @@
+--- a/test-oop.c
++++ b/test-oop.c
+@@ -180,7 +180,7 @@ static void *stop_readline(oop_source *s
+ static void add_readline(oop_source *src) {
+ rl_callback_handler_install(
+ (char *) "> ", /* readline isn't const-correct */
+- (VFunction *) on_readline);
++ (rl_vcpfunc_t *) on_readline);
+ oop_readline_register(src);
+ src->on_signal(src,SIGQUIT,stop_readline,NULL);
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/liboop/liboop/read_bugfixes.patch b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/read_bugfixes.patch
new file mode 100644
index 000000000..1880a241a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/read_bugfixes.patch
@@ -0,0 +1,40 @@
+From: Ian Jackson <ijackson@chiark.greenend.org.uk>
+Applied-Upstream: no
+Bug-Debian: http://bugs.debian.org/579604
+Subject: oop-read.h bugfixes
+
+Some years ago I contributed a feature for reading lines and records
+to liboop: oop-read.h and read.c. Since it took a while for that
+feature to make it into distributed versions, for a long time I've
+been using my own copy of the source file. It seems that I fixed a
+couple of bugs in my copy which are still in the Debian package. I
+can't find any record of me having told anyone about them and now I
+find that 1.0-6 still has the bugs.
+
+There are two fixes:
+ * Initialise "rd->discard" properly
+ * Avoid rd->neednotcheck becoming negative
+
+--- a/read.c
++++ b/read.c
+@@ -114,6 +114,7 @@ oop_read *oop_rd_new(oop_source *oop, oo
+ rd->allocbuf= 0;
+ rd->used= 0;
+ rd->alloc= buf ? bufsz : 0;
++ rd->discard= 0;
+ rd->neednotcheck= 0;
+ rd->displacedchar= -1;
+ rd->style= *OOP_RD_STYLE_IMMED;
+@@ -235,7 +236,11 @@ static void *on_process(oop_source *oop,
+
+ if (rd->discard) {
+ rd->used -= rd->discard;
+- rd->neednotcheck -= rd->discard;
++ if (rd->neednotcheck > rd->discard) {
++ rd->neednotcheck -= rd->discard;
++ } else {
++ rd->neednotcheck= 0;
++ }
+ memmove(buf, buf + rd->discard, rd->used);
+ rd->discard= 0;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/liboop/liboop/tcl_dev.patch b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/tcl_dev.patch
new file mode 100644
index 000000000..e738be54c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboop/liboop/tcl_dev.patch
@@ -0,0 +1,22 @@
+--- a/configure
++++ b/configure
+@@ -19935,7 +19935,7 @@
+ fi
+
+ if test xno != x$with_tcl; then
+- for version in 8.4 8.3 8.2 8.1 8.0 ; do
++ for version in "" 8.4 8.3 8.2 8.1 8.0 ; do
+ CPPFLAGS="$save_cppflags -I/usr/include/tcl$version"
+ as_ac_Lib=`echo "ac_cv_lib_tcl$version''_Tcl_Main" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for Tcl_Main in -ltcl$version" >&5
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,7 +71,7 @@
+ fi
+
+ if test xno != x$with_tcl; then
+- for version in 8.4 8.3 8.2 8.1 8.0 ; do
++ for version in "" 8.4 8.3 8.2 8.1 8.0 ; do
+ CPPFLAGS="$save_cppflags -I/usr/include/tcl$version"
+ AC_CHECK_LIB(tcl$version,Tcl_Main,[
+ AC_CHECK_HEADER(tcl.h,[
diff --git a/meta-openembedded/meta-oe/recipes-support/liboop/liboop_1.0.bb b/meta-openembedded/meta-oe/recipes-support/liboop/liboop_1.0.bb
new file mode 100644
index 000000000..82818c242
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liboop/liboop_1.0.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Liboop is a low-level event loop management library for POSIX-based operating systems"
+HOMEPAGE = "http://liboop.org/"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8b54f38ccbd44feb80ab90e01af8b700"
+
+SRC_URI = "http://ftp.debian.org/debian/pool/main/libo/liboop/liboop_${PV}.orig.tar.gz \
+ file://read_bugfixes.patch \
+ file://explicit_linking.patch \
+ file://tcl_dev.patch \
+ file://new-readline-typedef.patch \
+"
+
+SRC_URI[md5sum] = "36cb971047d3af02369446f5e0b315a2"
+SRC_URI[sha256sum] = "34d83c6e0f09ee15cb2bc3131e219747c3b612bb57cf7d25318ab90da9a2d97c"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+PACKAGECONFIG[glib] = "--with-glib,--without-glib,glib-2.0 libpcre"
+PACKAGECONFIG[tcl] = "--with-tcl,--without-tcl,tcl"
+
+EXTRA_OECONF += "--without-adns -without-libwww"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.7.bb b/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.7.bb
new file mode 100644
index 000000000..949c33752
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.7.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Library for using PKCS"
+DESCRIPTION = "\
+Libp11 is a library implementing a small layer on top of PKCS \
+make using PKCS"
+HOMEPAGE = "http://www.opensc-project.org/libp11"
+SECTION = "Development/Libraries"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fad9b3332be894bab9bc501572864b29"
+DEPENDS = "libtool openssl"
+
+SRC_URI = "git://github.com/OpenSC/libp11.git"
+SRCREV = "64569a391897bd29c5060b19fa4613e619e59277"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-static"
+
+do_install_append () {
+ rm -rf ${D}${libdir}/*.la
+ rm -rf ${D}${docdir}/${BPN}
+}
+
+FILES_${PN} += "${libdir}/engines/pkcs11.so"
+FILES_${PN}-dev += "${libdir}/engines/libpkcs11${SOLIBSDEV}"
diff --git a/meta-openembedded/meta-oe/recipes-support/libraw1394/libraw1394_2.1.2.bb b/meta-openembedded/meta-oe/recipes-support/libraw1394/libraw1394_2.1.2.bb
new file mode 100644
index 000000000..337780789
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libraw1394/libraw1394_2.1.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "base library for low-level IEEE 1394 accesses"
+HOMEPAGE = "https://ieee1394.wiki.kernel.org/index.php/Libraries#libraw1394"
+SECTION = "libs"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+
+SRC_URI = "https://www.kernel.org/pub/linux/libs/ieee1394/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "45031ab15ca93e50c19886a38bc1814a"
+SRC_URI[sha256sum] = "ddc4e32721cdfe680d964aaede68ac606a20cd17dd2ba70e2d7e0692086ab57c"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf/use.pkg-config.for.freetype2.patch b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf/use.pkg-config.for.freetype2.patch
new file mode 100644
index 000000000..1116c34d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf/use.pkg-config.for.freetype2.patch
@@ -0,0 +1,62 @@
+From 8cf318197eea91bec6057308befbb29426d69014 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 22 May 2014 10:59:33 +0100
+Subject: [PATCH] freetype-config was removed from oe-core in
+
+commit 5870bd272b0b077d0826fb900b251884c1c05061
+
+ binconfig-disabled: Add class and use
+
+---
+ configure.in | 38 +++++---------------------------------
+ 1 file changed, 5 insertions(+), 33 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 865075e..d7a5a81 100644
+--- a/configure.in
++++ b/configure.in
+@@ -90,39 +90,11 @@ case "$host" in
+ esac
+ AM_CONDITIONAL(USE_VERSION_RC, test x$use_version_rc = xtrue)
+
+-dnl Check for the FreeType 2 library
+-dnl
+-dnl Get the cflags and libraries from the freetype-config script
+-dnl
+-AC_ARG_WITH(freetype-prefix,[ --with-freetype-prefix=PFX Prefix where FREETYPE is
+-installed (optional)],
+- freetype_prefix="$withval", freetype_prefix="")
+-AC_ARG_WITH(freetype-exec-prefix,[ --with-freetype-exec-prefix=PFX Exec prefix
+-where FREETYPE is installed (optional)],
+- freetype_exec_prefix="$withval", freetype_exec_prefix="")
+-
+-if test x$freetype_exec_prefix != x ; then
+- freetype_args="$freetype_args --exec-prefix=$freetype_exec_prefix"
+- if test x${FREETYPE_CONFIG+set} != xset ; then
+- FREETYPE_CONFIG=$freetype_exec_prefix/bin/freetype-config
+- fi
+-fi
+-if test x$freetype_prefix != x ; then
+- freetype_args="$freetype_args --prefix=$freetype_prefix"
+- if test x${FREETYPE_CONFIG+set} != xset ; then
+- FREETYPE_CONFIG=$freetype_prefix/bin/freetype-config
+- fi
+-fi
+-AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
+-no_freetype=""
+-if test "$FREETYPE_CONFIG" = "no" ; then
+- AC_MSG_ERROR([
+-*** Unable to find FreeType2 library (http://www.freetype.org/)
+-])
+-else
+- CFLAGS="$CFLAGS `$FREETYPE_CONFIG $freetypeconf_args --cflags`"
+- LIBS="$LIBS `$FREETYPE_CONFIG $freetypeconf_args --libs`"
+-fi
++PKG_CHECK_MODULES(FREETYPE2, freetype2,
++ CFLAGS="$CFLAGS $FREETYPE2_CFLAGS"
++ LIBS="$LIBS $FREETYPE2_LIBS",
++ AC_MSG_ERROR([*** Unable to find FreeType2 library (http://www.freetype.org/)])
++)
+
+ dnl Check for SDL
+ SDL_VERSION=1.2.4
diff --git a/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf_2.0.11.bb b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf_2.0.11.bb
new file mode 100644
index 000000000..d8b378f2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl-ttf_2.0.11.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Simple DirectMedia Layer truetype font library"
+SECTION = "libs"
+DEPENDS = "virtual/libsdl freetype"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING;md5=22800d1b3701377aae0b61ee36f5c303"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-${PV}.tar.gz \
+ file://use.pkg-config.for.freetype2.patch \
+"
+SRC_URI[md5sum] = "61e29bd9da8d245bc2471d1b2ce591aa"
+SRC_URI[sha256sum] = "724cd895ecf4da319a3ef164892b72078bd92632a5d812111261cde248ebcdb7"
+
+S = "${WORKDIR}/SDL_ttf-${PV}"
+
+inherit autotools pkgconfig
+
+LDFLAGS += "-lm"
+
+do_configure_prepend() {
+ # make autoreconf happy
+ touch ${S}/NEWS ${S}/AUTHORS ${S}/ChangeLog
+
+ # Removing these files fixes a libtool version mismatch.
+ MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
+
+ for i in ${MACROS}; do
+ rm -f ${S}/acinclude/$i
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/automake_foreign.patch b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/automake_foreign.patch
new file mode 100644
index 000000000..871e6e94e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/automake_foreign.patch
@@ -0,0 +1,21 @@
+From f9c4ad3a171d676e3818b8f6897f325ccf0b2203 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 9 May 2017 00:57:10 -0700
+
+---
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index 8166d91..8e05e49 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2,6 +2,8 @@
+
+ lib_LTLIBRARIES = libSDL2_ttf.la
+
++AUTOMAKE_OPTIONS = foreign
++
+ libSDL2_ttfincludedir = $(includedir)/SDL2
+ libSDL2_ttfinclude_HEADERS = \
+ SDL_ttf.h
diff --git a/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/use.pkg-config.for.freetype2.patch b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/use.pkg-config.for.freetype2.patch
new file mode 100644
index 000000000..1dfbec6ed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf/use.pkg-config.for.freetype2.patch
@@ -0,0 +1,62 @@
+From e6d2c0e130811c15b5f5cc10221fae182cb8609e Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 22 May 2014 10:59:33 +0100
+Subject: [PATCH] freetype-config was removed from oe-core in
+
+commit 5870bd272b0b077d0826fb900b251884c1c05061
+
+ binconfig-disabled: Add class and use
+
+---
+ configure.in | 38 +++++---------------------------------
+ 1 file changed, 5 insertions(+), 33 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 9b36e15..f300cae 100644
+--- a/configure.in
++++ b/configure.in
+@@ -86,39 +86,11 @@ case "$host" in
+ esac
+ AM_CONDITIONAL(USE_VERSION_RC, test x$use_version_rc = xtrue)
+
+-dnl Check for the FreeType 2 library
+-dnl
+-dnl Get the cflags and libraries from the freetype-config script
+-dnl
+-AC_ARG_WITH(freetype-prefix,[ --with-freetype-prefix=PFX Prefix where FREETYPE is
+-installed (optional)],
+- freetype_prefix="$withval", freetype_prefix="")
+-AC_ARG_WITH(freetype-exec-prefix,[ --with-freetype-exec-prefix=PFX Exec prefix
+-where FREETYPE is installed (optional)],
+- freetype_exec_prefix="$withval", freetype_exec_prefix="")
+-
+-if test x$freetype_exec_prefix != x ; then
+- freetype_args="$freetype_args --exec-prefix=$freetype_exec_prefix"
+- if test x${FREETYPE_CONFIG+set} != xset ; then
+- FREETYPE_CONFIG=$freetype_exec_prefix/bin/freetype-config
+- fi
+-fi
+-if test x$freetype_prefix != x ; then
+- freetype_args="$freetype_args --prefix=$freetype_prefix"
+- if test x${FREETYPE_CONFIG+set} != xset ; then
+- FREETYPE_CONFIG=$freetype_prefix/bin/freetype-config
+- fi
+-fi
+-AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
+-no_freetype=""
+-if test "$FREETYPE_CONFIG" = "no" ; then
+- AC_MSG_ERROR([
+-*** Unable to find FreeType2 library (http://www.freetype.org/)
+-])
+-else
+- CFLAGS="$CFLAGS `$FREETYPE_CONFIG $freetypeconf_args --cflags`"
+- LIBS="$LIBS `$FREETYPE_CONFIG $freetypeconf_args --libs`"
+-fi
++PKG_CHECK_MODULES(FREETYPE2, freetype2,
++ CFLAGS="$CFLAGS $FREETYPE2_CFLAGS"
++ LIBS="$LIBS $FREETYPE2_LIBS",
++ AC_MSG_ERROR([*** Unable to find FreeType2 library (http://www.freetype.org/)])
++)
+
+ dnl Check for SDL
+ SDL_VERSION=2.0.0
diff --git a/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf_2.0.14.bb b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf_2.0.14.bb
new file mode 100644
index 000000000..4601593ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsdl-ttf/libsdl2-ttf_2.0.14.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Simple DirectMedia Layer truetype font library"
+SECTION = "libs"
+DEPENDS = "virtual/libsdl2 freetype virtual/libgl"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=cb33e7c4df9fbde389f149ad6bc93ce5"
+
+SRC_URI = " \
+ http://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-${PV}.tar.gz \
+ file://use.pkg-config.for.freetype2.patch \
+ file://automake_foreign.patch \
+"
+SRC_URI[md5sum] = "e53c05e1e7f1382c316afd6c763388b1"
+SRC_URI[sha256sum] = "34db5e20bcf64e7071fe9ae25acaa7d72bdc4f11ab3ce59acc768ab62fe39276"
+
+S = "${WORKDIR}/SDL2_ttf-${PV}"
+
+inherit autotools pkgconfig distro_features_check
+
+# links to libGL.so
+REQUIRED_DISTRO_FEATURES += "x11 opengl"
+
+do_configure_prepend() {
+ # Removing these files fixes a libtool version mismatch.
+ MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
+
+ for i in ${MACROS}; do
+ rm -f ${S}/acinclude/$i
+ done
+}
+ASNEEDED = ""
diff --git a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/libsmi-fix-the-test-dump-files.patch b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/libsmi-fix-the-test-dump-files.patch
new file mode 100644
index 000000000..134a8bb41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/libsmi-fix-the-test-dump-files.patch
@@ -0,0 +1,277 @@
+From 460d3a5ef450c30b34a663a073ee53329441ef6e Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 23 Feb 2016 16:34:38 +0800
+Subject: [PATCH] libsmi: fix the test dump files
+
+These test dump files were generated by smidump 0.4.5
+which would not match with the ones generated by 0.4.8,
+so update them with the ones for 0.4.8.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ test/dumps/cm/MAU-MIB | 8 ++++----
+ test/dumps/cm/RMON2-MIB | 6 +++---
+ test/dumps/sming/IF-MIB | 22 +++++++++++++---------
+ test/dumps/sming/MAU-MIB | 19 +++++++++++--------
+ test/dumps/sming/RMON2-MIB | 40 ++++++++++++++++++++++++----------------
+ test/dumps/sming/SNMPv2-MIB | 11 +++++++----
+ 6 files changed, 62 insertions(+), 44 deletions(-)
+
+diff --git a/test/dumps/cm/MAU-MIB b/test/dumps/cm/MAU-MIB
+index 0d97284..0cfd4e1 100644
+--- a/test/dumps/cm/MAU-MIB
++++ b/test/dumps/cm/MAU-MIB
+@@ -53,7 +53,7 @@
+ <attribute name="text">
+ <composite type="text">
+ <attribute name="string">
+- <string>#Conceptual model of MAU-MIB - generated by smidump 0.4.5#</string>
++ <string>#Conceptual model of MAU-MIB - generated by smidump 0.4.8#</string>
+ </attribute>
+ <attribute name="font">
+ <font name="Courier"/>
+@@ -1294,7 +1294,7 @@
+ <point val="29.52,49.18"/>
+ </attribute>
+ <attribute name="obj_bb">
+- <rectangle val="28.67,32.93;30.37,34.63"/>
++ <rectangle val="28.67,32.93;30.37,34.62"/>
+ </attribute>
+ <attribute name="orth_points">
+ <point val="29.52,49.18"/>
+@@ -1678,7 +1678,7 @@
+ <point val="37.68,49.18"/>
+ </attribute>
+ <attribute name="obj_bb">
+- <rectangle val="28.67,32.93;30.37,34.63"/>
++ <rectangle val="28.67,32.93;30.37,34.62"/>
+ </attribute>
+ <attribute name="orth_points">
+ <point val="37.68,49.18"/>
+@@ -1737,7 +1737,7 @@
+ <point val="29.52,35.78"/>
+ </attribute>
+ <attribute name="obj_bb">
+- <rectangle val="28.67,32.93;30.37,34.63"/>
++ <rectangle val="28.67,32.93;30.37,34.62"/>
+ </attribute>
+ <attribute name="orth_points">
+ <point val="29.52,35.78"/>
+diff --git a/test/dumps/cm/RMON2-MIB b/test/dumps/cm/RMON2-MIB
+index 30ae8dd..1b9d268 100644
+--- a/test/dumps/cm/RMON2-MIB
++++ b/test/dumps/cm/RMON2-MIB
+@@ -53,7 +53,7 @@
+ <attribute name="text">
+ <composite type="text">
+ <attribute name="string">
+- <string>#Conceptual model of RMON2-MIB - generated by smidump 0.4.5#</string>
++ <string>#Conceptual model of RMON2-MIB - generated by smidump 0.4.8#</string>
+ </attribute>
+ <attribute name="font">
+ <font name="Courier"/>
+@@ -2841,8 +2841,8 @@
+ </attribute>
+ <attribute name="orth_points">
+ <point val="18.80,55.45"/>
+- <point val="18.80,68.63"/>
+- <point val="22.80,68.63"/>
++ <point val="18.80,68.62"/>
++ <point val="22.80,68.62"/>
+ <point val="22.80,81.80"/>
+ </attribute>
+ <attribute name="orth_orient">
+diff --git a/test/dumps/sming/IF-MIB b/test/dumps/sming/IF-MIB
+index 21432cb..c2ffc06 100644
+--- a/test/dumps/sming/IF-MIB
++++ b/test/dumps/sming/IF-MIB
+@@ -1,16 +1,18 @@
+ //
+-// This module has been generated by smidump 0.4.5. Do not edit.
++// This module has been generated by smidump 0.4.8. Do not edit.
+ //
+ module IF-MIB {
+
+- import IANAifType-MIB (IANAifType);
+- import IRTF-NMRG-SMING (Counter32, Counter64,
+- DisplayString255, Gauge32,
+- PhysAddress, TimeStamp, TimeTicks,
+- TruthValue);
+- import IRTF-NMRG-SMING-SNMP (AutonomousType, RowStatus,
+- TestAndIncr, mib-2);
+- import SNMPv2-MIB (snmpTraps);
++ import SNMPv2-SMI (MODULE-IDENTITY, OBJECT-TYPE, Counter32,
++ Gauge32, Counter64, Integer32, TimeTicks,
++ mib-2, NOTIFICATION-TYPE);
++ import SNMPv2-TC (TEXTUAL-CONVENTION, DisplayString,
++ PhysAddress, TruthValue, RowStatus,
++ TimeStamp, AutonomousType, TestAndIncr);
++ import SNMPv2-CONF (MODULE-COMPLIANCE, OBJECT-GROUP,
++ NOTIFICATION-GROUP);
++ import SNMPv2-MIB (snmpTraps);
++ import IANAifType-MIB (IANAifType);
+
+ //
+ // MODULE META INFORMATION
+@@ -79,6 +81,7 @@ module IF-MIB {
+ typedef InterfaceIndex {
+ type Integer32 (1..2147483647);
+ format "d";
++ status current;
+ description
+ "A unique value, greater than zero, for each interface or
+ interface sub-layer in the managed system. It is
+@@ -91,6 +94,7 @@ module IF-MIB {
+ typedef InterfaceIndexOrZero {
+ type Integer32 (0..2147483647);
+ format "d";
++ status current;
+ description
+ "This textual convention is an extension of the
+ InterfaceIndex convention. The latter defines a greater
+diff --git a/test/dumps/sming/MAU-MIB b/test/dumps/sming/MAU-MIB
+index 2cffd99..64cf714 100644
+--- a/test/dumps/sming/MAU-MIB
++++ b/test/dumps/sming/MAU-MIB
+@@ -1,15 +1,18 @@
+ //
+-// This module has been generated by smidump 0.4.5. Do not edit.
++// This module has been generated by smidump 0.4.8. Do not edit.
+ //
+ module MAU-MIB {
+
+- import IANA-MAU-MIB (IANAifJackType,
+- IANAifMauAutoNegCapBits,
+- IANAifMauMediaAvailable,
+- IANAifMauTypeListBits);
+- import IF-MIB (InterfaceIndex);
+- import IRTF-NMRG-SMING (Counter32, Counter64, TruthValue);
+- import IRTF-NMRG-SMING-SNMP (AutonomousType, mib-2);
++ import SNMPv2-SMI (Counter32, Integer32, Counter64, OBJECT-TYPE,
++ MODULE-IDENTITY, NOTIFICATION-TYPE, mib-2);
++ import SNMPv2-TC (TruthValue, AutonomousType,
++ TEXTUAL-CONVENTION);
++ import SNMPv2-CONF (OBJECT-GROUP, MODULE-COMPLIANCE,
++ NOTIFICATION-GROUP);
++ import IF-MIB (InterfaceIndex);
++ import IANA-MAU-MIB (IANAifMauTypeListBits,
++ IANAifMauMediaAvailable,
++ IANAifMauAutoNegCapBits, IANAifJackType);
+
+ //
+ // MODULE META INFORMATION
+diff --git a/test/dumps/sming/RMON2-MIB b/test/dumps/sming/RMON2-MIB
+index 423b9bc..04763e5 100644
+--- a/test/dumps/sming/RMON2-MIB
++++ b/test/dumps/sming/RMON2-MIB
+@@ -1,23 +1,26 @@
+ //
+-// This module has been generated by smidump 0.4.5. Do not edit.
++// This module has been generated by smidump 0.4.8. Do not edit.
+ //
+ module RMON2-MIB {
+
+- import IF-MIB (ifIndex);
+- import IRTF-NMRG-SMING (Counter32, DisplayString255,
+- Gauge32, IpAddress, TimeStamp,
+- TimeTicks);
+- import IRTF-NMRG-SMING-SNMP (RowStatus, mib-2);
+- import RMON-MIB (OwnerString, channelEntry,
+- etherStatsEntry, filter,
+- filterEntry, history,
+- historyControlEntry,
+- hostControlEntry, hosts, matrix,
+- matrixControlEntry, statistics);
+- import TOKEN-RING-RMON-MIB (ringStationControlEntry,
+- sourceRoutingStatsEntry,
+- tokenRing, tokenRingMLStatsEntry,
+- tokenRingPStatsEntry);
++ import SNMPv2-SMI (MODULE-IDENTITY, OBJECT-TYPE,
++ Counter32, Integer32, Gauge32,
++ IpAddress, TimeTicks, mib-2);
++ import SNMPv2-TC (TEXTUAL-CONVENTION, RowStatus,
++ DisplayString, TimeStamp);
++ import SNMPv2-CONF (MODULE-COMPLIANCE, OBJECT-GROUP);
++ import IF-MIB (ifIndex);
++ import RMON-MIB (OwnerString, statistics, history,
++ hosts, matrix, filter,
++ etherStatsEntry,
++ historyControlEntry,
++ hostControlEntry,
++ matrixControlEntry, filterEntry,
++ channelEntry);
++ import TOKEN-RING-RMON-MIB (tokenRing, tokenRingMLStatsEntry,
++ tokenRingPStatsEntry,
++ ringStationControlEntry,
++ sourceRoutingStatsEntry);
+
+ //
+ // MODULE META INFORMATION
+@@ -167,6 +170,7 @@ module RMON2-MIB {
+
+ typedef ZeroBasedCounter32 {
+ type Gauge32;
++ status current;
+ description
+ "This TC describes an object that counts events with the
+ following semantics: objects of this type will be set to
+@@ -188,6 +192,7 @@ module RMON2-MIB {
+
+ typedef LastCreateTime {
+ type TimeTicks;
++ status current;
+ description
+ "This TC describes an object that stores the value of the
+ sysUpTime object at the last time its entry was created.
+@@ -208,6 +213,7 @@ module RMON2-MIB {
+
+ typedef TimeFilter {
+ type TimeTicks;
++ status current;
+ description
+ "To be used for the index to a table. Allows an application
+ to download only those rows changed since a particular time.
+@@ -424,6 +430,7 @@ module RMON2-MIB {
+
+ typedef DataSource {
+ type ObjectIdentifier;
++ status current;
+ description
+ "Identifies the source of the data that the associated
+ function is configured to analyze. This source can be any
+@@ -439,6 +446,7 @@ module RMON2-MIB {
+
+ typedef ControlString {
+ type OctetString (0..255);
++ status current;
+ description
+ "This data type is used to communicate with a modem or a
+
+diff --git a/test/dumps/sming/SNMPv2-MIB b/test/dumps/sming/SNMPv2-MIB
+index ca355c8..0c88939 100644
+--- a/test/dumps/sming/SNMPv2-MIB
++++ b/test/dumps/sming/SNMPv2-MIB
+@@ -1,11 +1,14 @@
+ //
+-// This module has been generated by smidump 0.4.5. Do not edit.
++// This module has been generated by smidump 0.4.8. Do not edit.
+ //
+ module SNMPv2-MIB {
+
+- import IRTF-NMRG-SMING (Counter32, DisplayString255,
+- TimeStamp, TimeTicks, snmpModules);
+- import IRTF-NMRG-SMING-SNMP (TestAndIncr, mib-2);
++ import SNMPv2-SMI (MODULE-IDENTITY, OBJECT-TYPE,
++ NOTIFICATION-TYPE, TimeTicks, Counter32,
++ snmpModules, mib-2);
++ import SNMPv2-TC (DisplayString, TestAndIncr, TimeStamp);
++ import SNMPv2-CONF (MODULE-COMPLIANCE, OBJECT-GROUP,
++ NOTIFICATION-GROUP);
+
+ //
+ // MODULE META INFORMATION
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/smi.conf b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/smi.conf
new file mode 100644
index 000000000..7e4da86d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi/smi.conf
@@ -0,0 +1,48 @@
+#
+# smi.conf - Global/User SMI configuration file. (EXAMPLE)
+#
+# Copyright (c) 2000 Frank Strauss, Technical University of Braunschweig.
+#
+# See the file "COPYING" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# @(#) $Id: smi.conf-example 1134 2001-06-11 09:59:13Z strauss $
+#
+#
+# See smi_config(3) for detailed information on configuration files.
+#
+
+# Extend (note the semicolon) the libsmi default module search path.
+path :/usr/share/mibs/iana
+path :/usr/share/mibs/ietf
+path :/usr/share/mibs/irtf
+path :/usr/share/mibs/tubs
+
+# EXPERIMENTAL: Add a caching method (works only on UNIX systems).
+# NOTE: the cache directory must exist and permissions must be
+# handled appropriately. A simple but insecure way is to apply
+# a tmp flag to the directory (chmod 1777 /usr/local/share/mibs/cache).
+#cache /usr/local/share/mibs/cache /usr/local/bin/smicache -d /usr/local/share/mibs/cache -p http://www.ibr.cs.tu-bs.de/projects/libsmi/smicache/
+
+# Don't show any errors by default.
+level 0
+
+# Preload some basic SMIv2 modules.
+load SNMPv2-SMI
+load SNMPv2-TC
+load SNMPv2-CONF
+
+# Make smilint shout loud to report all errors and warnings.
+smilint: level 9
+
+# But please don't claim about any names longer than 32 chars.
+# (note: this is the prefix of errors `namelength-32-module,
+# -type, -object, -enumeration, and -bit)
+smilint: hide namelength-32
+
+# Preloading some more modules for special applications.
+tcpdump: load DISMAN-SCRIPT-MIB
+tcpdump: load IF-MIB
+
+smiquery: load IF-MIB
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
new file mode 100644
index 000000000..b537ce67d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A Library to Access SMI MIB Information"
+HOMEPAGE = "https://www.ibr.cs.tu-bs.de/projects/libsmi"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3ad3076f9332343a21636cfd351f05b7"
+
+SRC_URI = "https://www.ibr.cs.tu-bs.de/projects/${BPN}/download/${BP}.tar.gz \
+ file://smi.conf \
+ file://libsmi-fix-the-test-dump-files.patch \
+ "
+
+SRC_URI[md5sum] = "4bf47483c06c9f07d1b10fbc74eddf11"
+SRC_URI[sha256sum] = "f21accdadb1bb328ea3f8a13fc34d715baac6e2db66065898346322c725754d3"
+
+RDEPENDS_${PN} += "wget"
+
+inherit autotools
+
+EXTRA_OECONF = "ac_cv_path_SH=${base_bindir}/sh ac_cv_path_WGET=${bindir}/wget"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/smi.conf ${D}${sysconfdir}/smi.conf
+}
+
+PACKAGES += "${PN}-mibs ${PN}-pibs ${PN}-yang"
+
+FILES_${PN}-mibs += "${datadir}/mibs"
+FILES_${PN}-pibs += "${datadir}/pibs"
+FILES_${PN}-yang += "${datadir}/yang"
+
+RRECOMMENDS_${PN} = "${BPN}-mibs"
diff --git a/meta-openembedded/meta-oe/recipes-support/libsoc/libsoc_0.8.2.bb b/meta-openembedded/meta-oe/recipes-support/libsoc/libsoc_0.8.2.bb
new file mode 100644
index 000000000..01708df35
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libsoc/libsoc_0.8.2.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Library for interfacing with common SoC peripherals"
+DESCRIPTION = "libsoc is a C library to interface with common peripherals (gpio, i2c, spi, pwm) \
+ found in SoC (System on Chips) through generic Linux Kernel interfaces."
+
+HOMEPAGE = "https://github.com/jackmitch/libsoc"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=e0bfebea12a718922225ba987b2126a5"
+
+inherit autotools pkgconfig python-dir
+
+SRCREV = "fd1ad6e7823fa76d8db0d3c5884faffa8ffddafb"
+SRC_URI = "git://github.com/jackmitch/libsoc.git"
+
+S = "${WORKDIR}/git"
+
+BOARD ??= "devboard"
+
+PACKAGECONFIG ?= ""
+
+PACKAGECONFIG[disabledebug] = "--disable-debug,,"
+PACKAGECONFIG[allboardconfigs] = "--with-board-configs,,"
+PACKAGECONFIG[enableboardconfig] = "--enable-board=${BOARD},,"
+PACKAGECONFIG[python] = "--enable-python=${PYTHON_PN},,${PYTHON_PN}"
+
+PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'python', \
+ '${PYTHON_PN}-libsoc-staticdev ${PYTHON_PN}-libsoc', '', d)}"
+
+RDEPENDS_${PN} = "libgcc"
+
+FILES_${PYTHON_PN}-libsoc-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*/*.a"
+FILES_${PYTHON_PN}-libsoc += "${PYTHON_SITEPACKAGES_DIR}"
diff --git a/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.7.3.bb b/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.7.3.bb
new file mode 100644
index 000000000..79e7dc599
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.7.3.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Multiplatform C library implementing the SSHv2 and SSHv1 protocol"
+HOMEPAGE = "http://www.libssh.org"
+SECTION = "libs"
+
+DEPENDS = "zlib openssl libgcrypt"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=388a4fb1dea8ceae0be78ba9b01fc139"
+
+SRC_URI = "git://git.libssh.org/projects/libssh.git;branch=v0-7"
+SRCREV = "cdf7690e038230623cbbf6b024ece62f41efa98d"
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = " \
+ -DWITH_GCRYPT=1 \
+ -DWITH_PCAP=1 \
+ -DWITH_SFTP=1 \
+ -DWITH_ZLIB=1 \
+ -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
+ "
+
+PACKAGECONFIG ??=""
+PACKAGECONFIG[gssapi] = "-DWITH_GSSAPI=1, -DWITH_GSSAPI=0, krb5, "
+
+inherit cmake
+
+do_configure_prepend () {
+ # Disable building of examples
+ sed -i -e '/add_subdirectory(examples)/s/^/#DONOTWANT/' ${S}/CMakeLists.txt \
+ || bbfatal "Failed to disable examples"
+}
+
+FILES_${PN}-dev += "${libdir}/cmake"
+TOOLCHAIN = "gcc"
diff --git a/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb b/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb
new file mode 100644
index 000000000..94bfb8f87
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A client-side C library implementing the SSH2 protocol"
+HOMEPAGE = "http://www.libssh2.org/"
+SECTION = "libs"
+
+DEPENDS = "zlib"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c5cf34fc0acb44b082ef50ef5e4354ca"
+
+SRC_URI = "http://www.libssh2.org/download/${BP}.tar.gz"
+SRC_URI[md5sum] = "3d1147cae66e2959ea5441b183de1b1c"
+SRC_URI[sha256sum] = "39f34e2f6835f4b992cafe8625073a88e5a28ba78f83e8099610a7b3af4676d4"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "\
+ --with-libz \
+ --with-libz-prefix=${STAGING_LIBDIR} \
+ "
+
+# only one of openssl and gcrypt could be set
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[openssl] = "--with-openssl --with-libssl-prefix=${STAGING_LIBDIR},--without-openssl,openssl"
+PACKAGECONFIG[gcrypt] = "--with-libgcrypt --with-libgcrypt-prefix=${STAGING_EXECPREFIXDIR},--without-libgcrypt,libgcrypt"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/libtar/files/0002-Do-not-strip-libtar.patch b/meta-openembedded/meta-oe/recipes-support/libtar/files/0002-Do-not-strip-libtar.patch
new file mode 100644
index 000000000..31c0d29e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtar/files/0002-Do-not-strip-libtar.patch
@@ -0,0 +1,25 @@
+From e9fee689430af7791b932a1ee3c2cc103ccf290f Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@netmodule.com>
+Date: Wed, 2 Nov 2016 05:43:43 -0400
+Subject: [PATCH] Do not strip libtar.
+
+---
+ libtar/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libtar/Makefile.in b/libtar/Makefile.in
+index 7c6f1bc..80bb8d9 100644
+--- a/libtar/Makefile.in
++++ b/libtar/Makefile.in
+@@ -20,7 +20,7 @@ SHELL = @SHELL@
+
+ ### Installation programs and flags
+ INSTALL = @INSTALL@
+-INSTALL_PROGRAM = @INSTALL_PROGRAM@ -s
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_DATA = @INSTALL_DATA@
+ LN_S = @LN_S@
+ MKDIR = @MKDIR@
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libtar/files/fix_libtool_sysroot.patch b/meta-openembedded/meta-oe/recipes-support/libtar/files/fix_libtool_sysroot.patch
new file mode 100644
index 000000000..178a97029
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtar/files/fix_libtool_sysroot.patch
@@ -0,0 +1,19 @@
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 4623100..1c6b43d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -13,6 +13,7 @@ AC_CONFIG_MACRO_DIR([autoconf])
+ AM_INIT_AUTOMAKE([dist-bzip2])
+ ENCAP_PKG([], [postinstall-encap])
+
++LT_INIT
+
+ dnl ### Load subdirectory modules. ##################################
+ PSG_MODULE([compat])
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libtar/libtar_1.2.20.bb b/meta-openembedded/meta-oe/recipes-support/libtar/libtar_1.2.20.bb
new file mode 100644
index 000000000..60710f416
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtar/libtar_1.2.20.bb
@@ -0,0 +1,21 @@
+SUMMARY = "libtar, tar manipulating library"
+DESCRIPTION = "libtar is a library for manipulating POSIX tar files"
+HOMEPAGE = "http://www.feep.net/libtar"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=61cbac6719ae682ce6cd45b5c11e21af"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/libt/${BPN}/${BPN}_${PV}.orig.tar.gz \
+ file://fix_libtool_sysroot.patch \
+ file://0002-Do-not-strip-libtar.patch \
+ "
+
+S = "${WORKDIR}/${BPN}"
+
+SRC_URI[md5sum] = "6ced95ab3a4b33fbfe2dfb231d156cdb"
+SRC_URI[sha256sum] = "50f24c857a7ef1cb092e6508758b86d06f1188508f897f3e6b40c573e8879109"
+
+inherit autotools-brokensep
+
+PACKAGECONFIG ??= "zlib"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-include-sys-select.h-for-fd_set-definition.patch b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-include-sys-select.h-for-fd_set-definition.patch
new file mode 100644
index 000000000..a4a17ed85
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-include-sys-select.h-for-fd_set-definition.patch
@@ -0,0 +1,28 @@
+From 0ab69dc18a2057ff5bf41abcdf2b983b72d5a903 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 15:34:49 -0700
+Subject: [PATCH 1/2] include sys/select.h for fd_set definition
+
+Fixes
+teamnl.c:160:2: error: unknown type name 'fd_set'; did you mean 'fpos_t'?
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/teamnl.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/utils/teamnl.c b/utils/teamnl.c
+index e8de7e2..25129e8 100644
+--- a/utils/teamnl.c
++++ b/utils/teamnl.c
+@@ -24,6 +24,7 @@
+ #include <getopt.h>
+ #include <errno.h>
+ #include <sys/signalfd.h>
++#include <sys/select.h>
+ #include <signal.h>
+ #include <unistd.h>
+ #include <team.h>
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-disable-RedHat-specific-test.patch b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-disable-RedHat-specific-test.patch
new file mode 100644
index 000000000..468a55f34
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-disable-RedHat-specific-test.patch
@@ -0,0 +1,32 @@
+From 00debe6bd4cf5a3133a8fbaab75f7447a39fa655 Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Thu, 12 Apr 2018 01:54:15 +0000
+Subject: [PATCH] team_basic_test.py: disable RedHat specific test
+
+The test _run_teamd_initscripts() is for RedHat ifcfg scripts which are
+incompatible with OE:
+ /etc/sysconfig/network-scripts/ifcfg-*
+
+Upstream-Status: Inappropriate [OE Specific]
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ scripts/team_basic_test.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/team_basic_test.py b/scripts/team_basic_test.py
+index b05be9e..faabd18 100755
+--- a/scripts/team_basic_test.py
++++ b/scripts/team_basic_test.py
+@@ -171,7 +171,7 @@ TEAM_PORT_CONFIG='{"prio": 10}'
+ try:
+ for mode_name in self._team_modes:
+ self._run_one_mode(mode_name)
+- self._run_teamd_initscripts()
++ #self._run_teamd_initscripts()
+ finally:
+ cmd_exec("modprobe -r team_mode_loadbalance team_mode_roundrobin team_mode_activebackup team_mode_broadcast team");
+
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0002-teamd-Re-adjust-include-header-order.patch b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0002-teamd-Re-adjust-include-header-order.patch
new file mode 100644
index 000000000..beabf63ca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0002-teamd-Re-adjust-include-header-order.patch
@@ -0,0 +1,40 @@
+From a5b945cb3c62a18dcd7047f62707c09076c4e48b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 15:35:51 -0700
+Subject: [PATCH 2/2] teamd: Re-adjust include header order
+
+So it gets the library definition before kernel definition
+
+usr/include/ne
+tinet/if_ether.h:101:8: error: redefinition of 'struct ethhdr'
+ struct ethhdr {
+ ^~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ teamd/teamd_runner_lacp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c
+index 9c77fae..8800854 100644
+--- a/teamd/teamd_runner_lacp.c
++++ b/teamd/teamd_runner_lacp.c
+@@ -23,6 +23,7 @@
+ #include <unistd.h>
+ #include <limits.h>
+ #include <sys/ioctl.h>
++#include <net/ethernet.h>
+ #include <linux/if_ether.h>
+ #include <sys/socket.h>
+ #include <linux/netdevice.h>
+@@ -30,7 +31,6 @@
+ #include <errno.h>
+ #include <team.h>
+ #include <private/misc.h>
+-#include <net/ethernet.h>
+
+ #include "teamd.h"
+ #include "teamd_config.h"
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest
new file mode 100644
index 000000000..4ba5acf05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python $(dirname $0)/team_basic_test.py
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb
new file mode 100644
index 000000000..442592de9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Library for controlling team network device"
+HOMEPAGE = "http://www.libteam.org/"
+SECTION = "libs/network"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libnl libdaemon jansson"
+
+SRC_URI = "git://github.com/jpirko/libteam \
+ file://0001-include-sys-select.h-for-fd_set-definition.patch \
+ file://0002-teamd-Re-adjust-include-header-order.patch \
+ file://0001-team_basic_test.py-disable-RedHat-specific-test.patch \
+ file://run-ptest \
+ "
+SRCREV = "91a928a56a501daac5ce8b3c16bd9943661f1d16"
+
+SRC_URI[md5sum] = "565114d70c41bff6093d8e57be284e8a"
+SRC_URI[sha256sum] = "d65286379141db141bea33424ec0507bb0f827a0bf03d9c65004bb593e3d5545"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig ptest
+
+FILES_${PN} = "${libdir}/libteam${SOLIBS} \
+"
+
+PACKAGES += "${PN}-dctl ${PN}-utils"
+FILES_${PN}-dctl = "${libdir}/libteamdctl${SOLIBS} \
+"
+FILES_${PN}-utils = "${bindir}/bond2team \
+ ${bindir}/teamd \
+ ${bindir}/teamdctl \
+ ${bindir}/teamnl \
+"
+
+RDEPENDS_${PN}-utils = "bash"
+RDEPENDS_${PN}-ptest = "python"
+
+do_install_ptest() {
+ install ${S}/scripts/team_basic_test.py ${D}${PTEST_PATH}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch
new file mode 100644
index 000000000..88c962bbe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch
@@ -0,0 +1,20 @@
+Description: TinyXml is built with TIXML_USE_STL, so we have to
+ enforce it when the library is used.
+Author: Felix Geyer <debfx-pkg@fobos.de>
+
+Upstream-Status: Pending
+
+diff -Nur tinyxml-2.5.3/tinyxml.h tinyxml-2.5.3.patch/tinyxml.h
+--- tinyxml-2.5.3/tinyxml.h 2007-05-07 00:41:23.000000000 +0200
++++ tinyxml-2.5.3.patch/tinyxml.h 2009-07-08 22:32:03.000000000 +0200
+@@ -26,6 +26,10 @@
+ #ifndef TINYXML_INCLUDED
+ #define TINYXML_INCLUDED
+
++#ifndef TIXML_USE_STL
++ #define TIXML_USE_STL
++#endif
++
+ #ifdef _MSC_VER
+ #pragma warning( push )
+ #pragma warning( disable : 4530 )
diff --git a/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch
new file mode 100644
index 000000000..b801506ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch
@@ -0,0 +1,62 @@
+Description: TinyXML incorrectly encodes text element containing
+ an ampersand followed by either x or #.
+
+Origin: http://sourceforge.net/tracker/index.php?func=detail&aid=3031828&group_id=13559&atid=313559
+
+Upstream-Status: Pending
+
+diff -u -r1.105 tinyxml.cpp
+--- a/tinyxml.cpp
++++ b/tinyxml.cpp
+@@ -57,30 +57,7 @@
+ {
+ unsigned char c = (unsigned char) str[i];
+
+- if ( c == '&'
+- && i < ( (int)str.length() - 2 )
+- && str[i+1] == '#'
+- && str[i+2] == 'x' )
+- {
+- // Hexadecimal character reference.
+- // Pass through unchanged.
+- // &#xA9; -- copyright symbol, for example.
+- //
+- // The -1 is a bug fix from Rob Laveaux. It keeps
+- // an overflow from happening if there is no ';'.
+- // There are actually 2 ways to exit this loop -
+- // while fails (error case) and break (semicolon found).
+- // However, there is no mechanism (currently) for
+- // this function to return an error.
+- while ( i<(int)str.length()-1 )
+- {
+- outString->append( str.c_str() + i, 1 );
+- ++i;
+- if ( str[i] == ';' )
+- break;
+- }
+- }
+- else if ( c == '&' )
++ if ( c == '&' )
+ {
+ outString->append( entity[0].str, entity[0].strLength );
+ ++i;
+diff -u -r1.89 xmltest.cpp
+--- a/xmltest.cpp
++++ b/xmltest.cpp
+@@ -1340,6 +1340,16 @@
+ }*/
+ }
+
++ #ifdef TIXML_USE_STL
++ {
++ TiXmlDocument xml;
++ xml.Parse("<foo>foo&amp;#xa+bar</foo>");
++ std::string str;
++ str << xml;
++ XmlTest( "Entity escaping", "<foo>foo&amp;#xa+bar</foo>", str.c_str() );
++ }
++ #endif
++
+ /* 1417717 experiment
+ {
+ TiXmlDocument xml;
diff --git a/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml_2.6.2.bb b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml_2.6.2.bb
new file mode 100644
index 000000000..138df9f30
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtinyxml/libtinyxml_2.6.2.bb
@@ -0,0 +1,45 @@
+# (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+
+SUMMARY = "a simple, small, minimal, C++ XML parser"
+HOMEPAGE = "http://www.sourceforge.net/projects/tinyxml"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://readme.txt;md5=f8f366f3370dda889f60faa7db162cf4"
+SECTION = "libs"
+
+PR = "r5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/tinyxml/tinyxml_${@'${PV}'.replace('.', '_')}.tar.gz \
+ file://enforce-use-stl.patch \
+ file://entity-encoding.patch"
+SRC_URI[md5sum] = "c1b864c96804a10526540c664ade67f0"
+SRC_URI[sha256sum] = "15bdfdcec58a7da30adc87ac2b078e4417dbe5392f3afb719f9ba6d062645593"
+
+S = "${WORKDIR}/tinyxml"
+
+EXTRA_CXXFLAGS = "-I. -fPIC"
+
+do_compile() {
+ ${CXX} ${CXXFLAGS} ${EXTRA_CXXFLAGS} -c -o tinyxml.o tinyxml.cpp
+ ${CXX} ${CXXFLAGS} ${EXTRA_CXXFLAGS} -c -o tinyxmlerror.o tinyxmlerror.cpp
+ ${CXX} ${CXXFLAGS} ${EXTRA_CXXFLAGS} -c -o tinyxmlparser.o tinyxmlparser.cpp
+ ${CXX} ${CXXFLAGS} \
+ -shared \
+ -Wl,-soname,libtinyxml.so.${PV} \
+ -o libtinyxml.so.${PV} \
+ ${LDFLAGS} \
+ tinyxml.o \
+ tinyxmlparser.o \
+ tinyxmlerror.o
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0755 ${S}/libtinyxml.so.${PV} ${D}${libdir}
+ ln -sf libtinyxml.so.${PV} ${D}${libdir}/libtinyxml.so
+
+ install -d ${D}${includedir}
+ install -m 0644 ${S}/tinyxml.h ${D}${includedir}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_5.0.1.bb b/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_5.0.1.bb
new file mode 100644
index 000000000..8b5ab44fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_5.0.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrating into other programs"
+HOMEPAGE = "http://www.grinninglizard.com/tinyxml2/"
+SECTION = "libs"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://tinyxml2.cpp;endline=22;md5=c19221dbd8a66ad3090462af4c5de5e7"
+
+SRC_URI = "git://github.com/leethomason/tinyxml2.git"
+
+SRCREV = "37bc3aca429f0164adf68c23444540b4a24b5778"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES_${PN}-dev += "${libdir}/cmake/"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg/0001-Fix-out-of-tree-builds.patch b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg/0001-Fix-out-of-tree-builds.patch
new file mode 100644
index 000000000..6be49fbca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg/0001-Fix-out-of-tree-builds.patch
@@ -0,0 +1,39 @@
+From 6118c6ec1291a5c731aa8d4f0c1eb8cce43d47ad Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 4 Aug 2014 09:04:08 +0200
+Subject: [PATCH] Fix out-of-tree builds
+
+The include flag should point to the source directory, not the build
+directory.
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+Upstream-status: Submitted [https://github.com/libusbg/libusbg/pull/9]
+---
+ examples/Makefile.am | 2 +-
+ src/Makefile.am | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/examples/Makefile.am b/examples/Makefile.am
+index f9f9407..ef4f81e 100644
+--- a/examples/Makefile.am
++++ b/examples/Makefile.am
+@@ -1,5 +1,5 @@
+ bin_PROGRAMS = show-gadgets gadget-acm-ecm
+ gadget_acm_ecm_SOURCES = gadget-acm-ecm.c
+ show_gadgets_SOURCES = show-gadgets.c
+-AM_CPPFLAGS=-I../include/
++AM_CPPFLAGS=-I$(top_srcdir)/include/
+ AM_LDFLAGS=-L../src/ -lusbg
+diff --git a/src/Makefile.am b/src/Makefile.am
+index d955a4c..2f71366 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,4 +1,4 @@
+ lib_LTLIBRARIES = libusbg.la
+ libusbg_la_SOURCES = usbg.c
+ libusbg_la_LDFLAGS = -version-info 0:1:0
+-AM_CPPFLAGS=-I../include/
++AM_CPPFLAGS=-I$(top_srcdir)/include/
+--
+1.9.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb
new file mode 100644
index 000000000..97d60a6a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb
@@ -0,0 +1,16 @@
+SUMMARY = "USB Gadget Configfs Library"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+inherit autotools
+
+PV = "0.1.0"
+SRCREV = "a826d136e0e8fa53815f1ba05893e6dd74208c15"
+SRC_URI = "git://github.com/libusbg/libusbg.git \
+ file://0001-Fix-out-of-tree-builds.patch \
+ "
+
+S = "${WORKDIR}/git"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb
new file mode 100644
index 000000000..8c84cb376
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb
@@ -0,0 +1,41 @@
+SUMMARY = "A privileged helper for utmp/wtmp updates"
+DESCRIPTION = "\
+This library provides interface for terminal emulators such as \
+screen and xterm to record user sessions to utmp and wtmp files."
+HOMEPAGE = "ftp://ftp.altlinux.org/pub/people/ldv/utempter"
+SECTION = "System Environment/Libraries"
+LICENSE = "GPLv2 & GPLv2+ & LGPLv2 & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+SRCREV = "3ef74fff310f09e2601e241b9f042cd39d591018"
+PV = "1.1.6-alt2+git${SRCPV}"
+
+SRC_URI = "git://git.altlinux.org/people/ldv/packages/libutempter.git \
+ file://0001-Fix-macro-error.patch \
+ file://libutempter-remove-glibc-assumption.patch \
+ "
+
+S = "${WORKDIR}/git/${BPN}"
+
+CFLAGS += "-DLIBEXECDIR=${libexecdir}"
+
+do_compile() {
+ oe_runmake \
+ libdir=${libdir} \
+ libexecdir=${libexecdir}
+}
+
+do_install() {
+ oe_runmake install \
+ DESTDIR=${D} \
+ libdir="${libdir}" \
+ libexecdir="${libexecdir}" \
+ includedir=${includedir} \
+ mandir=${mandir}
+
+ rm -f ${D}${libdir}/*.a
+}
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_${PN} += "${libexecdir}/utempter/utempter"
+FILES_${PN}-dbg += "${libexecdir}/utempter/.debug/utempter"
diff --git a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0001-Fix-macro-error.patch b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0001-Fix-macro-error.patch
new file mode 100644
index 000000000..8140ea343
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0001-Fix-macro-error.patch
@@ -0,0 +1,36 @@
+From fc2bd592ad17d1c2a2a989750e69dfaedc28c633 Mon Sep 17 00:00:00 2001
+From: Qian Lei <qianl.fnst@cn.fujitsu.com>
+Date: Fri, 9 Jan 2015 10:40:29 +0800
+Subject: [PATCH] Fix macro error
+
+compile error when build on almost all architectures.
+
+Upstream-Status: Pending
+Signed-off-by: Qian Lei <qianl.fnst@cn.fujitsu.com>
+---
+ iface.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/iface.c b/iface.c
+index 5951d81..27793f0 100644
+--- a/iface.c
++++ b/iface.c
+@@ -43,7 +43,14 @@
+ __result; }))
+ #endif
+
+-#define UTEMPTER_DEFAULT_PATHNAME LIBEXECDIR "/utempter/utempter"
++#ifdef LIBEXECDIR
++# define CAT_PATH(DIR1,DIR2) DIR1##DIR2
++# define RAW_UTEMPTER_PATH CAT_PATH(LIBEXECDIR,/utempter/utempter)
++#else
++# define RAW_UTEMPTER_PATH /usr/lib/libtempter/utempter/utempter
++#endif
++#define STR_PATH(RAW_STR) #RAW_STR
++#define UTEMPTER_DEFAULT_PATHNAME STR_PATH(RAW_UTEMPTER_PATH)
+
+ static const char *utempter_pathname;
+ static int saved_fd = -1;
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/libutempter-remove-glibc-assumption.patch b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/libutempter-remove-glibc-assumption.patch
new file mode 100644
index 000000000..6ed93355b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/libutempter-remove-glibc-assumption.patch
@@ -0,0 +1,81 @@
+diff -Naur libutempter-1.1.6.orig/utempter.c libutempter-1.1.6/utempter.c
+--- libutempter-1.1.6.orig/utempter.c 2010-11-04 13:14:53.000000000 -0400
++++ libutempter-1.1.6/utempter.c 2014-06-20 16:37:09.762403323 -0400
+@@ -34,13 +34,7 @@
+ #include <sys/stat.h>
+ #include <utmp.h>
+
+-#ifdef __GLIBC__
+ # include <pty.h>
+-#elif defined(__FreeBSD__)
+-# include <libutil.h>
+-#else
+-# error Unsupported platform
+-#endif /* __GLIBC__ || __FreeBSD__ */
+
+ #define DEV_PREFIX "/dev/"
+ #define DEV_PREFIX_LEN (sizeof(DEV_PREFIX)-1)
+@@ -106,17 +100,12 @@
+
+ static int
+ write_uwtmp_record(const char *user, const char *term, const char *host,
+-#ifdef __GLIBC__
+ pid_t pid,
+-#endif
+ int add)
+ {
+ struct utmp ut;
+ struct timeval tv;
+-
+-#ifdef __GLIBC__
+ size_t offset;
+-#endif
+
+ memset(&ut, 0, sizeof(ut));
+
+@@ -128,8 +117,6 @@
+ if (host)
+ strncpy(ut.ut_host, host, sizeof(ut.ut_host));
+
+-#ifdef __GLIBC__
+-
+ offset = (strlen(term) <= sizeof(ut.ut_id)) ? 0 :
+ strlen(term) - sizeof(ut.ut_id);
+ strncpy(ut.ut_id, term + offset, sizeof(ut.ut_id));
+@@ -156,27 +143,6 @@
+
+ (void) updwtmp(_PATH_WTMP, &ut);
+
+-#elif defined(__FreeBSD__)
+-
+- ut.ut_time = tv.tv_sec;
+-
+- if (add)
+- {
+- login(&ut);
+- } else
+- {
+- if (logout(term) != 1)
+- {
+-#ifdef UTEMPTER_DEBUG
+- fprintf(stderr, "utempter: logout: %s\n",
+- strerror(errno));
+-#endif
+- exit(EXIT_FAILURE);
+- }
+- }
+-
+-#endif /* __GLIBC__ || __FreeBSD__ */
+-
+ #ifdef UTEMPTER_DEBUG
+ fprintf(stderr,
+ "utempter: DEBUG: utmp/wtmp record %s for terminal '%s'\n",
+@@ -255,8 +221,6 @@
+ validate_device(device);
+
+ return write_uwtmp_record(pw->pw_name, device + DEV_PREFIX_LEN, host,
+-#ifdef __GLIBC__
+ pid,
+-#endif
+ add);
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/links/files/ac-prog-cxx.patch b/meta-openembedded/meta-oe/recipes-support/links/files/ac-prog-cxx.patch
new file mode 100644
index 000000000..41c382685
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/links/files/ac-prog-cxx.patch
@@ -0,0 +1,11 @@
+--- links-2.1pre20/configure.in.orig 2005-12-21 15:23:49.000000000 +0000
++++ links-2.1pre20/configure.in 2005-12-21 15:23:59.000000000 +0000
+@@ -18,7 +18,7 @@
+ dnl Checks for programs.
+ AC_PROG_CC
+
+-#AC_PROG_CXX
++AC_PROG_CXX
+ #AC_PROG_AWK
+ #AM_PROG_LEX
+ #AC_PROG_YACC
diff --git a/meta-openembedded/meta-oe/recipes-support/links/files/links2.desktop b/meta-openembedded/meta-oe/recipes-support/links/files/links2.desktop
new file mode 100644
index 000000000..a05bce1b2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/links/files/links2.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Links
+Comment=Links is a browser very similar to lynx
+Comment[es]=El links es un browser para modo texto, similar a lynx
+Comment[pl]=Links jest przeglÄ…darkÄ… podobnÄ… do lynksa
+Comment[pt]=O links é um browser para modo texto, similar ao lynx
+Comment[pt_BR]=O links é um browser para modo texto, similar ao lynx
+Exec=links -g
+Terminal=true
+Icon=links2
+Type=Application
+Categories=Application;ConsoleOnly;Network;WebBrowser;
+# vi: encoding=utf-8
diff --git a/meta-openembedded/meta-oe/recipes-support/links/links-x11_2.7.bb b/meta-openembedded/meta-oe/recipes-support/links/links-x11_2.7.bb
new file mode 100644
index 000000000..2ae11ac97
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/links/links-x11_2.7.bb
@@ -0,0 +1,31 @@
+require links.inc
+
+DEPENDS += "virtual/libx11"
+RCONFLICTS_${PN} = "links"
+
+inherit distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += " file://links2.desktop \
+ http://www.xora.org.uk/oe/links2.png;name=icon"
+
+S = "${WORKDIR}/links-${PV}"
+
+EXTRA_OECONF = "--enable-graphics \
+ --with-ssl=${STAGING_LIBDIR}/.. --with-libjpeg \
+ --without-libtiff --without-svgalib --without-fb \
+ --without-directfb --without-pmshell --without-atheos \
+ --with-x --without-gpm"
+
+do_install_append() {
+ install -d ${D}/${datadir}/applications
+ install -m 0644 ${WORKDIR}/links2.desktop ${D}/${datadir}/applications
+ install -d ${D}/${datadir}/pixmaps
+ install -m 0644 ${WORKDIR}/links2.png ${D}/${datadir}/pixmaps
+}
+
+SRC_URI[md5sum] = "d06aa6e14b2172d73188871a5357185a"
+SRC_URI[sha256sum] = "0c182b1cbcdfd5cdcd2f75a6032d1a4b660d07c1225c1e07757cec81d3302130"
+SRC_URI[icon.md5sum] = "477e8787927c634614bac01b44355a33"
+SRC_URI[icon.sha256sum] = "eddcd8b8c8698aa621d1a453943892d77b72ed492e0d14e0dbac5c6a57e52f47"
diff --git a/meta-openembedded/meta-oe/recipes-support/links/links.inc b/meta-openembedded/meta-oe/recipes-support/links/links.inc
new file mode 100644
index 000000000..e07240820
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/links/links.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "Links is graphics and text mode WWW \
+browser, similar to Lynx."
+HOMEPAGE = "http://links.twibright.com/"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=65e735be2e05d5943803344148f57603"
+DEPENDS = "jpeg libpng flex openssl zlib"
+
+SRC_URI = "http://links.twibright.com/download/links-${PV}.tar.bz2 \
+ file://ac-prog-cxx.patch \
+"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
+PACKAGECONFIG[lzma] = "--with-lzma,--without-lzma,xz"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/links/links_2.7.bb b/meta-openembedded/meta-oe/recipes-support/links/links_2.7.bb
new file mode 100644
index 000000000..e80dd7bca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/links/links_2.7.bb
@@ -0,0 +1,13 @@
+require links.inc
+
+DEPENDS += "gpm"
+RCONFLICTS_${PN} = "links-x11"
+
+EXTRA_OECONF = "--enable-graphics \
+ --with-ssl=${STAGING_LIBDIR}/.. --with-libjpeg \
+ --without-libtiff --without-svgalib --with-fb \
+ --without-directfb --without-pmshell --without-atheos \
+ --without-x"
+
+SRC_URI[md5sum] = "d06aa6e14b2172d73188871a5357185a"
+SRC_URI[sha256sum] = "0c182b1cbcdfd5cdcd2f75a6032d1a4b660d07c1225c1e07757cec81d3302130"
diff --git a/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils/0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils/0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch
new file mode 100644
index 000000000..9608b7e75
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils/0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch
@@ -0,0 +1,61 @@
+From 2cc2315eecaa48fd24792aaa889dc7d9fb96978b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 20 Mar 2017 22:18:44 -0700
+Subject: [PATCH] Makefiles: Respect environment variables and add LDFLAGS to
+ linker cmdline
+
+Fixes QA errors about GNU_HASH
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ mib-modules/Makefile | 10 +++++-----
+ tools/Makefile | 2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/mib-modules/Makefile b/mib-modules/Makefile
+index 0d54c9b..051d4d2 100644
+--- a/mib-modules/Makefile
++++ b/mib-modules/Makefile
+@@ -17,13 +17,13 @@ TARG = iscsiTargetMib.so
+ OBJS = iscsiTargetMib.o iscsiMib.o scsiMib.o ipsAuthMib.o \
+ iscsiAuthData.o
+
+-CC = gcc
+-CFLAGS = -I$(INCLDIR) -I$(INCLDIR)/agent -I$(INCLDIR)/agent/mibgroup -shared -fPIC
++CC ?= gcc
++CFLAGS += -I$(INCLDIR) -I$(INCLDIR)/agent -I$(INCLDIR)/agent/mibgroup -shared -fPIC
+ CFLAGS += -I../include -Wall -Werror
+ #CFLAGS +=$(AUTO_CFLAGS)
+
+-LD = gcc -shared
+-
++LD ?= gcc
++LDFLAGS += -shared
+ INSTALL = install
+
+ all: $(TARG)
+@@ -32,7 +32,7 @@ all: $(TARG)
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+ $(TARG): $(OBJS)
+- $(LD) -o $@ $(OBJS)
++ $(LD) -o $@ $(OBJS) $(LDFLAGS)
+
+ clean:
+ rm -f $(OBJS) $(TARG)
+diff --git a/tools/Makefile b/tools/Makefile
+index 79ed3cd..ffd9bf3 100644
+--- a/tools/Makefile
++++ b/tools/Makefile
+@@ -6,7 +6,7 @@ ISCSI_NAME_OBJS = $(ISCSI_NAME_SRCS:.c=.o)
+ all:: $(ISCSI_NAME)
+
+ $(ISCSI_NAME): $(ISCSI_NAME_OBJS)
+- $(CC) -o $@ $(CFLAGS) $(ISCSI_NAME_OBJS)
++ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(ISCSI_NAME_OBJS)
+
+ clean:
+ rm -f $(ISCSI_NAME_OBJS) $(ISCSI_NAME)
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb
new file mode 100644
index 000000000..3a6319c31
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb
@@ -0,0 +1,62 @@
+SUMMARY = "lio-utils"
+DESCRIPTION = "a simple low-level configuration tool set for the Target+iSCSI (LIO)"
+HOMEPAGE = "http://linux-iscsi.org/index.php/Lio-utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=c3ea231a32635cbb5debedf3e88aa3df"
+
+PV = "4.1+git${SRCPV}"
+
+SRC_URI = "git://risingtidesystems.com/lio-utils.git \
+ file://0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch \
+ "
+SRCREV = "28bd928655bdc7bd3cf380f0196630690c51e05f"
+S = "${WORKDIR}/git"
+
+inherit distutils
+
+EXTRA_OEMAKE += "DESTDIR=${D}"
+
+do_compile() {
+ cd ${S}/tcm-py
+ distutils_do_compile
+
+ cd ${S}/lio-py
+ distutils_do_compile
+
+ if test -d ${S}/tools; then
+ oe_runmake -C ${S}/tools
+ fi
+}
+
+do_install() {
+ cd ${S}/tcm-py
+ distutils_do_install
+
+ cd ${S}/lio-py
+ distutils_do_install
+
+ SITE_PACKAGES=${D}/${PYTHON_SITEPACKAGES_DIR}
+ install -d ${D}/${sbindir}
+ for var in tcm_node tcm_dump tcm_loop tcm_fabric lio_dump lio_node; do
+ if [ ! -h ${D}/${sbindir}/${var} ];then
+ chmod a+x ${SITE_PACKAGES}/${var}.py
+ ln -s ${PYTHON_SITEPACKAGES_DIR}/${var}.py ${D}/${sbindir}/${var}
+ fi
+ done
+
+ if test -d ${S}/tools; then
+ oe_runmake -C ${S}/tools install
+ fi
+
+ install -d ${D}/etc/target/
+ install -d ${D}/etc/init.d/
+ install -m 755 ${S}/scripts/rc.target ${D}/etc/init.d/
+ install -m 755 ${S}/conf/tcm_start.default ${D}/etc/target/tcm_start.sh
+ install -m 755 ${S}/conf/lio_start.default ${D}/etc/target/lio_start.sh
+}
+
+RDEPENDS_${PN} += "python-stringold python-subprocess python-shell \
+ python-datetime python-textutils python-crypt python-netclient python-email \
+ bash"
+
+FILES_${PN} += "${sbindir}/* /etc/init.d/* /etc/target/*"
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb
new file mode 100644
index 000000000..507ce3fe5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Locking devices library"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM="file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+PV = "1.0.3+git${SRCPV}"
+
+SRCREV = "16b899645d32012cc94cc9232f64d4ddaaf0b795"
+SRC_URI = "git://anonscm.debian.org/lockdev/lockdev.git"
+
+S = "${WORKDIR}/git"
+
+inherit lib_package autotools-brokensep
+
+do_configure_prepend () {
+ ./scripts/git-version > VERSION
+
+ # Make automake happy
+ touch ChangeLog
+}
+
+CFLAGS_append_libc-musl = " -D__GNU_LIBRARY__"
diff --git a/meta-openembedded/meta-oe/recipes-support/log4c/log4c/0001-Use-the-API-properly-in-the-example-format-security-.patch b/meta-openembedded/meta-oe/recipes-support/log4c/log4c/0001-Use-the-API-properly-in-the-example-format-security-.patch
new file mode 100644
index 000000000..9ff9d7002
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/log4c/log4c/0001-Use-the-API-properly-in-the-example-format-security-.patch
@@ -0,0 +1,26 @@
+From 97f0b7b25474fab25f5757f7c50a77e20be5d05b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= <valtri@civ.zcu.cz>
+Date: Mon, 7 Sep 2015 15:00:48 +0200
+Subject: [PATCH] Use the API properly in the example (format security error
+ fixed).
+
+---
+ examples/helloworld1/mylog.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/examples/helloworld1/mylog.h b/examples/helloworld1/mylog.h
+index 280f3dc..57e5369 100644
+--- a/examples/helloworld1/mylog.h
++++ b/examples/helloworld1/mylog.h
+@@ -39,7 +39,7 @@ static LOG4C_INLINE int mylog_fini(){
+
+ static LOG4C_INLINE void mylog_msg(char *catName,int a_priority, char *msg){
+ #ifndef WITHOUT_LOG4C
+- log4c_category_log(log4c_category_get(catName), a_priority, msg);
++ log4c_category_log(log4c_category_get(catName), a_priority, "%s", msg);
+ #else
+ printf(msg);
+ #endif
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/log4c/log4c/fix_configure_with-expat.patch b/meta-openembedded/meta-oe/recipes-support/log4c/log4c/fix_configure_with-expat.patch
new file mode 100644
index 000000000..4872eb4f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/log4c/log4c/fix_configure_with-expat.patch
@@ -0,0 +1,21 @@
+The original use of AC_ARG_WITH is buggy and causes expat support
+to be *disabled* if "--with-expat" is passed to configure.
+
+Upstream status: pending
+
+Index: log4c-1.2.4/configure.in
+===================================================================
+--- log4c-1.2.4.orig/configure.in
++++ log4c-1.2.4/configure.in
+@@ -217,9 +217,9 @@ AC_ARG_WITH(expat,
+ have any effect and Log4C uses some bundled yacc/lex code
+ for parsing it's configuration file.
+ ]),
+- with_expat=no,
++ [],
+ with_expat=yes)
+-if test x$with_expat = xyes ; then
++if test x$with_expat != xno ; then
+ use_expat=yes
+ AM_PATH_EXPAT(1.95.1)
+ fi
diff --git a/meta-openembedded/meta-oe/recipes-support/log4c/log4c_1.2.4.bb b/meta-openembedded/meta-oe/recipes-support/log4c/log4c_1.2.4.bb
new file mode 100644
index 000000000..ef7ad847a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/log4c/log4c_1.2.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Log4c is a C library for flexible logging to files, syslog and other destinations"
+HOMEPAGE = "http://log4c.sourceforge.net"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://fix_configure_with-expat.patch \
+ file://0001-Use-the-API-properly-in-the-example-format-security-.patch \
+ "
+
+SRC_URI[md5sum] = "0d94919136e1d16b68427562e74cb3dd"
+SRC_URI[sha256sum] = "5991020192f52cc40fa852fbf6bbf5bd5db5d5d00aa9905c67f6f0eadeed48ea"
+
+PACKAGECONFIG ??= "expat"
+PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat"
+
+BINCONFIG = "${bindir}/log4c-config"
+
+inherit autotools binconfig-disabled
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/log4cpp/files/fix-pc.patch b/meta-openembedded/meta-oe/recipes-support/log4cpp/files/fix-pc.patch
new file mode 100644
index 000000000..b8fb42e5f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/log4cpp/files/fix-pc.patch
@@ -0,0 +1,20 @@
+diff -Nurd ./log4cpp.orig/configure.in ./log4cpp/configure.in
+--- ./log4cpp.orig/configure.in 2009-09-07 16:57:46.000000000 -0400
++++ ./log4cpp/configure.in 2016-02-23 12:57:11.567240018 -0500
+@@ -130,7 +130,6 @@
+ # ----------------------------------------------------------------------------
+
+ AC_CONFIG_LIBCONFIG_IN([log4cpp])
+-AC_CONFIG_PKGCONFIG_IN([log4cpp], [C++ library for flexible logging, modeled after Log4j])
+
+ AC_CONFIG_FILES([
+ Makefile
+diff -Nurd ./log4cpp.orig/log4cpp.pc.in ./log4cpp/log4cpp.pc.in
+--- ./log4cpp.orig/log4cpp.pc.in 2004-01-27 05:24:25.000000000 -0500
++++ ./log4cpp/log4cpp.pc.in 2016-02-22 15:06:55.769327491 -0500
+@@ -7,4 +7,4 @@
+ Description: C++ library for flexible logging, modeled after Log4j
+ Version: @VERSION@
+ Libs: -L${libdir} @log4cpp_libs@
+-Cflags: -I${includedir} @log4cpp_cflags@
++Cflags: -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb b/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb
new file mode 100644
index 000000000..dc52c9ff4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "A library of C++ classes for flexible logging to files, syslog, IDSA and other destinations."
+HOMEPAGE = "http://sourceforge.net/projects/log4cpp/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+RC = "rc5"
+SRC_URI = "http://downloads.sourceforge.net/${BPN}/${BP}${RC}.tar.gz \
+ file://fix-pc.patch;striplevel=2 \
+ "
+SRC_URI[md5sum] = "58b4591a2f3e7ef3d5e3e7cfb3a81a62"
+SRC_URI[sha256sum] = "a611d99a20af6676c60219762771c0bfac90f4879bbde70038ece75338b588ec"
+
+S = "${WORKDIR}/${BPN}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --enable-doxygen=no \
+ --enable-dot=no \
+ --enable-html-docs=no \
+ --enable-latex-docs=no \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/logwarn/logwarn_1.0.14.bb b/meta-openembedded/meta-oe/recipes-support/logwarn/logwarn_1.0.14.bb
new file mode 100644
index 000000000..5ae36bb67
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/logwarn/logwarn_1.0.14.bb
@@ -0,0 +1,52 @@
+SUMMARY = "A utility for finding interesting messages in log files"
+DESCRIPTION = "Logwarn searches for interesting messages in log files, \
+ where 'interesting' is defined by a user-supplied list of positive and \
+ negative extended regular expressions. \
+"
+HOMEPAGE = "https://github.com/archiecobbs/logwarn/wiki"
+SECTION = "console/utils"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "https://s3.amazonaws.com/archie-public/${BPN}/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "e544a6230673ea54f7430bf817bb39d8"
+SRC_URI[sha256sum] = "8dbfcf9b28c782ab3bddd6a620d4fb95d1b0ffcbe93276996cdc4800aa9aebd1"
+
+inherit autotools-brokensep
+
+# This directory is NOT volatile.
+#
+lcl_default_state_dir = "${localstatedir}/lib/logwarn"
+
+CFLAGS += '-DDEFAULT_STATE_DIR=\""${lcl_default_state_dir}\""'
+
+CACHED_CONFIGUREVARS += " \
+ ac_cv_path_BASH_SHELL=${base_bindir}/bash \
+ ac_cv_path_CAT=${base_bindir}/cat \
+ ac_cv_path_RM=${base_bindir}/rm \
+ ac_cv_path_SED=${base_bindir}/sed \
+"
+
+# Make sure some files exist for autoreconf.
+#
+do_configure_prepend () {
+ touch ${S}/NEWS
+ touch ${S}/ChangeLog
+ touch ${S}/README
+}
+
+# Create a directory for logfile state info, usually under /var/lib.
+#
+do_install_append () {
+ install -d ${D}${lcl_default_state_dir}
+}
+
+# Make a package for the nagios plug-in (script).
+#
+PACKAGES += "${PN}-nagios"
+
+FILES_${PN}-nagios = "${nonarch_libdir}/nagios"
+
+RDEPENDS_${PN}-nagios += "bash coreutils sed"
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch
new file mode 100644
index 000000000..e86ab25e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch
@@ -0,0 +1,182 @@
+From 916ea0c70fd063ab7b81f16fd917a75dc02edf4f Mon Sep 17 00:00:00 2001
+From: Peter Kjellerstedt <pkj@axis.com>
+Date: Fri, 17 Mar 2017 03:18:28 +0100
+Subject: [PATCH] Avoid bashisms in init scripts
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
+---
+ scripts/blk_availability_init_red_hat.in | 4 ++--
+ scripts/clvmd_init_red_hat.in | 6 +++---
+ scripts/cmirrord_init_red_hat.in | 4 ++--
+ scripts/lvm2_cluster_activation_red_hat.sh.in | 4 ++--
+ scripts/lvm2_lvmetad_init_red_hat.in | 4 ++--
+ scripts/lvm2_lvmpolld_init_red_hat.in | 4 ++--
+ scripts/lvm2_monitoring_init_red_hat.in | 4 ++--
+ scripts/lvm2_monitoring_init_rhel4 | 4 ++--
+ 8 files changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/scripts/blk_availability_init_red_hat.in b/scripts/blk_availability_init_red_hat.in
+index a84ffe7..6b855b7 100644
+--- a/scripts/blk_availability_init_red_hat.in
++++ b/scripts/blk_availability_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+ #
+@@ -53,6 +53,6 @@ case "$1" in
+ status)
+ ;;
+ *)
+- echo $"Usage: $0 {start|stop|status}"
++ echo "Usage: $0 {start|stop|status}"
+ ;;
+ esac
+diff --git a/scripts/clvmd_init_red_hat.in b/scripts/clvmd_init_red_hat.in
+index d7f3392..abc8011 100644
+--- a/scripts/clvmd_init_red_hat.in
++++ b/scripts/clvmd_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # clvmd - Clustered LVM Daemon init script
+ #
+@@ -161,7 +161,7 @@ restart() {
+ fi
+ }
+
+-[ "$EUID" != "0" ] && {
++[ "$(id -u)" != "0" ] && {
+ echo "clvmd init script can only be executed as root user"
+ exit 4
+ }
+@@ -206,7 +206,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
++ echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ rtrn=2
+ ;;
+ esac
+diff --git a/scripts/cmirrord_init_red_hat.in b/scripts/cmirrord_init_red_hat.in
+index d4b7e37..d442cbc 100755
+--- a/scripts/cmirrord_init_red_hat.in
++++ b/scripts/cmirrord_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # chkconfig: - 22 78
+ # description: Starts and stops cmirrord
+@@ -101,7 +101,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|restart|status}"
++ echo "Usage: $0 {start|stop|restart|status}"
+ ;;
+ esac
+
+diff --git a/scripts/lvm2_cluster_activation_red_hat.sh.in b/scripts/lvm2_cluster_activation_red_hat.sh.in
+index abea026..d8cba2e 100644
+--- a/scripts/lvm2_cluster_activation_red_hat.sh.in
++++ b/scripts/lvm2_cluster_activation_red_hat.sh.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ sbindir=@sbindir@
+
+@@ -54,7 +54,7 @@ case "$1" in
+ rtrn=$?
+ ;;
+ *)
+- echo $"Usage: $0 {activate|deactivate}"
++ echo "Usage: $0 {activate|deactivate}"
+ rtrn=3
+ ;;
+ esac
+diff --git a/scripts/lvm2_lvmetad_init_red_hat.in b/scripts/lvm2_lvmetad_init_red_hat.in
+index b2f5d50..96269a9 100644
+--- a/scripts/lvm2_lvmetad_init_red_hat.in
++++ b/scripts/lvm2_lvmetad_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+ #
+@@ -105,7 +105,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
++ echo "Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
+ ;;
+ esac
+
+diff --git a/scripts/lvm2_lvmpolld_init_red_hat.in b/scripts/lvm2_lvmpolld_init_red_hat.in
+index c521955..cdbaece 100644
+--- a/scripts/lvm2_lvmpolld_init_red_hat.in
++++ b/scripts/lvm2_lvmpolld_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright (C) 2015 Red Hat, Inc. All rights reserved.
+ #
+@@ -107,7 +107,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
++ echo "Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
+ ;;
+ esac
+
+diff --git a/scripts/lvm2_monitoring_init_red_hat.in b/scripts/lvm2_monitoring_init_red_hat.in
+index de7ff0d..9ff6bb7 100644
+--- a/scripts/lvm2_monitoring_init_red_hat.in
++++ b/scripts/lvm2_monitoring_init_red_hat.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright (C) 2007-2009 Red Hat, Inc. All rights reserved.
+ #
+@@ -128,7 +128,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|restart|status|force-stop}"
++ echo "Usage: $0 {start|stop|restart|status|force-stop}"
+ ;;
+ esac
+
+diff --git a/scripts/lvm2_monitoring_init_rhel4 b/scripts/lvm2_monitoring_init_rhel4
+index 8eb06c5..2e8d0f7 100644
+--- a/scripts/lvm2_monitoring_init_rhel4
++++ b/scripts/lvm2_monitoring_init_rhel4
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright (C) 2007 Red Hat, Inc. All rights reserved.
+ #
+@@ -93,7 +93,7 @@ case "$1" in
+ ;;
+
+ *)
+- echo $"Usage: $0 {start|stop|restart|status|force-stop}"
++ echo "Usage: $0 {start|stop|restart|status|force-stop}"
+ ;;
+ esac
+
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-implement-libc-specific-reopen_stream.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-implement-libc-specific-reopen_stream.patch
new file mode 100644
index 000000000..5d72402bd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-implement-libc-specific-reopen_stream.patch
@@ -0,0 +1,79 @@
+From e3103459416616d3b8508e7176e897b0ae6c90f2 Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 25 Oct 2016 11:49:40 +0000
+Subject: [PATCH] implement libc specific reopen_stream
+
+musl defines stdin/stdio/stderr as constant types which means
+we can not assign to them as we are doing here but works ok with glibc
+therefore abstract out the _reopen_stream definition depending upon if
+we are using glibc or otherwise
+
+Origin:
+http://git.alpinelinux.org/cgit/aports/tree/main/lvm2/fix-stdio-usage.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+
+---
+ lib/log/log.c | 6 ++++++
+ tools/lvmcmdline.c | 6 +++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/lib/log/log.c b/lib/log/log.c
+index c933154..3581084 100644
+--- a/lib/log/log.c
++++ b/lib/log/log.c
+@@ -161,6 +161,7 @@ static void _check_and_replace_standard_log_streams(FILE *old_stream, FILE *new_
+ * Close and reopen standard stream on file descriptor fd.
+ */
+ int reopen_standard_stream(FILE **stream, const char *mode)
++#ifdef __GLIBC__
+ {
+ int fd, fd_copy, new_fd;
+ const char *name;
+@@ -207,6 +208,11 @@ int reopen_standard_stream(FILE **stream, const char *mode)
+ *stream = new_stream;
+ return 1;
+ }
++#else
++{
++ return (freopen(NULL, mode, *stream) != NULL);
++}
++#endif
+
+ void init_log_fn(lvm2_log_fn_t log_fn)
+ {
+diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
+index 9a4deb7..f1f18e6 100644
+--- a/tools/lvmcmdline.c
++++ b/tools/lvmcmdline.c
+@@ -1818,7 +1818,7 @@ static int _check_standard_fds(void)
+ int err = is_valid_fd(STDERR_FILENO);
+
+ if (!is_valid_fd(STDIN_FILENO) &&
+- !(stdin = fopen(_PATH_DEVNULL, "r"))) {
++ !freopen(_PATH_DEVNULL, "r", stdin)) {
+ if (err)
+ perror("stdin stream open");
+ else
+@@ -1828,7 +1828,7 @@ static int _check_standard_fds(void)
+ }
+
+ if (!is_valid_fd(STDOUT_FILENO) &&
+- !(stdout = fopen(_PATH_DEVNULL, "w"))) {
++ !freopen(_PATH_DEVNULL, "w", stdout)) {
+ if (err)
+ perror("stdout stream open");
+ /* else no stdout */
+@@ -1836,7 +1836,7 @@ static int _check_standard_fds(void)
+ }
+
+ if (!is_valid_fd(STDERR_FILENO) &&
+- !(stderr = fopen(_PATH_DEVNULL, "w"))) {
++ !freopen(_PATH_DEVNULL, "w", stderr)) {
+ printf("stderr stream open: %s\n",
+ strerror(errno));
+ return 0;
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0002-Guard-use-of-mallinfo-with-__GLIBC__.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0002-Guard-use-of-mallinfo-with-__GLIBC__.patch
new file mode 100644
index 000000000..95dcede33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0002-Guard-use-of-mallinfo-with-__GLIBC__.patch
@@ -0,0 +1,30 @@
+From 3ae9c0b607ec33fb07f32a41e9d28cc9068dd39a Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 25 Oct 2016 11:52:44 +0000
+Subject: [PATCH] Guard use of mallinfo() with __GLIBC__
+
+This API is glibc-only
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+
+---
+ lib/mm/memlock.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c
+index da90144..f34f890 100644
+--- a/lib/mm/memlock.c
++++ b/lib/mm/memlock.c
+@@ -150,7 +150,7 @@ static void _touch_memory(void *mem, size_t size)
+
+ static void _allocate_memory(void)
+ {
+-#ifndef VALGRIND_POOL
++#if !defined(VALGRIND_POOL) && defined(__GLIBC__)
+ void *stack_mem;
+ struct rlimit limit;
+ int i, area = 0, missing = _size_malloc_tmp, max_areas = 32, hblks;
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch
new file mode 100644
index 000000000..9ab1c06d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch
@@ -0,0 +1,30 @@
+From b1ad91a059d99afd1ce25823b7c0a8d3ac63d2fd Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 25 Oct 2016 11:55:49 +0000
+Subject: [PATCH 3/4] include fcntl.h for O_* defines and fcntl() signature
+
+On glibc _somehow_ this header gets pulled in indirectly
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+Upstream-Status: Pending
+---
+ libdaemon/server/daemon-server.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
+index 6af6de9..a9590e7 100644
+--- a/libdaemon/server/daemon-server.c
++++ b/libdaemon/server/daemon-server.c
+@@ -18,6 +18,7 @@
+ #include "daemon-server.h"
+ #include "daemon-log.h"
+
++#include <fcntl.h>
+ #include <dlfcn.h>
+ #include <errno.h>
+ #include <pthread.h>
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0004-tweak-MODPROBE_CMD-for-cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0004-tweak-MODPROBE_CMD-for-cross-compile.patch
new file mode 100644
index 000000000..aaeaa725d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0004-tweak-MODPROBE_CMD-for-cross-compile.patch
@@ -0,0 +1,38 @@
+From 0012ea63f6070a5d41fa380970f9c30b953237d2 Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 25 Oct 2016 11:59:40 +0000
+Subject: [PATCH 4/4] tweak MODPROBE_CMD for cross compile
+
+Lvm uses variable MODPROBE_CMD at runtime, so build time detection of modprobe
+is incorrect.
+------
+|lvm lvcreate --thinpool wrl/pool00 --size 5556m --config devices
+{ preferred_names=["^/dev/mapper/", "^/dev/md/", "^/dev/sd"]
+filter=["r|/loop1$|","r|/loop2$|","r|/loop3$|","r|/loop4$|","r|/loop5$|","r|/loop6$|","r|/loop7$|"] }
+|tmp/sysroots/x86_64-linux/usr/bin/modprobe: execvp failed: No such file or directory
+|tmp/sysroots/x86_64-linux/usr/bin/modprobe failed: 2
+------
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ configure.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index cc77aab..a3579f2 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1853,7 +1853,6 @@ if test "$UDEV_SYNC" = yes; then
+ fi
+
+ ################################################################################
+-AC_PATH_TOOL(MODPROBE_CMD, modprobe)
+
+ if test -n "$MODPROBE_CMD"; then
+ AC_DEFINE_UNQUOTED([MODPROBE_CMD], ["$MODPROBE_CMD"], [The path to 'modprobe', if available.])
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch
new file mode 100644
index 000000000..15aa9f500
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch
@@ -0,0 +1,58 @@
+From d8bb25e34d6533ba78eaae697771ee499a66706f Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 2 Aug 2017 03:41:37 -0400
+Subject: [PATCH] do not build manual
+
+On some host (ubuntu 1404), build manual failed.
+...
+./tools/man-generator --primary lvscan lvscan.8_des
+Failed to stat description file lvscan.8_des.
+...
+
+Do not build man to workaround the issue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.in | 4 ++--
+ configure.in | 1 -
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 31d428d..24f89a2 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -18,7 +18,7 @@ top_builddir = @top_builddir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
+
+-SUBDIRS = conf daemons include lib libdaemon libdm man scripts tools
++SUBDIRS = conf daemons include lib libdaemon libdm scripts tools
+
+ ifeq ("@UDEV_RULES@", "yes")
+ SUBDIRS += udev
+@@ -69,7 +69,7 @@ liblvm.device-mapper: include.device-mapper
+ daemons.device-mapper: libdm.device-mapper
+ tools.device-mapper: libdm.device-mapper
+ scripts.device-mapper: include.device-mapper
+-device-mapper: tools.device-mapper daemons.device-mapper man.device-mapper
++device-mapper: tools.device-mapper daemons.device-mapper
+
+ ifeq ("@INTL@", "yes")
+ lib.pofile: include.pofile
+diff --git a/configure.in b/configure.in
+index 1dc8819..108ace4 100644
+--- a/configure.in
++++ b/configure.in
+@@ -2213,7 +2213,6 @@ libdm/Makefile
+ libdm/libdevmapper.pc
+ liblvm/Makefile
+ liblvm/liblvm2app.pc
+-man/Makefile
+ po/Makefile
+ python/Makefile
+ python/setup.py
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch
new file mode 100644
index 000000000..0e68d62fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch
@@ -0,0 +1,32 @@
+From 24a2c47fd01dde1710f1fa66f5c30ce7010c5956 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 21 Sep 2017 15:28:10 +0800
+Subject: [PATCH] start lvm2-monitor.service after tmp.mount
+
+The lvm2-monitor.service reqires the existence of locking_dir
+("/tmp/lock/lvm"), and unit tmp.mount is to mount /tmp.
+So start lvm2-monitor.service after tmp.mount
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ scripts/lvm2_monitoring_systemd_red_hat.service.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/lvm2_monitoring_systemd_red_hat.service.in b/scripts/lvm2_monitoring_systemd_red_hat.service.in
+index 22238b7..93b2bee 100644
+--- a/scripts/lvm2_monitoring_systemd_red_hat.service.in
++++ b/scripts/lvm2_monitoring_systemd_red_hat.service.in
+@@ -2,7 +2,7 @@
+ Description=Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
+ Documentation=man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8)
+ Requires=dm-event.socket lvm2-lvmetad.socket
+-After=dm-event.socket dm-event.service lvm2-lvmetad.socket lvm2-activation.service lvm2-lvmetad.service
++After=dm-event.socket dm-event.service lvm2-lvmetad.socket lvm2-activation.service lvm2-lvmetad.service tmp.mount
+ Before=local-fs-pre.target
+ DefaultDependencies=no
+ Conflicts=shutdown.target
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/lvm.conf b/meta-openembedded/meta-oe/recipes-support/lvm2/files/lvm.conf
new file mode 100644
index 000000000..c2bb85d8b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/lvm.conf
@@ -0,0 +1,326 @@
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# /etc/lvm/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# To put this file in a different directory and override /etc/lvm set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+
+
+# This section allows you to configure which block devices should
+# be used by the LVM system.
+devices {
+
+ # Where do you want your volume groups to appear ?
+ dir = "/dev"
+
+ # An array of directories that contain the device nodes you wish
+ # to use with LVM2.
+ scan = [ "/dev" ]
+
+ # A filter that tells LVM2 to only use a restricted set of devices.
+ # The filter consists of an array of regular expressions. These
+ # expressions can be delimited by a character of your choice, and
+ # prefixed with either an 'a' (for accept) or 'r' (for reject).
+ # The first expression found to match a device name determines if
+ # the device will be accepted or rejected (ignored). Devices that
+ # don't match any patterns are accepted.
+
+ # Be careful if there there are symbolic links or multiple filesystem
+ # entries for the same device as each name is checked separately against
+ # the list of patterns. The effect is that if any name matches any 'a'
+ # pattern, the device is accepted; otherwise if any name matches any 'r'
+ # pattern it is rejected; otherwise it is accepted.
+
+ # Don't have more than one filter line active at once: only one gets used.
+
+ # Run vgscan after you change this parameter to ensure that
+ # the cache file gets regenerated (see below).
+ # If it doesn't do what you expect, check the output of 'vgscan -vvvv'.
+
+
+ # By default we accept every block device:
+ filter = [ "a/.*/" ]
+
+ # Exclude the cdrom drive
+ # filter = [ "r|/dev/cdrom|" ]
+
+ # When testing I like to work with just loopback devices:
+ # filter = [ "a/loop/", "r/.*/" ]
+
+ # Or maybe all loops and ide drives except hdc:
+ # filter =[ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
+
+ # Use anchors if you want to be really specific
+ # filter = [ "a|^/dev/hda8$|", "r/.*/" ]
+
+ # The results of the filtering are cached on disk to avoid
+ # rescanning dud devices (which can take a very long time). By
+ # default this cache file is hidden in the /etc/lvm directory.
+ # It is safe to delete this file: the tools regenerate it.
+ cache = "/etc/lvm/.cache"
+
+ # You can turn off writing this cache file by setting this to 0.
+ write_cache_state = 1
+
+ # Advanced settings.
+
+ # List of pairs of additional acceptable block device types found
+ # in /proc/devices with maximum (non-zero) number of partitions.
+ # types = [ "fd", 16 ]
+
+ # If sysfs is mounted (2.6 kernels) restrict device scanning to
+ # the block devices it believes are valid.
+ # 1 enables; 0 disables.
+ sysfs_scan = 1
+
+ # By default, LVM2 will ignore devices used as components of
+ # software RAID (md) devices by looking for md superblocks.
+ # 1 enables; 0 disables.
+ md_component_detection = 1
+}
+
+# This section that allows you to configure the nature of the
+# information that LVM2 reports.
+log {
+
+ # Controls the messages sent to stdout or stderr.
+ # There are three levels of verbosity, 3 being the most verbose.
+ verbose = 0
+
+ # Should we send log messages through syslog?
+ # 1 is yes; 0 is no.
+ syslog = 1
+
+ # Should we log error and debug messages to a file?
+ # By default there is no log file.
+ #file = "/var/log/lvm2.log"
+
+ # Should we overwrite the log file each time the program is run?
+ # By default we append.
+ overwrite = 0
+
+ # What level of log messages should we send to the log file and/or syslog?
+ # There are 6 syslog-like log levels currently in use - 2 to 7 inclusive.
+ # 7 is the most verbose (LOG_DEBUG).
+ level = 0
+
+ # Format of output messages
+ # Whether or not (1 or 0) to indent messages according to their severity
+ indent = 1
+
+ # Whether or not (1 or 0) to display the command name on each line output
+ command_names = 0
+
+ # A prefix to use before the message text (but after the command name,
+ # if selected). Default is two spaces, so you can see/grep the severity
+ # of each message.
+ prefix = " "
+
+ # To make the messages look similar to the original LVM tools use:
+ # indent = 0
+ # command_names = 1
+ # prefix = " -- "
+
+ # Set this if you want log messages during activation.
+ # Don't use this in low memory situations (can deadlock).
+ # activation = 0
+}
+
+# Configuration of metadata backups and archiving. In LVM2 when we
+# talk about a 'backup' we mean making a copy of the metadata for the
+# *current* system. The 'archive' contains old metadata configurations.
+# Backups are stored in a human readeable text format.
+backup {
+
+ # Should we maintain a backup of the current metadata configuration ?
+ # Use 1 for Yes; 0 for No.
+ # Think very hard before turning this off!
+ backup = 1
+
+ # Where shall we keep it ?
+ # Remember to back up this directory regularly!
+ backup_dir = "/etc/lvm/backup"
+
+ # Should we maintain an archive of old metadata configurations.
+ # Use 1 for Yes; 0 for No.
+ # On by default. Think very hard before turning this off.
+ archive = 1
+
+ # Where should archived files go ?
+ # Remember to back up this directory regularly!
+ archive_dir = "/etc/lvm/archive"
+
+ # What is the minimum number of archive files you wish to keep ?
+ retain_min = 10
+
+ # What is the minimum time you wish to keep an archive file for ?
+ retain_days = 30
+}
+
+# Settings for the running LVM2 in shell (readline) mode.
+shell {
+
+ # Number of lines of history to store in ~/.lvm_history
+ history_size = 100
+}
+
+
+# Miscellaneous global LVM2 settings
+global {
+
+ # The file creation mask for any files and directories created.
+ # Interpreted as octal if the first digit is zero.
+ umask = 077
+
+ # Allow other users to read the files
+ #umask = 022
+
+ # Enabling test mode means that no changes to the on disk metadata
+ # will be made. Equivalent to having the -t option on every
+ # command. Defaults to off.
+ test = 0
+
+ # Whether or not to communicate with the kernel device-mapper.
+ # Set to 0 if you want to use the tools to manipulate LVM metadata
+ # without activating any logical volumes.
+ # If the device-mapper kernel driver is not present in your kernel
+ # setting this to 0 should suppress the error messages.
+ activation = 1
+
+ # If we can't communicate with device-mapper, should we try running
+ # the LVM1 tools?
+ # This option only applies to 2.4 kernels and is provided to help you
+ # switch between device-mapper kernels and LVM1 kernels.
+ # The LVM1 tools need to be installed with .lvm1 suffices
+ # e.g. vgscan.lvm1 and they will stop working after you start using
+ # the new lvm2 on-disk metadata format.
+ # The default value is set when the tools are built.
+ # fallback_to_lvm1 = 0
+
+ # The default metadata format that commands should use - "lvm1" or "lvm2".
+ # The command line override is -M1 or -M2.
+ # Defaults to "lvm1" if compiled in, else "lvm2".
+ # format = "lvm1"
+
+ # Location of proc filesystem
+ proc = "/proc"
+
+ # Type of locking to use. Defaults to file-based locking (1).
+ # Turn locking off by setting to 0 (dangerous: risks metadata corruption
+ # if LVM2 commands get run concurrently).
+ locking_type = 1
+
+ # Local non-LV directory that holds file-based locks while commands are
+ # in progress. A directory like /tmp that may get wiped on reboot is OK.
+ locking_dir = "/tmp/lock/lvm"
+
+ # Other entries can go here to allow you to load shared libraries
+ # e.g. if support for LVM1 metadata was compiled as a shared library use
+ # format_libraries = "liblvm2format1.so"
+ # Full pathnames can be given.
+
+ # Search this directory first for shared libraries.
+ # library_dir = "/lib"
+}
+
+activation {
+ # Device used in place of missing stripes if activating incomplete volume.
+ # For now, you need to set this up yourself first (e.g. with 'dmsetup')
+ # For example, you could make it return I/O errors using the 'error'
+ # target or make it return zeros.
+ missing_stripe_filler = "/dev/ioerror"
+
+ # Size (in KB) of each copy operation when mirroring
+ mirror_region_size = 512
+
+ # How much stack (in KB) to reserve for use while devices suspended
+ reserved_stack = 256
+
+ # How much memory (in KB) to reserve for use while devices suspended
+ reserved_memory = 8192
+
+ # Nice value used while devices suspended
+ process_priority = -18
+
+ # If volume_list is defined, each LV is only activated if there is a
+ # match against the list.
+ # "vgname" and "vgname/lvname" are matched exactly.
+ # "@tag" matches any tag set in the LV or VG.
+ # "@*" matches if any tag defined on the host is also set in the LV or VG
+ #
+ # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+}
+
+
+####################
+# Advanced section #
+####################
+
+# Metadata settings
+#
+# metadata {
+ # Default number of copies of metadata to hold on each PV. 0, 1 or 2.
+ # You might want to override it from the command line with 0
+ # when running pvcreate on new PVs which are to be added to large VGs.
+
+ # pvmetadatacopies = 1
+
+ # Approximate default size of on-disk metadata areas in sectors.
+ # You should increase this if you have large volume groups or
+ # you want to retain a large on-disk history of your metadata changes.
+
+ # pvmetadatasize = 255
+
+ # List of directories holding live copies of text format metadata.
+ # These directories must not be on logical volumes!
+ # It's possible to use LVM2 with a couple of directories here,
+ # preferably on different (non-LV) filesystems, and with no other
+ # on-disk metadata (pvmetadatacopies = 0). Or this can be in
+ # addition to on-disk metadata areas.
+ # The feature was originally added to simplify testing and is not
+ # supported under low memory situations - the machine could lock up.
+ #
+ # Never edit any files in these directories by hand unless you
+ # you are absolutely sure you know what you are doing! Use
+ # the supplied toolset to make changes (e.g. vgcfgrestore).
+
+ # dirs = [ "/etc/lvm/metadata", "/mnt/disk2/lvm/metadata2" ]
+#}
+
+# Event daemon
+#
+dmeventd {
+ # mirror_library is the library used when monitoring a mirror device.
+ #
+ # "libdevmapper-event-lvm2mirror.so" attempts to recover from
+ # failures. It removes failed devices from a volume group and
+ # reconfigures a mirror as necessary. If no mirror library is
+ # provided, mirrors are not monitored through dmeventd.
+
+ mirror_library = "@libdir@/device-mapper/libdevmapper-event-lvm2mirror.so"
+
+ # snapshot_library is the library used when monitoring a snapshot device.
+ #
+ # "libdevmapper-event-lvm2snapshot.so" monitors the filling of
+ # snapshots and emits a warning through syslog when the use of
+ # the snapshot exceeds 80%. The warning is repeated when 85%, 90% and
+ # 95% of the snapshot is filled.
+
+ snapshot_library = "@libdir@/device-mapper/libdevmapper-event-lvm2snapshot.so"
+
+ # thin_library is the library used when monitoring a thin device.
+ #
+ # "libdevmapper-event-lvm2thin.so" monitors the filling of
+ # pool and emits a warning through syslog when the use of
+ # the pool exceeds 80%. The warning is repeated when 85%, 90% and
+ # 95% of the pool is filled.
+
+ thin_library = "@libdir@/device-mapper/libdevmapper-event-lvm2thin.so"
+
+ # Full path of the dmeventd binary.
+ #
+ # executable = "@DMEVENTD_PATH@"
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.171.bb b/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.171.bb
new file mode 100644
index 000000000..b6ae90240
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.171.bb
@@ -0,0 +1,16 @@
+require lvm2.inc
+
+SRC_URI[md5sum] = "153b7bb643eb26073274968e9026fa8f"
+SRC_URI[sha256sum] = "b815a711a2fabaa5c3dc1a4a284df0268bf0f325f0fc0f5c9530c9bbb54b9964"
+
+DEPENDS += "autoconf-archive-native"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' -C libdm install
+}
+
+RRECOMMENDS_${PN}_append_class-target = " lvm2-udevrules"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc
new file mode 100644
index 000000000..289e07d8d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc
@@ -0,0 +1,60 @@
+HOMEPAGE = "https://www.sourceware.org/lvm2/"
+SECTION = "utils"
+DESCRIPTION = "LVM2 is a set of utilities to manage logical volumes in Linux."
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12713b4d9386533feeb07d6e4831765a \
+ file://COPYING.LIB;md5=fbc093901857fcd118f065f900982c24"
+
+DEPENDS += "util-linux"
+
+SRC_URI = "ftp://sources.redhat.com/pub/lvm2/old/LVM2.${PV}.tgz \
+ file://lvm.conf \
+ file://0001-implement-libc-specific-reopen_stream.patch \
+ file://0002-Guard-use-of-mallinfo-with-__GLIBC__.patch \
+ file://0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch \
+ file://0004-tweak-MODPROBE_CMD-for-cross-compile.patch \
+ file://0001-Avoid-bashisms-in-init-scripts.patch \
+ file://0005-do-not-build-manual.patch \
+ file://0006-start-lvm2-monitor.service-after-tmp.mount.patch \
+ "
+S = "${WORKDIR}/LVM2.${PV}"
+
+inherit autotools-brokensep pkgconfig systemd license
+
+LVM2_PACKAGECONFIG = "dmeventd lvmetad"
+LVM2_PACKAGECONFIG_append_class-target = " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
+ ${@incompatible_license_contains('GPLv3', '', 'thin-provisioning-tools', d)} \
+ udev \
+"
+
+# odirect is always enabled because there currently is a bug in
+# lib/device/dev-io.c which prevents compiling without it. It is
+# better to stick to configurations that were actually tested by
+# upstream...
+PACKAGECONFIG ??= "odirect ${LVM2_PACKAGECONFIG}"
+
+PACKAGECONFIG[dmeventd] = "--enable-dmeventd,--disable-dmeventd"
+PACKAGECONFIG[lvmetad] = "--enable-lvmetad,--disable-lvmetad"
+PACKAGECONFIG[odirect] = "--enable-o_direct,--disable-o_direct"
+PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
+PACKAGECONFIG[thin-provisioning-tools] = "--with-thin=internal,--with-thin=none,,thin-provisioning-tools"
+PACKAGECONFIG[udev] = "--enable-udev_sync --enable-udev_rules --with-udevdir=${nonarch_base_libdir}/udev/rules.d,--disable-udev_sync --disable-udev_rules,udev"
+
+# Unset user/group to unbreak install.
+EXTRA_OECONF = "--with-user= \
+ --with-group= \
+ --enable-realtime \
+ --enable-applib \
+ --enable-cmdlib \
+ --enable-pkgconfig \
+ --with-usrlibdir=${libdir} \
+ --with-systemdsystemunitdir=${systemd_system_unitdir} \
+ --disable-thin_check_needs_check \
+ --with-thin-check=${sbindir}/thin_check \
+ --with-thin-dump=${sbindir}/thin_dump \
+ --with-thin-repair=${sbindir}/thin_repair \
+ --with-thin-restore=${sbindir}/thin_restore \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
new file mode 100644
index 000000000..e85818dbd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
@@ -0,0 +1,36 @@
+From 0a8e466fcf99622896e070c5133165e4278e8cfb Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 25 May 2017 05:27:11 -0400
+Subject: [PATCH] explicitly do not install libdm
+
+Already have package libdevmapper which split from lvm2,
+explicitly do not do the installation here.
+
+Upstream-Status: Inappropriate [meta-oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ libdm/Makefile.in | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libdm/Makefile.in b/libdm/Makefile.in
+index 3c9a4ce..45c91c6 100644
+--- a/libdm/Makefile.in
++++ b/libdm/Makefile.in
+@@ -77,9 +77,11 @@ ifeq ("@PKGCONFIG@", "yes")
+ INSTALL_TYPE += install_pkgconfig
+ endif
+
+-install: $(INSTALL_TYPE) install_include
++install:
++ echo "Do not install device mappler in lvm2"
+
+-install_device-mapper: install
++install_device-mapper:
++ echo "Do not install device mappler in lvm2"
+
+ install_include: $(srcdir)/libdevmapper.h
+ $(INSTALL_DATA) -D $< $(includedir)/$(<F)
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb
new file mode 100644
index 000000000..84881e744
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb
@@ -0,0 +1,54 @@
+require lvm2.inc
+
+SRC_URI[md5sum] = "153b7bb643eb26073274968e9026fa8f"
+SRC_URI[sha256sum] = "b815a711a2fabaa5c3dc1a4a284df0268bf0f325f0fc0f5c9530c9bbb54b9964"
+
+SRC_URI += "file://0001-explicitly-do-not-install-libdm.patch"
+
+DEPENDS += "autoconf-archive-native"
+
+CACHED_CONFIGUREVARS += "MODPROBE_CMD=${base_sbindir}/modprobe"
+
+do_install_append() {
+ # Install machine specific configuration file
+ install -d ${D}${sysconfdir}/lvm
+ install -m 0644 ${WORKDIR}/lvm.conf ${D}${sysconfdir}/lvm/lvm.conf
+ sed -i -e 's:@libdir@:${libdir}:g' ${D}${sysconfdir}/lvm/lvm.conf
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ oe_runmake 'DESTDIR=${D}' install install_systemd_units
+ sed -i -e 's:/usr/bin/true:${base_bindir}/true:g' ${D}${systemd_system_unitdir}/blk-availability.service
+ else
+ oe_runmake 'DESTDIR=${D}' install install_initscripts
+ mv ${D}${sysconfdir}/rc.d/init.d ${D}${sysconfdir}/init.d
+ rm -rf ${D}${sysconfdir}/rc.d
+ fi
+}
+
+PACKAGE_BEFORE_PN = "${PN}-scripts ${PN}-udevrules"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'dmeventd', 'lvm2-monitor.service dm-event.socket dm-event.service', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'lvmetad', 'lvm2-lvmetad.socket lvm2-pvscan@.service', '', d)} \
+ blk-availability.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+FILES_${PN} += "${libdir}/device-mapper/*.so"
+FILES_${PN}-scripts = " \
+ ${sbindir}/blkdeactivate \
+ ${sbindir}/fsadm \
+ ${sbindir}/lvmconf \
+ ${sbindir}/lvmdump \
+"
+# Specified explicitly for the udev rules, just in case that it does not get picked
+# up automatically:
+FILES_${PN}-udevrules = "${nonarch_base_libdir}/udev/rules.d"
+RDEPENDS_${PN}_append_class-target = " libdevmapper"
+
+RDEPENDS_${PN}-scripts = "${PN} (= ${EXTENDPKGV}) bash"
+RRECOMMENDS_${PN}_class-target = "${PN}-scripts (= ${EXTENDPKGV})"
+
+CONFFILES_${PN} += "${sysconfdir}/lvm/lvm.conf"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.48.bb b/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.48.bb
new file mode 100644
index 000000000..114ce4607
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.48.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Helper application and MIME type associations for file types"
+HOMEPAGE = "https://pagure.io/mailcap"
+DESCRIPTION = "The mailcap file is used by the metamail program. Metamail reads the \
+mailcap file to determine how it should display non-text or multimedia \
+material. Basically, mailcap associates a particular type of file \
+with a particular program that a mail agent or other program can call \
+in order to handle the file. Mailcap should be installed to allow \
+certain programs to be able to handle non-text files. \
+\
+Also included in this package is the mime.types file which contains a \
+list of MIME types and their filename extension associations, used \
+by several applications e.g. to determine MIME types for filenames."
+
+SECTION = "System Environment/Base"
+
+LICENSE = "PD & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=100fcfb84512ccc03ffc7d89ac391305"
+
+SRC_URI = "https://releases.pagure.org/${BPN}/${BP}.tar.xz"
+
+SRC_URI[md5sum] = "2c26e18e912a5cf00318fcf7f8f2d747"
+SRC_URI[sha256sum] = "d7b023b237d6053bf05ff6786e0663c55c614efcc99cdf856120be13b5c29157"
+
+do_install() {
+ oe_runmake install DESTDIR=${D} sysconfdir=${sysconfdir} mandir=${mandir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/mbuffer/mbuffer_20140310.bb b/meta-openembedded/meta-oe/recipes-support/mbuffer/mbuffer_20140310.bb
new file mode 100644
index 000000000..3467d2898
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mbuffer/mbuffer_20140310.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "mbuffer is a tool for buffering data streams with a large set of unique features."
+HOMEPAGE = "http://www.maier-komor.de/mbuffer.html"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504"
+SECTION = "console/network"
+
+SRC_URI = " \
+ http://www.maier-komor.de/software/mbuffer/mbuffer-20140310.tgz \
+"
+
+SRC_URI[md5sum] = "9937d7f666c19a2e6b2499b04dbecc44"
+SRC_URI[sha256sum] = "ab90b6fdce16db2bf08bcda0bc5d2bfb053a9a163d2a24f95fbf246460549b99"
+
+inherit autotools
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[md5] = "--enable-md5,--disable-md5,openssl"
+
+do_configure() {
+ ( cd ${S}; gnu-configize )
+ oe_runconf
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mce-inject_git.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-inject_git.bb
new file mode 100644
index 000000000..f87614491
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-inject_git.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Linux machine check injector tool"
+DESCRIPTION = "mce-inject allows to inject machine check errors on the \
+software level into a running Linux kernel. This is intended for \
+validation of the kernel machine check handler."
+SECTION = "System Environment/Base"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/cpu/mce/mce-inject.git"
+
+SRCREV = "4cbe46321b4a81365ff3aafafe63967264dbfec5"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://README;beginline=30;md5=94c18755082a2da9c9cf97cba3ad47d6"
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*)-linux'
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = "destdir=${D}"
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog/run-ptest b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog/run-ptest
new file mode 100644
index 000000000..ba7a2c768
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+make -C tests test
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_1.49.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_1.49.bb
new file mode 100644
index 000000000..84633a76c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_1.49.bb
@@ -0,0 +1,35 @@
+SUMMARY = "mcelog daemon accounts memory and some other errors in various ways."
+DESCRIPTION = "mcelog is required by both 32bit x86 Linux kernels (since 2.6.30) \
+and 64bit Linux kernels (since early 2.6 kernel releases) to log machine checks \
+and should run on all Linux systems that need error handling."
+HOMEPAGE = "http://mcelog.org/"
+SECTION = "System Environment/Base"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/cpu/mce/mcelog.git;protocol=http; \
+ file://run-ptest \
+"
+
+SRCREV = "2cfdf29b2ef98ccd5ed42cdde8bbe437e0d6412f"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://README.md;md5=279840fabb191e6cd9150492d31b0e20"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep ptest
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*)-linux'
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/cron.hourly
+ install -m 0755 ${S}/mcelog.cron ${D}${sysconfdir}/cron.hourly/
+ sed -i 's/bash/sh/' ${D}${sysconfdir}/cron.hourly/mcelog.cron
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ cp -r ${S}/tests ${S}/input ${D}${PTEST_PATH}
+ sed -i 's#../../mcelog#mcelog#' ${D}${PTEST_PATH}/tests/test
+}
+
+RDEPENDS_${PN}-ptest += "${PN} make bash mce-inject"
diff --git a/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-Undefine-REGEX-for-musl-based-systems.patch b/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-Undefine-REGEX-for-musl-based-systems.patch
new file mode 100644
index 000000000..130267931
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-Undefine-REGEX-for-musl-based-systems.patch
@@ -0,0 +1,39 @@
+From a370ccd9447752c555aeca04f64021efedde4db3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Apr 2017 17:16:19 -0700
+Subject: [PATCH] Undefine REGEX for musl based systems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ GNUmakefile | 1 -
+ Makefile | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/GNUmakefile b/GNUmakefile
+index 7bf7dca..0e10030 100644
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -41,7 +41,6 @@ endif
+ CC?= gcc
+ CFLAGS?= -O2 -pipe
+ CFLAGS+= -g -Wall
+-CPPFLAGS= -DREGEX
+ CPPFLAGS+= -D_GNU_SOURCE
+ CPPFLAGS+= $(BSD_CPPFLAGS) -D__dead=__dead2
+ LIBS= $(CURSES_LIBS) $(BSD_LIBS)
+diff --git a/Makefile b/Makefile
+index 94ce340..d516bbc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -10,7 +10,7 @@ DPADD+= ${LIBCURSES} ${LIBUTIL}
+ # REGEX -- create regular expression functions.
+ # STARTUPFILE -- look for and handle initialization file.
+ #
+-CFLAGS+=-Wall -DREGEX
++CFLAGS+=-Wall
+
+ SRCS= autoexec.c basic.c bell.c buffer.c cinfo.c dir.c display.c \
+ echo.c extend.c file.c fileio.c funmap.c help.c kbd.c keymap.c \
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-fileio-Include-sys-param.h-for-MAXNAMLEN.patch b/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-fileio-Include-sys-param.h-for-MAXNAMLEN.patch
new file mode 100644
index 000000000..551f1df16
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mg/mg/0001-fileio-Include-sys-param.h-for-MAXNAMLEN.patch
@@ -0,0 +1,25 @@
+From 51539bcd2ee9f765595c0be16eebc1daee112b27 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Apr 2017 16:52:59 -0700
+Subject: [PATCH 1/2] fileio: Include sys/param.h for MAXNAMLEN
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ fileio.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fileio.c b/fileio.c
+index 48a67a2..9b69665 100644
+--- a/fileio.c
++++ b/fileio.c
+@@ -12,6 +12,7 @@
+ #include <sys/time.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
++#include <sys/param.h>
+ #include <dirent.h>
+ #include <errno.h>
+ #include <fcntl.h>
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/mg/mg/0002-fileio-Define-DEFFILEMODE-if-platform-is-missing.patch b/meta-openembedded/meta-oe/recipes-support/mg/mg/0002-fileio-Define-DEFFILEMODE-if-platform-is-missing.patch
new file mode 100644
index 000000000..907d67064
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mg/mg/0002-fileio-Define-DEFFILEMODE-if-platform-is-missing.patch
@@ -0,0 +1,28 @@
+From ce24a29cabb8f1774d262e120e5764a2afeb3825 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Apr 2017 16:53:49 -0700
+Subject: [PATCH 2/2] fileio: Define DEFFILEMODE if platform is missing
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ fileio.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/fileio.c b/fileio.c
+index 9b69665..a852fd2 100644
+--- a/fileio.c
++++ b/fileio.c
+@@ -28,6 +28,10 @@
+ #include "kbd.h"
+ #include "pathnames.h"
+
++#if !defined(DEFFILEMODE)
++# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
++#endif
++
+ static char *bkuplocation(const char *);
+ static int bkupleavetmp(const char *);
+
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/mg/mg_20170401.bb b/meta-openembedded/meta-oe/recipes-support/mg/mg_20170401.bb
new file mode 100644
index 000000000..dad1d008b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mg/mg_20170401.bb
@@ -0,0 +1,37 @@
+SUMMARY = "A portable version of the mg maintained by the OpenBSD team"
+HOMEPAGE = "http://homepage.boetes.org/software/mg/"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://version.c;md5=1895eb37bf6bd79cdc5c89d8166fabfb"
+DEPENDS = "ncurses libbsd"
+SECTION = "console/editors"
+
+SRC_URI = "http://homepage.boetes.org/software/mg/mg-${PV}.tar.gz \
+ file://0001-fileio-Include-sys-param.h-for-MAXNAMLEN.patch \
+ file://0002-fileio-Define-DEFFILEMODE-if-platform-is-missing.patch \
+ "
+SRC_URI_append_libc-musl = "\
+ file://0001-Undefine-REGEX-for-musl-based-systems.patch \
+ "
+SRC_URI[md5sum] = "884388589fb38c2109ad9fed328be20a"
+SRC_URI[sha256sum] = "0a3608b17c153960cb1d954ca3b62445a77c0c1a18aa5c8c58aba9f6b8d62aab"
+
+# CFLAGS isn't in EXTRA_OEMAKE, as the makefile picks it up via ?=
+EXTRA_OEMAKE = "\
+ 'CC=${CC}' \
+ 'LDFLAGS=${LDFLAGS}' \
+ \
+ 'prefix=${prefix}' \
+ 'bindir=${bindir}' \
+ 'libdir=${libdir}' \
+ 'includedir=${includedir}' \
+ 'mandir=${mandir}' \
+ 'PKG_CONFIG=pkg-config' \
+"
+
+CFLAGS += "-I${STAGING_INCDIR}/bsd"
+
+do_install () {
+ oe_runmake install DESTDIR=${D}
+}
+
+inherit pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb b/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb
new file mode 100644
index 000000000..d617b6620
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb
@@ -0,0 +1,58 @@
+SECTION = "base"
+SUMMARY = "MIME files 'mime.types' & 'mailcap', and support programs"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://debian/README;md5=36bbe2ace0a05c3fb684b73208fbf30b"
+
+DEPENDS = "file"
+RDEPENDS_${PN} = "perl"
+RRECOMMENDS_${PN} = "file"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/m/mime-support/mime-support_${PV}-1.tar.gz"
+S = "${WORKDIR}/${BPN}"
+
+FILES_${PN} += " ${libdir}/mime"
+
+docdir_append = "/${BPN}"
+
+do_install () {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${libdir}/mime/packages
+ install -d ${D}${docdir}
+ install -d ${D}${sbindir}
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man5
+ install -d ${D}${mandir}/man8
+ install -m 644 mime.types ${D}${sysconfdir}/
+ install -m 644 mailcap ${D}${libdir}/mime/
+ install -m 644 mailcap.order ${D}${sysconfdir}/
+ install -m 644 mailcap.man ${D}${mandir}/man5/mailcap.5
+ install -m 644 mailcap.order.man ${D}${mandir}/man5/mailcap.order.5
+# install -m 755 install-mime ${D}${sbindir}/
+# install -m 644 install-mime.man ${D}${mandir}/man8/install-mime.8
+ install -m 755 update-mime ${D}${sbindir}/
+ install -m 644 update-mime.man ${D}${mandir}/man8/update-mime.8
+ install -m 755 run-mailcap ${D}${bindir}/
+ install -m 644 run-mailcap.man ${D}${mandir}/man1/run-mailcap.1
+# install -m 644 rfcs/* ${D}${docdir}/
+ install -m 644 debian/changelog ${D}${docdir}/changelog.Debian
+ install -m 644 debian/README ${D}${docdir}/copyright
+ install -m 755 debian-view ${D}${libdir}/mime/
+ install -m 755 playaudio ${D}${libdir}/mime/
+ install -m 755 playdsp ${D}${libdir}/mime/
+ install -m 644 mailcap.entries ${D}${libdir}/mime/packages/mime-support
+ cd ${D}${mandir}; gzip -9fv */*
+ cd ${D}${docdir}; gzip -9v *
+ cd ${D}${docdir}; gunzip copyright.gz
+ cd ${D}${bindir}; ln -s run-mailcap see
+ cd ${D}${bindir}; ln -s run-mailcap edit
+ cd ${D}${bindir}; ln -s run-mailcap compose
+ cd ${D}${bindir}; ln -s run-mailcap print
+ cd ${D}${mandir}/man1; ln -s run-mailcap.1.gz see.1.gz
+ cd ${D}${mandir}/man1; ln -s run-mailcap.1.gz edit.1.gz
+ cd ${D}${mandir}/man1; ln -s run-mailcap.1.gz compose.1.gz
+ cd ${D}${mandir}/man1; ln -s run-mailcap.1.gz print.1.gz
+}
+
+SRC_URI[md5sum] = "d6e5d715e331147352c50c158dbdec6d"
+SRC_URI[sha256sum] = "a529c7892cb786f514af71f4ca5a4c3ebc58b538a49ff959c0d97592d38f040a"
diff --git a/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb b/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
new file mode 100644
index 000000000..0f1548aa2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
@@ -0,0 +1,20 @@
+# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "A minimal iconv implementation w/ support for UTF-8, ASCII, ISO-8859-1"
+HOMEPAGE = "http://tinderbox.dev.gentoo.org/portage/local/misc/mini-iconv/"
+LICENSE = "MPL-1.1"
+SECTION = "libs"
+DEPENDS = ""
+PROVIDES = "virtual/libiconv"
+LIC_FILES_CHKSUM = "file://iconv.c;beginline=1;endline=6;md5=35af9d9924327fe8a0a1fe3a2cb454c8"
+SRC_URI = "http://mirror.meleeweb.net/pub/linux/gentoo/distfiles/mini-iconv.tar.bz2"
+SRC_URI[md5sum] = "84412221e26505a2b3855d4a1cdcd0e0"
+SRC_URI[sha256sum] = "3552262bf1bcf8e859a2a3a7adfb0367af8593383e730c492e981477aac0a0d4"
+
+
+S = "${WORKDIR}/${PN}"
+
+do_install() {
+ oe_runmake install DESTDIR=${D} PREFIX=${prefix} LIB=${base_libdir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/minini/minini_1.2.b.bb b/meta-openembedded/meta-oe/recipes-support/minini/minini_1.2.b.bb
new file mode 100644
index 000000000..4a73f1212
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/minini/minini_1.2.b.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A minimal INI file parser"
+DESCRIPTION = "minIni is a programmer's library to read and write INI files in \
+embedded systems. minIni takes little resources, has a deterministic memory \
+footprint and can be configured for various kinds of file I/O libraries. minIni \
+provides functionality for reading, writing and deleting keys from an INI file, \
+all in 830 lines of (commented) source code (version 1.2) in C (the code also \
+compiles in C++ and comes with a wrapper class)."
+HOMEPAGE = "https://code.google.com/p/minini/"
+
+# License is Apache 2.0 with an exception to allow object code built from
+# unmodified original sources to be distributed more freely. See LICENSE
+# file for details.
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=eb21481ad45c5578ae8c8d37b8c8d76d"
+
+SRC_URI = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/minini/minIni_12b.zip;subdir=${BP}"
+
+SRC_URI[md5sum] = "32740621098e3f0a321c7c23f4bcbc5d"
+SRC_URI[sha256sum] = "b08839af74acb36061fb76e1123bf56711bc5cf7a08b32e189b0ad78a2e888e2"
+
+do_configure[noexec] = "1"
+
+do_compile() {
+ ${CC} ${CFLAGS} -fPIC -c minIni.c -o minIni.o
+ ${CC} ${LDFLAGS} -shared -Wl,-soname,libminini.so.0 minIni.o -o libminini.so.0.0
+}
+
+do_install () {
+
+ install -d ${D}${libdir}
+ install -m 0644 libminini.so.0.0 ${D}${libdir}/
+ ln -s libminini.so.0.0 ${D}${libdir}/libminini.so
+ ln -s libminini.so.0.0 ${D}${libdir}/libminini.so.0
+
+ install -d ${D}${includedir}/minini
+ install -m 0644 minIni.h ${D}${includedir}/minini/
+ install -m 0644 minGlue-stdio.h ${D}${includedir}/minini/minGlue.h
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-kpartx-include-limits.h-for-PATH_MAX.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-kpartx-include-limits.h-for-PATH_MAX.patch
new file mode 100644
index 000000000..46dd8e23b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-kpartx-include-limits.h-for-PATH_MAX.patch
@@ -0,0 +1,29 @@
+From 330028a5a904a0da3788141030e614569dc5aaa7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 23:28:12 -0700
+Subject: [PATCH] kpartx: include limits.h for PATH_MAX
+
+lopart.c:76:12: error: 'PATH_MAX' undeclared (first use in this function); did you mean 'INT8_MAX'?
+ char path[PATH_MAX];
+ ^~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ kpartx/lopart.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/kpartx/lopart.c b/kpartx/lopart.c
+index 7005445..5efe5dc 100644
+--- a/kpartx/lopart.c
++++ b/kpartx/lopart.c
+@@ -22,6 +22,7 @@
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <limits.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-attempt-at-common-multipath.rules.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-attempt-at-common-multipath.rules.patch
new file mode 100644
index 000000000..acb426954
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-attempt-at-common-multipath.rules.patch
@@ -0,0 +1,107 @@
+From 5ab50e0cb888e553a2635bbbf81eea3cdeffee60 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Wed, 12 Apr 2017 09:07:51 -0500
+Subject: [PATCH 01/14] multipath: attempt at common multipath.rules
+
+This is a proposal to try and bring the Redhat and SuSE multipath.rules
+closer. There are a couple of changes that I'd like some input on.
+
+The big change is moving the kpartx call into the multipath rules. Half
+of the current kpartx.rules file is about creating symlinks for multiple
+types of dm devices. The other half auto-creates kpartx devices on top
+of multipath devices. Since it is only creating kpartx devices on top of
+multipath devices, I've moved the these rules into multipath.rules, or
+rather, I've replaced them with the redhat rules in multipath.rules. The
+biggest difference is the kpartx isn't run on every reload. It works
+with the 11-dm-mpath.rules code to not run kpartx on multipathd
+generated reloads or when there aren't any working paths. It does
+remember if it didn't get to run kpartx when it was supposed to (because
+there were no valid paths or the device was suspended) and will make
+sure to run it on the next possible uevent.
+
+The other change is the redhat multipath rules remove the partition
+device nodes for devices claimed by multipath. The udev rule will only
+do this one time (both to keep from running partx on every event, and so
+that if users manually reread the partition table, we don't keep
+removing them when clearly they are wanted). Redhat does this because we
+had multiple customer issues where they were using the scsi partitions
+instead of the kpartx devices. Obviously, with setting the partition
+devices to not ready and clearing their fs_type, this isn't essential,
+but it has helped make customers do the right thing.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ kpartx/kpartx.rules | 8 --------
+ multipath/multipath.rules | 27 ++++++++++++++++++++++++---
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
+index a958791..906e320 100644
+--- a/kpartx/kpartx.rules
++++ b/kpartx/kpartx.rules
+@@ -34,12 +34,4 @@ ENV{ID_FS_LABEL_ENC}=="?*", IMPORT{db}="ID_FS_LABEL_ENC"
+ ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", \
+ SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+-# Create dm tables for partitions
+-ENV{DM_ACTION}=="PATH_FAILED|PATH_REINSTATED", GOTO="kpartx_end"
+-ENV{DM_NR_VALID_PATHS}=="0", GOTO="kpartx_end"
+-ENV{ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
+-ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="kpartx_end"
+-ENV{DM_STATE}!="SUSPENDED", ENV{DM_UUID}=="mpath-*", \
+- RUN+="/sbin/kpartx -un -p -part /dev/$name"
+-
+ LABEL="kpartx_end"
+diff --git a/multipath/multipath.rules b/multipath/multipath.rules
+index 86defc0..616a04c 100644
+--- a/multipath/multipath.rules
++++ b/multipath/multipath.rules
+@@ -1,13 +1,13 @@
+ # Set DM_MULTIPATH_DEVICE_PATH if the device should be handled by multipath
+ SUBSYSTEM!="block", GOTO="end_mpath"
+ ACTION!="add|change", GOTO="end_mpath"
+-KERNEL!="sd*|dasd*", GOTO="end_mpath"
+-
++KERNEL!="sd*|dasd*|rbd*|dm-*", GOTO="end_mpath"
+ IMPORT{cmdline}="nompath"
+ ENV{nompath}=="?*", GOTO="end_mpath"
+ IMPORT{cmdline}="multipath"
+ ENV{multipath}=="off", GOTO="end_mpath"
+
++KERNEL=="dm-*", GOTO="check_kpartx"
+ ENV{DEVTYPE}!="partition", GOTO="test_dev"
+ IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
+ ENV{DM_MULTIPATH_DEVICE_PATH}=="1", ENV{ID_FS_TYPE}="none", \
+@@ -21,7 +21,28 @@ TEST!="$env{MPATH_SBIN_PATH}/multipath", ENV{MPATH_SBIN_PATH}="/usr/sbin"
+
+ ENV{DM_MULTIPATH_DEVICE_PATH}!="1", \
+ PROGRAM=="$env{MPATH_SBIN_PATH}/multipath -u %k", \
+- ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="none", \
++ ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="mpath_member", \
+ ENV{SYSTEMD_READY}="0"
+
++ENV{DM_MULTIPATH_DEVICE_PATH}!="1", GOTO="end_mpath"
++
++IMPORT{db}="DM_MULTIPATH_WIPE_PARTS"
++ENV{DM_MULTIPATH_WIPE_PARTS}!="1", ENV{DM_MULTIPATH_WIPE_PARTS}="1", \
++ RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
++GOTO="end_mpath"
++
++LABEL="check_kpartx"
++
++IMPORT{db}="DM_MULTIPATH_NEED_KPARTX"
++ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
++ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="end_mpath"
++ACTION!="change", GOTO="end_mpath"
++ENV{DM_UUID}!="mpath-?*", GOTO="end_mpath"
++ENV{DM_ACTIVATION}=="1", ENV{DM_MULTIPATH_NEED_KPARTX}="1"
++ENV{DM_SUSPENDED}=="1", GOTO="end_mpath"
++ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
++ENV{DM_ACTIVATION}!="1", ENV{DM_MULTIPATH_NEED_KPARTX}!="1", GOTO="end_mpath"
++RUN+="/sbin/kpartx -un -p -part /dev/$name"
++ENV{DM_MULTIPATH_NEED_KPARTX}=""
++
+ LABEL="end_mpath"
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-fixup-udev-rules-for-redhat.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-fixup-udev-rules-for-redhat.patch
new file mode 100644
index 000000000..e63d2eb33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-fixup-udev-rules-for-redhat.patch
@@ -0,0 +1,110 @@
+From 158255383c02d3fb81c82fb9ec6fd36fb234f68e Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Thu, 13 Apr 2017 07:22:23 -0500
+Subject: [PATCH 02/14] RH: fixup udev rules for redhat
+
+The multipath rules need to run after scsi_id is run. This means moving
+them after 60-persistent-storage.rules for redhat. Also, we don't
+currently set up all the symlinks that SuSE does. If we want them, they
+should be done in the device-mapper package, since they are for all
+device-mapper devices. Redhat also uses a different naming scheme for
+partitions than SuSE.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ Makefile.inc | 2 +-
+ kpartx/Makefile | 14 +++++++-------
+ multipath/Makefile | 4 ++--
+ multipath/multipath.rules | 3 ++-
+ 4 files changed, 12 insertions(+), 11 deletions(-)
+
+diff --git a/Makefile.inc b/Makefile.inc
+index 1815f9a..2591fa9 100644
+--- a/Makefile.inc
++++ b/Makefile.inc
+@@ -47,7 +47,7 @@ endif
+
+ prefix =
+ exec_prefix = $(prefix)
+-bindir = $(exec_prefix)/sbin
++bindir = $(exec_prefix)/usr/sbin
+ libudevdir = $(prefix)/$(SYSTEMDPATH)/udev
+ udevrulesdir = $(libudevdir)/rules.d
+ multipathdir = $(TOPDIR)/libmultipath
+diff --git a/kpartx/Makefile b/kpartx/Makefile
+index 7b75032..bfa6fe8 100644
+--- a/kpartx/Makefile
++++ b/kpartx/Makefile
+@@ -26,19 +26,19 @@ $(EXEC): $(OBJS)
+ install: $(EXEC) $(EXEC).8
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)
+- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)
+- $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir)
+- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d
+- $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
++# $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)
++# $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir)
++# $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d
++# $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir)
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
+
+ uninstall:
+ $(RM) $(DESTDIR)$(bindir)/$(EXEC)
+ $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
+- $(RM) $(DESTDIR)$(libudevdir)/kpartx_id
+- $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
+- $(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules
++# $(RM) $(DESTDIR)$(libudevdir)/kpartx_id
++# $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
++# $(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules
+
+ clean:
+ $(RM) core *.o $(EXEC) *.gz
+diff --git a/multipath/Makefile b/multipath/Makefile
+index c85314e..1e9ee4b 100644
+--- a/multipath/Makefile
++++ b/multipath/Makefile
+@@ -24,7 +24,7 @@ install:
+ $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
+ $(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
+- $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
++ $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir)
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
+@@ -33,7 +33,7 @@ install:
+ uninstall:
+ $(RM) $(DESTDIR)$(bindir)/$(EXEC)
+ $(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
+- $(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
++ $(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
+ $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
+ $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
+
+diff --git a/multipath/multipath.rules b/multipath/multipath.rules
+index 616a04c..4d78b98 100644
+--- a/multipath/multipath.rules
++++ b/multipath/multipath.rules
+@@ -33,6 +33,7 @@ GOTO="end_mpath"
+
+ LABEL="check_kpartx"
+
++ENV{DM_UUID}=="mpath-?*|part[0-9]*-mpath-?*", OPTIONS+="link_priority=10"
+ IMPORT{db}="DM_MULTIPATH_NEED_KPARTX"
+ ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
+ ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="end_mpath"
+@@ -42,7 +43,7 @@ ENV{DM_ACTIVATION}=="1", ENV{DM_MULTIPATH_NEED_KPARTX}="1"
+ ENV{DM_SUSPENDED}=="1", GOTO="end_mpath"
+ ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
+ ENV{DM_ACTIVATION}!="1", ENV{DM_MULTIPATH_NEED_KPARTX}!="1", GOTO="end_mpath"
+-RUN+="/sbin/kpartx -un -p -part /dev/$name"
++RUN+="/sbin/kpartx -un /dev/$name"
+ ENV{DM_MULTIPATH_NEED_KPARTX}=""
+
+ LABEL="end_mpath"
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-Remove-the-property-blacklist-exception-builtin.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-Remove-the-property-blacklist-exception-builtin.patch
new file mode 100644
index 000000000..684e959d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-Remove-the-property-blacklist-exception-builtin.patch
@@ -0,0 +1,70 @@
+From 69a67c2ed09ae51b53de402966a9f7a4cc737715 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Wed, 2 Jul 2014 12:49:53 -0500
+Subject: [PATCH 03/14] RH: Remove the property blacklist exception builtin
+
+Multipath set the default property blacklist exceptions to
+(ID_SCSI_VPD|ID_WWN). This has the effect of blacklisting some internal
+devices. These devices may never have multiple paths, but it is nice
+to be able to set multipath up on them all the same. This patch simply
+removes the default, and makes it so that if no property
+blacklist_exception is given, then devices aren't failed for not matching
+it.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/blacklist.c | 15 ++++++---------
+ multipath/multipath.conf.5 | 4 ----
+ 2 files changed, 6 insertions(+), 13 deletions(-)
+
+diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
+index ee396e2..19d4697 100644
+--- a/libmultipath/blacklist.c
++++ b/libmultipath/blacklist.c
+@@ -181,12 +181,6 @@ setup_default_blist (struct config * conf)
+ if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
+ return 1;
+
+- str = STRDUP("(SCSI_IDENT_|ID_WWN)");
+- if (!str)
+- return 1;
+- if (store_ble(conf->elist_property, str, ORIGIN_DEFAULT))
+- return 1;
+-
+ vector_foreach_slot (conf->hwtable, hwe, i) {
+ if (hwe->bl_product) {
+ if (_blacklist_device(conf->blist_device, hwe->vendor,
+@@ -390,9 +384,12 @@ filter_property(struct config * conf, struct udev_device * udev)
+ * This is the inverse of the 'normal' matching;
+ * the environment variable _has_ to match.
+ */
+- log_filter(devname, NULL, NULL, NULL, NULL,
+- MATCH_PROPERTY_BLIST_MISSING);
+- return MATCH_PROPERTY_BLIST_MISSING;
++ if (VECTOR_SIZE(conf->elist_property)) {
++ log_filter(devname, NULL, NULL, NULL, NULL,
++ MATCH_PROPERTY_BLIST_MISSING);
++ return MATCH_PROPERTY_BLIST_MISSING;
++ }
++ return 0;
+ }
+
+ void
+diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
+index f04ff19..fbbbb27 100644
+--- a/multipath/multipath.conf.5
++++ b/multipath/multipath.conf.5
+@@ -1014,10 +1014,6 @@ The \fIWorld Wide Identification\fR of a device.
+ .TP
+ .B property
+ Regular expression of the udev property to be whitelisted.
+-.RS
+-.TP
+-The default is: \fB(SCSI_IDENT_|ID_WWN)\fR
+-.RE
+ .TP
+ .B device
+ Subsection for the device description. This subsection recognizes the
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-don-t-start-without-a-config-file.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-don-t-start-without-a-config-file.patch
new file mode 100644
index 000000000..87a6d3fb6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-don-t-start-without-a-config-file.patch
@@ -0,0 +1,108 @@
+From b2b504fc1959c7a3f0a843c3c204e8e193b675b7 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Wed, 15 Oct 2014 10:39:30 -0500
+Subject: [PATCH 04/14] RH: don't start without a config file
+
+If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist
+all devices when running multipath. A completely blank configuration file
+is almost never what users want. Also, people may have the multipath
+packages installed but don't want to use them. This patch provides a
+simple way to disable multipath. Simply removing or renaming
+/etc/multipath.conf will keep multipath from doing anything.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/config.c | 17 +++++++++++++++++
+ libmultipath/config.h | 1 +
+ multipath/multipath.rules | 1 +
+ multipathd/multipathd.8 | 2 ++
+ multipathd/multipathd.service | 1 +
+ 5 files changed, 22 insertions(+)
+
+diff --git a/libmultipath/config.c b/libmultipath/config.c
+index bb6619b..aae69b8 100644
+--- a/libmultipath/config.c
++++ b/libmultipath/config.c
+@@ -25,6 +25,7 @@
+ #include "prio.h"
+ #include "devmapper.h"
+ #include "mpath_cmd.h"
++#include "version.h"
+
+ static int
+ hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
+@@ -667,6 +668,22 @@ load_config (char * file)
+ factorize_hwtable(conf->hwtable, builtin_hwtable_size);
+ }
+
++ } else {
++ condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
++ condlog(0, "A default multipath.conf file is located at");
++ condlog(0, "/usr/share/doc/device-mapper-multipath-%d.%d.%d/multipath.conf", MULTIPATH_VERSION(VERSION_CODE));
++ if (conf->blist_devnode == NULL) {
++ conf->blist_devnode = vector_alloc();
++ if (!conf->blist_devnode) {
++ condlog(0, "cannot allocate blacklist\n");
++ goto out;
++ }
++ }
++ if (store_ble(conf->blist_devnode, strdup(".*"),
++ ORIGIN_NO_CONFIG)) {
++ condlog(0, "cannot store default no-config blacklist\n");
++ goto out;
++ }
+ }
+
+ conf->processed_main_config = 1;
+diff --git a/libmultipath/config.h b/libmultipath/config.h
+index ffc69b5..614331c 100644
+--- a/libmultipath/config.h
++++ b/libmultipath/config.h
+@@ -7,6 +7,7 @@
+
+ #define ORIGIN_DEFAULT 0
+ #define ORIGIN_CONFIG 1
++#define ORIGIN_NO_CONFIG 2
+
+ /*
+ * In kernel, fast_io_fail == 0 means immediate failure on rport delete.
+diff --git a/multipath/multipath.rules b/multipath/multipath.rules
+index 4d78b98..5753766 100644
+--- a/multipath/multipath.rules
++++ b/multipath/multipath.rules
+@@ -6,6 +6,7 @@ IMPORT{cmdline}="nompath"
+ ENV{nompath}=="?*", GOTO="end_mpath"
+ IMPORT{cmdline}="multipath"
+ ENV{multipath}=="off", GOTO="end_mpath"
++TEST!="/etc/multipath.conf", GOTO="end_mpath"
+
+ KERNEL=="dm-*", GOTO="check_kpartx"
+ ENV{DEVTYPE}!="partition", GOTO="test_dev"
+diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
+index 4c765af..c1499a5 100644
+--- a/multipathd/multipathd.8
++++ b/multipathd/multipathd.8
+@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy.
+ This daemon executes the external \fBmultipath\fR tool when events occur.
+ In turn, the multipath tool signals the multipathd daemon when it is done with
+ devmap reconfiguration, so that it can refresh its failed path list.
++
++In this Linux distribution, multipathd does not run unless a /etc/multipath.conffile exists
+ .
+ .
+ .\" ----------------------------------------------------------------------------
+diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
+index fd66cf6..fafd088 100644
+--- a/multipathd/multipathd.service
++++ b/multipathd/multipathd.service
+@@ -4,6 +4,7 @@ Wants=systemd-udev-trigger.service systemd-udev-settle.service
+ Before=iscsi.service iscsid.service lvm2-lvmetad.service lvm2-activation-early.service
+ Before=local-fs-pre.target blk-availability.service
+ After=multipathd.socket systemd-udev-trigger.service systemd-udev-settle.service
++ConditionPathExists=/etc/multipath.conf
+ DefaultDependencies=no
+ Conflicts=shutdown.target
+ ConditionKernelCommandLine=!nompath
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch
new file mode 100644
index 000000000..acef41023
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch
@@ -0,0 +1,648 @@
+From de44504fe7f7802cd474efd92ac15b5a8857db1f Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Thu, 16 Oct 2014 15:49:01 -0500
+Subject: [PATCH 05/14] RH: add mpathconf
+
+mpathconf is a program (largely based on lvmcomf) to help users
+configure /etc/multipath.conf and enable or disable multipathing. It
+has a couple of built-in options that can be set directly from the
+command line. But, mostly it is used to get a multipath.conf file
+with the OS defaults, and to enable and disable multipathing via
+a single command.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/config.c | 1 +
+ multipath/Makefile | 5 +
+ multipath/mpathconf | 464 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ multipath/mpathconf.8 | 101 +++++++++++
+ 4 files changed, 571 insertions(+)
+ create mode 100644 multipath/mpathconf
+ create mode 100644 multipath/mpathconf.8
+
+diff --git a/libmultipath/config.c b/libmultipath/config.c
+index aae69b8..c485748 100644
+--- a/libmultipath/config.c
++++ b/libmultipath/config.c
+@@ -672,6 +672,7 @@ load_config (char * file)
+ condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
+ condlog(0, "A default multipath.conf file is located at");
+ condlog(0, "/usr/share/doc/device-mapper-multipath-%d.%d.%d/multipath.conf", MULTIPATH_VERSION(VERSION_CODE));
++ condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf");
+ if (conf->blist_devnode == NULL) {
+ conf->blist_devnode = vector_alloc();
+ if (!conf->blist_devnode) {
+diff --git a/multipath/Makefile b/multipath/Makefile
+index 1e9ee4b..3d4d459 100644
+--- a/multipath/Makefile
++++ b/multipath/Makefile
+@@ -18,10 +18,12 @@ $(EXEC): $(OBJS)
+ $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS)
+ $(GZIP) $(EXEC).8 > $(EXEC).8.gz
+ $(GZIP) $(EXEC).conf.5 > $(EXEC).conf.5.gz
++ $(GZIP) mpathconf.8 > mpathconf.8.gz
+
+ install:
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
++ $(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
+ $(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
+@@ -29,13 +31,16 @@ install:
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5.gz $(DESTDIR)$(man5dir)
++ $(INSTALL_PROGRAM) -m 644 mpathconf.8.gz $(DESTDIR)$(man8dir)
+
+ uninstall:
+ $(RM) $(DESTDIR)$(bindir)/$(EXEC)
+ $(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
+ $(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
++ $(RM) $(DESTDIR)$(bindir)/mpathconf
+ $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
+ $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
++ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8.gz
+
+ clean:
+ $(RM) core *.o $(EXEC) *.gz
+diff --git a/multipath/mpathconf b/multipath/mpathconf
+new file mode 100644
+index 0000000..e839134
+--- /dev/null
++++ b/multipath/mpathconf
+@@ -0,0 +1,464 @@
++#!/bin/bash
++#
++# Copyright (C) 2010 Red Hat, Inc. All rights reserved.
++#
++# This file is part of the device-mapper-multipath package.
++#
++# This copyrighted material is made available to anyone wishing to use,
++# modify, copy, or redistribute it subject to the terms and conditions
++# of the GNU General Public License v.2.
++#
++# You should have received a copy of the GNU 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
++
++#
++# Simple editting of /etc/multipath.conf
++# This program was largely ripped off from lvmconf
++#
++
++unset ENABLE FIND FRIENDLY MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST
++
++DEFAULT_CONFIG="# device-mapper-multipath configuration file
++
++# For a complete list of the default configuration values, run either:
++# # multipath -t
++# or
++# # multipathd show config
++
++# For a list of configuration options with descriptions, see the
++# multipath.conf man page.
++
++defaults {
++ user_friendly_names yes
++ find_multipaths yes
++}
++
++blacklist_exceptions {
++ property \"(SCSI_IDENT_|ID_WWN)\"
++}"
++
++CONFIGFILE="/etc/multipath.conf"
++OUTPUTFILE="/etc/multipath.conf"
++MULTIPATHDIR="/etc/multipath"
++TMPFILE="/etc/multipath/.multipath.conf.tmp"
++WWIDS=0
++
++function usage
++{
++ echo "usage: $0 <command>"
++ echo ""
++ echo "Commands:"
++ echo "Enable: --enable "
++ echo "Disable: --disable"
++ echo "Only allow certain wwids (instead of enable): --allow <WWID>"
++ echo "Set user_friendly_names (Default y): --user_friendly_names <y|n>"
++ echo "Set find_multipaths (Default y): --find_multipaths <y|n>"
++ echo "Load the dm-multipath modules on enable (Default y): --with_module <y|n>"
++ echo "start/stop/reload multipathd (Default n): --with_multipathd <y|n>"
++ echo "select output file (Default /etc/multipath.conf): --outfile <FILE>"
++ echo ""
++}
++
++function add_wwid
++{
++ INDEX=0
++ while [ "$INDEX" -lt "$WWIDS" ] ; do
++ if [ "$1" = "${WWID_LIST[$INDEX]}" ] ; then
++ return
++ fi
++ ((INDEX++))
++ done
++ WWID_LIST[$WWIDS]="$1"
++ ((WWIDS++))
++}
++
++function get_dm_deps
++{
++ shift 3
++ while [ -n "$1" -a -n "$2" ]; do
++ MAJOR=$(echo $1 | tr -d '(,')
++ MINOR=$(echo $2 | tr -d ')')
++ UUID=`dmsetup info -c --noheadings -o uuid -j $MAJOR -m $MINOR 2> /dev/null`
++ if [ -n "$UUID" ] ; then
++ set_dm_wwid $UUID
++ fi
++ shift 2
++ done
++}
++
++function set_dm_wwid
++{
++ if [[ "$1" =~ ^part[[:digit:]]+-mpath- ]] ; then
++ add_wwid "${1##part*-mpath-}"
++ elif [[ "$1" =~ ^mpath- ]] ; then
++ add_wwid "${1##mpath-}"
++ else
++ get_dm_deps `dmsetup deps -u $1`
++ fi
++}
++
++function set_wwid
++{
++ UUID=""
++ if [[ "$1" =~ ^[[:digit:]]+:[[:digit:]]+$ ]] ; then
++ MAJOR=${1%%:*}
++ MINOR=${1##*:}
++ UUID=`dmsetup info -c --noheadings -o uuid -j $MAJOR -m $MINOR 2> /dev/null`
++ else
++ UUID=`dmsetup info -c --noheadings -o uuid $1 2> /dev/null`
++ fi
++ if [ -n "$UUID" ] ; then
++ set_dm_wwid $UUID
++ else
++ add_wwid "$1"
++ fi
++}
++
++function parse_args
++{
++ while [ -n "$1" ]; do
++ case $1 in
++ --enable)
++ ENABLE=1
++ shift
++ ;;
++ --disable)
++ ENABLE=0
++ shift
++ ;;
++ --allow)
++ ENABLE=2
++ if [ -n "$2" ]; then
++ set_wwid $2
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ --user_friendly_names)
++ if [ -n "$2" ]; then
++ FRIENDLY=$2
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ --find_multipaths)
++ if [ -n "$2" ]; then
++ FIND=$2
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ --with_module)
++ if [ -n "$2" ]; then
++ MODULE=$2
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ --with_multipathd)
++ if [ -n "$2" ]; then
++ MULTIPATHD=$2
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ --outfile)
++ if [ -n "$2" ]; then
++ OUTPUTFILE=$2
++ HAVE_OUTFILE=1
++ shift 2
++ else
++ usage
++ exit 1
++ fi
++ ;;
++ *)
++ usage
++ exit
++ esac
++ done
++}
++
++function validate_args
++{
++ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$MODULE" ]; then
++ echo "ignoring extra parameters on disable"
++ FRIENDLY=""
++ FIND=""
++ MODULE=""
++ fi
++ if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then
++ echo "--user_friendly_names must be either 'y' or 'n'"
++ exit 1
++ fi
++ if [ -n "$FIND" ] && [ "$FIND" != "y" -a "$FIND" != "n" ]; then
++ echo "--find_multipaths must be either 'y' or 'n'"
++ exit 1
++ fi
++ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" ]; then
++ SHOW_STATUS=1
++ fi
++ if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then
++ echo "--with_module must be either 'y' or 'n'"
++ exit 1
++ fi
++ if [ -n "$MULTIPATHD" ] && [ "$MULTIPATHD" != "y" -a "$MULTIPATHD" != "n" ]; then
++ echo "--with_multipathd must be either 'y' or 'n'"
++ exit 1
++ fi
++ if [ "$ENABLE" = 2 -a -z "$HAVE_OUTFILE" ]; then
++ echo "Because --allow makes changes that cannot be automatically reversed,"
++ echo "you must set --outfile when you set --allow"
++ exit 1
++ fi
++}
++
++function add_blacklist_exceptions
++{
++ INDEX=0
++ while [ "$INDEX" -lt "$WWIDS" ] ; do
++ sed -i '/^blacklist_exceptions[[:space:]]*{/ a\
++ wwid '"\"${WWID_LIST[$INDEX]}\""'
++' $TMPFILE
++ ((INDEX++))
++ done
++}
++
++umask 0077
++
++parse_args "$@"
++
++validate_args
++
++if [ ! -d "$MULTIPATHDIR" ]; then
++ echo "/etc/multipath/ does not exist. failing"
++ exit 1
++fi
++
++rm $TMPFILE 2> /dev/null
++echo "$DEFAULT_CONFIG" > $TMPFILE
++if [ -f "$CONFIGFILE" ]; then
++ cp $CONFIGFILE $TMPFILE
++fi
++
++if grep -q "^blacklist[[:space:]]*{" $TMPFILE ; then
++ HAVE_BLACKLIST=1
++fi
++
++if grep -q "^blacklist_exceptions[[:space:]]*{" $TMPFILE ; then
++ HAVE_EXCEPTIONS=1
++fi
++
++if grep -q "^defaults[[:space:]]*{" $TMPFILE ; then
++ HAVE_DEFAULTS=1
++fi
++
++if [ -z "$MODULE" -o "$MODULE" = "y" ]; then
++ if lsmod | grep -q "dm_multipath" ; then
++ HAVE_MODULE=1
++ else
++ HAVE_MODULE=0
++ fi
++fi
++
++if [ "$MULTIPATHD" = "y" ]; then
++ if /bin/systemctl status multipathd.service > /dev/null 2>&1 ; then
++ HAVE_MULTIPATHD=1
++ else
++ HAVE_MULTIPATHD=0
++ fi
++fi
++
++if [ "$HAVE_BLACKLIST" = "1" ]; then
++ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*devnode \"\.\?\*\"" ; then
++ HAVE_DISABLE=1
++ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"" ; then
++ HAVE_DISABLE=0
++ fi
++fi
++
++if [ "$HAVE_BLACKLIST" = "1" ]; then
++ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*wwid \"\.\?\*\"" ; then
++ HAVE_WWID_DISABLE=1
++ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"" ; then
++ HAVE_WWID_DISABLE=0
++ fi
++fi
++
++if [ "$HAVE_DEFAULTS" = "1" ]; then
++ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*find_multipaths[[:space:]]*\(yes\|1\)" ; then
++ HAVE_FIND=1
++ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*find_multipaths[[:space:]]*\(no\|0\)" ; then
++ HAVE_FIND=0
++ fi
++ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)" ; then
++ HAVE_FRIENDLY=1
++ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)" ; then
++ HAVE_FRIENDLY=0
++ fi
++fi
++
++if [ -n "$SHOW_STATUS" ]; then
++ if [ -z "$HAVE_DISABLE" -o "$HAVE_DISABLE" = 0 ]; then
++ echo "multipath is enabled"
++ else
++ echo "multipath is disabled"
++ fi
++ if [ -z "$HAVE_FIND" -o "$HAVE_FIND" = 0 ]; then
++ echo "find_multipaths is disabled"
++ else
++ echo "find_multipaths is enabled"
++ fi
++ if [ -z "$HAVE_FRIENDLY" -o "$HAVE_FRIENDLY" = 0 ]; then
++ echo "user_friendly_names is disabled"
++ else
++ echo "user_friendly_names is enabled"
++ fi
++ if [ -n "$HAVE_MODULE" ]; then
++ if [ "$HAVE_MODULE" = 1 ]; then
++ echo "dm_multipath module is loaded"
++ else
++ echo "dm_multipath module is not loaded"
++ fi
++ fi
++ if [ -z "$HAVE_MULTIPATHD" ]; then
++ if /bin/systemctl status multipathd.service > /dev/null 2>&1 ; then
++ HAVE_MULTIPATHD=1
++ else
++ HAVE_MULTIPATHD=0
++ fi
++ fi
++ if [ "$HAVE_MULTIPATHD" = 1 ]; then
++ echo "multipathd is running"
++ else
++ echo "multipathd is not running"
++ fi
++ exit 0
++fi
++
++if [ -z "$HAVE_BLACKLIST" ]; then
++ cat >> $TMPFILE <<- _EOF_
++
++blacklist {
++}
++_EOF_
++fi
++
++if [ -z "$HAVE_DEFAULTS" ]; then
++ cat >> $TMPFILE <<- _EOF_
++
++defaults {
++}
++_EOF_
++fi
++
++if [ "$ENABLE" = 2 ]; then
++ if [ "$HAVE_DISABLE" = 1 ]; then
++ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
++ fi
++ if [ -z "$HAVE_WWID_DISABLE" ]; then
++ sed -i '/^blacklist[[:space:]]*{/ a\
++ wwid ".*"
++' $TMPFILE
++ elif [ "$HAVE_WWID_DISABLE" = 0 ]; then
++ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"/ wwid ".*"/' $TMPFILE
++ fi
++ if [ "$HAVE_EXCEPTIONS" = 1 ]; then
++ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ {/^[[:space:]]*wwid/ d}' $TMPFILE
++ else
++ cat >> $TMPFILE <<- _EOF_
++
++blacklist_exceptions {
++}
++_EOF_
++ fi
++ add_blacklist_exceptions
++elif [ "$ENABLE" = 1 ]; then
++ if [ "$HAVE_DISABLE" = 1 ]; then
++ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
++ fi
++elif [ "$ENABLE" = 0 ]; then
++ if [ -z "$HAVE_DISABLE" ]; then
++ sed -i '/^blacklist[[:space:]]*{/ a\
++ devnode ".*"
++' $TMPFILE
++ elif [ "$HAVE_DISABLE" = 0 ]; then
++ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"/ devnode ".*"/' $TMPFILE
++ fi
++fi
++
++if [ "$FIND" = "n" ]; then
++ if [ "$HAVE_FIND" = 1 ]; then
++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*find_multipaths[[:space:]]*\(yes\|1\)/ find_multipaths no/' $TMPFILE
++ CHANGED_CONFIG=1
++ fi
++elif [ "$FIND" = "y" ]; then
++ if [ -z "$HAVE_FIND" ]; then
++ sed -i '/^defaults[[:space:]]*{/ a\
++ find_multipaths yes
++' $TMPFILE
++ CHANGED_CONFIG=1
++ elif [ "$HAVE_FIND" = 0 ]; then
++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*find_multipaths[[:space:]]*\(no\|0\)/ find_multipaths yes/' $TMPFILE
++ CHANGED_CONFIG=1
++ fi
++fi
++
++if [ "$FRIENDLY" = "n" ]; then
++ if [ "$HAVE_FRIENDLY" = 1 ]; then
++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)/ user_friendly_names no/' $TMPFILE
++ CHANGED_CONFIG=1
++ fi
++elif [ "$FRIENDLY" = "y" ]; then
++ if [ -z "$HAVE_FRIENDLY" ]; then
++ sed -i '/^defaults[[:space:]]*{/ a\
++ user_friendly_names yes
++' $TMPFILE
++ CHANGED_CONFIG=1
++ elif [ "$HAVE_FRIENDLY" = 0 ]; then
++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)/ user_friendly_names yes/' $TMPFILE
++ CHANGED_CONFIG=1
++ fi
++fi
++
++if [ -f "$OUTPUTFILE" ]; then
++ cp $OUTPUTFILE $OUTPUTFILE.old
++ if [ $? != 0 ]; then
++ echo "failed to backup old config file, $OUTPUTFILE not updated"
++ exit 1
++ fi
++fi
++
++cp $TMPFILE $OUTPUTFILE
++if [ $? != 0 ]; then
++ echo "failed to copy new config file into place, check $OUTPUTFILE is still OK"
++ exit 1
++fi
++
++rm -f $TMPFILE
++
++if [ "$ENABLE" = 1 ]; then
++ if [ "$HAVE_MODULE" = 0 ]; then
++ modprobe dm_multipath
++ fi
++ if [ "$HAVE_MULTIPATHD" = 0 ]; then
++ systemctl start multipathd.service
++ fi
++elif [ "$ENABLE" = 0 ]; then
++ if [ "$HAVE_MULTIPATHD" = 1 ]; then
++ systemctl stop multipathd.service
++ fi
++elif [ -n "$CHANGED_CONFIG" -a "$HAVE_MULTIPATHD" = 1 ]; then
++ systemctl reload multipathd.service
++fi
+diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8
+new file mode 100644
+index 0000000..4cd3267
+--- /dev/null
++++ b/multipath/mpathconf.8
+@@ -0,0 +1,101 @@
++.TH MPATHCONF 8 "June 2010" "" "Linux Administrator's Manual"
++.SH NAME
++mpathconf - A tool for configuring device-mapper-multipath
++.SH SYNOPSIS
++.B mpathconf
++.RB [\| commands \|]
++.RB [\| options \|]
++.SH DESCRIPTION
++.B mpathconf
++is a utility that creates or modifies
++.B /etc/multipath.conf.
++It can enable or disable multipathing and configure some common options.
++.B mpathconf
++can also load the
++.B dm_multipath
++module, start and stop the
++.B multipathd
++daemon, and configure the
++.B multipathd
++service to start automatically or not. If
++.B mpathconf
++is called with no commands, it will display the current configuration.
++
++The default options for mpathconf are
++.B --with_module
++The
++.B --with_multipathd
++option is not set by default. Enabling multipathing will load the
++.B dm_multipath
++module but it will not immediately start it. This is so
++that users can manually edit their config file if necessary, before starting
++.B multipathd.
++
++If
++.B /etc/multipath.conf
++already exists, mpathconf will edit it. If it does not exist, mpathconf will
++create a default file with
++.B user_friendly_names
++and
++.B find_multipaths
++set. To disable these, use the
++.B --user_friendly_names n
++and
++.B --find_multipaths n
++options
++.SH COMMANDS
++.TP
++.B --enable
++Removes any line that blacklists all device nodes from the
++.B /etc/multipath.conf
++blacklist section.
++.TP
++.B --disable
++Adds a line that blacklists all device nodes to the
++.B /etc/multipath.conf
++blacklist section. If no blacklist section exists, it will create one.
++.TP
++.B --user_friendly_name \fP { \fBy\fP | \fBn\fP }
++If set to \fBy\fP, this adds the line
++.B user_friendly_names yes
++to the
++.B /etc/multipath.conf
++defaults section. If set to \fBn\fP, this removes the line, if present. This
++command can be used along with any other command.
++.TP
++.B --find_multipaths\fP { \fBy\fP | \fBn\fP }
++If set to \fBy\fP, this adds the line
++.B find_multipaths yes
++to the
++.B /etc/multipath.conf
++defaults section. If set to \fBn\fP, this removes the line, if present. This
++command can be used aldong with any other command.
++.SH OPTIONS
++.TP
++.B --with_module\fP { \fBy\fP | \fBn\fP }
++If set to \fBy\fP, this runs
++.B modprobe dm_multipath
++to install the multipath modules. This option only works with the
++.B --enable
++command. This option is set to \fBy\fP by default.
++.TP
++.B --with_multipathd { \fBy\fP | \fBn\fP }
++If set to \fBy\fP, this runs
++.B service multipathd start
++to start the multipathd daemon on \fB--enable\fP,
++.B service multipathd stop
++to stop the multipathd daemon on \fB--disable\fP, and
++.B service multipathd reload
++to reconfigure multipathd on \fB--user_frindly_names\fP and
++\fB--find_multipaths\fP.
++This option is set to \fBn\fP by default.
++.SH FILES
++.BR /etc/multipath.conf
++.SH "SEE ALSO"
++.BR multipath.conf (5),
++.BR modprobe (8),
++.BR multipath (8),
++.BR multipathd (8),
++.BR service (8),
++.SH AUTHOR
++Benjamin Marzinski <bmarzins@redhat.com>
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
new file mode 100644
index 000000000..dc291b812
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
@@ -0,0 +1,166 @@
+From 15179c830521d8f37f9254ebc6bbf150a409f956 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Fri, 17 Oct 2014 11:20:34 -0500
+Subject: [PATCH 06/14] RH: add wwids from kernel cmdline mpath.wwids with -A
+
+This patch adds another option to multipath, "-A", which reads
+/proc/cmdline for mpath.wwid=<WWID> options, and adds any wwids it finds
+to /etc/multipath/wwids. While this isn't usually important during
+normal operation, since these wwids should already be added, it can be
+helpful during installation, to make sure that multipath can claim
+devices as its own, before LVM or something else makes use of them. The
+patch also execs "/sbin/multipath -A" before running multipathd in
+multipathd.service
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/wwids.c | 44 +++++++++++++++++++++++++++++++++++++++++++
+ libmultipath/wwids.h | 1 +
+ multipath/main.c | 10 ++++++++--
+ multipath/multipath.8 | 5 ++++-
+ multipathd/multipathd.service | 1 +
+ 5 files changed, 58 insertions(+), 3 deletions(-)
+
+diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
+index bc70a27..88bb72b 100644
+--- a/libmultipath/wwids.c
++++ b/libmultipath/wwids.c
+@@ -321,3 +321,47 @@ remember_wwid(char *wwid)
+ condlog(4, "wwid %s already in wwids file", wwid);
+ return 0;
+ }
++
++int remember_cmdline_wwid(void)
++{
++ FILE *f = NULL;
++ char buf[LINE_MAX], *next, *ptr;
++ int ret = 0;
++
++ f = fopen("/proc/cmdline", "re");
++ if (!f) {
++ condlog(0, "can't open /proc/cmdline : %s", strerror(errno));
++ return -1;
++ }
++
++ if (!fgets(buf, sizeof(buf), f)) {
++ if (ferror(f))
++ condlog(0, "read of /proc/cmdline failed : %s",
++ strerror(errno));
++ else
++ condlog(0, "couldn't read /proc/cmdline");
++ fclose(f);
++ return -1;
++ }
++ fclose(f);
++ next = buf;
++ while((ptr = strstr(next, "mpath.wwid="))) {
++ ptr += 11;
++ next = strpbrk(ptr, " \t\n");
++ if (next) {
++ *next = '\0';
++ next++;
++ }
++ if (strlen(ptr)) {
++ if (remember_wwid(ptr) != 0)
++ ret = -1;
++ }
++ else {
++ condlog(0, "empty mpath.wwid kernel command line option");
++ ret = -1;
++ }
++ if (!next)
++ break;
++ }
++ return ret;
++}
+diff --git a/libmultipath/wwids.h b/libmultipath/wwids.h
+index 9527012..b665232 100644
+--- a/libmultipath/wwids.h
++++ b/libmultipath/wwids.h
+@@ -17,5 +17,6 @@ int remember_wwid(char *wwid);
+ int check_wwids_file(char *wwid, int write_wwid);
+ int remove_wwid(char *wwid);
+ int replace_wwids(vector mp);
++int remember_cmdline_wwid(void);
+
+ #endif /* _WWIDS_H */
+diff --git a/multipath/main.c b/multipath/main.c
+index 4174d43..72585b0 100644
+--- a/multipath/main.c
++++ b/multipath/main.c
+@@ -102,7 +102,7 @@ usage (char * progname)
+ {
+ fprintf (stderr, VERSION_STRING);
+ fprintf (stderr, "Usage:\n");
+- fprintf (stderr, " %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
++ fprintf (stderr, " %s [-a|-A|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
+ fprintf (stderr, " %s -l|-ll|-f [-v lvl] [-b fil] [-R num] [dev]\n", progname);
+ fprintf (stderr, " %s -F [-v lvl] [-R num]\n", progname);
+ fprintf (stderr, " %s -t\n", progname);
+@@ -116,6 +116,8 @@ usage (char * progname)
+ " -f flush a multipath device map\n"
+ " -F flush all multipath device maps\n"
+ " -a add a device wwid to the wwids file\n"
++ " -A add devices from kernel command line mpath.wwids\n"
++ " parameters to wwids file\n"
+ " -c check if a device should be a path in a multipath device\n"
+ " -q allow queue_if_no_path when multipathd is not running\n"
+ " -d dry run, do not create or update devmaps\n"
+@@ -522,7 +524,7 @@ main (int argc, char *argv[])
+ exit(1);
+ multipath_conf = conf;
+ conf->retrigger_tries = 0;
+- while ((arg = getopt(argc, argv, ":adchl::FfM:v:p:b:BrR:itquwW")) != EOF ) {
++ while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BrR:itquwW")) != EOF ) {
+ switch(arg) {
+ case 1: printf("optarg : %s\n",optarg);
+ break;
+@@ -586,6 +588,10 @@ main (int argc, char *argv[])
+ case 't':
+ r = dump_config(conf);
+ goto out_free_config;
++ case 'A':
++ if (remember_cmdline_wwid() != 0)
++ exit(1);
++ exit(0);
+ case 'h':
+ usage(argv[0]);
+ exit(0);
+diff --git a/multipath/multipath.8 b/multipath/multipath.8
+index b9436e5..b9ad6b1 100644
+--- a/multipath/multipath.8
++++ b/multipath/multipath.8
+@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
+ .RB [\| \-b\ \c
+ .IR bindings_file \|]
+ .RB [\| \-d \|]
+-.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \|-i | \-a | \|-u | \-w | \-W \|]
++.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \|-i | \-a | \-A | \-u | \-w | \-W \|]
+ .RB [\| \-p\ \c
+ .IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
+ .RB [\| \-R\ \c
+@@ -122,6 +122,9 @@ Add the WWID for the specified device to the WWIDs file.
+ Check if the device specified in the program environment should be
+ a path in a multipath device.
+ .
++.B \-A
++add wwids from any kernel command line mpath.wwid parameters to the wwids file
++.
+ .TP
+ .B \-w
+ Remove the WWID for the specified device from the WWIDs file.
+diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
+index fafd088..a623a3f 100644
+--- a/multipathd/multipathd.service
++++ b/multipathd/multipathd.service
+@@ -15,6 +15,7 @@ Type=notify
+ NotifyAccess=main
+ LimitCORE=infinity
+ ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath
++ExecStartPre=-/sbin/multipath -A
+ ExecStart=/sbin/multipathd -d -s
+ ExecReload=/sbin/multipathd reconfigure
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-trigger-change-uevent-on-new-device-creation.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-trigger-change-uevent-on-new-device-creation.patch
new file mode 100644
index 000000000..025a3512e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-trigger-change-uevent-on-new-device-creation.patch
@@ -0,0 +1,138 @@
+From 0d2c9afbd89d79fd700f9c99aa20e5f7c7382027 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Mon, 24 Apr 2017 09:39:57 -0500
+Subject: [PATCH 07/14] RH: trigger change uevent on new device creation
+
+When multipath first sees a path device with user_friendly names
+enabled, it can't know if the device should be multipathed. This means
+that it will not claim the device in udev. If the device is eventually
+multipathed, multipath should trigger a change uevent to update the udev
+database to claim the device.
+
+This also reverts commit 64e27ec066a001012f44550f095c93443e91d845.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/configure.c | 26 ++++++++++++++++++++++++--
+ libmultipath/configure.h | 1 +
+ libmultipath/wwids.c | 4 ++--
+ multipath/main.c | 2 +-
+ multipathd/main.c | 7 ++-----
+ 5 files changed, 30 insertions(+), 10 deletions(-)
+
+diff --git a/libmultipath/configure.c b/libmultipath/configure.c
+index bd090d9..843dd09 100644
+--- a/libmultipath/configure.c
++++ b/libmultipath/configure.c
+@@ -422,6 +422,28 @@ trigger_udev_change(const struct multipath *mpp)
+ udev_device_unref(udd);
+ }
+
++void
++trigger_paths_udev_change(const struct multipath *mpp)
++{
++ struct pathgroup * pgp;
++ struct path * pp;
++ int i, j;
++
++ if (!mpp || !mpp->pg)
++ return;
++
++ vector_foreach_slot (mpp->pg, pgp, i) {
++ if (!pgp->paths)
++ continue;
++ vector_foreach_slot(pgp->paths, pp, j) {
++ if (!pp->udev)
++ continue;
++ sysfs_attr_set_value(pp->udev, "uevent", "change",
++ strlen("change"));
++ }
++ }
++}
++
+ static int
+ is_mpp_known_to_udev(const struct multipath *mpp)
+ {
+@@ -802,8 +824,8 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
+ * succeeded
+ */
+ mpp->force_udev_reload = 0;
+- if (mpp->action == ACT_CREATE)
+- remember_wwid(mpp->wwid);
++ if (mpp->action == ACT_CREATE && remember_wwid(mpp->wwid) == 1)
++ trigger_paths_udev_change(mpp);
+ if (!is_daemon) {
+ /* multipath client mode */
+ dm_switchgroup(mpp->alias, mpp->bestpg);
+diff --git a/libmultipath/configure.h b/libmultipath/configure.h
+index fd7f581..253e29b 100644
+--- a/libmultipath/configure.h
++++ b/libmultipath/configure.h
+@@ -36,3 +36,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
+ vector pathvec, char **wwid);
+ int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh, int is_daemon);
+ int sysfs_get_host_adapter_name(struct path *pp, char *adapter_name);
++void trigger_paths_udev_change(const struct multipath *mpp);
+diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
+index 88bb72b..249c6c1 100644
+--- a/libmultipath/wwids.c
++++ b/libmultipath/wwids.c
+@@ -319,7 +319,7 @@ remember_wwid(char *wwid)
+ condlog(3, "wrote wwid %s to wwids file", wwid);
+ else
+ condlog(4, "wwid %s already in wwids file", wwid);
+- return 0;
++ return ret;
+ }
+
+ int remember_cmdline_wwid(void)
+@@ -353,7 +353,7 @@ int remember_cmdline_wwid(void)
+ next++;
+ }
+ if (strlen(ptr)) {
+- if (remember_wwid(ptr) != 0)
++ if (remember_wwid(ptr) < 0)
+ ret = -1;
+ }
+ else {
+diff --git a/multipath/main.c b/multipath/main.c
+index 72585b0..2eda6a3 100644
+--- a/multipath/main.c
++++ b/multipath/main.c
+@@ -336,7 +336,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
+ }
+ if (cmd == CMD_ADD_WWID) {
+ r = remember_wwid(refwwid);
+- if (r == 0)
++ if (r >= 0)
+ printf("wwid '%s' added\n", refwwid);
+ else
+ printf("failed adding '%s' to wwids file\n",
+diff --git a/multipathd/main.c b/multipathd/main.c
+index 81c76ca..874bcce 100644
+--- a/multipathd/main.c
++++ b/multipathd/main.c
+@@ -2093,7 +2093,8 @@ configure (struct vectors * vecs, int start_waiters)
+
+ sync_maps_state(mpvec);
+ vector_foreach_slot(mpvec, mpp, i){
+- remember_wwid(mpp->wwid);
++ if (remember_wwid(mpp->wwid) == 1)
++ trigger_paths_udev_change(mpp);
+ update_map_pr(mpp);
+ }
+
+@@ -2175,10 +2176,6 @@ reconfigure (struct vectors * vecs)
+ conf->verbosity = verbosity;
+ if (bindings_read_only)
+ conf->bindings_read_only = bindings_read_only;
+- if (conf->find_multipaths) {
+- condlog(2, "find_multipaths is set: -n is implied");
+- ignore_new_devs = 1;
+- }
+ if (ignore_new_devs)
+ conf->ignore_new_devs = ignore_new_devs;
+ uxsock_timeout = conf->uxsock_timeout;
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-libmultipath-change-how-RADOS-checker-is-enabled.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-libmultipath-change-how-RADOS-checker-is-enabled.patch
new file mode 100644
index 000000000..f67880993
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-libmultipath-change-how-RADOS-checker-is-enabled.patch
@@ -0,0 +1,56 @@
+From 0be174dbedd861d7694b0c7799fe26be31eb32b0 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Fri, 26 May 2017 17:52:57 -0500
+Subject: [PATCH 08/14] libmultipath: change how RADOS checker is enabled
+
+Instead of making the user call "make", "make install" and "make clean"
+with ENABLE_RADOS set correctly, have the makefile check if
+/usr/include/rados/librados.h exists, just like it checks if specific
+functions exist in a file.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ Makefile.inc | 13 +++++++++++++
+ libmultipath/checkers/Makefile | 3 ++-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.inc b/Makefile.inc
+index 2591fa9..e084fd1 100644
+--- a/Makefile.inc
++++ b/Makefile.inc
+@@ -109,5 +109,18 @@ check_func = \
+ echo "$$found" \
+ )
+
++# Checker whether a file with name $1 exists
++check_file = $(shell \
++ if [ -f "$1" ]; then \
++ found=1; \
++ status="yes"; \
++ else \
++ found=0; \
++ status="no"; \
++ fi; \
++ echo 1>&2 "Checking if $1 exists ... $$status"; \
++ echo "$$found" \
++ )
++
+ %.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile
+index 732ca9d..bce6b8b 100644
+--- a/libmultipath/checkers/Makefile
++++ b/libmultipath/checkers/Makefile
+@@ -14,7 +14,8 @@ LIBS= \
+ libcheckemc_clariion.so \
+ libcheckhp_sw.so \
+ libcheckrdac.so
+-ifneq ($(ENABLE_RADOS),0)
++
++ifneq ($(call check_file,/usr/include/rados/librados.h),0)
+ LIBS += libcheckrbd.so
+ endif
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-set-verbosity-to-default-during-config.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-set-verbosity-to-default-during-config.patch
new file mode 100644
index 000000000..17d2d9179
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-set-verbosity-to-default-during-config.patch
@@ -0,0 +1,40 @@
+From 526e539628e051128abf46a60ec22e18c9b5d84f Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Wed, 31 May 2017 15:03:02 -0500
+Subject: [PATCH 09/14] multipath: set verbosity to default during config
+
+condlog was setting the verbosity to 0 if there was no configuration.
+This keeps multipath from printing warning messages about config file
+problems that are found while loading the configuration. Instead, it
+should use the default config level until it loads the configuration
+to find the current value.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/debug.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/libmultipath/debug.c b/libmultipath/debug.c
+index fbe171a..f89b264 100644
+--- a/libmultipath/debug.c
++++ b/libmultipath/debug.c
+@@ -11,6 +11,7 @@
+ #include "../third-party/valgrind/drd.h"
+ #include "vector.h"
+ #include "config.h"
++#include "defaults.h"
+
+ void dlog (int sink, int prio, const char * fmt, ...)
+ {
+@@ -21,7 +22,7 @@ void dlog (int sink, int prio, const char * fmt, ...)
+ va_start(ap, fmt);
+ conf = get_multipath_config();
+ ANNOTATE_IGNORE_READS_BEGIN();
+- thres = (conf) ? conf->verbosity : 0;
++ thres = (conf) ? conf->verbosity : DEFAULT_VERBOSITY;
+ ANNOTATE_IGNORE_READS_END();
+ put_multipath_config(conf);
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-mpath-skip-device-configs-without-vendor-product.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-mpath-skip-device-configs-without-vendor-product.patch
new file mode 100644
index 000000000..396b6d32e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-mpath-skip-device-configs-without-vendor-product.patch
@@ -0,0 +1,37 @@
+From f88d60a93e98d86ae294f2317a122c4efde276f0 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Wed, 31 May 2017 17:58:59 -0500
+Subject: [PATCH 10/14] mpath: skip device configs without vendor/product
+
+Right now if multipath.conf includes a device configuration without a
+vendor or product string, it will automatically be applied to all
+devices, skipping all other configs entirely. This is clearly wrong.
+This patch makes sure that user added configs include vendor and
+product strings
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/config.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/libmultipath/config.c b/libmultipath/config.c
+index c485748..bdde113 100644
+--- a/libmultipath/config.c
++++ b/libmultipath/config.c
+@@ -452,6 +452,13 @@ restart:
+ break;
+ j = n;
+ vector_foreach_slot_after(hw, hwe2, j) {
++ /* drop invalid device configs */
++ if (!hwe2->vendor || !hwe2->product) {
++ condlog(0, "device config missing vendor or product parameter");
++ vector_del_slot(hw, j--);
++ free_hwe(hwe2);
++ continue;
++ }
+ if (hwe_regmatch(hwe1, hwe2))
+ continue;
+ /* dup */
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-fix-show-maps-json-crash.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-fix-show-maps-json-crash.patch
new file mode 100644
index 000000000..12d6d38a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-fix-show-maps-json-crash.patch
@@ -0,0 +1,38 @@
+From bc3ceda747104afdc24386df5dc45ca86f6c2936 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Thu, 1 Jun 2017 17:52:28 -0500
+Subject: [PATCH 11/14] multipathd: fix "show maps json" crash
+
+If there are no multipath devices, show_maps_json sets the maximum size
+of the reply buffer to 0. Having a size of 0 causes the calls to calloc
+and realloc to behave in ways that the code isn't designed to handle,
+leading to a double-free crash. Instead, show_maps_json should just
+use the INITIAL_REPLY_LEN if there are no multipath devices.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ multipathd/cli_handlers.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
+index 04c7386..7b0d00c 100644
+--- a/multipathd/cli_handlers.c
++++ b/multipathd/cli_handlers.c
+@@ -162,10 +162,12 @@ show_maps_json (char ** r, int * len, struct vectors * vecs)
+ struct multipath * mpp;
+ char * c;
+ char * reply;
+- unsigned int maxlen = INITIAL_REPLY_LEN *
+- PRINT_JSON_MULTIPLIER * VECTOR_SIZE(vecs->mpvec);
++ unsigned int maxlen = INITIAL_REPLY_LEN;
+ int again = 1;
+
++ if (VECTOR_SIZE(vecs->mpvec) > 0)
++ maxlen *= PRINT_JSON_MULTIPLIER * VECTOR_SIZE(vecs->mpvec);
++
+ vector_foreach_slot(vecs->mpvec, mpp, i) {
+ if (update_multipath(vecs, mpp->alias, 0)) {
+ return 1;
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-multipath-tools-modify-Makefile.inc-for-cross-compil.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
new file mode 100644
index 000000000..5ccd4aed8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
@@ -0,0 +1,58 @@
+From 6864ba28dec61609662ce5dc8bc7ed1925abb546 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 5 Jul 2017 02:56:13 -0400
+Subject: [PATCH 12/14] multipath-tools: modify Makefile.inc for
+ cross-compilation
+
+Do not look for systemd info on the host, and allow us to pass in CFLAGS
+using the OPTFLAGS variable.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+Update for version 0.5.0-144-g770e6d0
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+Update for version 0.7.1
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.inc | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/Makefile.inc b/Makefile.inc
+index e084fd1..c7f45fa 100644
+--- a/Makefile.inc
++++ b/Makefile.inc
+@@ -35,12 +35,6 @@ ifndef RUN
+ endif
+ endif
+
+-ifndef SYSTEMD
+- ifeq ($(shell systemctl --version > /dev/null 2>&1 && echo 1), 1)
+- SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\)/\1/p')
+- endif
+-endif
+-
+ ifndef SYSTEMDPATH
+ SYSTEMDPATH=usr/lib
+ endif
+@@ -82,11 +76,13 @@ TEST_CC_OPTION = $(shell \
+
+ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
+
++ifndef OPTFLAGS
+ OPTFLAGS = -O2 -g -pipe -Wall -Wextra -Wformat=2 -Werror=implicit-int \
+ -Werror=implicit-function-declaration -Werror=format-security \
+ -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered \
+ -Wp,-D_FORTIFY_SOURCE=2 $(STACKPROT) \
+ --param=ssp-buffer-size=4
++endif
+
+ CFLAGS = $(OPTFLAGS) -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\"
+ BIN_CFLAGS = -fPIE -DPIE
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-Always-use-devmapper.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-Always-use-devmapper.patch
new file mode 100644
index 000000000..52240f643
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-Always-use-devmapper.patch
@@ -0,0 +1,53 @@
+From 1498338970a093fccbda3e33f5588a289ef2c66a Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 5 Jul 2017 02:59:46 -0400
+Subject: [PATCH 13/14] Always use devmapper
+
+Do not try to compute several _API_ make variables
+from host information when cross-compiling.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+Rebase to 0.7.1
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ libmultipath/Makefile | 19 ++++---------------
+ 1 file changed, 4 insertions(+), 15 deletions(-)
+
+diff --git a/libmultipath/Makefile b/libmultipath/Makefile
+index b3244fc..9006b3f 100644
+--- a/libmultipath/Makefile
++++ b/libmultipath/Makefile
+@@ -20,21 +20,10 @@ ifdef SYSTEMD
+ endif
+ endif
+
+-ifneq ($(call check_func,dm_task_no_flush,/usr/include/libdevmapper.h),0)
+- CFLAGS += -DLIBDM_API_FLUSH -D_GNU_SOURCE
+-endif
+-
+-ifneq ($(call check_func,dm_task_set_cookie,/usr/include/libdevmapper.h),0)
+- CFLAGS += -DLIBDM_API_COOKIE
+-endif
+-
+-ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,/usr/include/libudev.h),0)
+- CFLAGS += -DLIBUDEV_API_RECVBUF
+-endif
+-
+-ifneq ($(call check_func,dm_task_deferred_remove,/usr/include/libdevmapper.h),0)
+- CFLAGS += -DLIBDM_API_DEFERRED
+-endif
++CFLAGS += -DLIBDM_API_FLUSH -D_GNU_SOURCE
++CFLAGS += -DLIBDM_API_COOKIE
++CFLAGS += -DLIBUDEV_API_RECVBUF
++CFLAGS += -DLIBDM_API_DEFERRED
+
+ OBJS = memory.o parser.o vector.o devmapper.o callout.o \
+ hwtable.o blacklist.o util.o dmparser.o config.o \
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-Always-use-devmapper-for-kpartx.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-Always-use-devmapper-for-kpartx.patch
new file mode 100644
index 000000000..f951213c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-Always-use-devmapper-for-kpartx.patch
@@ -0,0 +1,37 @@
+From 7f5869cd32a7b3f717d9544b35562d9d01ca6510 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 5 Jul 2017 03:03:16 -0400
+Subject: [PATCH 14/14] Always use devmapper for kpartx
+
+Do not try to compute the LIBDM_API_COOKIE make variable
+from host information when cross-compiling.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+Rebase to 0.7.1
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ kpartx/Makefile | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/kpartx/Makefile b/kpartx/Makefile
+index bfa6fe8..be87124 100644
+--- a/kpartx/Makefile
++++ b/kpartx/Makefile
+@@ -8,9 +8,7 @@ LDFLAGS += $(BIN_LDFLAGS)
+
+ LIBDEPS += -ldevmapper
+
+-ifneq ($(call check_func,dm_task_set_cookie,/usr/include/libdevmapper.h),0)
+- CFLAGS += -DLIBDM_API_COOKIE
+-endif
++CFLAGS += -DLIBDM_API_COOKIE
+
+ OBJS = bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \
+ gpt.o mac.o ps3.o crc32.o lopart.o xstrncpy.o devmapper.o
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipath.conf.example b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipath.conf.example
new file mode 100644
index 000000000..6bbeadba2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipath.conf.example
@@ -0,0 +1,90 @@
+# This is a basic configuration file with some examples, for device mapper
+# multipath.
+# For a complete list of the default configuration values, see
+# /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf.defaults
+# For a list of configuration options with descriptions, see
+# /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf.annotated
+
+## By default, devices with vendor = "IBM" and product = "S/390.*" are
+## blacklisted. To enable mulitpathing on these devies, uncomment the
+## following lines.
+#blacklist_exceptions {
+# device {
+# vendor "IBM"
+# product "S/390.*"
+# }
+#}
+
+## Use user friendly names, instead of using WWIDs as names.
+defaults {
+ user_friendly_names yes
+}
+##
+## Here is an example of how to configure some standard options.
+##
+#
+#defaults {
+# udev_dir /dev
+# polling_interval 10
+# selector "round-robin 0"
+# path_grouping_policy multibus
+# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
+# prio alua
+# path_checker readsector0
+# rr_min_io 100
+# max_fds 8192
+# rr_weight priorities
+# failback immediate
+# no_path_retry fail
+# user_friendly_names yes
+#}
+##
+## The wwid line in the following blacklist section is shown as an example
+## of how to blacklist devices by wwid. The 2 devnode lines are the
+## compiled in default blacklist. If you want to blacklist entire types
+## of devices, such as all scsi devices, you should use a devnode line.
+## However, if you want to blacklist specific devices, you should use
+## a wwid line. Since there is no guarantee that a specific device will
+## not change names on reboot (from /dev/sda to /dev/sdb for example)
+## devnode lines are not recommended for blacklisting specific devices.
+##
+#blacklist {
+# wwid 26353900f02796769
+# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
+# devnode "^hd[a-z]"
+#}
+#multipaths {
+# multipath {
+# wwid 3600508b4000156d700012000000b0000
+# alias yellow
+# path_grouping_policy multibus
+# path_checker readsector0
+# path_selector "round-robin 0"
+# failback manual
+# rr_weight priorities
+# no_path_retry 5
+# }
+# multipath {
+# wwid 1DEC_____321816758474
+# alias red
+# }
+#}
+#devices {
+# device {
+# vendor "COMPAQ "
+# product "HSV110 (C)COMPAQ"
+# path_grouping_policy multibus
+# getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
+# path_checker readsector0
+# path_selector "round-robin 0"
+# hardware_handler "0"
+# failback 15
+# rr_weight priorities
+# no_path_retry queue
+# }
+# device {
+# vendor "COMPAQ "
+# product "MSA1000 "
+# path_grouping_policy multibus
+# }
+#}
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipathd.oe b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipathd.oe
new file mode 100755
index 000000000..3bdf875e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/multipathd.oe
@@ -0,0 +1,146 @@
+#!/bin/bash
+#
+# multipathd Starts the multipath daemon
+#
+# chkconfig: - 06 87
+# description: Manages device-mapper multipath devices
+
+### BEGIN INIT INFO
+# Provides: multipathd
+# Required-Start:
+# Required-Stop:
+# Default-Start:
+# Default-Stop:
+# Short-Description: Control multipathd
+# Description: This service monitors and manages
+# device-mapper multipath devices
+### END INIT INFO
+
+DAEMON=/sbin/multipathd
+prog=`basename $DAEMON`
+initdir=/etc/init.d
+lockdir=/var/lock/subsys
+sysconfig=/etc/sysconfig
+syspath=/sys/block
+
+RETVAL=0
+
+teardown_slaves()
+{
+pushd $1 > /dev/null
+if [ -d "slaves" ]; then
+for slave in slaves/*;
+do
+ if [ "$slave" = "slaves/*" ]; then
+ read dev < $1/dev
+ tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"`
+ if ! [ -z $tablename ]; then
+ echo "Root is on a multipathed device, multipathd can not be stopped"
+ exit 1
+ fi
+ else
+ local_slave=`readlink -f $slave`;
+ teardown_slaves $local_slave;
+ fi
+ done
+
+else
+ read dev < $1/dev
+ tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"`
+ if ! [ -z $tablename ]; then
+ echo "Root is on a multipathed device, multipathd can not be stopped"
+ exit 1
+ fi
+fi
+popd > /dev/null
+}
+
+#
+# See how we were called.
+#
+
+start() {
+ test -x $DAEMON || exit 5
+ echo -n $"Starting $prog daemon: "
+ start-stop-daemon --start --quiet --exec $DAEMON
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch $lockdir/$prog
+ echo
+}
+
+force_stop() {
+ echo -n $"Stopping $prog daemon: "
+ killall $DAEMON
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && rm -f $lockdir/$prog
+ echo
+}
+
+stop() {
+ root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/mtab)
+ dm_num=`dmsetup info -c --noheadings -o minor $root_dev 2> /dev/null`
+ if [ $? -eq 0 ]; then
+ root_dm_device="dm-$dm_num"
+ [ -d $syspath/$root_dm_device ] && teardown_slaves $syspath/$root_dm_device
+ fi
+
+ force_stop
+}
+
+restart() {
+ stop
+ start
+}
+
+force_restart() {
+ force_stop
+ start
+}
+
+reload() {
+ echo -n "Reloading $prog: "
+ trap "" SIGHUP
+ killall $DAEMON -s SIGHUP -v
+ RETVAL=$?
+ echo
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+force-stop)
+ force_stop
+ ;;
+force-reload|reload)
+ reload
+ ;;
+restart)
+ restart
+ ;;
+force-restart)
+ force_restart
+ ;;
+condrestart|try-restart)
+ if [ -f $lockdir/$prog ]; then
+ restart
+ fi
+ ;;
+status)
+ if pidof -o %PPID $DAEMON > /dev/null; then
+ echo "Running"
+ RETVAL=0
+ else
+ echo "Not running"
+ RETVAL=1
+ fi
+ ;;
+*)
+ echo $"Usage: $0 {start|stop|force-stop|status|restart|force-restart|condrestart|reload}"
+ RETVAL=2
+esac
+
+exit $RETVAL
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.1.bb b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.1.bb
new file mode 100644
index 000000000..6ec5dffcc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.1.bb
@@ -0,0 +1,113 @@
+SUMMARY = "The upstream project used to drive the Device Mapper multipathing driver"
+
+DESCRIPTION = "It provides tools to manage multipath devices \
+by instructing the device-mapper kernel module what to do. These \
+tools include: \
+1. multipath - Scan the system for multipath devices and assemble them.\
+2. multipathd - Detects when paths fail and execs multipath to update \
+things.\
+3. mpathpersist - Persistent reservation management feature allows \
+cluster management software to manage persistent reservation through \
+mpath device. It processes management requests from callers and hides \
+the management task details. It also handles persistent reservation \
+management of data path life cycle and state changes.\
+4. kpartx - This tool, derived from util-linux's partx, reads partition \
+tables on specified device and create device maps over partitions \
+segments detected. It is called from hotplug upon device maps creation \
+and deletion"
+
+HOMEPAGE = "http://christophe.varoqui.free.fr/"
+
+DEPENDS = "libdevmapper \
+ libaio \
+ liburcu \
+ readline \
+ udev \
+ json-c \
+ "
+
+LICENSE = "GPLv2"
+
+SRC_URI = "git://git.opensvc.com/multipath-tools/.git;protocol=http \
+ file://multipathd.oe \
+ file://multipath.conf.example \
+ file://0001-multipath-attempt-at-common-multipath.rules.patch \
+ file://0002-RH-fixup-udev-rules-for-redhat.patch \
+ file://0003-RH-Remove-the-property-blacklist-exception-builtin.patch \
+ file://0004-RH-don-t-start-without-a-config-file.patch \
+ file://0005-RH-add-mpathconf.patch \
+ file://0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch \
+ file://0007-RH-trigger-change-uevent-on-new-device-creation.patch \
+ file://0008-libmultipath-change-how-RADOS-checker-is-enabled.patch \
+ file://0009-multipath-set-verbosity-to-default-during-config.patch \
+ file://0010-mpath-skip-device-configs-without-vendor-product.patch \
+ file://0011-multipathd-fix-show-maps-json-crash.patch \
+ file://0012-multipath-tools-modify-Makefile.inc-for-cross-compil.patch \
+ file://0013-Always-use-devmapper.patch \
+ file://0014-Always-use-devmapper-for-kpartx.patch \
+ file://0001-kpartx-include-limits.h-for-PATH_MAX.patch \
+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+SRCREV = "f21166a812a2cfb50ecf9550d32947c83103f83a"
+
+S = "${WORKDIR}/git"
+
+inherit systemd pkgconfig
+
+SYSTEMD_SERVICE_${PN} = "multipathd.service"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+# multipath-tools includes a copy of the valgrind.h header
+# file and uses the macros to suppress some false positives. However,
+# that only works on ARM when thumb is disabled. Otherwise one gets:
+# Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r12,r12,ror#3'
+# ../Makefile.inc:66: recipe for target 'debug.o' failed
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
+
+# The exact version of SYSTEMD does not matter but should be greater than 209.
+#
+EXTRA_OEMAKE = 'MULTIPATH_VERSION=${PV} DESTDIR=${D} syslibdir=${base_libdir} \
+ OPTFLAGS="${CFLAGS}" \
+ bindir=${base_sbindir} \
+ LIB=${base_libdir} libdir=${base_libdir}/multipath \
+ unitdir=${systemd_system_unitdir} \
+ ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "SYSTEMD=216", "", d)} \
+ '
+
+do_install() {
+ oe_runmake install
+
+ # We copy an initscript, but do not start multipathd at init time.
+ #
+ if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)};then
+ install -d ${D}${sysconfdir}/init.d
+ cp ${WORKDIR}/multipathd.oe ${D}${sysconfdir}/init.d/multipathd
+ fi
+
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/multipath.conf.example \
+ ${D}${sysconfdir}/multipath.conf.example
+}
+
+FILES_${PN}-dbg += "${base_libdir}/multipath/.debug"
+
+PACKAGES =+ "${PN}-libs"
+FILES_${PN}-libs = "${base_libdir}/lib*.so.* \
+ ${base_libdir}/multipath/lib*.so*"
+RDEPENDS_${PN} += "${PN}-libs bash"
+
+PROVIDES += "device-mapper-multipath"
+RPROVIDES_${PN} += "device-mapper-multipath"
+RPROVIDES_${PN}-libs += "device-mapper-multipath-libs"
+
+FILES_${PN}-dev += "${base_libdir}/pkgconfig"
+
+PACKAGES =+ "kpartx"
+FILES_kpartx = "${base_sbindir}/kpartx \
+ ${nonarch_libdir}/udev/kpartx_id \
+ "
+
+RDEPENDS_${PN} += "bash kpartx"
diff --git a/meta-openembedded/meta-oe/recipes-support/nano/nano.inc b/meta-openembedded/meta-oe/recipes-support/nano/nano.inc
new file mode 100644
index 000000000..22f0fb2a0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nano/nano.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "GNU nano (Nano's ANOther editor, or \
+Not ANOther editor) is an enhanced clone of the \
+Pico text editor."
+HOMEPAGE = "http://www.nano-editor.org/"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
+SECTION = "console/utils"
+DEPENDS = "ncurses file"
+RDEPENDS_${PN} = "ncurses-terminfo"
+
+PV_MAJOR = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+SRC_URI = "https://nano-editor.org/dist/v${PV_MAJOR}/nano-${PV}.tar.xz"
+
+inherit autotools gettext pkgconfig
+
+PACKAGECONFIG[tiny] = "--enable-tiny,"
diff --git a/meta-openembedded/meta-oe/recipes-support/nano/nano_2.9.3.bb b/meta-openembedded/meta-oe/recipes-support/nano/nano_2.9.3.bb
new file mode 100644
index 000000000..afb0cf2e7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nano/nano_2.9.3.bb
@@ -0,0 +1,4 @@
+include nano.inc
+
+SRC_URI[md5sum] = "6dd37f010d6a985bf0e5f8ed091ff919"
+SRC_URI[sha256sum] = "7783bcfd4b2d5dc0bf64d4bd07b1a19e7ba3c91da881a4249772a36b972d4012"
diff --git a/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-CMakeLists.txt-Remove-mthumb-interwork.patch b/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-CMakeLists.txt-Remove-mthumb-interwork.patch
new file mode 100644
index 000000000..9f2faaa52
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-CMakeLists.txt-Remove-mthumb-interwork.patch
@@ -0,0 +1,44 @@
+From 8a0d1cbfcc0649b2696c9cf20f877366de259ce3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 12 Nov 2016 18:15:26 +0000
+Subject: [PATCH] CMakeLists.txt: Remove -mthumb-interwork
+
+This option is meaningless with aapcs ABI
+which is the default for Linux and android
+for armv7+ architectures
+
+As an aside it helps in compiling with clang
+where this option is absent
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 784a5a8..68da920 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -117,7 +117,7 @@ if(ANDROID_PLATFORM)
+
+ # Adding cflags for armv7. Aarch64 does not need such flags.
+ if(${NE10_TARGET_ARCH} STREQUAL "armv7")
+- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -mthumb -march=armv7-a -mfloat-abi=${FLOAT_ABI} -mfpu=vfp3")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -march=armv7-a -mfloat-abi=${FLOAT_ABI} -mfpu=vfp3")
+ if(NE10_ARM_HARD_FLOAT)
+ # "--no-warn-mismatch" is needed for linker to suppress linker error about not all functions use VFP register to pass argument, eg.
+ # .../arm-linux-androideabi/bin/ld: error: ..../test-float.o
+@@ -138,8 +138,8 @@ if(ANDROID_PLATFORM)
+ ${CMAKE_C_FLAGS}")
+ elseif(GNULINUX_PLATFORM)
+ if("${NE10_TARGET_ARCH}" STREQUAL "armv7")
+- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -mthumb -march=armv7-a -mfpu=vfp3 -funsafe-math-optimizations")
+- set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -mthumb -march=armv7-a -mfpu=neon")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -march=armv7-a -mfpu=vfp3 -funsafe-math-optimizations")
++ set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -mthumb -march=armv7-a -mfpu=neon")
+ # Turn on asm optimization for Linux on ARM v7.
+ set(NE10_ASM_OPTIMIZATION on)
+ endif()
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-Dont-specify-march-explicitly.patch b/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-Dont-specify-march-explicitly.patch
new file mode 100644
index 000000000..a8fea82dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ne10/ne10/0001-Dont-specify-march-explicitly.patch
@@ -0,0 +1,38 @@
+From 66d332e4b631eef800c6f62cd347b164ee3b59d4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Apr 2017 10:11:21 -0700
+Subject: [PATCH] Dont specify -march explicitly
+
+it assumes armv7-a for all armv7 based machines but that may
+not be true e.g. machines based on armv7ve and cortexa-7
+it causes conflicts in OE builds because it specifies -march
+in recipes anyway so this is redundant in CMakeLists.txt
+
+Fixes
+
+| cc1: warning: switch -mcpu=cortex-a7 conflicts with -march=armv7-a switch
+| cc1: warning: switch -mcpu=cortex-a7 conflicts with -march=armv7-a switch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 68da920..a4b94b9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -138,8 +138,8 @@ if(ANDROID_PLATFORM)
+ ${CMAKE_C_FLAGS}")
+ elseif(GNULINUX_PLATFORM)
+ if("${NE10_TARGET_ARCH}" STREQUAL "armv7")
+- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -march=armv7-a -mfpu=vfp3 -funsafe-math-optimizations")
+- set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -mthumb -march=armv7-a -mfpu=neon")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -mfpu=vfp3 -funsafe-math-optimizations")
++ set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -mthumb -mfpu=neon")
+ # Turn on asm optimization for Linux on ARM v7.
+ set(NE10_ASM_OPTIMIZATION on)
+ endif()
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ne10/ne10_1.2.1.bb b/meta-openembedded/meta-oe/recipes-support/ne10/ne10_1.2.1.bb
new file mode 100644
index 000000000..76e0741b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ne10/ne10_1.2.1.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "Library containing NEON-optimized implementations for a common set of functions"
+HOMEPAGE = "http://projectne10.github.io/Ne10/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e7fe20c9be97be5579e3ab5d92d3a218"
+SECTION = "libs"
+
+SRC_URI = "git://github.com/projectNe10/Ne10.git \
+ file://0001-CMakeLists.txt-Remove-mthumb-interwork.patch \
+ file://0001-Dont-specify-march-explicitly.patch \
+ "
+SRCREV = "18c4c982a595dad069cd8df4932aefb1d257591f"
+
+S = "${WORKDIR}/git"
+PV .= "gitr+${SRCPV}"
+
+inherit cmake
+
+NE10_TARGET_ARCH = ""
+EXTRA_OECMAKE = '-DGNULINUX_PLATFORM=ON -DNE10_BUILD_SHARED=ON -DNE10_LINUX_TARGET_ARCH="${NE10_TARGET_ARCH}"'
+
+COMPATIBLE_MACHINE_aarch64 = "(.*)"
+COMPATIBLE_MACHINE_armv7a = "(.*)"
+
+python () {
+ if any(t.startswith('armv7') for t in d.getVar('TUNE_FEATURES').split()):
+ d.setVar('NE10_TARGET_ARCH', 'armv7')
+ bb.debug(2, 'Building Ne10 for armv7')
+ elif any(t.startswith('aarch64') for t in d.getVar('TUNE_FEATURES').split()):
+ d.setVar('NE10_TARGET_ARCH', 'aarch64')
+ bb.debug(2, 'Building Ne10 for aarch64')
+ else:
+ raise bb.parse.SkipRecipe("Incompatible with archs other than armv7 and aarch64")
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}
+ install -m 0644 ${S}/inc/NE10*.h ${D}${includedir}/
+ install -m 0644 ${B}/modules/libNE10.a ${D}${libdir}/
+ install -m 0755 ${B}/modules/libNE10.so.* ${D}${libdir}/
+ cp -a ${B}/modules/libNE10.so ${D}${libdir}/
+}
+
+# ERROR: QA Issue: ELF binary 'ne10/1.2.1-r0/packages-split/ne10/usr/lib/libNE10.so.10' has relocations in .text [textrel]
+# ERROR: QA Issue: ELF binary 'ne10/1.2.1-r0/packages-split/ne10/usr/lib/libNE10.so.10' has relocations in .text [textrel]
+INSANE_SKIP_${PN} += "textrel"
diff --git a/meta-openembedded/meta-oe/recipes-support/neon/neon/pkgconfig.patch b/meta-openembedded/meta-oe/recipes-support/neon/neon/pkgconfig.patch
new file mode 100644
index 000000000..239dba8e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/neon/neon/pkgconfig.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Inappropriate [configuration]
+
+---
+ neon.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- neon-0.30.1.orig/neon.pc.in
++++ neon-0.30.1/neon.pc.in
+@@ -7,5 +7,5 @@ Name: neon
+ Description: HTTP/WebDAV client library
+ Version: @NEON_VERSION@
+ Libs: -L${libdir} -lneon @NEON_PC_LIBS@
+-Libs.private: @NEON_LIBS@
++Libs.private: -L${libdir} -lz -lgcrypt -lgpg-error -lexpat -lgnutls
+ Cflags: -I${includedir}/neon @NEON_CFLAGS@
diff --git a/meta-openembedded/meta-oe/recipes-support/neon/neon_0.30.2.bb b/meta-openembedded/meta-oe/recipes-support/neon/neon_0.30.2.bb
new file mode 100644
index 000000000..00b79f633
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/neon/neon_0.30.2.bb
@@ -0,0 +1,38 @@
+SUMMARY = "An HTTP and WebDAV client library with a C interface"
+HOMEPAGE = "http://www.webdav.org/neon/"
+SECTION = "libs"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://src/COPYING.LIB;md5=f30a9716ef3762e3467a2f62bf790f0a \
+ file://src/ne_utils.h;beginline=1;endline=20;md5=2caca609538eddaa6f6adf120a218037"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/neon27/neon27_${PV}.orig.tar.gz \
+ file://pkgconfig.patch \
+ "
+
+SRC_URI[md5sum] = "e28d77bf14032d7f5046b3930704ef41"
+SRC_URI[sha256sum] = "db0bd8cdec329b48f53a6f00199c92d5ba40b0f015b153718d1b15d3d967fbca"
+
+inherit autotools binconfig-disabled lib_package pkgconfig
+
+# Enable gnutls or openssl, not both
+PACKAGECONFIG ?= "expat gnutls libproxy webdav zlib"
+PACKAGECONFIG_class-native = "expat gnutls webdav zlib"
+
+PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat"
+PACKAGECONFIG[gnutls] = "--with-ssl=gnutls,,gnutls"
+PACKAGECONFIG[gssapi] = "--with-gssapi,--without-gssapi,krb5"
+PACKAGECONFIG[libproxy] = "--with-libproxy,--without-libproxy,libproxy"
+PACKAGECONFIG[libxml2] = "--with-libxml2,--without-libxml2,libxml2"
+PACKAGECONFIG[openssl] = "--with-ssl=openssl,,openssl"
+PACKAGECONFIG[webdav] = "--enable-webdav,--disable-webdav,"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+
+EXTRA_OECONF += "--enable-shared"
+
+do_compile_append() {
+ oe_runmake -C test
+}
+
+BINCONFIG = "${bindir}/neon-config"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/nmon/nmon/0001-lmon16g.c-Adjust-system-headers.patch b/meta-openembedded/meta-oe/recipes-support/nmon/nmon/0001-lmon16g.c-Adjust-system-headers.patch
new file mode 100644
index 000000000..e8debe56a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nmon/nmon/0001-lmon16g.c-Adjust-system-headers.patch
@@ -0,0 +1,46 @@
+From d977b5170027926eb97ab9742ddc51d2a5555a34 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 10:06:49 -0700
+Subject: [PATCH] lmon16g.c: Adjust system headers
+
+fstab.h is unused
+errno.h is in /usr/include
+defines from sys/cdefs.h is used
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lmon16g.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lmon16g.c b/lmon16g.c
+index cb27e09..d2a11c5 100644
+--- a/lmon16g.c
++++ b/lmon16g.c
+@@ -63,7 +63,7 @@ static char *SccsId = "nmon " VERSION;
+ #include <fcntl.h>
+ #include <math.h>
+ #include <time.h>
+-#include <sys/errno.h>
++#include <errno.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/ioctl.h>
+@@ -71,6 +71,7 @@ static char *SccsId = "nmon " VERSION;
+ #include <sys/time.h>
+ #include <sys/socket.h>
+ #include <sys/wait.h>
++#include <sys/cdefs.h>
+
+ /* Windows moved here so they can be cleared when the screen mode changes */
+ WINDOW *padwelcome = NULL;
+@@ -576,7 +577,6 @@ struct procsinfo {
+ int isroot = 0;
+
+ #include <mntent.h>
+-#include <fstab.h>
+ #include <sys/stat.h>
+ #include <sys/statfs.h>
+ #include <net/if.h>
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nmon/nmon_16g.bb b/meta-openembedded/meta-oe/recipes-support/nmon/nmon_16g.bb
new file mode 100644
index 000000000..e77faa30a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nmon/nmon_16g.bb
@@ -0,0 +1,31 @@
+SUMMARY = "nmon performance monitor"
+HOMEPAGE = "http://nmon.sf.net"
+SECTION = "console/utils"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/Documentation.txt;md5=dbb13658cf55d687c4f2ff771a696d4a"
+DEPENDS = "ncurses"
+DEPENDS_append_libc-musl = " bsd-headers"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/nmon/lmon${PV}.c;name=lmon \
+ ${SOURCEFORGE_MIRROR}/nmon/Documentation.txt;name=doc \
+ file://0001-lmon16g.c-Adjust-system-headers.patch \
+"
+SRC_URI[lmon.md5sum] = "246ccfc74d5af55d992601fc4d3d4a72"
+SRC_URI[lmon.sha256sum] = "da82dd693b503b062854dfe7dbb5d36b347872ab44a4aa05b97e9d577747f688"
+SRC_URI[doc.md5sum] = "dbb13658cf55d687c4f2ff771a696d4a"
+SRC_URI[doc.sha256sum] = "1f7f83afe62a7210be5e83cd24157adb854c14599efe0b377a7ecca933869278"
+
+CFLAGS += "-D JFS -D GETUSER -Wall -D LARGEMEM"
+LDFLAGS += "-ltinfo -lncursesw -lm"
+ASNEEDED_pn-nmon = ""
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} lmon${PV}.c -o nmon
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 nmon ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl/0001-define-run-test-target.patch b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/0001-define-run-test-target.patch
new file mode 100644
index 000000000..78ffb22f8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/0001-define-run-test-target.patch
@@ -0,0 +1,32 @@
+rename test target as run-test
+
+Upstream-Statue: Pending
+
+test target not only compile the test files, but also run them, which is
+not suitable for cross-compile environment, so rename it as run-test.
+
+and define test target to compile the test files.
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ Makefile.am | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index b6db339..de176c4 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -124,7 +124,9 @@ regress2: $(check_PROGRAMS)
+ test_numademo: numademo
+ ./numademo -t -e 10M
+
+-test: all $(check_PROGRAMS) regress1 regress2 test_numademo
++test: all $(check_PROGRAMS)
++
++run-test: all $(check_PROGRAMS) regress1 regress2 test_numademo
+
+ TESTS_ENVIRONMENT = builddir='$(builddir)'; export builddir;
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Fix-the-test-output-format.patch b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Fix-the-test-output-format.patch
new file mode 100644
index 000000000..9812ecc8b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Fix-the-test-output-format.patch
@@ -0,0 +1,64 @@
+From 59fd750a84bbe5874dec936d2bee9ef11a1b6505 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 21 Jul 2015 02:01:22 +0900
+Subject: [PATCH] Fix the test output format
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ test/regress | 6 +++---
+ test/regress2 | 11 +++++------
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+diff --git a/test/regress b/test/regress
+index 2ce1705..d086a47 100755
+--- a/test/regress
++++ b/test/regress
+@@ -74,6 +74,7 @@ probe_hardware()
+ if [ $numnodes -lt 2 ] ; then
+ echo "need at least two nodes with at least $NEEDPAGES each of"
+ echo "free memory for mempolicy regression tests"
++ echo "FAIL: numa regress"
+ exit 77 # Skip test
+ fi
+ }
+@@ -207,10 +208,9 @@ main()
+ rm A B
+
+ if [ "$EXIT" = 0 ] ; then
+- echo '========SUCCESS'
++ echo 'PASS: numactl regress'
+ else
+- echo '========FAILURE'
+- exit 1
++ echo 'FAIL: numactl regress'
+ fi
+ }
+
+diff --git a/test/regress2 b/test/regress2
+index aa6ea41..450c510 100755
+--- a/test/regress2
++++ b/test/regress2
+@@ -9,12 +9,11 @@ testdir=`dirname "$0"`
+ export PATH=${builddir}:$PATH
+
+ T() {
+- echo "$@"
+- if ! $VALGRIND "$@" ; then
+- echo $1 FAILED!!!!
+- exit 1
+- fi
+- echo
++ if ! $VALGRIND "$@" 2>&1 1>/dev/null; then
++ echo "FAIL: $1"
++ else
++ echo "PASS: $1"
++ fi
+ }
+
+ # still broken
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Makefile b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Makefile
new file mode 100644
index 000000000..9a5134c3f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/Makefile
@@ -0,0 +1,7 @@
+.PHONY: regress1 regress2
+
+regress1:
+ cd test ; ./regress
+
+regress2:
+ cd test ; ./regress2
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl/fix-null-pointer.patch b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/fix-null-pointer.patch
new file mode 100644
index 000000000..53952aef9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/fix-null-pointer.patch
@@ -0,0 +1,28 @@
+[PATCH] return 0 if distance_table is NULL
+
+Upstream-Status: Pending
+
+read_distance_table() maybe return 0, but distance_table is not set,
+if distance_table is used, and will lead to SEGFAULT
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ distance.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/distance.c b/distance.c
+index 4a26972..c6ca021 100755
+--- a/distance.c
++++ b/distance.c
+@@ -113,6 +113,8 @@ int numa_distance(int a, int b)
+ int err = read_distance_table();
+ if (err < 0)
+ return 0;
++ if (!distance_table)
++ return 0;
+ }
+ return distance_table[a * distance_numnodes + b];
+ }
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl/run-ptest b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/run-ptest
new file mode 100755
index 000000000..215f7c25b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl/run-ptest
@@ -0,0 +1,9 @@
+#!/bin/sh
+make regress1
+make regress2
+if numademo -t -e 10M; then
+ echo "PASS: numademo"
+else
+ echo "FAIL: numademo"
+fi
+
diff --git a/meta-openembedded/meta-oe/recipes-support/numactl/numactl_git.bb b/meta-openembedded/meta-oe/recipes-support/numactl/numactl_git.bb
new file mode 100644
index 000000000..b9cbcf09d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/numactl/numactl_git.bb
@@ -0,0 +1,61 @@
+SUMMARY = "Development package for building Applications that use numa"
+HOMEPAGE = "http://oss.sgi.com/projects/libnuma/"
+DESCRIPTION = "Simple NUMA policy support. It consists of a numactl program \
+to run other programs with a specific NUMA policy and a libnuma to do \
+allocations with NUMA policy in applications."
+LICENSE = "GPL-2.0 & LGPL-2.1"
+SECTION = "apps"
+RDEPENDS_${PN} = "perl"
+
+inherit autotools-brokensep ptest
+
+LIC_FILES_CHKSUM = "file://README;beginline=19;endline=32;md5=5644cc3851cb2499f6c48e52fe198bd9"
+
+SRCREV = "ea3a70681c2f523fe58e1d44527f478ca76db74e"
+PV = "2.0.11+git${SRCPV}"
+
+SRC_URI = "git://github.com/numactl/numactl \
+ file://fix-null-pointer.patch \
+ file://Fix-the-test-output-format.patch \
+ file://Makefile \
+ file://run-ptest \
+ file://0001-define-run-test-target.patch \
+"
+
+S = "${WORKDIR}/git"
+
+# ARM does not currently support NUMA
+COMPATIBLE_HOST = "^((?!arm).*)$"
+
+do_install() {
+ oe_runmake DESTDIR=${D} prefix=${D}/usr install
+ #remove the empty man2 directory
+ rm -r ${D}${mandir}/man2
+}
+
+do_compile_ptest() {
+ oe_runmake test
+}
+
+do_install_ptest() {
+ #install tests binaries
+ local test_binaries="distance ftok mbind_mig_pages migrate_pages move_pages \
+ mynode nodemap node-parse pagesize prefered randmap realloc_test \
+ tbitmap tshared"
+
+ [ ! -d ${D}/${PTEST_PATH}/test ] && mkdir -p ${D}/${PTEST_PATH}/test
+ for i in $test_binaries; do
+ install -m 0755 ${B}/test/.libs/$i ${D}${PTEST_PATH}/test
+ done
+
+ local test_scripts="checktopology checkaffinity printcpu regress regress2 \
+ shmtest runltp bind_range"
+ for i in $test_scripts; do
+ install -m 0755 ${B}/test/$i ${D}${PTEST_PATH}/test
+ done
+
+ install -m 0755 ${WORKDIR}/Makefile ${D}${PTEST_PATH}/
+ install -m 0755 ${B}/.libs/numactl ${D}${PTEST_PATH}/
+}
+
+RDEPENDS_${PN}-ptest = "bash"
diff --git a/meta-openembedded/meta-oe/recipes-support/ode/ode/install.patch b/meta-openembedded/meta-oe/recipes-support/ode/ode/install.patch
new file mode 100644
index 000000000..2f6cdb008
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ode/ode/install.patch
@@ -0,0 +1,23 @@
+--- ode-0.9.orig/Makefile.am 2007-02-21 15:54:54.000000000 +0100
++++ ode-0.9/Makefile.am 2010-08-21 16:15:55.000000000 +0200
+@@ -25,13 +25,13 @@
+
+ if USE_SONAME
+ install-exec-hook:
+- ln -s $(libdir)/@ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
+- $(libdir)/libode.so
+- ln -s $(libdir)/@ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
+- $(libdir)/@ODE_SONAME@
+- ln -s $(libdir)/@ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
+- $(libdir)/@ODE_SONAME@.@ODE_REVISION@
+- /sbin/ldconfig
++ ln -s @ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
++ $(DESTDIR)/$(libdir)/libode.so
++ ln -s @ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
++ $(DESTDIR)/$(libdir)/@ODE_SONAME@
++ ln -s @ODE_SONAME@.@ODE_REVISION@.@ODE_AGE@ \
++ $(DESTDIR)/$(libdir)/@ODE_SONAME@.@ODE_REVISION@
++ echo /sbin/ldconfig
+ else
+ install-exec-hook:
+ endif
diff --git a/meta-openembedded/meta-oe/recipes-support/onig/files/configure.patch b/meta-openembedded/meta-oe/recipes-support/onig/files/configure.patch
new file mode 100644
index 000000000..5fa700f19
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/onig/files/configure.patch
@@ -0,0 +1,13 @@
+Index: onig-5.9.3/configure.in
+===================================================================
+--- onig-5.9.3.orig/configure.in 2012-10-26 07:06:14.000000000 +0000
++++ onig-5.9.3/configure.in 2014-07-18 08:02:52.701574484 +0000
+@@ -3,7 +3,7 @@
+
+ AC_CONFIG_MACRO_DIR([m4])
+
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+ AC_CONFIG_HEADER(config.h)
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/onig/files/do-not-use-system-headers.patch b/meta-openembedded/meta-oe/recipes-support/onig/files/do-not-use-system-headers.patch
new file mode 100644
index 000000000..b93602a26
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/onig/files/do-not-use-system-headers.patch
@@ -0,0 +1,44 @@
+Author: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+When build on host with older eglibc (Ubuntu 12.04) build fails with:
+
+/tmp/OE/build/tmp-eglibc/sysroots/genericarmv8/usr/include/bits/predefs.h:23:3: error: #error "Never use <bits/predefs.h> directly; include <stdc-predef.h> instead."
+
+Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+---
+ Makefile.am | 2 +-
+ sample/Makefile.am | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- onig-5.9.3.orig/Makefile.am
++++ onig-5.9.3/Makefile.am
+@@ -4,11 +4,11 @@ sampledir = $(top_srcdir)/sample
+ libname = libonig.la
+
+ ACLOCAL_AMFLAGS = -I m4
+ #AM_CFLAGS = -DNOT_RUBY
+ AM_CFLAGS =
+-INCLUDES = -I$(top_srcdir) -I$(includedir)
++INCLUDES = -I$(top_srcdir)
+
+ SUBDIRS = . sample
+
+ include_HEADERS = oniguruma.h oniggnu.h onigposix.h
+ lib_LTLIBRARIES = $(libname)
+--- onig-5.9.3.orig/sample/Makefile.am
++++ onig-5.9.3/sample/Makefile.am
+@@ -1,10 +1,10 @@
+ noinst_PROGRAMS = encode listcap names posix simple sql syntax crnl
+
+ libname = $(top_builddir)/libonig.la
+ LDADD = $(libname)
+-INCLUDES = -I$(top_srcdir) -I$(includedir)
++INCLUDES = -I$(top_srcdir)
+
+ encode_SOURCES = encode.c
+ listcap_SOURCES = listcap.c
+ names_SOURCES = names.c
+ posix_SOURCES = posix.c
diff --git a/meta-openembedded/meta-oe/recipes-support/onig/onig_5.9.6.bb b/meta-openembedded/meta-oe/recipes-support/onig/onig_5.9.6.bb
new file mode 100644
index 000000000..abbaf98c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/onig/onig_5.9.6.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Regular expressions library. The characteristics of this \
+library is that different character encoding for every regular expression \
+object can be specified."
+HOMEPAGE = "https://web.archive.org/web/20150807014439/http://www.geocities.jp/kosako3/oniguruma/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0d4861b5bc0c392a5aa90d9d76ebd86f"
+
+SRC_URI = "https://web.archive.org/web/20150807014439/http://www.geocities.jp/kosako3/oniguruma/archive/${BP}.tar.gz \
+ file://do-not-use-system-headers.patch \
+ file://configure.patch"
+
+SRC_URI[md5sum] = "d08f10ea5c94919780e6b7bed1ef9830"
+SRC_URI[sha256sum] = "d5642010336a6f68b7f2e34b1f1cb14be333e4d95c2ac02b38c162caf44e47a7"
+
+BINCONFIG = "${bindir}/onig-config"
+
+inherit autotools binconfig-disabled
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/tools.conf b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/tools.conf
new file mode 100644
index 000000000..f6cae70cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/tools.conf
@@ -0,0 +1,2 @@
+[guestinfo]
+disable-perf-mon=1
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.init b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.init
new file mode 100644
index 000000000..38280464a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.init
@@ -0,0 +1,66 @@
+#!/bin/sh
+#
+# vmtoolsd Start/stop the vmware tools daemon
+#
+# chkconfig: 2345 90 60
+# description: vmtoolsd is a daemon that starts up. for some reason, it
+# doesn't include a sysv init startup file in the latest release.
+# so i have to write this
+#
+
+### BEGIN INIT INFO
+# Provides: vmtoolsd
+# Required-Start: $local_fs $syslog
+# Required-Stop: $local_fs $syslog
+# Default-Start: 2345
+# Default-Stop: 90
+# Short-Description: Run vmware tools daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/vmtoolsd
+NAME=vmtoolsd
+DESC="vmware tools daemon"
+VMTOOLSDARGS=" -b /var/run/vmtoolsd.pid "
+RETVAL="1"
+
+# source function library
+. /etc/init.d/functions
+
+test -f $DAEMON || exit 0
+
+
+case "$1" in
+ start)
+ echo -n "Starting vmware tools daemon: "
+ start-stop-daemon --start --quiet --exec $DAEMON -- $VMTOOLSDARGS
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ] ; then
+ echo "OK"
+ else
+ echo "FAIL"
+ fi
+ ;;
+ stop)
+ echo -n "Stopping vmware tools daemon: "
+ start-stop-daemon --stop --quiet --pidfile /var/run/vmtoolsd.pid
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ] ; then
+ echo "OK"
+ else
+ echo "FAIL"
+ fi
+ ;;
+ status)
+ status vmtoolsd
+ exit $?
+ ;;
+ restart)
+ $0 stop && sleep 1 && $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/vmtoolsd {start|stop|status|restart}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.service b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.service
new file mode 100644
index 000000000..d30e38055
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/files/vmtoolsd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Open Virtual Machine Tools (VMware Tools)
+ConditionVirtualization=vmware
+
+[Service]
+ExecStart=/usr/bin/vmtoolsd
+Restart=on-failure
+KillSignal=SIGKILL
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch
new file mode 100644
index 000000000..9773b4a94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch
@@ -0,0 +1,45 @@
+From a0983d84185f04c4e40778fe951fde4439894882 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 07:37:03 -0700
+Subject: [PATCH 01/11] Remove assumptions about glibc being only libc
+ implementation on linux
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ open-vm-tools/lib/file/fileIOPosix.c | 2 +-
+ open-vm-tools/lib/include/vm_basic_defs.h | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+Index: open-vm-tools/lib/file/fileIOPosix.c
+===================================================================
+--- open-vm-tools.orig/lib/file/fileIOPosix.c
++++ open-vm-tools/lib/file/fileIOPosix.c
+@@ -205,7 +205,7 @@ static AlignedPool alignedPool;
+ * are not available in any header file.
+ */
+
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if defined(__linux__) && defined(__GLIBC__)
+ #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
+ /*
+ * We want preadv/pwritev. But due to FOB=64, the symbols are -64.
+Index: open-vm-tools/lib/include/vm_basic_defs.h
+===================================================================
+--- open-vm-tools.orig/lib/include/vm_basic_defs.h
++++ open-vm-tools/lib/include/vm_basic_defs.h
+@@ -571,6 +571,7 @@ typedef int pid_t;
+ #if defined __linux__ && !defined __KERNEL__ && !defined MODULE && \
+ !defined VMM && !defined FROBOS && !defined __ANDROID__
+ #include <features.h>
++#if __GLIBC__
+ #if __GLIBC_PREREQ(2, 1) && !defined GLIBC_VERSION_21
+ #define GLIBC_VERSION_21
+ #endif
+@@ -590,6 +591,7 @@ typedef int pid_t;
+ #define GLIBC_VERSION_212
+ #endif
+ #endif
++#endif
+
+ /*
+ * Convenience definitions of unicode characters.
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch
new file mode 100644
index 000000000..e9cb873f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch
@@ -0,0 +1,41 @@
+From 929150608c16644695f19cd2e0cc8a06a41cd497 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <mkelly@xevo.com>
+Date: Fri, 7 Apr 2017 15:20:30 -0700
+Subject: [PATCH] configure.ac: don't use dnet-config
+
+The dnet-config tool doesn't know about cross-compilation, so it injects
+-I/usr/include into the path, causing compiler errors. So instead find dnet via
+-ldnet.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Martin Kelly <mkelly@xevo.com>
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3400b86..7d6119e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -942,7 +942,7 @@ if test "$with_dnet" = "yes"; then
+ AC_VMW_CHECK_LIB([dnet],
+ [DNET],
+ [],
+- [dnet-config],
++ [],
+ [],
+ [dnet.h],
+ [intf_open],
+@@ -952,7 +952,7 @@ if test "$with_dnet" = "yes"; then
+
+ if test $have_dnet = "no"; then
+ AC_MSG_ERROR(
+- [dnet-config was not found on your PATH. Please configure without dnet (using --without-dnet) or install dnet - http://libdnet.sourceforge.net])
++ [dnet was not found. Please configure without dnet (using --without-dnet) or install dnet - http://libdnet.sourceforge.net])
+ fi
+ fi
+
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch
new file mode 100644
index 000000000..f905601d5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch
@@ -0,0 +1,33 @@
+From 5818acc8032e3247257730376e947330340a07b3 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <mkelly@xevo.com>
+Date: Mon, 22 May 2017 17:00:05 -0700
+Subject: [PATCH 2/2] add #include <sys/sysmacros.h>
+
+In newer glibc versions, the definition for major() has been moved to
+sys/sysmacros.h, and using the older version in <sys/types.h> has been
+deprecated. So, add an include for <sys/sysmacros.h>.
+
+Upstream-Status: Pending
+
+Signed-off-by: Martin Kelly <mkelly@xevo.com>
+---
+ lib/wiper/wiperPosix.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/open-vm-tools/lib/wiper/wiperPosix.c b/open-vm-tools/lib/wiper/wiperPosix.c
+index d389eee..1f221fc 100644
+--- a/lib/wiper/wiperPosix.c
++++ b/lib/wiper/wiperPosix.c
+@@ -40,6 +40,9 @@
+ # include <libgen.h>
+ # endif /* __FreeBSD_version >= 500000 */
+ #endif
++#if defined(__linux__)
++#include <sys/sysmacros.h>
++#endif
+ #include <unistd.h>
+
+ #include "vmware.h"
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-include-poll.h-instead-of-obsolete-sys-poll.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-include-poll.h-instead-of-obsolete-sys-poll.h.patch
new file mode 100644
index 000000000..d26bf2dd3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-include-poll.h-instead-of-obsolete-sys-poll.h.patch
@@ -0,0 +1,24 @@
+From d44c7c9de7380ad7b284231bd5b5c99b5c19758d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 07:37:59 -0700
+Subject: [PATCH 02/11] include poll.h instead of obsolete sys/poll.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ open-vm-tools/lib/asyncsocket/asyncSocketInt.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: open-vm-tools/lib/asyncsocket/asyncSocketInt.h
+===================================================================
+--- open-vm-tools.orig/lib/asyncsocket/asyncSocketInt.h
++++ open-vm-tools/lib/asyncsocket/asyncSocketInt.h
+@@ -71,8 +71,8 @@
+ #else
+ #include <stddef.h>
+ #include <ctype.h>
++#include <poll.h>
+ #include <sys/types.h>
+-#include <sys/poll.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
+ #include <netdb.h>
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Rename-poll.h-to-vm_poll.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Rename-poll.h-to-vm_poll.h.patch
new file mode 100644
index 000000000..8641778d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Rename-poll.h-to-vm_poll.h.patch
@@ -0,0 +1,756 @@
+From 687fca20b3417ac885b6961e6fe1126d4a3fe7a4 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Tue, 17 Nov 2015 10:57:31 +0000
+Subject: [PATCH 03/11] Rename poll.h to vm_poll.h
+
+musl libc's system headers pulls in open-vm-tools' poll.h. To avoid this
+we rename poll.h to vm_poll.h.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ open-vm-tools/lib/asyncsocket/asyncsocket.c | 2 +-
+ open-vm-tools/lib/hgfsServer/hgfsServer.c | 2 +-
+ open-vm-tools/lib/include/asyncsocket.h | 2 +-
+ open-vm-tools/lib/include/pollImpl.h | 2 +-
+ open-vm-tools/lib/include/{poll.h => vm_poll.h} | 0
+ open-vm-tools/lib/rpcIn/rpcin.c | 2 +-
+ open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c | 2 +-
+ 7 files changed, 6 insertions(+), 6 deletions(-)
+ rename open-vm-tools/lib/include/{poll.h => vm_poll.h} (100%)
+
+Index: open-vm-tools/lib/asyncsocket/asyncsocket.c
+===================================================================
+--- open-vm-tools.orig/lib/asyncsocket/asyncsocket.c
++++ open-vm-tools/lib/asyncsocket/asyncsocket.c
+@@ -52,7 +52,7 @@
+ #include "vmware.h"
+ #include "asyncsocket.h"
+ #include "asyncSocketInt.h"
+-#include "poll.h"
++#include "vm_poll.h"
+ #include "log.h"
+ #include "err.h"
+ #include "hostinfo.h"
+Index: open-vm-tools/lib/hgfsServer/hgfsServer.c
+===================================================================
+--- open-vm-tools.orig/lib/hgfsServer/hgfsServer.c
++++ open-vm-tools/lib/hgfsServer/hgfsServer.c
+@@ -48,7 +48,7 @@
+ #include "hgfsServerOplock.h"
+ #include "hgfsDirNotify.h"
+ #include "userlock.h"
+-#include "poll.h"
++#include "vm_poll.h"
+ #include "mutexRankLib.h"
+ #include "vm_basic_asm.h"
+ #include "unicodeOperations.h"
+Index: open-vm-tools/lib/include/asyncsocket.h
+===================================================================
+--- open-vm-tools.orig/lib/include/asyncsocket.h
++++ open-vm-tools/lib/include/asyncsocket.h
+@@ -129,7 +129,7 @@ typedef struct AsyncSocket AsyncSocket;
+ * Or the client can specify its favorite poll class and locking behavior.
+ * Use of IVmdbPoll is only supported for regular sockets and for Attach.
+ */
+-#include "poll.h"
++#include "vm_poll.h"
+ struct IVmdbPoll;
+ typedef struct AsyncSocketPollParams {
+ int flags; /* Default 0, only POLL_FLAG_NO_BULL is valid */
+Index: open-vm-tools/lib/include/poll.h
+===================================================================
+--- open-vm-tools.orig/lib/include/poll.h
++++ /dev/null
+@@ -1,324 +0,0 @@
+-/*********************************************************
+- * Copyright (C) 1998-2016 VMware, Inc. All rights reserved.
+- *
+- * 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 version 2.1 and no 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 Lesser GNU 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.,
+- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+- *
+- *********************************************************/
+-
+-/*********************************************************
+- * The contents of this file are subject to the terms of the Common
+- * Development and Distribution License (the "License") version 1.0
+- * and no later version. You may not use this file except in
+- * compliance with the License.
+- *
+- * You can obtain a copy of the License at
+- * http://www.opensource.org/licenses/cddl1.php
+- *
+- * See the License for the specific language governing permissions
+- * and limitations under the License.
+- *
+- *********************************************************/
+-
+-
+-#ifndef _POLL_H_
+-#define _POLL_H_
+-
+-#define INCLUDE_ALLOW_USERLEVEL
+-#define INCLUDE_ALLOW_VMCORE
+-#include "includeCheck.h"
+-
+-#include "vm_basic_types.h"
+-#include "vm_basic_defs.h"
+-#include "vmware.h"
+-#include "userlock.h"
+-
+-#ifdef _WIN32
+-#define HZ 100
+-#elif defined linux
+-#include <asm/param.h>
+-#elif __APPLE__
+-#include <TargetConditionals.h>
+-/*
+- * Old SDKs don't define TARGET_OS_IPHONE at all.
+- * New ones define it to 0 on Mac OS X, 1 on iOS.
+- */
+-#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0
+-#include <sys/kernel.h>
+-#endif
+-#include <sys/poll.h>
+-#define HZ 100
+-#endif
+-#ifdef __ANDROID__
+-/*
+- * <poll.h> of android should be included, but its name is same
+- * with this file. So its content is put here to avoid conflict.
+- */
+-#include <asm/poll.h>
+-#define HZ 100
+-typedef unsigned int nfds_t;
+-int poll(struct pollfd *, nfds_t, long);
+-#endif
+-
+-
+-/*
+- * Poll event types: each type has a different reason for firing,
+- * or condition that must be met before firing.
+- */
+-
+-typedef enum {
+- /*
+- * Actual Poll queue types against which you can register callbacks.
+- */
+- POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */
+- POLL_VTIME = 0,
+- POLL_REALTIME,
+- POLL_DEVICE,
+- POLL_MAIN_LOOP,
+- POLL_NUM_QUEUES
+-} PollEventType;
+-
+-
+-/*
+- * Classes of events
+- *
+- * These are the predefined classes. More can be declared
+- * with Poll_AllocClass().
+- */
+-
+-typedef enum PollClass {
+- POLL_CLASS_MAIN,
+- POLL_CLASS_PAUSE,
+- POLL_CLASS_IPC,
+- POLL_CLASS_CPT,
+- POLL_CLASS_MKS,
+- POLL_FIXED_CLASSES,
+- POLL_MAX_CLASSES = 320 /* Size enum to maximum */
+-} PollClass;
+-
+-
+-/*
+- * Each callback is registered in a set of classes
+- */
+-
+-typedef struct PollClassSet {
+- /* Type is uintptr_t to give best 32/64-bit code. */
+-#define _POLL_ELEMSIZE (sizeof (uintptr_t) * 8)
+- uintptr_t bits[CEILING(POLL_MAX_CLASSES, _POLL_ELEMSIZE)];
+-} PollClassSet;
+-
+-/* An empty PollClassSet. */
+-static INLINE PollClassSet
+-PollClassSet_Empty(void)
+-{
+- PollClassSet set = { { 0 } };
+- return set;
+-}
+-
+-/* A PollClassSet with the single member. */
+-static INLINE PollClassSet
+-PollClassSet_Singleton(PollClass c)
+-{
+- PollClassSet s = PollClassSet_Empty();
+-
+- ASSERT_ON_COMPILE(sizeof s.bits[0] * 8 == _POLL_ELEMSIZE); /* Size correct */
+- ASSERT_ON_COMPILE((_POLL_ELEMSIZE & (_POLL_ELEMSIZE - 1)) == 0); /* power of 2 */
+- ASSERT_ON_COMPILE(POLL_MAX_CLASSES <= ARRAYSIZE(s.bits) * _POLL_ELEMSIZE);
+- ASSERT(c < POLL_MAX_CLASSES);
+-
+- s.bits[c / _POLL_ELEMSIZE] = CONST3264U(1) << (c % _POLL_ELEMSIZE);
+- return s;
+-}
+-
+-/* Combine two PollClassSets. */
+-static INLINE PollClassSet
+-PollClassSet_Union(PollClassSet lhs, PollClassSet rhs)
+-{
+- PollClassSet u;
+- unsigned i;
+-
+- for (i = 0; i < ARRAYSIZE(u.bits); i++) {
+- u.bits[i] = lhs.bits[i] | rhs.bits[i];
+- }
+- return u;
+-}
+-
+-/* Add single class to PollClassSet. */
+-static INLINE PollClassSet
+-PollClassSet_Include(PollClassSet set, PollClass c)
+-{
+- return PollClassSet_Union(set, PollClassSet_Singleton(c));
+-}
+-
+-
+-#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN)
+-#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \
+- PollClassSet_Singleton(POLL_CLASS_PAUSE))
+-#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \
+- PollClassSet_Singleton(POLL_CLASS_CPT))
+-#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \
+- PollClassSet_Singleton(POLL_CLASS_IPC))
+-#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */
+-#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS)
+-/*
+- * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it.
+- */
+-#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC)
+-
+-/*
+- * Poll class-set taxonomy:
+- * POLL_CS_MAIN
+- * - Unless you NEED another class, use POLL_CS_MAIN.
+- * POLL_CS_PAUSE
+- * - For callbacks that must occur even if the guest is paused.
+- * Most VMDB or Foundry commands are in this category.
+- * POLL_CS_CPT
+- * - Only for callbacks which can trigger intermediate Checkpoint
+- * transitions.
+- * The ONLY such callback is Migrate.
+- * POLL_CS_IPC
+- * - Only for callbacks which can contain Msg_(Post|Hint|Question)
+- * responses, and for signal handlers (why)?
+- * Vigor, VMDB, and Foundry can contain Msg_* responses.
+- * POLL_CS_MKS
+- * - Callback runs in MKS thread.
+- * POLL_CS_ALWAYS
+- * - Only for events that must be processed immediately.
+- * The ONLY such callback is OvhdMemVmxSizeCheck.
+- */
+-
+-
+-/*
+- * Poll_Callback flags
+- */
+-
+-#define POLL_FLAG_PERIODIC 0x01 // keep after firing
+-#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory
+-#define POLL_FLAG_READ 0x04 // device is ready for reading
+-#define POLL_FLAG_WRITE 0x08 // device is ready for writing
+-#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket
+-#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking
+-#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events
+-#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor.
+-#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl
+-#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop
+-
+-
+-/*
+- * Advisory minimum time period.
+- * Users that want the fastest running real-time poll
+- * should use TICKS_TO_USECS(1).
+- */
+-
+-#define TICKS_TO_USECS(_x) ((_x) * (1000000 / HZ))
+-#define USECS_TO_TICKS(_x) ((_x) / (1000000 / HZ))
+-
+-
+-typedef void (*PollerFunction)(void *clientData);
+-typedef void (*PollerFireWrapper)(PollerFunction func,
+- void *funcData,
+- void *wrapperData);
+-typedef Bool (*PollerErrorFn)(const char *errorStr);
+-
+-/*
+- * Initialisers:
+- *
+- * For the sake of convenience, we declare the initialisers
+- * for custom implmentations here, even though the actual
+- * implementations are distinct from the core poll code.
+- */
+-
+-typedef struct PollOptions {
+- Bool locked; // Use internal MXUser for locking
+- Bool allowFullQueue; // Don't assert when device event queue is full.
+- VThreadID windowsMsgThread; // thread that processes Windows messages
+- PollerFireWrapper fireWrapperFn; // optional; may be useful for stats
+- void *fireWrapperData; // optional
+- PollerErrorFn errorFn; // optional; called upon unrecoverable error
+-} PollOptions;
+-
+-
+-void Poll_InitDefault(void);
+-void Poll_InitDefaultEx(const PollOptions *opts);
+-void Poll_InitGtk(void); // On top of glib for Linux
+-void Poll_InitCF(void); // On top of CoreFoundation for OSX
+-
+-
+-/*
+- * Functions
+- */
+-int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]);
+-void Poll_Loop(Bool loop, Bool *exit, PollClass c);
+-void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout);
+-Bool Poll_LockingEnabled(void);
+-void Poll_Exit(void);
+-
+-
+-/*
+- * Poll_Callback adds a callback regardless of whether an identical one exists.
+- *
+- * Likewise, Poll_CallbackRemove removes exactly one callback.
+- */
+-
+-VMwareStatus Poll_Callback(PollClassSet classSet,
+- int flags,
+- PollerFunction f,
+- void *clientData,
+- PollEventType type,
+- PollDevHandle info, // fd/microsec delay
+- MXUserRecLock *lck);
+-Bool Poll_CallbackRemove(PollClassSet classSet,
+- int flags,
+- PollerFunction f,
+- void *clientData,
+- PollEventType type);
+-Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet,
+- int flags,
+- PollerFunction f,
+- PollEventType type,
+- void **clientData);
+-
+-void Poll_NotifyChange(PollClassSet classSet);
+-
+-/*
+- * Wrappers for Poll_Callback and Poll_CallbackRemove that present
+- * simpler subsets of those interfaces.
+- */
+-
+-VMwareStatus Poll_CB_Device(PollerFunction f,
+- void *clientData,
+- PollDevHandle device,
+- Bool periodic);
+-
+-Bool Poll_CB_DeviceRemove(PollerFunction f,
+- void *clientData,
+- Bool periodic);
+-
+-
+-VMwareStatus Poll_CB_RTime(PollerFunction f,
+- void *clientData,
+- int delay, // microseconds
+- Bool periodic,
+- MXUserRecLock *lock);
+-
+-Bool Poll_CB_RTimeRemove(PollerFunction f,
+- void *clientData,
+- Bool periodic);
+-
+-
+-#ifdef _WIN32
+-void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk);
+-Bool Poll_FireWndCallback(void *lparam);
+-#endif
+-
+-#endif // _POLL_H_
+Index: open-vm-tools/lib/include/pollImpl.h
+===================================================================
+--- open-vm-tools.orig/lib/include/pollImpl.h
++++ open-vm-tools/lib/include/pollImpl.h
+@@ -44,7 +44,7 @@
+ #define INCLUDE_ALLOW_USERLEVEL
+ #include "includeCheck.h"
+
+-#include "poll.h"
++#include "vm_poll.h"
+
+ /*
+ * PollImpl:
+Index: open-vm-tools/lib/include/vm_poll.h
+===================================================================
+--- /dev/null
++++ open-vm-tools/lib/include/vm_poll.h
+@@ -0,0 +1,324 @@
++/*********************************************************
++ * Copyright (C) 1998-2016 VMware, Inc. All rights reserved.
++ *
++ * 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 version 2.1 and no 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 Lesser GNU 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.,
++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ *********************************************************/
++
++/*********************************************************
++ * The contents of this file are subject to the terms of the Common
++ * Development and Distribution License (the "License") version 1.0
++ * and no later version. You may not use this file except in
++ * compliance with the License.
++ *
++ * You can obtain a copy of the License at
++ * http://www.opensource.org/licenses/cddl1.php
++ *
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ *********************************************************/
++
++
++#ifndef _POLL_H_
++#define _POLL_H_
++
++#define INCLUDE_ALLOW_USERLEVEL
++#define INCLUDE_ALLOW_VMCORE
++#include "includeCheck.h"
++
++#include "vm_basic_types.h"
++#include "vm_basic_defs.h"
++#include "vmware.h"
++#include "userlock.h"
++
++#ifdef _WIN32
++#define HZ 100
++#elif defined linux
++#include <asm/param.h>
++#elif __APPLE__
++#include <TargetConditionals.h>
++/*
++ * Old SDKs don't define TARGET_OS_IPHONE at all.
++ * New ones define it to 0 on Mac OS X, 1 on iOS.
++ */
++#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0
++#include <sys/kernel.h>
++#endif
++#include <sys/poll.h>
++#define HZ 100
++#endif
++#ifdef __ANDROID__
++/*
++ * <poll.h> of android should be included, but its name is same
++ * with this file. So its content is put here to avoid conflict.
++ */
++#include <asm/poll.h>
++#define HZ 100
++typedef unsigned int nfds_t;
++int poll(struct pollfd *, nfds_t, long);
++#endif
++
++
++/*
++ * Poll event types: each type has a different reason for firing,
++ * or condition that must be met before firing.
++ */
++
++typedef enum {
++ /*
++ * Actual Poll queue types against which you can register callbacks.
++ */
++ POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */
++ POLL_VTIME = 0,
++ POLL_REALTIME,
++ POLL_DEVICE,
++ POLL_MAIN_LOOP,
++ POLL_NUM_QUEUES
++} PollEventType;
++
++
++/*
++ * Classes of events
++ *
++ * These are the predefined classes. More can be declared
++ * with Poll_AllocClass().
++ */
++
++typedef enum PollClass {
++ POLL_CLASS_MAIN,
++ POLL_CLASS_PAUSE,
++ POLL_CLASS_IPC,
++ POLL_CLASS_CPT,
++ POLL_CLASS_MKS,
++ POLL_FIXED_CLASSES,
++ POLL_MAX_CLASSES = 320 /* Size enum to maximum */
++} PollClass;
++
++
++/*
++ * Each callback is registered in a set of classes
++ */
++
++typedef struct PollClassSet {
++ /* Type is uintptr_t to give best 32/64-bit code. */
++#define _POLL_ELEMSIZE (sizeof (uintptr_t) * 8)
++ uintptr_t bits[CEILING(POLL_MAX_CLASSES, _POLL_ELEMSIZE)];
++} PollClassSet;
++
++/* An empty PollClassSet. */
++static INLINE PollClassSet
++PollClassSet_Empty(void)
++{
++ PollClassSet set = { { 0 } };
++ return set;
++}
++
++/* A PollClassSet with the single member. */
++static INLINE PollClassSet
++PollClassSet_Singleton(PollClass c)
++{
++ PollClassSet s = PollClassSet_Empty();
++
++ ASSERT_ON_COMPILE(sizeof s.bits[0] * 8 == _POLL_ELEMSIZE); /* Size correct */
++ ASSERT_ON_COMPILE((_POLL_ELEMSIZE & (_POLL_ELEMSIZE - 1)) == 0); /* power of 2 */
++ ASSERT_ON_COMPILE(POLL_MAX_CLASSES <= ARRAYSIZE(s.bits) * _POLL_ELEMSIZE);
++ ASSERT(c < POLL_MAX_CLASSES);
++
++ s.bits[c / _POLL_ELEMSIZE] = CONST3264U(1) << (c % _POLL_ELEMSIZE);
++ return s;
++}
++
++/* Combine two PollClassSets. */
++static INLINE PollClassSet
++PollClassSet_Union(PollClassSet lhs, PollClassSet rhs)
++{
++ PollClassSet u;
++ unsigned i;
++
++ for (i = 0; i < ARRAYSIZE(u.bits); i++) {
++ u.bits[i] = lhs.bits[i] | rhs.bits[i];
++ }
++ return u;
++}
++
++/* Add single class to PollClassSet. */
++static INLINE PollClassSet
++PollClassSet_Include(PollClassSet set, PollClass c)
++{
++ return PollClassSet_Union(set, PollClassSet_Singleton(c));
++}
++
++
++#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN)
++#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \
++ PollClassSet_Singleton(POLL_CLASS_PAUSE))
++#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \
++ PollClassSet_Singleton(POLL_CLASS_CPT))
++#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \
++ PollClassSet_Singleton(POLL_CLASS_IPC))
++#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */
++#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS)
++/*
++ * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it.
++ */
++#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC)
++
++/*
++ * Poll class-set taxonomy:
++ * POLL_CS_MAIN
++ * - Unless you NEED another class, use POLL_CS_MAIN.
++ * POLL_CS_PAUSE
++ * - For callbacks that must occur even if the guest is paused.
++ * Most VMDB or Foundry commands are in this category.
++ * POLL_CS_CPT
++ * - Only for callbacks which can trigger intermediate Checkpoint
++ * transitions.
++ * The ONLY such callback is Migrate.
++ * POLL_CS_IPC
++ * - Only for callbacks which can contain Msg_(Post|Hint|Question)
++ * responses, and for signal handlers (why)?
++ * Vigor, VMDB, and Foundry can contain Msg_* responses.
++ * POLL_CS_MKS
++ * - Callback runs in MKS thread.
++ * POLL_CS_ALWAYS
++ * - Only for events that must be processed immediately.
++ * The ONLY such callback is OvhdMemVmxSizeCheck.
++ */
++
++
++/*
++ * Poll_Callback flags
++ */
++
++#define POLL_FLAG_PERIODIC 0x01 // keep after firing
++#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory
++#define POLL_FLAG_READ 0x04 // device is ready for reading
++#define POLL_FLAG_WRITE 0x08 // device is ready for writing
++#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket
++#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking
++#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events
++#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor.
++#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl
++#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop
++
++
++/*
++ * Advisory minimum time period.
++ * Users that want the fastest running real-time poll
++ * should use TICKS_TO_USECS(1).
++ */
++
++#define TICKS_TO_USECS(_x) ((_x) * (1000000 / HZ))
++#define USECS_TO_TICKS(_x) ((_x) / (1000000 / HZ))
++
++
++typedef void (*PollerFunction)(void *clientData);
++typedef void (*PollerFireWrapper)(PollerFunction func,
++ void *funcData,
++ void *wrapperData);
++typedef Bool (*PollerErrorFn)(const char *errorStr);
++
++/*
++ * Initialisers:
++ *
++ * For the sake of convenience, we declare the initialisers
++ * for custom implmentations here, even though the actual
++ * implementations are distinct from the core poll code.
++ */
++
++typedef struct PollOptions {
++ Bool locked; // Use internal MXUser for locking
++ Bool allowFullQueue; // Don't assert when device event queue is full.
++ VThreadID windowsMsgThread; // thread that processes Windows messages
++ PollerFireWrapper fireWrapperFn; // optional; may be useful for stats
++ void *fireWrapperData; // optional
++ PollerErrorFn errorFn; // optional; called upon unrecoverable error
++} PollOptions;
++
++
++void Poll_InitDefault(void);
++void Poll_InitDefaultEx(const PollOptions *opts);
++void Poll_InitGtk(void); // On top of glib for Linux
++void Poll_InitCF(void); // On top of CoreFoundation for OSX
++
++
++/*
++ * Functions
++ */
++int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]);
++void Poll_Loop(Bool loop, Bool *exit, PollClass c);
++void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout);
++Bool Poll_LockingEnabled(void);
++void Poll_Exit(void);
++
++
++/*
++ * Poll_Callback adds a callback regardless of whether an identical one exists.
++ *
++ * Likewise, Poll_CallbackRemove removes exactly one callback.
++ */
++
++VMwareStatus Poll_Callback(PollClassSet classSet,
++ int flags,
++ PollerFunction f,
++ void *clientData,
++ PollEventType type,
++ PollDevHandle info, // fd/microsec delay
++ MXUserRecLock *lck);
++Bool Poll_CallbackRemove(PollClassSet classSet,
++ int flags,
++ PollerFunction f,
++ void *clientData,
++ PollEventType type);
++Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet,
++ int flags,
++ PollerFunction f,
++ PollEventType type,
++ void **clientData);
++
++void Poll_NotifyChange(PollClassSet classSet);
++
++/*
++ * Wrappers for Poll_Callback and Poll_CallbackRemove that present
++ * simpler subsets of those interfaces.
++ */
++
++VMwareStatus Poll_CB_Device(PollerFunction f,
++ void *clientData,
++ PollDevHandle device,
++ Bool periodic);
++
++Bool Poll_CB_DeviceRemove(PollerFunction f,
++ void *clientData,
++ Bool periodic);
++
++
++VMwareStatus Poll_CB_RTime(PollerFunction f,
++ void *clientData,
++ int delay, // microseconds
++ Bool periodic,
++ MXUserRecLock *lock);
++
++Bool Poll_CB_RTimeRemove(PollerFunction f,
++ void *clientData,
++ Bool periodic);
++
++
++#ifdef _WIN32
++void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk);
++Bool Poll_FireWndCallback(void *lparam);
++#endif
++
++#endif // _POLL_H_
+Index: open-vm-tools/lib/rpcIn/rpcin.c
+===================================================================
+--- open-vm-tools.orig/lib/rpcIn/rpcin.c
++++ open-vm-tools/lib/rpcIn/rpcin.c
+@@ -57,7 +57,7 @@
+
+ #if defined(VMTOOLS_USE_VSOCKET)
+ # include <glib.h>
+-# include "poll.h"
++# include "vm_poll.h"
+ # include "asyncsocket.h"
+ # include "vmci_defs.h"
+ #include "dataMap.h"
+Index: open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c
+===================================================================
+--- open-vm-tools.orig/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c
++++ open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c
+@@ -48,7 +48,7 @@
+ #include "rpcout.h"
+ #include "rabbitmqProxyConst.h"
+ #include "vm_basic_types.h"
+-#include "poll.h"
++#include "vm_poll.h"
+ #ifdef OPEN_VM_TOOLS
+ #include "vmci_sockets.h"
+ #include "sslDirect.h"
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Add-Wno-incompatible-pointer-types-and-Wno-error-add.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Add-Wno-incompatible-pointer-types-and-Wno-error-add.patch
new file mode 100644
index 000000000..010516761
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Add-Wno-incompatible-pointer-types-and-Wno-error-add.patch
@@ -0,0 +1,31 @@
+From cdb0b3c898c6b6b6c8259d9ddb8b00163ac5e419 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Jul 2017 09:43:18 -0700
+Subject: [PATCH 04/11] Add -Wno-incompatible-pointer-types and
+ -Wno-error=address
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ open-vm-tools/lib/dynxdr/Makefile.am | 2 +-
+ open-vm-tools/lib/file/Makefile.am | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+Index: open-vm-tools/lib/dynxdr/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/dynxdr/Makefile.am
++++ open-vm-tools/lib/dynxdr/Makefile.am
+@@ -20,4 +20,4 @@ noinst_LTLIBRARIES = libDynxdr.la
+ libDynxdr_la_SOURCES =
+ libDynxdr_la_SOURCES += dynxdr.c
+ libDynxdr_la_SOURCES += xdrutil.c
+-
++libDynxdr_la_CPPFLAGS = -Wno-incompatible-pointer-types
+Index: open-vm-tools/lib/file/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/file/Makefile.am
++++ open-vm-tools/lib/file/Makefile.am
+@@ -27,3 +27,4 @@ libFile_la_SOURCES += fileLockPrimitive.
+ libFile_la_SOURCES += fileLockPosix.c
+ libFile_la_SOURCES += fileTempPosix.c
+ libFile_la_SOURCES += fileTemp.c
++libFile_la_CPPFLAGS = -Wno-error=address
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch
new file mode 100644
index 000000000..f02d00f84
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch
@@ -0,0 +1,45 @@
+From bf1eafb07297711baf9320b1edcca8a3376f117d Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 18 Nov 2015 09:03:00 +0000
+Subject: [PATCH 05/11] Use configure test for struct timespec
+
+Use the configure script to test for struct time spec instead of trying
+to keep track of what platforms has it.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ open-vm-tools/configure.ac | 1 +
+ open-vm-tools/lib/include/hgfsUtil.h | 8 +-------
+ 2 files changed, 2 insertions(+), 7 deletions(-)
+
+Index: open-vm-tools/configure.ac
+===================================================================
+--- open-vm-tools.orig/configure.ac
++++ open-vm-tools/configure.ac
+@@ -1127,6 +1127,7 @@ AC_TYPE_OFF_T
+ AC_TYPE_PID_T
+ AC_TYPE_SIZE_T
+ AC_CHECK_MEMBERS([struct stat.st_rdev])
++AC_CHECK_MEMBERS([struct timespec.tv_sec],[],[],[[#include <time.h>]])
+ AC_HEADER_TIME
+ AC_STRUCT_TM
+ AC_C_VOLATILE
+Index: open-vm-tools/lib/include/hgfsUtil.h
+===================================================================
+--- open-vm-tools.orig/lib/include/hgfsUtil.h
++++ open-vm-tools/lib/include/hgfsUtil.h
+@@ -53,13 +53,7 @@
+ # include <time.h>
+ # endif
+ # include "vm_basic_types.h"
+-# if !defined _STRUCT_TIMESPEC && \
+- !defined _TIMESPEC_DECLARED && \
+- !defined __timespec_defined && \
+- !defined sun && \
+- !defined __FreeBSD__ && \
+- !__APPLE__ && \
+- !defined _WIN32
++# if !defined HAVE_STRUCT_TIMESPEC_TV_SEC
+ struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch
new file mode 100644
index 000000000..d1f4eff9b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch
@@ -0,0 +1,58 @@
+From 31ae6f42458f90d4994a4ad8e2b7673691612c36 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 18 Nov 2015 09:10:14 +0000
+Subject: [PATCH 06/11] Fix definition of ALLPERMS and ACCESSPERMS
+
+The ALLPERMS and ACCESSPERMS defines are not specified in POSIX so
+assume it is not there instead of testing for specific implementations.
+
+This is needed for musl libc.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 8 +++++---
+ open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c | 3 +--
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+Index: open-vm-tools/lib/hgfsServer/hgfsServerLinux.c
+===================================================================
+--- open-vm-tools.orig/lib/hgfsServer/hgfsServerLinux.c
++++ open-vm-tools/lib/hgfsServer/hgfsServerLinux.c
+@@ -107,11 +107,13 @@ typedef struct DirectoryEntry {
+ #endif
+
+ /*
+- * ALLPERMS (mode 07777) and ACCESSPERMS (mode 0777) are not defined in the
+- * Solaris version of <sys/stat.h>.
++ * ALLPERMS (mode 07777) and ACCESSPERMS (mode 0777) are not specified in
++ * POSIX.
+ */
+-#ifdef sun
++#ifndef ACCESSPERMS
+ # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
++#endif
++#ifndef ALLPERMS
+ # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
+ #endif
+
+Index: open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c
+===================================================================
+--- open-vm-tools.orig/services/plugins/dndcp/dnd/dndLinux.c
++++ open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c
+@@ -51,7 +51,7 @@
+
+ #define DND_ROOTDIR_PERMS (S_IRWXU | S_IRWXG | S_IRWXO)
+ #define DND_STAGINGDIR_PERMS (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
+-#ifdef sun
++#ifndef ACCESSPERMS
+ #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
+ #endif
+ #ifdef __ANDROID__
+@@ -60,7 +60,6 @@
+ */
+ #define NO_SETMNTENT
+ #define NO_ENDMNTENT
+-#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
+ #endif
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch
new file mode 100644
index 000000000..5adf9b0f9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch
@@ -0,0 +1,144 @@
+From 6cc1c22cc30320f56da552a76bd956db8f255b6a Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 18 Nov 2015 10:05:07 +0000
+Subject: [PATCH 07/11] Use configure to test for feature instead of platform
+
+Test for various functions instead of trying to keep track of what
+platform and what version of the given platform has support for what.
+
+This should make it easier to port to currently unknown platforms and
+will solve the issue if a platform add support for a missing feature in
+the future.
+
+The features we test for are:
+- getifaddrs
+- getauxval
+- issetugid
+- __secure_getenv
+
+This is needed for musl libc.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ open-vm-tools/configure.ac | 4 ++++
+ open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++----------------
+ open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++--
+ 3 files changed, 24 insertions(+), 18 deletions(-)
+
+Index: open-vm-tools/configure.ac
+===================================================================
+--- open-vm-tools.orig/configure.ac
++++ open-vm-tools/configure.ac
+@@ -798,6 +798,7 @@ AC_CHECK_FUNCS(
+
+ AC_CHECK_FUNCS([ecvt])
+ AC_CHECK_FUNCS([fcvt])
++AC_CHECK_FUNCS([getifaddrs getauxval issetugid __secure_getenv])
+
+ AC_CHECK_FUNC([mkdtemp], [have_mkdtemp=yes])
+
+@@ -1063,10 +1064,13 @@ AC_PATH_PROG(
+ ###
+
+ AC_CHECK_HEADERS([crypt.h])
++AC_CHECK_HEADERS([ifaddrs.h])
+ AC_CHECK_HEADERS([inttypes.h])
+ AC_CHECK_HEADERS([stdint.h])
+ AC_CHECK_HEADERS([stdlib.h])
+ AC_CHECK_HEADERS([wchar.h])
++AC_CHECK_HEADERS([net/if.h])
++AC_CHECK_HEADERS([sys/auxv.h])
+ AC_CHECK_HEADERS([sys/inttypes.h])
+ AC_CHECK_HEADERS([sys/io.h])
+ AC_CHECK_HEADERS([sys/param.h]) # Required to make the sys/user.h check work correctly on FreeBSD
+Index: open-vm-tools/lib/misc/idLinux.c
+===================================================================
+--- open-vm-tools.orig/lib/misc/idLinux.c
++++ open-vm-tools/lib/misc/idLinux.c
+@@ -27,12 +27,9 @@
+ #include <sys/syscall.h>
+ #include <string.h>
+ #include <unistd.h>
+-#ifdef __linux__
+-#if defined(__GLIBC__) && \
+- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16))
++#ifdef HAVE_SYS_AUXV_H
+ #include <sys/auxv.h>
+ #endif
+-#endif
+ #ifdef __APPLE__
+ #include <sys/socket.h>
+ #include <TargetConditionals.h>
+@@ -997,31 +994,32 @@ Id_EndSuperUser(uid_t uid) // IN:
+ static Bool
+ IdIsSetUGid(void)
+ {
+-#if defined(__ANDROID__)
+- /* Android does not have a secure_getenv, so be conservative. */
+- return TRUE;
+-#else
+ /*
+ * We use __secure_getenv, which returns NULL if the binary is
+- * setuid or setgid. Alternatives include,
++ * setuid or setgid, when issetugid or getauxval(AT_SECURE) is not
++ * available. Alternatives include,
+ *
+- * a) getauxval(AT_SECURE); not available until glibc 2.16.
+- * b) __libc_enable_secure; may not be exported.
++ * a) issetugid(); not (yet?) available in glibc.
++ * b) getauxval(AT_SECURE); not available until glibc 2.16.
++ * c) __libc_enable_secure; may not be exported.
+ *
+- * Use (a) when we are based on glibc 2.16, or newer.
++ * Use (b) when we are based on glibc 2.16, or newer.
+ */
+
+-#if defined(__GLIBC__) && \
+- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16))
++#if HAVE_ISSETUGID
++ return issetugid();
++#elif HAVE_GETAUXVAL
+ return getauxval(AT_SECURE) != 0;
+-#else
++#elif HAVE___SECURE_GETENV
+ static const char envName[] = "VMW_SETUGID_TEST";
+
+ if (setenv(envName, "1", TRUE) == -1) {
+ return TRUE; /* Conservative */
+ }
+ return __secure_getenv(envName) == NULL;
+-#endif
++#else
++ /* Android does not have a secure_getenv, so be conservative. */
++ return TRUE;
+ #endif
+ }
+ #endif
+Index: open-vm-tools/lib/nicInfo/nicInfoPosix.c
+===================================================================
+--- open-vm-tools.orig/lib/nicInfo/nicInfoPosix.c
++++ open-vm-tools/lib/nicInfo/nicInfoPosix.c
+@@ -34,9 +34,13 @@
+ #include <sys/socket.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+-#if defined(__FreeBSD__) || defined(__APPLE__)
++#if HAVE_SYS_SYSCTL_H
+ # include <sys/sysctl.h>
++#endif
++#if HAVE_IFADDRS_H
+ # include <ifaddrs.h>
++#endif
++#if HAVE_NET_IF_H
+ # include <net/if.h>
+ #endif
+ #ifndef NO_DNET
+@@ -348,7 +352,7 @@ GuestInfoGetNicInfo(NicInfoV3 *nicInfo)
+ *
+ ******************************************************************************
+ */
+-#if defined(__FreeBSD__) || defined(__APPLE__) || defined(USERWORLD)
++#if defined(NO_DNET) && defined(HAVE_GETIFADDRS)
+
+ char *
+ GuestInfoGetPrimaryIP(void)
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-use-posix-strerror_r-unless-gnu.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-use-posix-strerror_r-unless-gnu.patch
new file mode 100644
index 000000000..3d1291c9f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-use-posix-strerror_r-unless-gnu.patch
@@ -0,0 +1,30 @@
+From d4d1e7146ca2698089f6bd532f2fb8b9c1134ca7 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Mon, 2 Jan 2017 14:39:27 +0000
+Subject: [PATCH 08/11] use posix strerror_r unless gnu
+
+---
+ open-vm-tools/lib/err/errPosix.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+Index: open-vm-tools/lib/err/errPosix.c
+===================================================================
+--- open-vm-tools.orig/lib/err/errPosix.c
++++ open-vm-tools/lib/err/errPosix.c
+@@ -63,11 +63,13 @@ ErrErrno2String(Err_Number errorNumber,
+ {
+ char *p;
+
+-#if defined(linux) && !defined(N_PLAT_NLM) && !defined(__ANDROID__)
++#if defined(__GLIBC__)
+ p = strerror_r(errorNumber, buf, bufSize);
+ #else
+- p = strerror(errorNumber);
+-#endif
++ if (strerror_r(errorNumber, buf, bufSize) != 0)
++ snprintf(buf, bufSize, "unknown error %i", errorNumber);
++ p = buf;
++#endif /* defined __GLIBC__ */
+ ASSERT(p != NULL);
+ return p;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Add-support-for-building-with-system-libtirpc.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Add-support-for-building-with-system-libtirpc.patch
new file mode 100644
index 000000000..2bee5ac82
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Add-support-for-building-with-system-libtirpc.patch
@@ -0,0 +1,342 @@
+From 5ae6c662fefa621f4600559e299a7d97c2254e69 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Sun, 16 Jul 2017 10:20:10 -0700
+Subject: [PATCH 1/3] Add support for building with system libtirpc
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ open-vm-tools/configure.ac | 14 ++++++++++++++
+ open-vm-tools/lib/dynxdr/Makefile.am | 8 ++++++--
+ open-vm-tools/lib/err/errPosix.c | 1 +
+ open-vm-tools/lib/guestRpc/Makefile.am | 6 ++++++
+ open-vm-tools/lib/misc/Makefile.am | 1 +
+ open-vm-tools/lib/netUtil/Makefile.am | 4 ++++
+ open-vm-tools/lib/nicInfo/Makefile.am | 2 ++
+ open-vm-tools/lib/rpcChannel/Makefile.am | 4 ++++
+ open-vm-tools/lib/slashProc/Makefile.am | 4 ++++
+ open-vm-tools/lib/string/bsd_output_shared.c | 2 +-
+ open-vm-tools/libguestlib/Makefile.am | 2 ++
+ open-vm-tools/rpctool/Makefile.am | 3 +++
+ open-vm-tools/rpctool/rpctool.c | 2 ++
+ open-vm-tools/services/plugins/dndcp/Makefile.am | 2 ++
+ open-vm-tools/services/plugins/guestInfo/Makefile.am | 1 +
+ open-vm-tools/services/plugins/resolutionSet/Makefile.am | 2 ++
+ open-vm-tools/services/plugins/vix/Makefile.am | 2 ++
+ open-vm-tools/services/plugins/vmbackup/Makefile.am | 2 ++
+ open-vm-tools/toolbox/Makefile.am | 2 ++
+ 19 files changed, 61 insertions(+), 3 deletions(-)
+
+Index: open-vm-tools/configure.ac
+===================================================================
+--- open-vm-tools.orig/configure.ac
++++ open-vm-tools/configure.ac
+@@ -405,6 +405,20 @@ AC_VMW_CHECK_LIB([fuse],
+ AC_MSG_WARN([Fuse is missing, vmblock-fuse/vmhgfs-fuse will be disabled.])])
+
+ #
++# Check for libtirpc
++#
++AC_VMW_CHECK_LIB([libtirpc],
++ [LIBTIRPC],
++ [libtirpc],
++ [],
++ [],
++ [rpc/xdr.h],
++ [xdr_void],
++ [have_libtirpc=yes],
++ [have_libtitirpc=no;
++ AC_MSG_WARN([libtirpc is missing.])])
++
++#
+ # Check for PAM.
+ #
+ AC_ARG_WITH([pam],
+Index: open-vm-tools/lib/dynxdr/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/dynxdr/Makefile.am
++++ open-vm-tools/lib/dynxdr/Makefile.am
+@@ -17,7 +17,11 @@
+
+ noinst_LTLIBRARIES = libDynxdr.la
+
+-libDynxdr_la_SOURCES =
++libDynxdr_la_SOURCES =
+ libDynxdr_la_SOURCES += dynxdr.c
+ libDynxdr_la_SOURCES += xdrutil.c
+-libDynxdr_la_CPPFLAGS = -Wno-incompatible-pointer-types
++libDynxdr_la_CPPFLAGS = @LIBTIRPC_CPPFLAGS@ -Wno-incompatible-pointer-types
++
++libDynxdr_la_LIBADD =
++libDynxdr_la_LIBADD += @LIBTIRPC_LIBS@
++
+Index: open-vm-tools/lib/err/errPosix.c
+===================================================================
+--- open-vm-tools.orig/lib/err/errPosix.c
++++ open-vm-tools/lib/err/errPosix.c
+@@ -31,6 +31,7 @@
+ #include <errno.h>
+ #include <string.h>
+ #include <locale.h>
++#include <stdio.h>
+
+ #include "vmware.h"
+ #include "errInt.h"
+Index: open-vm-tools/lib/guestRpc/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/guestRpc/Makefile.am
++++ open-vm-tools/lib/guestRpc/Makefile.am
+@@ -20,6 +20,12 @@ noinst_LTLIBRARIES = libGuestRpc.la
+ libGuestRpc_la_SOURCES =
+ libGuestRpc_la_SOURCES += nicinfo_xdr.c
+
++libGuestRpc_la_CPPFLAGS =
++libGuestRpc_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
++
++libGuestRpc_la_LIBADD =
++libGuestRpc_la_LIBADD += @LIBTIRPC_LIBS@
++
+ # XXX: Autoreconf complains about this and recommends using AM_CFLAGS instead.
+ # Problem is, $(CFLAGS) is appended to the compiler command line after AM_CFLAGS
+ # and after libGuestRpc_la_CFLAGS, so "-Wall -Werror" will override this flag.
+Index: open-vm-tools/lib/misc/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/misc/Makefile.am
++++ open-vm-tools/lib/misc/Makefile.am
+@@ -52,4 +52,5 @@ libMisc_la_SOURCES += utilMem.c
+ libMisc_la_SOURCES += vmstdio.c
+ libMisc_la_SOURCES += strutil.c
+ libMisc_la_SOURCES += vthreadBase.c
++libMisc_la_CPPFLAGS = -Wno-error=int-conversion
+
+Index: open-vm-tools/lib/netUtil/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/netUtil/Makefile.am
++++ open-vm-tools/lib/netUtil/Makefile.am
+@@ -20,3 +20,7 @@ noinst_LTLIBRARIES = libNetUtil.la
+ libNetUtil_la_SOURCES =
+ libNetUtil_la_SOURCES += netUtilLinux.c
+
++libNetUtil_la_CPPFLAGS =
++libNetUtil_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
++
++libNetUtil_la_LIBADD = @LIBTIRPC_LIBS@
+Index: open-vm-tools/lib/nicInfo/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/nicInfo/Makefile.am
++++ open-vm-tools/lib/nicInfo/Makefile.am
+@@ -25,12 +25,14 @@ libNicInfo_la_SOURCES += nicInfoPosix.c
+
+ libNicInfo_la_CPPFLAGS =
+ libNicInfo_la_CPPFLAGS += @GLIB2_CPPFLAGS@
++libNicInfo_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+
+ AM_CFLAGS = $(DNET_CPPFLAGS)
+ if USE_SLASH_PROC
+ AM_CFLAGS += -DUSE_SLASH_PROC
+ endif
+ libNicInfo_la_LIBADD =
++libNicInfo_la_LIBADD += @LIBTIRPC_LIBS@
+ if HAVE_DNET
+ libNicInfo_la_LIBADD += @DNET_LIBS@
+ endif
+Index: open-vm-tools/lib/rpcChannel/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/rpcChannel/Makefile.am
++++ open-vm-tools/lib/rpcChannel/Makefile.am
+@@ -27,3 +27,7 @@ endif
+
+ libRpcChannel_la_CPPFLAGS =
+ libRpcChannel_la_CPPFLAGS += @VMTOOLS_CPPFLAGS@
++libRpcChannel_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
++
++libRpcChannel_la_LIBADD =
++libRpcChannel_la_LIBADD += @LIBTIRPC_LIBS@
+Index: open-vm-tools/lib/slashProc/Makefile.am
+===================================================================
+--- open-vm-tools.orig/lib/slashProc/Makefile.am
++++ open-vm-tools/lib/slashProc/Makefile.am
+@@ -22,6 +22,10 @@ libSlashProc_la_SOURCES += net.c
+
+ libSlashProc_la_CPPFLAGS =
+ libSlashProc_la_CPPFLAGS += @GLIB2_CPPFLAGS@
++libSlashProc_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
++
++libSlashProc_la_LIBADD =
++libSlashProc_la_LIBADD += @LIBTIRPC_LIBS@
+
+ AM_CFLAGS = $(DNET_CPPFLAGS)
+
+Index: open-vm-tools/lib/string/bsd_output_shared.c
+===================================================================
+--- open-vm-tools.orig/lib/string/bsd_output_shared.c
++++ open-vm-tools/lib/string/bsd_output_shared.c
+@@ -38,7 +38,7 @@
+ //#include <sys/cdefs.h>
+
+ #if !defined(STR_NO_WIN32_LIBS) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__ANDROID__)
+-
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #include <stdlib.h>
+ #ifndef _WIN32
+Index: open-vm-tools/libguestlib/Makefile.am
+===================================================================
+--- open-vm-tools.orig/libguestlib/Makefile.am
++++ open-vm-tools/libguestlib/Makefile.am
+@@ -22,6 +22,7 @@ AM_CFLAGS += -I$(top_srcdir)/include
+
+ libguestlib_la_LIBADD =
+ libguestlib_la_LIBADD += @VMTOOLS_LIBS@
++libguestlib_la_LIBADD += @LIBTIRPC_LIBS@
+
+ libguestlib_la_SOURCES =
+ libguestlib_la_SOURCES += guestlibV3_xdr.c
+@@ -56,6 +57,7 @@ CFLAGS += -Wno-unused
+ libguestlib_la_CPPFLAGS =
+ libguestlib_la_CPPFLAGS += -DVMTOOLS_USE_GLIB
+ libguestlib_la_CPPFLAGS += @GLIB2_CPPFLAGS@
++libguestlib_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+
+ EXTRA_DIST = vmguestlib.pc.in
+
+Index: open-vm-tools/rpctool/Makefile.am
+===================================================================
+--- open-vm-tools.orig/rpctool/Makefile.am
++++ open-vm-tools/rpctool/Makefile.am
+@@ -17,10 +17,13 @@
+
+ bin_PROGRAMS = vmware-rpctool
+
++vmware_rpctool_CFLAGS= @LIBTIRPC_LIBS@
++
+ vmware_rpctool_SOURCES =
+ vmware_rpctool_SOURCES += rpctool.c
+
+ vmware_rpctool_LDADD =
++vmware_rpctool_LDADD += @LIBTIRPC_LIBS@
+ vmware_rpctool_LDADD += ../lib/rpcOut/libRpcOut.la
+ vmware_rpctool_LDADD += ../lib/message/libMessage.la
+ vmware_rpctool_LDADD += ../lib/backdoor/libBackdoor.la
+Index: open-vm-tools/rpctool/rpctool.c
+===================================================================
+--- open-vm-tools.orig/rpctool/rpctool.c
++++ open-vm-tools/rpctool/rpctool.c
+@@ -23,6 +23,8 @@
+ */
+
+ #ifndef _WIN32
++#define _GNU_SOURCE
++#include <signal.h>
+ #include "sigPosixRegs.h"
+ #include <errno.h>
+ #include <stdint.h>
+Index: open-vm-tools/services/plugins/dndcp/Makefile.am
+===================================================================
+--- open-vm-tools.orig/services/plugins/dndcp/Makefile.am
++++ open-vm-tools/services/plugins/dndcp/Makefile.am
+@@ -23,6 +23,7 @@ plugin_LTLIBRARIES = libdndcp.la
+ libdndcp_la_CPPFLAGS =
+ libdndcp_la_CPPFLAGS += @GTK_CPPFLAGS@
+ libdndcp_la_CPPFLAGS += @PLUGIN_CPPFLAGS@
++libdndcp_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+ libdndcp_la_CPPFLAGS += -I$(top_srcdir)/services/plugins/dndcp/dnd
+ libdndcp_la_CPPFLAGS += -I$(top_srcdir)/services/plugins/dndcp/dndGuest
+ libdndcp_la_CPPFLAGS += -I$(top_srcdir)/services/plugins/dndcp/stringxx
+@@ -44,6 +45,7 @@ libdndcp_la_LIBADD += @GTK_LIBS@
+ libdndcp_la_LIBADD += @GTKMM_LIBS@
+ libdndcp_la_LIBADD += @VMTOOLS_LIBS@
+ libdndcp_la_LIBADD += @HGFS_LIBS@
++libdndcp_la_LIBADD += @LIBTIRPC_LIBS@
+ libdndcp_la_LIBADD += $(top_builddir)/lib/hgfsUri/hgfsUriPosix.lo
+
+ libdndcp_la_SOURCES =
+Index: open-vm-tools/services/plugins/guestInfo/Makefile.am
+===================================================================
+--- open-vm-tools.orig/services/plugins/guestInfo/Makefile.am
++++ open-vm-tools/services/plugins/guestInfo/Makefile.am
+@@ -22,6 +22,7 @@ plugin_LTLIBRARIES = libguestInfo.la
+
+ libguestInfo_la_CPPFLAGS =
+ libguestInfo_la_CPPFLAGS += @PLUGIN_CPPFLAGS@
++libguestInfo_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+
+ libguestInfo_la_LDFLAGS =
+ libguestInfo_la_LDFLAGS += @PLUGIN_LDFLAGS@
+Index: open-vm-tools/services/plugins/resolutionSet/Makefile.am
+===================================================================
+--- open-vm-tools.orig/services/plugins/resolutionSet/Makefile.am
++++ open-vm-tools/services/plugins/resolutionSet/Makefile.am
+@@ -21,6 +21,7 @@ plugin_LTLIBRARIES = libresolutionSet.la
+ libresolutionSet_la_CPPFLAGS =
+ libresolutionSet_la_CPPFLAGS += @GTK_CPPFLAGS@
+ libresolutionSet_la_CPPFLAGS += @PLUGIN_CPPFLAGS@
++libresolutionSet_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+ libresolutionSet_la_CPPFLAGS += -DRESOLUTION_X11
+
+ libresolutionSet_la_LDFLAGS =
+@@ -30,6 +31,7 @@ libresolutionSet_la_LIBADD =
+ libresolutionSet_la_LIBADD += @COMMON_XLIBS@
+ libresolutionSet_la_LIBADD += @GTK_LIBS@
+ libresolutionSet_la_LIBADD += @VMTOOLS_LIBS@
++libresolutionSet_la_LIBADD += @LIBTIRPC_LIBS@
+
+ libresolutionSet_la_SOURCES =
+ libresolutionSet_la_SOURCES += libvmwarectrl.c
+Index: open-vm-tools/services/plugins/vix/Makefile.am
+===================================================================
+--- open-vm-tools.orig/services/plugins/vix/Makefile.am
++++ open-vm-tools/services/plugins/vix/Makefile.am
+@@ -20,6 +20,7 @@ plugin_LTLIBRARIES = libvix.la
+
+ libvix_la_CPPFLAGS =
+ libvix_la_CPPFLAGS += @PLUGIN_CPPFLAGS@
++libvix_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+ libvix_la_CPPFLAGS += -I$(top_srcdir)/vgauth/public
+
+ libvix_la_LDFLAGS =
+@@ -29,6 +30,7 @@ libvix_la_LIBADD =
+ libvix_la_LIBADD += @VIX_LIBADD@
+ libvix_la_LIBADD += @VMTOOLS_LIBS@
+ libvix_la_LIBADD += @HGFS_LIBS@
++libvix_la_LIBADD += @LIBTIRPC_LIBS@
+ libvix_la_LIBADD += $(top_builddir)/lib/auth/libAuth.la
+ libvix_la_LIBADD += $(top_builddir)/lib/foundryMsg/libFoundryMsg.la
+ libvix_la_LIBADD += $(top_builddir)/lib/impersonate/libImpersonate.la
+Index: open-vm-tools/services/plugins/vmbackup/Makefile.am
+===================================================================
+--- open-vm-tools.orig/services/plugins/vmbackup/Makefile.am
++++ open-vm-tools/services/plugins/vmbackup/Makefile.am
+@@ -20,6 +20,7 @@ plugin_LTLIBRARIES = libvmbackup.la
+
+ libvmbackup_la_CPPFLAGS =
+ libvmbackup_la_CPPFLAGS += @PLUGIN_CPPFLAGS@
++libvmbackup_la_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+
+ libvmbackup_la_LDFLAGS =
+ libvmbackup_la_LDFLAGS += @PLUGIN_LDFLAGS@
+@@ -27,6 +28,7 @@ libvmbackup_la_LDFLAGS += @PLUGIN_LDFLAG
+ libvmbackup_la_LIBADD =
+ libvmbackup_la_LIBADD += @GOBJECT_LIBS@
+ libvmbackup_la_LIBADD += @VMTOOLS_LIBS@
++libvmbackup_la_LIBADD += @LIBTIRPC_LIBS@
+
+ libvmbackup_la_SOURCES =
+ libvmbackup_la_SOURCES += nullProvider.c
+Index: open-vm-tools/toolbox/Makefile.am
+===================================================================
+--- open-vm-tools.orig/toolbox/Makefile.am
++++ open-vm-tools/toolbox/Makefile.am
+@@ -20,9 +20,11 @@ bin_PROGRAMS = vmware-toolbox-cmd
+ vmware_toolbox_cmd_LDADD =
+ vmware_toolbox_cmd_LDADD += ../libguestlib/libguestlib.la
+ vmware_toolbox_cmd_LDADD += @VMTOOLS_LIBS@
++vmware_toolbox_cmd_LDADD += @LIBTIRPC_LIBS@
+
+ vmware_toolbox_cmd_CPPFLAGS =
+ vmware_toolbox_cmd_CPPFLAGS += @VMTOOLS_CPPFLAGS@
++vmware_toolbox_cmd_CPPFLAGS += @LIBTIRPC_CPPFLAGS@
+
+ vmware_toolbox_cmd_SOURCES =
+ vmware_toolbox_cmd_SOURCES += toolbox-cmd.c
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-gnu-ucontext.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-gnu-ucontext.patch
new file mode 100644
index 000000000..c9beac1fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-gnu-ucontext.patch
@@ -0,0 +1,65 @@
+From 27442e2dd287d393d7b3f8bf164a887affef84df Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 18 Nov 2015 10:27:51 +0000
+Subject: [PATCH 10/11] gnu-ucontext
+
+---
+ open-vm-tools/lib/include/sigPosixRegs.h | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+Index: open-vm-tools/lib/include/sigPosixRegs.h
+===================================================================
+--- open-vm-tools.orig/lib/include/sigPosixRegs.h
++++ open-vm-tools/lib/include/sigPosixRegs.h
+@@ -33,7 +33,7 @@
+ #include "includeCheck.h"
+
+
+-#if __linux__ // We need the REG_foo offsets in the gregset_t;
++#if defined(__GLIBC__) // We need the REG_foo offsets in the gregset_t;
+ # define _GNU_SOURCE // _GNU_SOURCE maps to __USE_GNU
+
+ /* And, the REG_foo definitions conflict with our own in x86.h */
+@@ -73,7 +73,7 @@
+ #include <sys/ucontext.h>
+ #endif
+
+-#if __linux__
++#if defined(__GLIBC__)
+ # if defined(__x86_64__)
+ # undef REG_RAX
+ # undef REG_RBX
+@@ -199,7 +199,7 @@
+ #define SC_ESP(uc) ((unsigned long) (uc)->uc_mcontext.mc_esp)
+ #define SC_EIP(uc) ((unsigned long) (uc)->uc_mcontext.mc_eip)
+ #endif
+-#elif defined (sun)
++#elif !defined (__GLIBC__)
+ #ifdef __x86_64__
+ #define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_RAX])
+ #define SC_EBX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_RBX])
+@@ -219,15 +219,15 @@
+ #define SC_R14(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_R14])
+ #define SC_R15(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_R15])
+ #else
+-#define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EAX])
+-#define SC_EBX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EBX])
+-#define SC_ECX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[ECX])
+-#define SC_EDX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EDX])
+-#define SC_EDI(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EDI])
+-#define SC_ESI(uc) ((unsigned long) (uc)->uc_mcontext.gregs[ESI])
+-#define SC_EBP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EBP])
+-#define SC_ESP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[ESP])
+-#define SC_EIP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[EIP])
++#define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EAX])
++#define SC_EBX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EBX])
++#define SC_ECX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_ECX])
++#define SC_EDX(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EDX])
++#define SC_EDI(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EDI])
++#define SC_ESI(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_ESI])
++#define SC_EBP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EBP])
++#define SC_ESP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_ESP])
++#define SC_EIP(uc) ((unsigned long) (uc)->uc_mcontext.gregs[REG_EIP])
+ #endif
+ #elif defined(ANDROID_X86)
+ #define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.eax)
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch
new file mode 100644
index 000000000..78722390e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch
@@ -0,0 +1,25 @@
+From 95c6184d9ff70a47c41768850923a96de9e544aa Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 18 Nov 2015 10:41:01 +0000
+Subject: [PATCH 11/11] Use configure test for sys/stat.h include
+
+This is needed for musl libc.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ open-vm-tools/services/plugins/vix/vixTools.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: open-vm-tools/services/plugins/vix/vixTools.c
+===================================================================
+--- open-vm-tools.orig/services/plugins/vix/vixTools.c
++++ open-vm-tools/services/plugins/vix/vixTools.c
+@@ -66,7 +66,7 @@
+ #include <unistd.h>
+ #endif
+
+-#if defined(sun) || defined(__FreeBSD__) || defined(__APPLE__)
++#ifdef HAVE_SYS_STAT_H
+ #include <sys/stat.h>
+ #endif
+
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.1.5.bb b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.1.5.bb
new file mode 100644
index 000000000..c32d2c5b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.1.5.bb
@@ -0,0 +1,114 @@
+# This recipe is modified from the recipe originally found in the Open-Switch
+# repository:
+#
+# https://github.com/open-switch/ops-build
+# yocto/openswitch/meta-foss-openswitch/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.0.5.bb
+# Commit 9008de2d8e100f3f868c66765742bca9fa98f3f9
+#
+# The recipe packaging has been relicensed under the MIT license for inclusion
+# in meta-openembedded by agreement of the author (Diego Dompe).
+#
+
+SUMMARY = "Tools to enhance VMWare guest integration and performance"
+HOMEPAGE = "https://github.com/vmware/open-vm-tools"
+SECTION = "vmware-tools"
+
+LICENSE = "LGPL-2.0 & GPL-2.0 & BSD & CDDL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b66ba4cb4fc017682c95efc300410e79"
+LICENSE_modules/freebsd/vmblock = "BSD"
+LICENSE_modules/freebsd/vmmemctl = "GPL-2.0"
+LICENSE_modules/freebsd/vmxnet = "GPL-2.0"
+LICENSE_modules/linux = "GPL-2.0"
+LICENSE_modules/solaris = "CDDL-1.0"
+
+SRC_URI = "git://github.com/vmware/open-vm-tools.git;protocol=https \
+ file://tools.conf \
+ file://vmtoolsd.service \
+ file://vmtoolsd.init \
+ file://0001-configure.ac-don-t-use-dnet-config.patch \
+ file://0002-add-include-sys-sysmacros.h.patch \
+ file://0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch \
+ file://0002-include-poll.h-instead-of-obsolete-sys-poll.h.patch \
+ file://0003-Rename-poll.h-to-vm_poll.h.patch \
+ file://0004-Add-Wno-incompatible-pointer-types-and-Wno-error-add.patch \
+ file://0005-Use-configure-test-for-struct-timespec.patch \
+ file://0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch \
+ file://0007-Use-configure-to-test-for-feature-instead-of-platfor.patch \
+ file://0008-use-posix-strerror_r-unless-gnu.patch \
+ file://0011-Use-configure-test-for-sys-stat.h-include.patch \
+ "
+SRC_URI_append_libc-musl = "\
+ file://0009-Add-support-for-building-with-system-libtirpc.patch \
+ file://0010-gnu-ucontext.patch \
+ "
+SRCREV = "854c0bb374612f7e633b448ca273f970f154458b"
+
+S = "${WORKDIR}/git/open-vm-tools"
+
+DEPENDS = "glib-2.0 glib-2.0-native util-linux libdnet procps"
+DEPENDS_append_libc-musl = " libtirpc"
+
+# open-vm-tools is supported only on x86.
+COMPATIBLE_HOST = '(x86_64.*|i.86.*)-linux'
+
+inherit autotools pkgconfig systemd update-rc.d
+
+SYSTEMD_SERVICE_${PN} = "vmtoolsd.service"
+
+EXTRA_OECONF = "--without-icu --disable-multimon --disable-docs \
+ --disable-tests --without-gtkmm --without-xerces --without-pam \
+ --disable-grabbitmqproxy --disable-vgauth --disable-deploypkg \
+ --without-root-privileges --without-kernel-modules"
+
+NO_X11_FLAGS = "--without-x --without-gtk2 --without-gtk3"
+X11_DEPENDS = "libxext libxi libxrender libxrandr libxtst gtk+ gdk-pixbuf"
+PACKAGECONFIG[x11] = ",${NO_X11_FLAGS},${X11_DEPENDS}"
+
+# fuse gets implicitly detected; there is no --without-fuse option.
+PACKAGECONFIG[fuse] = ",,fuse"
+
+CFLAGS_append_toolchain-clang = " -Wno-address-of-packed-member"
+FILES_${PN} += "\
+ ${libdir}/open-vm-tools/plugins/vmsvc/lib*.so \
+ ${libdir}/open-vm-tools/plugins/common/lib*.so \
+ ${sysconfdir}/vmware-tools/tools.conf \
+ "
+FILES_${PN}-locale += "${datadir}/open-vm-tools/messages"
+FILES_${PN}-dev += "${libdir}/open-vm-tools/plugins/common/lib*.la"
+FILES_${PN}-dbg += "\
+ ${libdir}/open-vm-tools/plugins/common/.debug \
+ ${libdir}/open-vm-tools/plugins/vmsvc/.debug \
+ "
+
+CONFFILES_${PN} += "${sysconfdir}/vmware-tools/tools.conf"
+
+RDEPENDS_${PN} = "util-linux libdnet fuse"
+
+do_install_append() {
+ ln -sf ${sbindir}/mount.vmhgfs ${D}/sbin/mount.vmhgfs
+ install -d ${D}${sysconfdir}/vmware-tools
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/*.service ${D}${systemd_unitdir}/system
+ else
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/vmtoolsd.init ${D}${sysconfdir}/init.d/vmtoolsd
+ fi
+ install -m 0644 ${WORKDIR}/tools.conf ${D}${sysconfdir}/vmware-tools/tools.conf
+}
+
+do_configure_prepend() {
+ export CUSTOM_DNET_NAME=dnet
+ export CUSTOM_DNET_LIBS=-L${STAGING_LIBDIR}/libdnet.so
+}
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "vmtoolsd"
+INITSCRIPT_PARAMS_${PN} = "start 90 2 3 4 5 . stop 60 0 1 6 ."
+
+python() {
+ if 'networking-layer' not in d.getVar('BBFILE_COLLECTIONS').split() or \
+ 'filesystems-layer' not in d.getVar('BBFILE_COLLECTIONS').split():
+ raise bb.parse.SkipRecipe('Requires meta-networking and meta-filesystems to be present.')
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct.udev.in-disablePROGRAM.patch b/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct.udev.in-disablePROGRAM.patch
new file mode 100644
index 000000000..745f923af
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct.udev.in-disablePROGRAM.patch
@@ -0,0 +1,31 @@
+From e0d3e0bb1e38ff851696a7d8826e651d364ad8ce Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 5 Dec 2014 02:00:57 +0900
+Subject: [PATCH 1/2] etc/openct.udev.in: disablePROGRAM
+
+Bug fix: https://bugzilla.redhat.com/show_bug.cgi?id=287871
+
+Upstream-status: Pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ etc/openct.udev.in | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/etc/openct.udev.in b/etc/openct.udev.in
+index d11d0e1..48083c9 100644
+--- a/etc/openct.udev.in
++++ b/etc/openct.udev.in
+@@ -22,7 +22,8 @@ ACTION!="add", GOTO="openct_usb_rules_end"
+ # 2010-01-06 removed, as latest udev doesn't know WAIT_FOR_ATTR any more.
+
+ # sleep for 100ms - the wait_for_sysfs might not be enough
+-PROGRAM="/bin/sleep 0.1"
++# Disabled in this package - see https://bugzilla.redhat.com/287871
++# PROGRAM="/bin/sleep 0.1"
+
+ # ccid
+ ATTR{bInterfaceClass}=="0b", ATTR{bInterfaceSubClass}=="00", ATTR{bInterfaceProtocol}=="00", ATTRS{idVendor}=="?*" RUN+="@udevdir@/openct_usb /dev/$parent"
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct_usb.in-modify-UDEVINFO.patch b/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct_usb.in-modify-UDEVINFO.patch
new file mode 100644
index 000000000..d5e3fe575
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct/etc-openct_usb.in-modify-UDEVINFO.patch
@@ -0,0 +1,35 @@
+From d93985a137b553b2723235d03bda341dab14064f Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 5 Dec 2014 02:04:03 +0900
+Subject: [PATCH 2/2] etc/openct_usb.in: modify UDEVINFO
+
+this patch is from Fedora
+
+Upstream-status: Pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ etc/openct_usb.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/etc/openct_usb.in b/etc/openct_usb.in
+index 32f91aa..917467d 100644
+--- a/etc/openct_usb.in
++++ b/etc/openct_usb.in
+@@ -15,10 +15,10 @@ if [ -z "$DEVNAME" ]; then
+ # Guess udev info interface.
+ # Newer udev uses udevadm
+ #
+- if which udevinfo > /dev/null 2>&1; then
+- UDEVINFO="udevinfo"
+- else
++ if which udevadm > /dev/null 2>&1; then
+ UDEVINFO="udevadm info"
++ else
++ UDEVINFO="udevinfo"
+ fi
+ DEVNAME=/dev/$($UDEVINFO --query=name --path=$(dirname $DEVPATH))
+ fi
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.init b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.init
new file mode 100644
index 000000000..c6896095e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.init
@@ -0,0 +1,89 @@
+#!/bin/sh
+#
+# openct This shell script takes care of starting and stopping OpenCT.
+#
+# chkconfig: 2345 24 89
+# description: OpenCT is a middleware framework for smart card terminals.
+#
+# processname: ifdhandler
+# config: /etc/openct.conf
+
+### BEGIN INIT INFO
+# Provides: openct
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Should-Start: $syslog $network
+# Should-Stop: $syslog $network
+# Short-Description: Middleware framework for smart card terminals
+# Description: This starts/stops the OpenCT middleware framework support
+# for smart card terminals.
+### END INIT INFO
+
+. /etc/init.d/functions
+
+exec="/usr/sbin/openct-control"
+prog=openct
+proc=ifdhandler
+
+OPENCT_OPTIONS=
+[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
+
+lockfile=/var/lock/subsys/$prog
+
+start() {
+ retval=0
+ if ! status $proc >/dev/null 2>&1 ; then
+ action $"Initializing OpenCT smart card terminals: " \
+ $exec $OPENCT_OPTIONS init
+ retval=$?
+ [ $retval -eq 0 ] && touch $lockfile
+ fi
+ return $retval
+}
+
+stop() {
+ if status $proc >/dev/null 2>&1 ; then
+ action $"Stopping OpenCT smart card terminals: " \
+ $exec $OPENCT_OPTIONS shutdown
+ fi
+ retval=$?
+ if [ $retval -eq 0 ] ; then
+ rm -f /var/run/openct/status
+ rm -f $lockfile
+ fi
+ return $retval
+}
+
+restart() {
+ stop
+ start
+}
+
+oct_status() {
+ status $proc
+ retval=$?
+ if [ -e /var/run/openct/status ] ; then
+ $exec $OPENCT_OPTIONS status
+ [ -e /var/run/openct/status ] && \
+ echo $"Waiting for reader attach/detach events..."
+ fi
+ return $retval
+}
+
+case "$1" in
+ start|stop|restart)
+ $1
+ ;;
+ reload|force-reload)
+ restart
+ ;;
+ status)
+ oct_status
+ ;;
+ try-restart|condrestart)
+ [ ! -f $lockfile ] || restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
+ exit 2
+esac
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.service b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.service
new file mode 100644
index 000000000..c9ec497fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Openct Middleware framework for smart card terminals
+After=syslog.target network.target
+
+[Service]
+EnvironmentFile=-/etc/sysconfig/openct
+ExecStart=/usr/sbin/openct-control $OPENCT_OPTIONS init
+ExecStop=/usr/sbin/openct-control $OPENCT_OPTIONS shutdown
+RemainAfterExit=yes
+KillMode=none
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.sysconfig b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.sysconfig
new file mode 100644
index 000000000..ffc270790
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct/openct.sysconfig
@@ -0,0 +1,5 @@
+# -*- sh -*-
+# Extra options to pass to openct-control.
+# Consult "/usr/sbin/openct-control -h" for available options.
+#
+OPENCT_OPTIONS=""
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb b/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb
new file mode 100644
index 000000000..913290cd9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb
@@ -0,0 +1,94 @@
+Summanry = "Middleware framework for smart card terminals"
+HOMEPAGE = "https://github.com/OpenSC/openct/wiki"
+DESCRIPTION = " \
+OpenCT implements drivers for several smart card readers. \
+It comes as driver in ifdhandler format for PC/SC-Lite, \
+as CT-API driver, or as a small and lean middleware, \
+so applications can use it with minimal overhead. \
+OpenCT also has a primitive mechanism to export smart card \
+readers to remote machines via TCP/IP."
+
+DEPENDS += "libtool pcsc-lite libusb-compat"
+
+SRC_URI = " \
+ ${DEBIAN_MIRROR}/main/o/${BPN}/${BPN}_${PV}.orig.tar.gz \
+ file://etc-openct.udev.in-disablePROGRAM.patch \
+ file://etc-openct_usb.in-modify-UDEVINFO.patch \
+ file://openct.init \
+ file://openct.sysconfig \
+ file://openct.service \
+"
+
+SRC_URI[md5sum] = "a1da3358ab798f1cb9232f1dbababc21"
+SRC_URI[sha256sum] = "6cd3e2933d29eb1f875c838ee58b8071fd61f0ec8ed5922a86c01c805d181a68"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://LGPL-2.1;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+inherit systemd
+SYSTEMD_SERVICE_${PN} += "openct.service "
+SYSTEMD_AUTO_ENABLE = "enable"
+
+EXTRA_OECONF=" \
+ --disable-static \
+ --enable-usb \
+ --enable-pcsc \
+ --enable-doc \
+ --enable-api-doc \
+ --with-udev=${nonarch_base_libdir}/udev \
+ --with-bundle=${libdir}/pcsc/drivers \
+"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += " \
+ ${libdir}/ctapi \
+ ${nonarch_base_libdir}/udev \
+ ${libdir}/openct-ifd.so \
+ ${libdir}/pcsc \
+ /run/openct/status \
+"
+
+FILES_${PN}-dbg += " \
+ ${libdir}/ctapi/.debug \
+ ${libdir}/pcsc/drivers/openct-ifd.bundle/Contents/Linux/.debug \
+"
+
+INSANE_SKIP_${PN} += "dev-deps"
+
+do_install_append() {
+ rm -r ${D}/${localstatedir}/run
+}
+
+do_install () {
+ rm -rf ${D}
+ install -d ${D}/etc
+ install -dm 755 ${D}${nonarch_base_libdir}/udev
+ # fix up hardcoded paths
+ sed -i -e 's,/etc/,${sysconfdir}/,' -e 's,/usr/sbin/,${sbindir}/,' \
+ ${WORKDIR}/openct.service ${WORKDIR}/openct.init
+
+ oe_runmake install DESTDIR=${D}
+ install -dm 755 ${D}${libdir}/ctapi/
+ mv ${D}${libdir}/libopenctapi.so ${D}${libdir}/ctapi/
+ install -Dpm 644 etc/openct.udev ${D}/etc/udev/rules.d/60-openct.rules
+ install -pm 644 etc/openct.conf ${D}/etc/openct.conf
+
+ install -Dpm 755 ${WORKDIR}/openct.init ${D}/etc/init.d/openct
+ install -Dpm 644 ${WORKDIR}/openct.sysconfig ${D}/etc/sysconfig/openct
+
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/openct.service ${D}/${systemd_unitdir}/system
+
+ so=$(find ${D} -name \*.so | sed "s|^${D}||")
+ sed -i -e 's|\\(LIBPATH\\s*\\).*|\\1$so|' etc/reader.conf
+ install -Dpm 644 etc/reader.conf ${D}/etc/reader.conf.d/openct.conf
+
+ install -dm 755 ${D}${localstatedir}/run/openct
+ touch ${D}${localstatedir}/run/openct/status
+ chmod 644 ${D}${localstatedir}/run/openct/status
+}
+
+pkg_postinst_${PN} () {
+ ln -sf ctapi/libopenctapi.so ${libdir}/libopenctapi.so
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch
new file mode 100644
index 000000000..4d76ad40c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch
@@ -0,0 +1,38 @@
+From 4801a057730632225337d7f6d26b9335e6b9b078 Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+Date: Thu, 31 Mar 2016 00:20:15 +0200
+Subject: [PATCH] 3rdparty/ippicv: Use pre-downloaded ipp
+
+Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+Signed-off-by: Ismo Puustinen <ismo.puustinen@intel.com>
+---
+ 3rdparty/ippicv/ippicv.cmake | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/3rdparty/ippicv/ippicv.cmake b/3rdparty/ippicv/ippicv.cmake
+index d601da4bb..f6fc1098c 100644
+--- a/3rdparty/ippicv/ippicv.cmake
++++ b/3rdparty/ippicv/ippicv.cmake
+@@ -39,18 +39,5 @@ function(download_ippicv root_var)
+ endif()
+
+ set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")
+- ocv_download(FILENAME ${OPENCV_ICV_NAME}
+- HASH ${OPENCV_ICV_HASH}
+- URL
+- "${OPENCV_IPPICV_URL}"
+- "$ENV{OPENCV_IPPICV_URL}"
+- "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
+- DESTINATION_DIR "${THE_ROOT}"
+- ID IPPICV
+- STATUS res
+- UNPACK RELATIVE_URL)
+-
+- if(res)
+- set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
+- endif()
++ set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
+ endfunction()
+--
+2.13.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch
new file mode 100644
index 000000000..6dd48fcdc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch
@@ -0,0 +1,26 @@
+From 2bc6bb9831d07f035fea74ea745cea43dd5f9ef9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 9 Sep 2017 23:48:31 -0700
+Subject: [PATCH] Dont use isystem
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ cmake/OpenCVPCHSupport.cmake | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+Index: git/cmake/OpenCVPCHSupport.cmake
+===================================================================
+--- git.orig/cmake/OpenCVPCHSupport.cmake
++++ git/cmake/OpenCVPCHSupport.cmake
+@@ -17,7 +17,8 @@ IF(CMAKE_COMPILER_IS_GNUCXX)
+ IF(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.2.0")
+ SET(PCHSupport_FOUND TRUE)
+ ENDIF()
+-
++ SET(CMAKE_INCLUDE_SYSTEM_FLAG_C "-I")
++ SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I")
+ SET(_PCH_include_prefix "-I")
+ SET(_PCH_isystem_prefix "-isystem")
+ SET(_PCH_define_prefix "-D")
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-build-workaround-GCC-7.1.1-compilation-issue-with-sa.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-build-workaround-GCC-7.1.1-compilation-issue-with-sa.patch
new file mode 100644
index 000000000..0140633db
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-build-workaround-GCC-7.1.1-compilation-issue-with-sa.patch
@@ -0,0 +1,127 @@
+Upstream-Status: Backport [https://github.com/opencv/opencv/pull/9376/commits/0d854db361106dfcb055231fd0112c5b85ef2287]
+
+Fix CVEs for opencv 3.3.
+
+* CVE-2017-12597
+* CVE-2017-12598
+* CVE-2017-12599
+* CVE-2017-12600
+* CVE-2017-12601
+* CVE-2017-12602
+* CVE-2017-12603
+* CVE-2017-12604
+* CVE-2017-12605
+* CVE-2017-12606
+* CVE-2017-12862
+* CVE-2017-12863
+* CVE-2017-12864
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 0d854db361106dfcb055231fd0112c5b85ef2287 Mon Sep 17 00:00:00 2001
+From: Alexander Alekhin <alexander.a.alekhin@gmail.com>
+Date: Tue, 15 Aug 2017 21:45:05 +0000
+Subject: [PATCH 1/3] build: workaround GCC 7.1.1 compilation issue with
+ sanitize flags
+
+Version: gcc (GCC) 7.1.1 20170622 (Red Hat 7.1.1-3)
+Flags: -fsanitize=address,undefined
+---
+ modules/ts/src/cuda_test.cpp | 56 ++++++++++++++++++++++++++------------------
+ 1 file changed, 33 insertions(+), 23 deletions(-)
+
+diff --git a/modules/ts/src/cuda_test.cpp b/modules/ts/src/cuda_test.cpp
+index a48e0a087..eb4cee136 100644
+--- a/modules/ts/src/cuda_test.cpp
++++ b/modules/ts/src/cuda_test.cpp
+@@ -322,16 +322,20 @@ namespace cvtest
+
+ if (m1.size() != m2.size())
+ {
+- return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different sizes : \""
+- << expr1 << "\" [" << PrintToString(m1.size()) << "] vs \""
+- << expr2 << "\" [" << PrintToString(m2.size()) << "]";
++ std::stringstream msg;
++ msg << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different sizes : \""
++ << expr1 << "\" [" << PrintToString(m1.size()) << "] vs \""
++ << expr2 << "\" [" << PrintToString(m2.size()) << "]";
++ return AssertionFailure() << msg.str();
+ }
+
+ if (m1.type() != m2.type())
+ {
+- return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different types : \""
+- << expr1 << "\" [" << PrintToString(MatType(m1.type())) << "] vs \""
+- << expr2 << "\" [" << PrintToString(MatType(m2.type())) << "]";
++ std::stringstream msg;
++ msg << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different types : \""
++ << expr1 << "\" [" << PrintToString(MatType(m1.type())) << "] vs \""
++ << expr2 << "\" [" << PrintToString(MatType(m2.type())) << "]";
++ return AssertionFailure() << msg.str();
+ }
+
+ Mat diff;
+@@ -343,12 +347,14 @@ namespace cvtest
+
+ if (maxVal > eps)
+ {
+- return AssertionFailure() << "The max difference between matrices \"" << expr1 << "\" and \"" << expr2
+- << "\" is " << maxVal << " at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ")"
+- << ", which exceeds \"" << eps_expr << "\", where \""
+- << expr1 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m1, maxLoc) << ", \""
+- << expr2 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m2, maxLoc) << ", \""
+- << eps_expr << "\" evaluates to " << eps;
++ std::stringstream msg;
++ msg << "The max difference between matrices \"" << expr1 << "\" and \"" << expr2
++ << "\" is " << maxVal << " at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ")"
++ << ", which exceeds \"" << eps_expr << "\", where \""
++ << expr1 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m1, maxLoc) << ", \""
++ << expr2 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m2, maxLoc) << ", \""
++ << eps_expr << "\" evaluates to " << eps;
++ return AssertionFailure() << msg.str();
+ }
+
+ return AssertionSuccess();
+@@ -469,9 +475,11 @@ namespace cvtest
+ {
+ if (gold.size() != actual.size())
+ {
+- return testing::AssertionFailure() << "KeyPoints size mistmach\n"
+- << "\"" << gold_expr << "\" : " << gold.size() << "\n"
+- << "\"" << actual_expr << "\" : " << actual.size();
++ std::stringstream msg;
++ msg << "KeyPoints size mistmach\n"
++ << "\"" << gold_expr << "\" : " << gold.size() << "\n"
++ << "\"" << actual_expr << "\" : " << actual.size();
++ return AssertionFailure() << msg.str();
+ }
+
+ std::sort(actual.begin(), actual.end(), KeyPointLess());
+@@ -484,14 +492,16 @@ namespace cvtest
+
+ if (!keyPointsEquals(p1, p2))
+ {
+- return testing::AssertionFailure() << "KeyPoints differ at " << i << "\n"
+- << "\"" << gold_expr << "\" vs \"" << actual_expr << "\" : \n"
+- << "pt : " << testing::PrintToString(p1.pt) << " vs " << testing::PrintToString(p2.pt) << "\n"
+- << "size : " << p1.size << " vs " << p2.size << "\n"
+- << "angle : " << p1.angle << " vs " << p2.angle << "\n"
+- << "response : " << p1.response << " vs " << p2.response << "\n"
+- << "octave : " << p1.octave << " vs " << p2.octave << "\n"
+- << "class_id : " << p1.class_id << " vs " << p2.class_id;
++ std::stringstream msg;
++ msg << "KeyPoints differ at " << i << "\n"
++ << "\"" << gold_expr << "\" vs \"" << actual_expr << "\" : \n"
++ << "pt : " << testing::PrintToString(p1.pt) << " vs " << testing::PrintToString(p2.pt) << "\n"
++ << "size : " << p1.size << " vs " << p2.size << "\n"
++ << "angle : " << p1.angle << " vs " << p2.angle << "\n"
++ << "response : " << p1.response << " vs " << p2.response << "\n"
++ << "octave : " << p1.octave << " vs " << p2.octave << "\n"
++ << "class_id : " << p1.class_id << " vs " << p2.class_id;
++ return AssertionFailure() << msg.str();
+ }
+ }
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-carotene-don-t-use-__asm__-with-aarch64.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-carotene-don-t-use-__asm__-with-aarch64.patch
new file mode 100644
index 000000000..a1a56e0e4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-carotene-don-t-use-__asm__-with-aarch64.patch
@@ -0,0 +1,1250 @@
+From 353fc92618ce0dc6bab4a3e8bff1c13c3b613110 Mon Sep 17 00:00:00 2001
+From: Alexander Alekhin <alexander.alekhin@intel.com>
+Date: Wed, 23 Aug 2017 17:41:23 +0300
+Subject: [PATCH 1/2] carotene: don't use __asm__ with aarch64
+
+---
+Upstream-Status: Backport
+
+ 3rdparty/carotene/src/channel_extract.cpp | 4 +-
+ 3rdparty/carotene/src/channels_combine.cpp | 2 +-
+ 3rdparty/carotene/src/colorconvert.cpp | 104 ++++++++++++++---------------
+ 3rdparty/carotene/src/convert.cpp | 54 +++++++--------
+ 3rdparty/carotene/src/convert_scale.cpp | 72 ++++++++++----------
+ 3rdparty/carotene/src/gaussian_blur.cpp | 6 +-
+ 3rdparty/carotene/src/pyramid.cpp | 20 +++---
+ 3rdparty/carotene/src/scharr.cpp | 4 +-
+ 8 files changed, 133 insertions(+), 133 deletions(-)
+
+diff --git a/3rdparty/carotene/src/channel_extract.cpp b/3rdparty/carotene/src/channel_extract.cpp
+index f663bc6005..8238a3ece8 100644
+--- a/3rdparty/carotene/src/channel_extract.cpp
++++ b/3rdparty/carotene/src/channel_extract.cpp
+@@ -231,7 +231,7 @@ void extract4(const Size2D &size,
+ srcStride == dst2Stride && \
+ srcStride == dst3Stride &&
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+
+ #define SPLIT_ASM2(sgn, bits) __asm__ ( \
+ "vld2." #bits " {d0, d2}, [%[in0]] \n\t" \
+@@ -351,7 +351,7 @@ void extract4(const Size2D &size,
+ } \
+ }
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+
+ #define ALPHA_QUAD(sgn, bits) { \
+ internal::prefetch(src + sj); \
+diff --git a/3rdparty/carotene/src/channels_combine.cpp b/3rdparty/carotene/src/channels_combine.cpp
+index 157c8b8121..fc98fb9181 100644
+--- a/3rdparty/carotene/src/channels_combine.cpp
++++ b/3rdparty/carotene/src/channels_combine.cpp
+@@ -77,7 +77,7 @@ namespace CAROTENE_NS {
+ dstStride == src2Stride && \
+ dstStride == src3Stride &&
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+
+ #define MERGE_ASM2(sgn, bits) __asm__ ( \
+ "vld1." #bits " {d0-d1}, [%[in0]] \n\t" \
+diff --git a/3rdparty/carotene/src/colorconvert.cpp b/3rdparty/carotene/src/colorconvert.cpp
+index 3037fe672a..26ae54b15c 100644
+--- a/3rdparty/carotene/src/colorconvert.cpp
++++ b/3rdparty/carotene/src/colorconvert.cpp
+@@ -97,7 +97,7 @@ void rgb2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -116,7 +116,7 @@ void rgb2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ for (; dj < roiw8; sj += 24, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -198,7 +198,7 @@ void rgbx2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -217,7 +217,7 @@ void rgbx2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ for (; dj < roiw8; sj += 32, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -300,7 +300,7 @@ void bgr2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -319,7 +319,7 @@ void bgr2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ for (; dj < roiw8; sj += 24, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -402,7 +402,7 @@ void bgrx2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -421,7 +421,7 @@ void bgrx2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ for (; dj < roiw8; sj += 32, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -512,7 +512,7 @@ void gray2rgb(const Size2D &size,
+ for (; sj < roiw16; sj += 16, dj += 48)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld1.8 {d0-d1}, [%[in0]] \n\t"
+ "vmov.8 q1, q0 \n\t"
+@@ -538,7 +538,7 @@ void gray2rgb(const Size2D &size,
+
+ if (sj < roiw8)
+ {
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld1.8 {d0}, [%[in]] \n\t"
+ "vmov.8 d1, d0 \n\t"
+@@ -584,7 +584,7 @@ void gray2rgbx(const Size2D &size,
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register uint8x16_t vc255 asm ("q4") = vmovq_n_u8(255);
+ #else
+ uint8x16x4_t vRgba;
+@@ -602,7 +602,7 @@ void gray2rgbx(const Size2D &size,
+ for (; sj < roiw16; sj += 16, dj += 64)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld1.8 {d0-d1}, [%[in0]] \n\t"
+ "vmov.8 q1, q0 \n\t"
+@@ -628,7 +628,7 @@ void gray2rgbx(const Size2D &size,
+
+ if (sj < roiw8)
+ {
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld1.8 {d5}, [%[in]] \n\t"
+ "vmov.8 d6, d5 \n\t"
+@@ -672,7 +672,7 @@ void rgb2rgbx(const Size2D &size,
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ register uint8x8_t vc255_0 asm ("d3") = vmov_n_u8(255);
+ #else
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+@@ -688,7 +688,7 @@ void rgb2rgbx(const Size2D &size,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 24, dj += 32, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -742,7 +742,7 @@ void rgbx2rgb(const Size2D &size,
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+-#if !defined(__GNUC__) || !defined(__arm__)
++#if !(!defined(__aarch64__) && defined(__GNUC__) && defined(__arm__))
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ union { uint8x16x4_t v4; uint8x16x3_t v3; } v_dst0;
+ union { uint8x8x4_t v4; uint8x8x3_t v3; } v_dst;
+@@ -754,7 +754,7 @@ void rgbx2rgb(const Size2D &size,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -805,7 +805,7 @@ void rgb2bgr(const Size2D &size,
+ {
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+-#if !defined(__GNUC__) || !defined(__arm__)
++#if !(!defined(__aarch64__) && defined(__GNUC__) && defined(__arm__))
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ #endif
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+@@ -817,7 +817,7 @@ void rgb2bgr(const Size2D &size,
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -874,7 +874,7 @@ void rgbx2bgrx(const Size2D &size,
+ {
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+-#if !defined(__GNUC__) || !defined(__arm__)
++#if !(!defined(__aarch64__) && defined(__GNUC__) && defined(__arm__))
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ #endif
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+@@ -885,7 +885,7 @@ void rgbx2bgrx(const Size2D &size,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 32, dj += 32, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -943,7 +943,7 @@ void rgbx2bgr(const Size2D &size,
+ {
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+-#if !defined(__GNUC__) || !defined(__arm__)
++#if !(!defined(__aarch64__) && defined(__GNUC__) && defined(__arm__))
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ #endif
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+@@ -954,7 +954,7 @@ void rgbx2bgr(const Size2D &size,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -1010,7 +1010,7 @@ void rgb2bgrx(const Size2D &size,
+ {
+ internal::assertSupportedConfiguration();
+ #ifdef CAROTENE_NEON
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ register uint8x8_t vc255 asm ("d3") = vmov_n_u8(255);
+ #else
+ union { uint8x16x4_t v4; uint8x16x3_t v3; } vals0;
+@@ -1019,7 +1019,7 @@ void rgb2bgrx(const Size2D &size,
+ vals8.v4.val[3] = vmov_n_u8(255);
+ #endif
+
+-#if !defined(__GNUC__) || !defined(__arm__)
++#if !(!defined(__aarch64__) && defined(__GNUC__) && defined(__arm__))
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ #endif
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+@@ -1030,7 +1030,7 @@ void rgb2bgrx(const Size2D &size,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u, j = 0u;
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ for (; j < roiw8; sj += 24, dj += 32, j += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -1409,7 +1409,7 @@ inline void convertToHSV(const s32 r, const s32 g, const s32 b,
+ "d24","d25","d26","d27","d28","d29","d30","d31" \
+ );
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+
+ #define YCRCB_CONSTS \
+ register int16x4_t vcYR asm ("d31") = vmov_n_s16(4899); \
+@@ -1555,7 +1555,7 @@ inline uint8x8x3_t convertToYCrCb( const int16x8_t& vR, const int16x8_t& vG, con
+ #define COEFF_G ( 8663)
+ #define COEFF_B (-17705)
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ #define YUV420ALPHA3_CONST
+ #define YUV420ALPHA4_CONST register uint8x16_t c255 asm ("q13") = vmovq_n_u8(255);
+ #define YUV420ALPHA3_CONVERT
+@@ -1852,7 +1852,7 @@ void rgb2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1871,7 +1871,7 @@ void rgb2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERT_TO_HSV_ASM(vld3.8 {d0-d2}, d0, d2)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -1904,7 +1904,7 @@ void rgbx2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1923,7 +1923,7 @@ void rgbx2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERT_TO_HSV_ASM(vld4.8 {d0-d3}, d0, d2)
+ #else
+ uint8x8x4_t vRgb = vld4_u8(src + sj);
+@@ -1956,7 +1956,7 @@ void bgr2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1975,7 +1975,7 @@ void bgr2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERT_TO_HSV_ASM(vld3.8 {d0-d2}, d2, d0)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -2008,7 +2008,7 @@ void bgrx2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -2027,7 +2027,7 @@ void bgrx2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERT_TO_HSV_ASM(vld4.8 {d0-d3}, d2, d0)
+ #else
+ uint8x8x4_t vRgb = vld4_u8(src + sj);
+@@ -2068,7 +2068,7 @@ void rgbx2bgr565(const Size2D &size,
+ for (; j < roiw16; sj += 64, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld4.8 {d2, d4, d6, d8}, [%[in0]] @ q0 q1 q2 q3 q4 \n\t"
+ "vld4.8 {d3, d5, d7, d9}, [%[in1]] @ xxxxxxxx rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2122,7 +2122,7 @@ void rgb2bgr565(const Size2D &size,
+ for (; j < roiw16; sj += 48, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld3.8 {d2, d4, d6}, [%[in0]] @ q0 q1 q2 q3 q4 \n\t"
+ "vld3.8 {d3, d5, d7}, [%[in1]] @ xxxxxxxx rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2176,7 +2176,7 @@ void rgbx2rgb565(const Size2D &size,
+ for (; j < roiw16; sj += 64, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld4.8 {d0, d2, d4, d6}, [%[in0]] @ q0 q1 q2 q3 \n\t"
+ "vld4.8 {d1, d3, d5, d7}, [%[in1]] @ rrrrRRRR ggggGGGG bbbbBBBB aaaaAAAA \n\t"
+@@ -2230,7 +2230,7 @@ void rgb2rgb565(const Size2D &size,
+ for (; j < roiw16; sj += 48, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld3.8 {d0, d2, d4}, [%[in0]] @ q0 q1 q2 q3 \n\t"
+ "vld3.8 {d1, d3, d5}, [%[in1]] @ rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2285,7 +2285,7 @@ void rgb2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTTOYCRCB(vld3.8 {d0-d2}, d0, d1, d2)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -2329,7 +2329,7 @@ void rgbx2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTTOYCRCB(vld4.8 {d0-d3}, d0, d1, d2)
+ #else
+ uint8x8x4_t vRgba = vld4_u8(src + sj);
+@@ -2373,7 +2373,7 @@ void bgr2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTTOYCRCB(vld3.8 {d0-d2}, d2, d1, d0)
+ #else
+ uint8x8x3_t vBgr = vld3_u8(src + sj);
+@@ -2417,7 +2417,7 @@ void bgrx2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTTOYCRCB(vld4.8 {d0-d3}, d2, d1, d0)
+ #else
+ uint8x8x4_t vBgra = vld4_u8(src + sj);
+@@ -2499,7 +2499,7 @@ void yuv420sp2rgb(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(3, d1, d0, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2545,7 +2545,7 @@ void yuv420sp2rgbx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(4, d1, d0, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2591,7 +2591,7 @@ void yuv420i2rgb(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(3, d0, d1, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2637,7 +2637,7 @@ void yuv420i2rgbx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(4, d0, d1, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2683,7 +2683,7 @@ void yuv420sp2bgr(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(3, d1, d0, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2729,7 +2729,7 @@ void yuv420sp2bgrx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(4, d1, d0, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2775,7 +2775,7 @@ void yuv420i2bgr(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(3, d0, d1, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2821,7 +2821,7 @@ void yuv420i2bgrx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CONVERTYUV420TORGB(4, d0, d1, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+diff --git a/3rdparty/carotene/src/convert.cpp b/3rdparty/carotene/src/convert.cpp
+index 403f16d86a..64b6db78ab 100644
+--- a/3rdparty/carotene/src/convert.cpp
++++ b/3rdparty/carotene/src/convert.cpp
+@@ -101,7 +101,7 @@ CVT_FUNC(u8, s8, 16,
+ }
+ })
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(u8, u16, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);,
+ {
+@@ -135,7 +135,7 @@ CVT_FUNC(u8, u16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(u8, s32, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);
+ register uint8x16_t zero1 asm ("q2") = vmovq_n_u8(0);
+@@ -173,7 +173,7 @@ CVT_FUNC(u8, s32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(u8, f32, 16,
+ ,
+ {
+@@ -248,7 +248,7 @@ CVT_FUNC(s8, u8, 16,
+ }
+ })
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(s8, u16, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);,
+ {
+@@ -284,7 +284,7 @@ CVT_FUNC(s8, u16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s8, s16, 16,
+ ,
+ {
+@@ -323,7 +323,7 @@ CVT_FUNC(s8, s16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(s8, s32, 16,
+ ,
+ {
+@@ -377,7 +377,7 @@ CVT_FUNC(s8, s32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s8, f32, 16,
+ ,
+ {
+@@ -440,7 +440,7 @@ CVT_FUNC(s8, f32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(u16, u8, 16,
+ ,
+ {
+@@ -479,7 +479,7 @@ CVT_FUNC(u16, u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(u16, s8, 16,
+ register uint8x16_t v127 asm ("q4") = vmovq_n_u8(127);,
+ {
+@@ -522,7 +522,7 @@ CVT_FUNC(u16, s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(u16, s16, 8,
+ register uint16x8_t v32767 asm ("q4") = vmovq_n_u16(0x7FFF);,
+ {
+@@ -555,7 +555,7 @@ CVT_FUNC(u16, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(u16, s32, 8,
+ register uint16x8_t zero0 asm ("q1") = vmovq_n_u16(0);,
+ {
+@@ -589,7 +589,7 @@ CVT_FUNC(u16, s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(u16, f32, 8,
+ ,
+ {
+@@ -633,7 +633,7 @@ CVT_FUNC(u16, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s16, u8, 16,
+ ,
+ {
+@@ -672,7 +672,7 @@ CVT_FUNC(s16, u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s16, s8, 16,
+ ,
+ {
+@@ -711,7 +711,7 @@ CVT_FUNC(s16, s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVT_FUNC(s16, u16, 8,
+ register int16x8_t vZero asm ("q4") = vmovq_n_s16(0);,
+ {
+@@ -747,7 +747,7 @@ CVT_FUNC(s16, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s16, s32, 8,
+ ,
+ {
+@@ -786,7 +786,7 @@ CVT_FUNC(s16, s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s16, f32, 8,
+ ,
+ {
+@@ -829,7 +829,7 @@ CVT_FUNC(s16, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s32, u8, 8,
+ ,
+ {
+@@ -870,7 +870,7 @@ CVT_FUNC(s32, u8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s32, s8, 8,
+ ,
+ {
+@@ -911,7 +911,7 @@ CVT_FUNC(s32, s8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s32, u16, 8,
+ ,
+ {
+@@ -950,7 +950,7 @@ CVT_FUNC(s32, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s32, s16, 8,
+ ,
+ {
+@@ -989,7 +989,7 @@ CVT_FUNC(s32, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(s32, f32, 8,
+ ,
+ {
+@@ -1034,7 +1034,7 @@ CVT_FUNC(s32, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(f32, u8, 8,
+ register float32x4_t vmult asm ("q0") = vdupq_n_f32((float)(1 << 16));
+ register uint32x4_t vmask asm ("q1") = vdupq_n_u32(1<<16);,
+@@ -1101,7 +1101,7 @@ CVT_FUNC(f32, u8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(f32, s8, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1153,7 +1153,7 @@ CVT_FUNC(f32, s8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(f32, u16, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1212,7 +1212,7 @@ CVT_FUNC(f32, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(f32, s16, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1271,7 +1271,7 @@ CVT_FUNC(f32, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ CVT_FUNC(f32, s32, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+diff --git a/3rdparty/carotene/src/convert_scale.cpp b/3rdparty/carotene/src/convert_scale.cpp
+index 0a14a8035c..ae41a985c8 100644
+--- a/3rdparty/carotene/src/convert_scale.cpp
++++ b/3rdparty/carotene/src/convert_scale.cpp
+@@ -135,7 +135,7 @@ namespace CAROTENE_NS {
+
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC1(u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -220,7 +220,7 @@ CVTS_FUNC1(u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(u8, s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -305,7 +305,7 @@ CVTS_FUNC(u8, s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(u8, u16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -389,7 +389,7 @@ CVTS_FUNC(u8, u16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(u8, s16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -473,7 +473,7 @@ CVTS_FUNC(u8, s16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u8, s32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -562,7 +562,7 @@ CVTS_FUNC(u8, s32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u8, f32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -643,7 +643,7 @@ CVTS_FUNC(u8, f32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(s8, u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -728,7 +728,7 @@ CVTS_FUNC(s8, u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC1(s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -813,7 +813,7 @@ CVTS_FUNC1(s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(s8, u16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -899,7 +899,7 @@ CVTS_FUNC(s8, u16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ CVTS_FUNC(s8, s16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -985,7 +985,7 @@ CVTS_FUNC(s8, s16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s8, s32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1074,7 +1074,7 @@ CVTS_FUNC(s8, s32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s8, f32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1155,7 +1155,7 @@ CVTS_FUNC(s8, f32, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u16, u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1214,7 +1214,7 @@ CVTS_FUNC(u16, u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u16, s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1273,7 +1273,7 @@ CVTS_FUNC(u16, s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC1(u16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1330,7 +1330,7 @@ CVTS_FUNC1(u16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u16, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1387,7 +1387,7 @@ CVTS_FUNC(u16, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u16, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1443,7 +1443,7 @@ CVTS_FUNC(u16, s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(u16, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1495,7 +1495,7 @@ CVTS_FUNC(u16, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s16, u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1554,7 +1554,7 @@ CVTS_FUNC(s16, u8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s16, s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1613,7 +1613,7 @@ CVTS_FUNC(s16, s8, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s16, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1670,7 +1670,7 @@ CVTS_FUNC(s16, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC1(s16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1727,7 +1727,7 @@ CVTS_FUNC1(s16, 16,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s16, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1783,7 +1783,7 @@ CVTS_FUNC(s16, s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s16, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1835,7 +1835,7 @@ CVTS_FUNC(s16, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s32, u8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1893,7 +1893,7 @@ CVTS_FUNC(s32, u8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s32, s8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1951,7 +1951,7 @@ CVTS_FUNC(s32, s8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s32, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2007,7 +2007,7 @@ CVTS_FUNC(s32, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s32, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2063,7 +2063,7 @@ CVTS_FUNC(s32, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC1(s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2118,7 +2118,7 @@ CVTS_FUNC1(s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(s32, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -2169,7 +2169,7 @@ CVTS_FUNC(s32, f32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(f32, u8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)((1 << 16)*alpha));
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)((1 << 16)*beta));
+@@ -2239,7 +2239,7 @@ CVTS_FUNC(f32, u8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(f32, s8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2293,7 +2293,7 @@ CVTS_FUNC(f32, s8, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(f32, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2345,7 +2345,7 @@ CVTS_FUNC(f32, u16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(f32, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2397,7 +2397,7 @@ CVTS_FUNC(f32, s16, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC(f32, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2448,7 +2448,7 @@ CVTS_FUNC(f32, s32, 8,
+ })
+ #endif
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ CVTS_FUNC1(f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+diff --git a/3rdparty/carotene/src/gaussian_blur.cpp b/3rdparty/carotene/src/gaussian_blur.cpp
+index 1b5399436f..f7b5f18d79 100644
+--- a/3rdparty/carotene/src/gaussian_blur.cpp
++++ b/3rdparty/carotene/src/gaussian_blur.cpp
+@@ -327,7 +327,7 @@ void gaussianBlur5x5(const Size2D &size, s32 cn,
+ u16* lidx1 = lane + x - 1*2;
+ u16* lidx3 = lane + x + 1*2;
+ u16* lidx4 = lane + x + 2*2;
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ __volatile__ (
+ "vld2.16 {d0, d2}, [%[in0]]! \n\t"
+ "vld2.16 {d1, d3}, [%[in0]] \n\t"
+@@ -398,7 +398,7 @@ void gaussianBlur5x5(const Size2D &size, s32 cn,
+ u16* lidx1 = lane + x - 1*3;
+ u16* lidx3 = lane + x + 1*3;
+ u16* lidx4 = lane + x + 2*3;
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ __volatile__ (
+ "vld3.16 {d0, d2, d4}, [%[in0]]! \n\t"
+ "vld3.16 {d1, d3, d5}, [%[in0]] \n\t"
+@@ -482,7 +482,7 @@ void gaussianBlur5x5(const Size2D &size, s32 cn,
+ u16* lidx1 = lane + x - 1*4;
+ u16* lidx3 = lane + x + 1*4;
+ u16* lidx4 = lane + x + 2*4;
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ __volatile__ (
+ "vld4.16 {d0, d2, d4, d6}, [%[in0]]! \n\t"
+ "vld4.16 {d1, d3, d5, d7}, [%[in0]] \n\t"
+diff --git a/3rdparty/carotene/src/pyramid.cpp b/3rdparty/carotene/src/pyramid.cpp
+index 8ef1268933..232ccf3efd 100644
+--- a/3rdparty/carotene/src/pyramid.cpp
++++ b/3rdparty/carotene/src/pyramid.cpp
+@@ -331,7 +331,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw8; x += 8)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld2.16 {d0-d3}, [%[in0]] \n\t"
+ "vld2.16 {d4-d7}, [%[in4]] \n\t"
+@@ -538,7 +538,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw4; x += 4)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld2.32 {d0-d3}, [%[in0]] \n\t"
+ "vld2.32 {d4-d7}, [%[in4]] \n\t"
+@@ -672,7 +672,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ std::vector<f32> _buf(cn*(srcSize.width + 4) + 32/sizeof(f32));
+ f32* lane = internal::alignPtr(&_buf[2*cn], 32);
+
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ register float32x4_t vc6d4f32 asm ("q11") = vmovq_n_f32(1.5f); // 6/4
+ register float32x4_t vc1d4f32 asm ("q12") = vmovq_n_f32(0.25f); // 1/4
+
+@@ -739,7 +739,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw4; x += 4)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ __volatile__ (
+ "vld2.32 {d0-d3}, [%[in0]] \n\t"
+ "vld2.32 {d8-d11}, [%[in4]] \n\t"
+@@ -932,7 +932,7 @@ pyrUp8uHorizontalConvolution:
+ for (; x < lim; x += 8)
+ {
+ internal::prefetch(lane + x);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vld1.16 {d0-d1}, [%[in0]] /*q0 = v0*/ \n\t"
+ "vld1.16 {d2-d3}, [%[in2]] /*q1 = v2*/ \n\t"
+@@ -973,7 +973,7 @@ pyrUp8uHorizontalConvolution:
+ for (; x < lim; x += 24)
+ {
+ internal::prefetch(lane + x);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vmov.u16 q9, #6 \n\t"
+ "vld3.16 {d0, d2, d4}, [%[in0]] /*v0*/ \n\t"
+@@ -1064,7 +1064,7 @@ pyrUp8uHorizontalConvolution:
+ for (; x < lim; x += 8)
+ {
+ internal::prefetch(lane + x);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vld1.16 {d0-d1}, [%[in0]] /*q0 = v0*/ \n\t"
+ "vld1.16 {d2-d3}, [%[in2]] /*q1 = v2*/ \n\t"
+@@ -1210,7 +1210,7 @@ pyrUp16sHorizontalConvolution:
+ for (; x < lim; x += 4)
+ {
+ internal::prefetch(lane + x);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vld1.32 {d0-d1}, [%[in0]] /*q0 = v0*/ \n\t"
+ "vld1.32 {d2-d3}, [%[in2]] /*q1 = v2*/ \n\t"
+@@ -1251,7 +1251,7 @@ pyrUp16sHorizontalConvolution:
+ for (; x < lim; x += 12)
+ {
+ internal::prefetch(lane + x + 3);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vmov.s32 q9, #6 \n\t"
+ "vld3.32 {d0, d2, d4}, [%[in0]] /*v0*/ \n\t"
+@@ -1343,7 +1343,7 @@ pyrUp16sHorizontalConvolution:
+ for (; x < lim; x += 4)
+ {
+ internal::prefetch(lane + x);
+-#if defined(__GNUC__) && defined(__arm__)
++#if !defined(__aarch64__) && defined(__GNUC__) && defined(__arm__)
+ __asm__ (
+ "vld1.32 {d0-d1}, [%[in0]] /*q0 = v0*/ \n\t"
+ "vld1.32 {d2-d3}, [%[in2]] /*q1 = v2*/ \n\t"
+diff --git a/3rdparty/carotene/src/scharr.cpp b/3rdparty/carotene/src/scharr.cpp
+index 5695804fe4..8d3b6328b1 100644
+--- a/3rdparty/carotene/src/scharr.cpp
++++ b/3rdparty/carotene/src/scharr.cpp
+@@ -109,7 +109,7 @@ void ScharrDeriv(const Size2D &size, s32 cn,
+ internal::prefetch(srow0 + x);
+ internal::prefetch(srow1 + x);
+ internal::prefetch(srow2 + x);
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+ __asm__ (
+ "vld1.8 {d0}, [%[src0]] \n\t"
+ "vld1.8 {d2}, [%[src2]] \n\t"
+@@ -161,7 +161,7 @@ void ScharrDeriv(const Size2D &size, s32 cn,
+ x = 0;
+ for( ; x < roiw8; x += 8 )
+ {
+-#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
+ __asm__ (
+ "vld1.16 {d4-d5}, [%[s2ptr]] \n\t"
+ "vld1.16 {d8-d9}, [%[s4ptr]] \n\t"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Do-not-enable-asm-with-clang.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Do-not-enable-asm-with-clang.patch
new file mode 100644
index 000000000..22e868a03
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Do-not-enable-asm-with-clang.patch
@@ -0,0 +1,993 @@
+From 333f60165b6737588eb975a5e4393d847011a1cd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 19 Sep 2017 18:07:35 -0700
+Subject: [PATCH 2/2] Do not enable asm with clang
+
+clang pretends to be gcc 4.2.0 which means we will
+use inline asm for no reason, instead of builtins
+on clang when possible.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+ 3rdparty/carotene/src/channel_extract.cpp | 4 +-
+ 3rdparty/carotene/src/channels_combine.cpp | 2 +-
+ 3rdparty/carotene/src/colorconvert.cpp | 78 +++++++++++++++---------------
+ 3rdparty/carotene/src/convert.cpp | 54 ++++++++++-----------
+ 3rdparty/carotene/src/convert_scale.cpp | 56 ++++++++++-----------
+ 3rdparty/carotene/src/gaussian_blur.cpp | 2 +-
+ 3rdparty/carotene/src/pyramid.cpp | 8 +--
+ 3rdparty/carotene/src/scharr.cpp | 4 +-
+ 8 files changed, 104 insertions(+), 104 deletions(-)
+
+diff --git a/3rdparty/carotene/src/channel_extract.cpp b/3rdparty/carotene/src/channel_extract.cpp
+index 8238a3ece8..ff4fb3770c 100644
+--- a/3rdparty/carotene/src/channel_extract.cpp
++++ b/3rdparty/carotene/src/channel_extract.cpp
+@@ -231,7 +231,7 @@ void extract4(const Size2D &size,
+ srcStride == dst2Stride && \
+ srcStride == dst3Stride &&
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+
+ #define SPLIT_ASM2(sgn, bits) __asm__ ( \
+ "vld2." #bits " {d0, d2}, [%[in0]] \n\t" \
+@@ -351,7 +351,7 @@ void extract4(const Size2D &size,
+ } \
+ }
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+
+ #define ALPHA_QUAD(sgn, bits) { \
+ internal::prefetch(src + sj); \
+diff --git a/3rdparty/carotene/src/channels_combine.cpp b/3rdparty/carotene/src/channels_combine.cpp
+index fc98fb9181..5d9251d51c 100644
+--- a/3rdparty/carotene/src/channels_combine.cpp
++++ b/3rdparty/carotene/src/channels_combine.cpp
+@@ -77,7 +77,7 @@ namespace CAROTENE_NS {
+ dstStride == src2Stride && \
+ dstStride == src3Stride &&
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+
+ #define MERGE_ASM2(sgn, bits) __asm__ ( \
+ "vld1." #bits " {d0-d1}, [%[in0]] \n\t" \
+diff --git a/3rdparty/carotene/src/colorconvert.cpp b/3rdparty/carotene/src/colorconvert.cpp
+index 26ae54b15c..d3a40fe64e 100644
+--- a/3rdparty/carotene/src/colorconvert.cpp
++++ b/3rdparty/carotene/src/colorconvert.cpp
+@@ -97,7 +97,7 @@ void rgb2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -116,7 +116,7 @@ void rgb2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ for (; dj < roiw8; sj += 24, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -198,7 +198,7 @@ void rgbx2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -217,7 +217,7 @@ void rgbx2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ for (; dj < roiw8; sj += 32, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -300,7 +300,7 @@ void bgr2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -319,7 +319,7 @@ void bgr2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ for (; dj < roiw8; sj += 24, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -402,7 +402,7 @@ void bgrx2gray(const Size2D &size, COLOR_SPACE color_space,
+ const u32 G2Y = color_space == COLOR_SPACE_BT601 ? G2Y_BT601 : G2Y_BT709;
+ const u32 B2Y = color_space == COLOR_SPACE_BT601 ? B2Y_BT601 : B2Y_BT709;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register int16x4_t v_r2y asm ("d31") = vmov_n_s16(R2Y);
+ register int16x4_t v_g2y asm ("d30") = vmov_n_s16(G2Y);
+ register int16x4_t v_b2y asm ("d29") = vmov_n_s16(B2Y);
+@@ -421,7 +421,7 @@ void bgrx2gray(const Size2D &size, COLOR_SPACE color_space,
+ u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
+ size_t sj = 0u, dj = 0u;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ for (; dj < roiw8; sj += 32, dj += 8)
+ {
+ internal::prefetch(src + sj);
+@@ -512,7 +512,7 @@ void gray2rgb(const Size2D &size,
+ for (; sj < roiw16; sj += 16, dj += 48)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld1.8 {d0-d1}, [%[in0]] \n\t"
+ "vmov.8 q1, q0 \n\t"
+@@ -538,7 +538,7 @@ void gray2rgb(const Size2D &size,
+
+ if (sj < roiw8)
+ {
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld1.8 {d0}, [%[in]] \n\t"
+ "vmov.8 d1, d0 \n\t"
+@@ -584,7 +584,7 @@ void gray2rgbx(const Size2D &size,
+ size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register uint8x16_t vc255 asm ("q4") = vmovq_n_u8(255);
+ #else
+ uint8x16x4_t vRgba;
+@@ -602,7 +602,7 @@ void gray2rgbx(const Size2D &size,
+ for (; sj < roiw16; sj += 16, dj += 64)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld1.8 {d0-d1}, [%[in0]] \n\t"
+ "vmov.8 q1, q0 \n\t"
+@@ -628,7 +628,7 @@ void gray2rgbx(const Size2D &size,
+
+ if (sj < roiw8)
+ {
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld1.8 {d5}, [%[in]] \n\t"
+ "vmov.8 d6, d5 \n\t"
+@@ -1409,7 +1409,7 @@ inline void convertToHSV(const s32 r, const s32 g, const s32 b,
+ "d24","d25","d26","d27","d28","d29","d30","d31" \
+ );
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+
+ #define YCRCB_CONSTS \
+ register int16x4_t vcYR asm ("d31") = vmov_n_s16(4899); \
+@@ -1555,7 +1555,7 @@ inline uint8x8x3_t convertToYCrCb( const int16x8_t& vR, const int16x8_t& vG, con
+ #define COEFF_G ( 8663)
+ #define COEFF_B (-17705)
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ #define YUV420ALPHA3_CONST
+ #define YUV420ALPHA4_CONST register uint8x16_t c255 asm ("q13") = vmovq_n_u8(255);
+ #define YUV420ALPHA3_CONVERT
+@@ -1852,7 +1852,7 @@ void rgb2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1871,7 +1871,7 @@ void rgb2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERT_TO_HSV_ASM(vld3.8 {d0-d2}, d0, d2)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -1904,7 +1904,7 @@ void rgbx2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1923,7 +1923,7 @@ void rgbx2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERT_TO_HSV_ASM(vld4.8 {d0-d3}, d0, d2)
+ #else
+ uint8x8x4_t vRgb = vld4_u8(src + sj);
+@@ -1956,7 +1956,7 @@ void bgr2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -1975,7 +1975,7 @@ void bgr2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERT_TO_HSV_ASM(vld3.8 {d0-d2}, d2, d0)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -2008,7 +2008,7 @@ void bgrx2hsv(const Size2D &size,
+ #ifdef CAROTENE_NEON
+ size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
+ const s32 hsv_shift = 12;
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register const f32 vsdiv_table = f32(255 << hsv_shift);
+ register f32 vhdiv_table = f32(hrange << hsv_shift);
+ register const s32 vhrange = hrange;
+@@ -2027,7 +2027,7 @@ void bgrx2hsv(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERT_TO_HSV_ASM(vld4.8 {d0-d3}, d2, d0)
+ #else
+ uint8x8x4_t vRgb = vld4_u8(src + sj);
+@@ -2068,7 +2068,7 @@ void rgbx2bgr565(const Size2D &size,
+ for (; j < roiw16; sj += 64, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld4.8 {d2, d4, d6, d8}, [%[in0]] @ q0 q1 q2 q3 q4 \n\t"
+ "vld4.8 {d3, d5, d7, d9}, [%[in1]] @ xxxxxxxx rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2122,7 +2122,7 @@ void rgb2bgr565(const Size2D &size,
+ for (; j < roiw16; sj += 48, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld3.8 {d2, d4, d6}, [%[in0]] @ q0 q1 q2 q3 q4 \n\t"
+ "vld3.8 {d3, d5, d7}, [%[in1]] @ xxxxxxxx rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2176,7 +2176,7 @@ void rgbx2rgb565(const Size2D &size,
+ for (; j < roiw16; sj += 64, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld4.8 {d0, d2, d4, d6}, [%[in0]] @ q0 q1 q2 q3 \n\t"
+ "vld4.8 {d1, d3, d5, d7}, [%[in1]] @ rrrrRRRR ggggGGGG bbbbBBBB aaaaAAAA \n\t"
+@@ -2230,7 +2230,7 @@ void rgb2rgb565(const Size2D &size,
+ for (; j < roiw16; sj += 48, dj += 32, j += 16)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld3.8 {d0, d2, d4}, [%[in0]] @ q0 q1 q2 q3 \n\t"
+ "vld3.8 {d1, d3, d5}, [%[in1]] @ rrrrRRRR ggggGGGG bbbbBBBB xxxxxxxx \n\t"
+@@ -2285,7 +2285,7 @@ void rgb2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTTOYCRCB(vld3.8 {d0-d2}, d0, d1, d2)
+ #else
+ uint8x8x3_t vRgb = vld3_u8(src + sj);
+@@ -2329,7 +2329,7 @@ void rgbx2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTTOYCRCB(vld4.8 {d0-d3}, d0, d1, d2)
+ #else
+ uint8x8x4_t vRgba = vld4_u8(src + sj);
+@@ -2373,7 +2373,7 @@ void bgr2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 24, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTTOYCRCB(vld3.8 {d0-d2}, d2, d1, d0)
+ #else
+ uint8x8x3_t vBgr = vld3_u8(src + sj);
+@@ -2417,7 +2417,7 @@ void bgrx2ycrcb(const Size2D &size,
+ for (; j < roiw8; sj += 32, dj += 24, j += 8)
+ {
+ internal::prefetch(src + sj);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTTOYCRCB(vld4.8 {d0-d3}, d2, d1, d0)
+ #else
+ uint8x8x4_t vBgra = vld4_u8(src + sj);
+@@ -2499,7 +2499,7 @@ void yuv420sp2rgb(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(3, d1, d0, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2545,7 +2545,7 @@ void yuv420sp2rgbx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(4, d1, d0, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2591,7 +2591,7 @@ void yuv420i2rgb(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(3, d0, d1, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2637,7 +2637,7 @@ void yuv420i2rgbx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(4, d0, d1, q5, q6)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2683,7 +2683,7 @@ void yuv420sp2bgr(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(3, d1, d0, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2729,7 +2729,7 @@ void yuv420sp2bgrx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(4, d1, d0, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2775,7 +2775,7 @@ void yuv420i2bgr(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(3, d0, d1, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+@@ -2821,7 +2821,7 @@ void yuv420i2bgrx(const Size2D &size,
+ internal::prefetch(uv + j);
+ internal::prefetch(y1 + j);
+ internal::prefetch(y2 + j);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CONVERTYUV420TORGB(4, d0, d1, q6, q5)
+ #else
+ convertYUV420.ToRGB(y1 + j, y2 + j, uv + j, dst1 + dj, dst2 + dj);
+diff --git a/3rdparty/carotene/src/convert.cpp b/3rdparty/carotene/src/convert.cpp
+index 64b6db78ab..f0c2d153f2 100644
+--- a/3rdparty/carotene/src/convert.cpp
++++ b/3rdparty/carotene/src/convert.cpp
+@@ -101,7 +101,7 @@ CVT_FUNC(u8, s8, 16,
+ }
+ })
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(u8, u16, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);,
+ {
+@@ -135,7 +135,7 @@ CVT_FUNC(u8, u16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(u8, s32, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);
+ register uint8x16_t zero1 asm ("q2") = vmovq_n_u8(0);
+@@ -173,7 +173,7 @@ CVT_FUNC(u8, s32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(u8, f32, 16,
+ ,
+ {
+@@ -248,7 +248,7 @@ CVT_FUNC(s8, u8, 16,
+ }
+ })
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(s8, u16, 16,
+ register uint8x16_t zero0 asm ("q1") = vmovq_n_u8(0);,
+ {
+@@ -284,7 +284,7 @@ CVT_FUNC(s8, u16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s8, s16, 16,
+ ,
+ {
+@@ -323,7 +323,7 @@ CVT_FUNC(s8, s16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(s8, s32, 16,
+ ,
+ {
+@@ -377,7 +377,7 @@ CVT_FUNC(s8, s32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s8, f32, 16,
+ ,
+ {
+@@ -440,7 +440,7 @@ CVT_FUNC(s8, f32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(u16, u8, 16,
+ ,
+ {
+@@ -479,7 +479,7 @@ CVT_FUNC(u16, u8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(u16, s8, 16,
+ register uint8x16_t v127 asm ("q4") = vmovq_n_u8(127);,
+ {
+@@ -522,7 +522,7 @@ CVT_FUNC(u16, s8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(u16, s16, 8,
+ register uint16x8_t v32767 asm ("q4") = vmovq_n_u16(0x7FFF);,
+ {
+@@ -555,7 +555,7 @@ CVT_FUNC(u16, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(u16, s32, 8,
+ register uint16x8_t zero0 asm ("q1") = vmovq_n_u16(0);,
+ {
+@@ -589,7 +589,7 @@ CVT_FUNC(u16, s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(u16, f32, 8,
+ ,
+ {
+@@ -633,7 +633,7 @@ CVT_FUNC(u16, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s16, u8, 16,
+ ,
+ {
+@@ -672,7 +672,7 @@ CVT_FUNC(s16, u8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s16, s8, 16,
+ ,
+ {
+@@ -711,7 +711,7 @@ CVT_FUNC(s16, s8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVT_FUNC(s16, u16, 8,
+ register int16x8_t vZero asm ("q4") = vmovq_n_s16(0);,
+ {
+@@ -747,7 +747,7 @@ CVT_FUNC(s16, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s16, s32, 8,
+ ,
+ {
+@@ -786,7 +786,7 @@ CVT_FUNC(s16, s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s16, f32, 8,
+ ,
+ {
+@@ -829,7 +829,7 @@ CVT_FUNC(s16, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s32, u8, 8,
+ ,
+ {
+@@ -870,7 +870,7 @@ CVT_FUNC(s32, u8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s32, s8, 8,
+ ,
+ {
+@@ -911,7 +911,7 @@ CVT_FUNC(s32, s8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s32, u16, 8,
+ ,
+ {
+@@ -950,7 +950,7 @@ CVT_FUNC(s32, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s32, s16, 8,
+ ,
+ {
+@@ -989,7 +989,7 @@ CVT_FUNC(s32, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(s32, f32, 8,
+ ,
+ {
+@@ -1034,7 +1034,7 @@ CVT_FUNC(s32, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(f32, u8, 8,
+ register float32x4_t vmult asm ("q0") = vdupq_n_f32((float)(1 << 16));
+ register uint32x4_t vmask asm ("q1") = vdupq_n_u32(1<<16);,
+@@ -1101,7 +1101,7 @@ CVT_FUNC(f32, u8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(f32, s8, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1153,7 +1153,7 @@ CVT_FUNC(f32, s8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(f32, u16, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1212,7 +1212,7 @@ CVT_FUNC(f32, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(f32, s16, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+@@ -1271,7 +1271,7 @@ CVT_FUNC(f32, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ CVT_FUNC(f32, s32, 8,
+ register float32x4_t vhalf asm ("q0") = vdupq_n_f32(0.5f);,
+ {
+diff --git a/3rdparty/carotene/src/convert_scale.cpp b/3rdparty/carotene/src/convert_scale.cpp
+index ae41a985c8..d599d24c1e 100644
+--- a/3rdparty/carotene/src/convert_scale.cpp
++++ b/3rdparty/carotene/src/convert_scale.cpp
+@@ -473,7 +473,7 @@ CVTS_FUNC(u8, s16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u8, s32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -562,7 +562,7 @@ CVTS_FUNC(u8, s32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u8, f32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -985,7 +985,7 @@ CVTS_FUNC(s8, s16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s8, s32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1074,7 +1074,7 @@ CVTS_FUNC(s8, s32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s8, f32, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1155,7 +1155,7 @@ CVTS_FUNC(s8, f32, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u16, u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1214,7 +1214,7 @@ CVTS_FUNC(u16, u8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u16, s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1273,7 +1273,7 @@ CVTS_FUNC(u16, s8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC1(u16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1330,7 +1330,7 @@ CVTS_FUNC1(u16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u16, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1387,7 +1387,7 @@ CVTS_FUNC(u16, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u16, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1443,7 +1443,7 @@ CVTS_FUNC(u16, s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(u16, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1495,7 +1495,7 @@ CVTS_FUNC(u16, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s16, u8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1554,7 +1554,7 @@ CVTS_FUNC(s16, u8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s16, s8, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1613,7 +1613,7 @@ CVTS_FUNC(s16, s8, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s16, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1670,7 +1670,7 @@ CVTS_FUNC(s16, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC1(s16, 16,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1727,7 +1727,7 @@ CVTS_FUNC1(s16, 16,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s16, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1783,7 +1783,7 @@ CVTS_FUNC(s16, s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s16, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -1835,7 +1835,7 @@ CVTS_FUNC(s16, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s32, u8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1893,7 +1893,7 @@ CVTS_FUNC(s32, u8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s32, s8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -1951,7 +1951,7 @@ CVTS_FUNC(s32, s8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s32, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2007,7 +2007,7 @@ CVTS_FUNC(s32, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s32, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2063,7 +2063,7 @@ CVTS_FUNC(s32, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC1(s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2118,7 +2118,7 @@ CVTS_FUNC1(s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(s32, f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+@@ -2169,7 +2169,7 @@ CVTS_FUNC(s32, f32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(f32, u8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)((1 << 16)*alpha));
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)((1 << 16)*beta));
+@@ -2239,7 +2239,7 @@ CVTS_FUNC(f32, u8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(f32, s8, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2293,7 +2293,7 @@ CVTS_FUNC(f32, s8, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(f32, u16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2345,7 +2345,7 @@ CVTS_FUNC(f32, u16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(f32, s16, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2397,7 +2397,7 @@ CVTS_FUNC(f32, s16, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC(f32, s32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta + 0.5f);,
+@@ -2448,7 +2448,7 @@ CVTS_FUNC(f32, s32, 8,
+ })
+ #endif
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ CVTS_FUNC1(f32, 8,
+ register float32x4_t vscale asm ("q0") = vdupq_n_f32((f32)alpha);
+ register float32x4_t vshift asm ("q1") = vdupq_n_f32((f32)beta);,
+diff --git a/3rdparty/carotene/src/gaussian_blur.cpp b/3rdparty/carotene/src/gaussian_blur.cpp
+index f7b5f18d79..e5aa8fc75b 100644
+--- a/3rdparty/carotene/src/gaussian_blur.cpp
++++ b/3rdparty/carotene/src/gaussian_blur.cpp
+@@ -327,7 +327,7 @@ void gaussianBlur5x5(const Size2D &size, s32 cn,
+ u16* lidx1 = lane + x - 1*2;
+ u16* lidx3 = lane + x + 1*2;
+ u16* lidx4 = lane + x + 2*2;
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ __volatile__ (
+ "vld2.16 {d0, d2}, [%[in0]]! \n\t"
+ "vld2.16 {d1, d3}, [%[in0]] \n\t"
+diff --git a/3rdparty/carotene/src/pyramid.cpp b/3rdparty/carotene/src/pyramid.cpp
+index 232ccf3efd..d4e32ea50f 100644
+--- a/3rdparty/carotene/src/pyramid.cpp
++++ b/3rdparty/carotene/src/pyramid.cpp
+@@ -331,7 +331,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw8; x += 8)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld2.16 {d0-d3}, [%[in0]] \n\t"
+ "vld2.16 {d4-d7}, [%[in4]] \n\t"
+@@ -538,7 +538,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw4; x += 4)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld2.32 {d0-d3}, [%[in0]] \n\t"
+ "vld2.32 {d4-d7}, [%[in4]] \n\t"
+@@ -672,7 +672,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ std::vector<f32> _buf(cn*(srcSize.width + 4) + 32/sizeof(f32));
+ f32* lane = internal::alignPtr(&_buf[2*cn], 32);
+
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ register float32x4_t vc6d4f32 asm ("q11") = vmovq_n_f32(1.5f); // 6/4
+ register float32x4_t vc1d4f32 asm ("q12") = vmovq_n_f32(0.25f); // 1/4
+
+@@ -739,7 +739,7 @@ void gaussianPyramidDown(const Size2D &srcSize,
+ for (; x < roiw4; x += 4)
+ {
+ internal::prefetch(lane + 2 * x);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ __volatile__ (
+ "vld2.32 {d0-d3}, [%[in0]] \n\t"
+ "vld2.32 {d8-d11}, [%[in4]] \n\t"
+diff --git a/3rdparty/carotene/src/scharr.cpp b/3rdparty/carotene/src/scharr.cpp
+index 8d3b6328b1..36f6b2276e 100644
+--- a/3rdparty/carotene/src/scharr.cpp
++++ b/3rdparty/carotene/src/scharr.cpp
+@@ -109,7 +109,7 @@ void ScharrDeriv(const Size2D &size, s32 cn,
+ internal::prefetch(srow0 + x);
+ internal::prefetch(srow1 + x);
+ internal::prefetch(srow2 + x);
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
+ __asm__ (
+ "vld1.8 {d0}, [%[src0]] \n\t"
+ "vld1.8 {d2}, [%[src2]] \n\t"
+@@ -161,7 +161,7 @@ void ScharrDeriv(const Size2D &size, s32 cn,
+ x = 0;
+ for( ; x < roiw8; x += 8 )
+ {
+-#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6
++#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
+ __asm__ (
+ "vld1.16 {d4-d5}, [%[s2ptr]] \n\t"
+ "vld1.16 {d8-d9}, [%[s4ptr]] \n\t"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Make-opencv-ts-create-share-library-intead-of-static.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Make-opencv-ts-create-share-library-intead-of-static.patch
new file mode 100644
index 000000000..a845505a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-Make-opencv-ts-create-share-library-intead-of-static.patch
@@ -0,0 +1,26 @@
+From 350525293aef65490e80104ddd99e1b21c5d54b0 Mon Sep 17 00:00:00 2001
+From: Bian Naimeng <biannm@cn.fujitsu.com>
+Date: Wed, 19 Apr 2017 03:11:37 +0900
+Subject: [PATCH 2/3] Make opencv-ts create share library intead of static.
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ modules/ts/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt
+index f95bed079..ee67858df 100644
+--- a/modules/ts/CMakeLists.txt
++++ b/modules/ts/CMakeLists.txt
+@@ -4,7 +4,7 @@ if(NOT BUILD_opencv_ts AND NOT BUILD_TESTS AND NOT BUILD_PERF_TESTS)
+ ocv_module_disable(ts)
+ endif()
+
+-set(OPENCV_MODULE_TYPE STATIC)
++#set(OPENCV_MODULE_TYPE STATIC)
+ set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
+
+ if(WINRT)
+--
+2.13.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-imgcodecs-refactoring-improve-code-quality.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-imgcodecs-refactoring-improve-code-quality.patch
new file mode 100644
index 000000000..39f33af9d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0002-imgcodecs-refactoring-improve-code-quality.patch
@@ -0,0 +1,656 @@
+Upstream-Status: Backport [https://github.com/opencv/opencv/pull/9376/commits/999f41fb4f4aa94a0cb47256919ae8b5c29ca5f3]
+
+Fix CVEs for opencv 3.3:
+
+* CVE-2017-12597
+* CVE-2017-12598
+* CVE-2017-12599
+* CVE-2017-12600
+* CVE-2017-12601
+* CVE-2017-12602
+* CVE-2017-12603
+* CVE-2017-12604
+* CVE-2017-12605
+* CVE-2017-12606
+* CVE-2017-12862
+* CVE-2017-12863
+* CVE-2017-12864
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 999f41fb4f4aa94a0cb47256919ae8b5c29ca5f3 Mon Sep 17 00:00:00 2001
+From: Alexander Alekhin <alexander.a.alekhin@gmail.com>
+Date: Tue, 15 Aug 2017 22:04:55 +0000
+Subject: [PATCH 2/3] imgcodecs: refactoring, improve code quality
+
+---
+ modules/imgcodecs/src/bitstrm.cpp | 2 +
+ modules/imgcodecs/src/bitstrm.hpp | 19 +++--
+ modules/imgcodecs/src/grfmt_bmp.cpp | 13 ++-
+ modules/imgcodecs/src/grfmt_pxm.cpp | 122 ++++++++++++++++-----------
+ modules/imgcodecs/src/loadsave.cpp | 164 +++++++++++++++++++++++++++++-------
+ 5 files changed, 231 insertions(+), 89 deletions(-)
+
+diff --git a/modules/imgcodecs/src/bitstrm.cpp b/modules/imgcodecs/src/bitstrm.cpp
+index a7e187fa0..0a8941aec 100644
+--- a/modules/imgcodecs/src/bitstrm.cpp
++++ b/modules/imgcodecs/src/bitstrm.cpp
+@@ -209,6 +209,8 @@ int RLByteStream::getByte()
+ current = m_current;
+ }
+
++ CV_Assert(current < m_end);
++
+ val = *((uchar*)current);
+ m_current = current + 1;
+ return val;
+diff --git a/modules/imgcodecs/src/bitstrm.hpp b/modules/imgcodecs/src/bitstrm.hpp
+index 465c0a847..26947971f 100644
+--- a/modules/imgcodecs/src/bitstrm.hpp
++++ b/modules/imgcodecs/src/bitstrm.hpp
+@@ -48,13 +48,20 @@
+ namespace cv
+ {
+
+-enum
+-{
+- RBS_THROW_EOS=-123, // <end of stream> exception code
+- RBS_THROW_FORB=-124, // <forrbidden huffman code> exception code
+- RBS_HUFF_FORB=2047, // forrbidden huffman code "value"
+- RBS_BAD_HEADER=-125 // invalid header
++#define DECLARE_RBS_EXCEPTION(name) \
++class RBS_ ## name ## _Exception : public cv::Exception \
++{ \
++public: \
++ RBS_ ## name ## _Exception(int code_, const String& err_, const String& func_, const String& file_, int line_) : \
++ cv::Exception(code_, err_, func_, file_, line_) \
++ {} \
+ };
++DECLARE_RBS_EXCEPTION(THROW_EOS)
++#define RBS_THROW_EOS RBS_THROW_EOS_Exception(cv::Error::StsError, "Unexpected end of input stream", CV_Func, __FILE__, __LINE__)
++DECLARE_RBS_EXCEPTION(THROW_FORB)
++#define RBS_THROW_FORB RBS_THROW_FORB_Exception(cv::Error::StsError, "Forrbidden huffman code", CV_Func, __FILE__, __LINE__)
++DECLARE_RBS_EXCEPTION(BAD_HEADER)
++#define RBS_BAD_HEADER RBS_BAD_HEADER_Exception(cv::Error::StsError, "Invalid header", CV_Func, __FILE__, __LINE__)
+
+ typedef unsigned long ulong;
+
+diff --git a/modules/imgcodecs/src/grfmt_bmp.cpp b/modules/imgcodecs/src/grfmt_bmp.cpp
+index 86cacd316..257f97c2d 100644
+--- a/modules/imgcodecs/src/grfmt_bmp.cpp
++++ b/modules/imgcodecs/src/grfmt_bmp.cpp
+@@ -118,8 +118,9 @@ bool BmpDecoder::readHeader()
+
+ if( m_bpp <= 8 )
+ {
+- memset( m_palette, 0, sizeof(m_palette));
+- m_strm.getBytes( m_palette, (clrused == 0? 1<<m_bpp : clrused)*4 );
++ CV_Assert(clrused < 256);
++ memset(m_palette, 0, sizeof(m_palette));
++ m_strm.getBytes(m_palette, (clrused == 0? 1<<m_bpp : clrused)*4 );
+ iscolor = IsColorPalette( m_palette, m_bpp );
+ }
+ else if( m_bpp == 16 && m_rle_code == BMP_BITFIELDS )
+@@ -290,7 +291,9 @@ bool BmpDecoder::readData( Mat& img )
+ else if( code > 2 ) // absolute mode
+ {
+ if( data + code*nch > line_end ) goto decode_rle4_bad;
+- m_strm.getBytes( src, (((code + 1)>>1) + 1) & -2 );
++ int sz = (((code + 1)>>1) + 1) & (~1);
++ CV_Assert((size_t)sz < _src.size());
++ m_strm.getBytes(src, sz);
+ if( color )
+ data = FillColorRow4( data, src, code, m_palette );
+ else
+@@ -379,7 +382,9 @@ decode_rle4_bad: ;
+
+ if( data + code3 > line_end )
+ goto decode_rle8_bad;
+- m_strm.getBytes( src, (code + 1) & -2 );
++ int sz = (code + 1) & (~1);
++ CV_Assert((size_t)sz < _src.size());
++ m_strm.getBytes(src, sz);
+ if( color )
+ data = FillColorRow8( data, src, code, m_palette );
+ else
+diff --git a/modules/imgcodecs/src/grfmt_pxm.cpp b/modules/imgcodecs/src/grfmt_pxm.cpp
+index 1750cb705..68bd8fd93 100644
+--- a/modules/imgcodecs/src/grfmt_pxm.cpp
++++ b/modules/imgcodecs/src/grfmt_pxm.cpp
+@@ -43,50 +43,58 @@
+ #include "precomp.hpp"
+ #include "utils.hpp"
+ #include "grfmt_pxm.hpp"
++#include <iostream>
+
+ namespace cv
+ {
+
+ ///////////////////////// P?M reader //////////////////////////////
+
+-static int ReadNumber( RLByteStream& strm, int maxdigits )
++static int ReadNumber(RLByteStream& strm, int maxdigits = 0)
+ {
+ int code;
+- int val = 0;
++ int64 val = 0;
+ int digits = 0;
+
+ code = strm.getByte();
+
+- if( !isdigit(code))
++ while (!isdigit(code))
+ {
+- do
++ if (code == '#' )
+ {
+- if( code == '#' )
++ do
+ {
+- do
+- {
+- code = strm.getByte();
+- }
+- while( code != '\n' && code != '\r' );
++ code = strm.getByte();
+ }
+-
++ while (code != '\n' && code != '\r');
+ code = strm.getByte();
+-
+- while( isspace(code))
++ }
++ else if (isspace(code))
++ {
++ while (isspace(code))
+ code = strm.getByte();
+ }
+- while( !isdigit( code ));
++ else
++ {
++#if 1
++ CV_ErrorNoReturn_(Error::StsError, ("PXM: Unexpected code in ReadNumber(): 0x%x (%d)", code, code));
++#else
++ code = strm.getByte();
++#endif
++ }
+ }
+
+ do
+ {
+- val = val*10 + code - '0';
+- if( ++digits >= maxdigits ) break;
++ val = val*10 + (code - '0');
++ CV_Assert(val <= INT_MAX && "PXM: ReadNumber(): result is too large");
++ digits++;
++ if (maxdigits != 0 && digits >= maxdigits) break;
+ code = strm.getByte();
+ }
+- while( isdigit(code));
++ while (isdigit(code));
+
+- return val;
++ return (int)val;
+ }
+
+
+@@ -122,13 +130,13 @@ ImageDecoder PxMDecoder::newDecoder() const
+ return makePtr<PxMDecoder>();
+ }
+
+-void PxMDecoder::close()
++void PxMDecoder::close()
+ {
+ m_strm.close();
+ }
+
+
+-bool PxMDecoder::readHeader()
++bool PxMDecoder::readHeader()
+ {
+ bool result = false;
+
+@@ -158,10 +166,10 @@ bool PxMDecoder::readHeader()
+ m_binary = code >= '4';
+ m_type = m_bpp > 8 ? CV_8UC3 : CV_8UC1;
+
+- m_width = ReadNumber( m_strm, INT_MAX );
+- m_height = ReadNumber( m_strm, INT_MAX );
++ m_width = ReadNumber(m_strm);
++ m_height = ReadNumber(m_strm);
+
+- m_maxval = m_bpp == 1 ? 1 : ReadNumber( m_strm, INT_MAX );
++ m_maxval = m_bpp == 1 ? 1 : ReadNumber(m_strm);
+ if( m_maxval > 65535 )
+ throw RBS_BAD_HEADER;
+
+@@ -175,8 +183,14 @@ bool PxMDecoder::readHeader()
+ result = true;
+ }
+ }
+- catch(...)
++ catch (const cv::Exception&)
++ {
++ throw;
++ }
++ catch (...)
+ {
++ std::cerr << "PXM::readHeader(): unknown C++ exception" << std::endl << std::flush;
++ throw;
+ }
+
+ if( !result )
+@@ -189,33 +203,28 @@ bool PxMDecoder::readHeader()
+ }
+
+
+-bool PxMDecoder::readData( Mat& img )
++bool PxMDecoder::readData( Mat& img )
+ {
+ int color = img.channels() > 1;
+ uchar* data = img.ptr();
+ PaletteEntry palette[256];
+ bool result = false;
+- int bit_depth = CV_ELEM_SIZE1(m_type)*8;
+- int src_pitch = (m_width*m_bpp*bit_depth/8 + 7)/8;
++ const int bit_depth = CV_ELEM_SIZE1(m_type)*8;
++ const int src_pitch = divUp(m_width*m_bpp*(bit_depth/8), 8);
+ int nch = CV_MAT_CN(m_type);
+ int width3 = m_width*nch;
+- int i, x, y;
+
+ if( m_offset < 0 || !m_strm.isOpened())
+ return false;
+
+- AutoBuffer<uchar> _src(src_pitch + 32);
+- uchar* src = _src;
+- AutoBuffer<uchar> _gray_palette;
+- uchar* gray_palette = _gray_palette;
++ uchar gray_palette[256] = {0};
+
+ // create LUT for converting colors
+ if( bit_depth == 8 )
+ {
+- _gray_palette.allocate(m_maxval + 1);
+- gray_palette = _gray_palette;
++ CV_Assert(m_maxval < 256);
+
+- for( i = 0; i <= m_maxval; i++ )
++ for (int i = 0; i <= m_maxval; i++)
+ gray_palette[i] = (uchar)((i*255/m_maxval)^(m_bpp == 1 ? 255 : 0));
+
+ FillGrayPalette( palette, m_bpp==1 ? 1 : 8 , m_bpp == 1 );
+@@ -229,12 +238,16 @@ bool PxMDecoder::readData( Mat& img )
+ {
+ ////////////////////////// 1 BPP /////////////////////////
+ case 1:
++ CV_Assert(CV_MAT_DEPTH(m_type) == CV_8U);
+ if( !m_binary )
+ {
+- for( y = 0; y < m_height; y++, data += img.step )
++ AutoBuffer<uchar> _src(m_width);
++ uchar* src = _src;
++
++ for (int y = 0; y < m_height; y++, data += img.step)
+ {
+- for( x = 0; x < m_width; x++ )
+- src[x] = ReadNumber( m_strm, 1 ) != 0;
++ for (int x = 0; x < m_width; x++)
++ src[x] = ReadNumber(m_strm, 1) != 0;
+
+ if( color )
+ FillColorRow8( data, src, m_width, palette );
+@@ -244,7 +257,10 @@ bool PxMDecoder::readData( Mat& img )
+ }
+ else
+ {
+- for( y = 0; y < m_height; y++, data += img.step )
++ AutoBuffer<uchar> _src(src_pitch);
++ uchar* src = _src;
++
++ for (int y = 0; y < m_height; y++, data += img.step)
+ {
+ m_strm.getBytes( src, src_pitch );
+
+@@ -260,13 +276,17 @@ bool PxMDecoder::readData( Mat& img )
+ ////////////////////////// 8 BPP /////////////////////////
+ case 8:
+ case 24:
+- for( y = 0; y < m_height; y++, data += img.step )
++ {
++ AutoBuffer<uchar> _src(std::max<size_t>(width3*2, src_pitch));
++ uchar* src = _src;
++
++ for (int y = 0; y < m_height; y++, data += img.step)
+ {
+ if( !m_binary )
+ {
+- for( x = 0; x < width3; x++ )
++ for (int x = 0; x < width3; x++)
+ {
+- int code = ReadNumber( m_strm, INT_MAX );
++ int code = ReadNumber(m_strm);
+ if( (unsigned)code > (unsigned)m_maxval ) code = m_maxval;
+ if( bit_depth == 8 )
+ src[x] = gray_palette[code];
+@@ -279,7 +299,7 @@ bool PxMDecoder::readData( Mat& img )
+ m_strm.getBytes( src, src_pitch );
+ if( bit_depth == 16 && !isBigEndian() )
+ {
+- for( x = 0; x < width3; x++ )
++ for (int x = 0; x < width3; x++)
+ {
+ uchar v = src[x * 2];
+ src[x * 2] = src[x * 2 + 1];
+@@ -290,7 +310,7 @@ bool PxMDecoder::readData( Mat& img )
+
+ if( img.depth() == CV_8U && bit_depth == 16 )
+ {
+- for( x = 0; x < width3; x++ )
++ for (int x = 0; x < width3; x++)
+ {
+ int v = ((ushort *)src)[x];
+ src[x] = (uchar)(v >> 8);
+@@ -331,12 +351,19 @@ bool PxMDecoder::readData( Mat& img )
+ }
+ result = true;
+ break;
++ }
+ default:
+- assert(0);
++ CV_ErrorNoReturn(Error::StsError, "m_bpp is not supported");
+ }
+ }
+- catch(...)
++ catch (const cv::Exception&)
++ {
++ throw;
++ }
++ catch (...)
+ {
++ std::cerr << "PXM::readData(): unknown exception" << std::endl << std::flush;
++ throw;
+ }
+
+ return result;
+@@ -412,8 +439,9 @@ bool PxMEncoder::write( const Mat& img, const std::vector<int>& params )
+ char* buffer = _buffer;
+
+ // write header;
+- sprintf( buffer, "P%c\n%d %d\n%d\n",
++ sprintf( buffer, "P%c\n# Generated by OpenCV %s\n%d %d\n%d\n",
+ '2' + (channels > 1 ? 1 : 0) + (isBinary ? 3 : 0),
++ CV_VERSION,
+ width, height, (1 << depth) - 1 );
+
+ strm.putBytes( buffer, (int)strlen(buffer) );
+diff --git a/modules/imgcodecs/src/loadsave.cpp b/modules/imgcodecs/src/loadsave.cpp
+index 3b2366217..5ee4ca354 100644
+--- a/modules/imgcodecs/src/loadsave.cpp
++++ b/modules/imgcodecs/src/loadsave.cpp
+@@ -55,6 +55,27 @@
+ /****************************************************************************************\
+ * Image Codecs *
+ \****************************************************************************************/
++
++namespace cv {
++
++// TODO Add runtime configuration
++#define CV_IO_MAX_IMAGE_PARAMS (50)
++#define CV_IO_MAX_IMAGE_WIDTH (1<<20)
++#define CV_IO_MAX_IMAGE_HEIGHT (1<<20)
++#define CV_IO_MAX_IMAGE_PIXELS (1<<30) // 1 Gigapixel
++
++static Size validateInputImageSize(const Size& size)
++{
++ CV_Assert(size.width > 0);
++ CV_Assert(size.width <= CV_IO_MAX_IMAGE_WIDTH);
++ CV_Assert(size.height > 0);
++ CV_Assert(size.height <= CV_IO_MAX_IMAGE_HEIGHT);
++ uint64 pixels = (uint64)size.width * (uint64)size.height;
++ CV_Assert(pixels <= CV_IO_MAX_IMAGE_PIXELS);
++ return size;
++}
++
++
+ namespace {
+
+ class ByteStreamBuffer: public std::streambuf
+@@ -94,9 +115,6 @@ protected:
+
+ }
+
+-namespace cv
+-{
+-
+ /**
+ * @struct ImageCodecInitializer
+ *
+@@ -408,14 +426,26 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
+ /// set the filename in the driver
+ decoder->setSource( filename );
+
+- // read the header to make sure it succeeds
+- if( !decoder->readHeader() )
++ try
++ {
++ // read the header to make sure it succeeds
++ if( !decoder->readHeader() )
++ return 0;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imread_('" << filename << "'): can't read header: " << e.what() << std::endl << std::flush;
+ return 0;
++ }
++ catch (...)
++ {
++ std::cerr << "imread_('" << filename << "'): can't read header: unknown exception" << std::endl << std::flush;
++ return 0;
++ }
++
+
+ // established the required input image size
+- CvSize size;
+- size.width = decoder->width();
+- size.height = decoder->height();
++ Size size = validateInputImageSize(Size(decoder->width(), decoder->height()));
+
+ // grab the decoded type
+ int type = decoder->type();
+@@ -451,7 +481,21 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
+ }
+
+ // read the image data
+- if( !decoder->readData( *data ))
++ bool success = false;
++ try
++ {
++ if (decoder->readData(*data))
++ success = true;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imread_('" << filename << "'): can't read data: " << e.what() << std::endl << std::flush;
++ }
++ catch (...)
++ {
++ std::cerr << "imread_('" << filename << "'): can't read data: unknown exception" << std::endl << std::flush;
++ }
++ if (!success)
+ {
+ cvReleaseImage( &image );
+ cvReleaseMat( &matrix );
+@@ -504,8 +548,22 @@ imreadmulti_(const String& filename, int flags, std::vector<Mat>& mats)
+ decoder->setSource(filename);
+
+ // read the header to make sure it succeeds
+- if (!decoder->readHeader())
++ try
++ {
++ // read the header to make sure it succeeds
++ if( !decoder->readHeader() )
++ return 0;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imreadmulti_('" << filename << "'): can't read header: " << e.what() << std::endl << std::flush;
+ return 0;
++ }
++ catch (...)
++ {
++ std::cerr << "imreadmulti_('" << filename << "'): can't read header: unknown exception" << std::endl << std::flush;
++ return 0;
++ }
+
+ for (;;)
+ {
+@@ -523,17 +581,32 @@ imreadmulti_(const String& filename, int flags, std::vector<Mat>& mats)
+ type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1);
+ }
+
++ // established the required input image size
++ Size size = validateInputImageSize(Size(decoder->width(), decoder->height()));
++
+ // read the image data
+- Mat mat(decoder->height(), decoder->width(), type);
+- if (!decoder->readData(mat))
++ Mat mat(size.height, size.width, type);
++ bool success = false;
++ try
+ {
+- // optionally rotate the data if EXIF' orientation flag says so
+- if( (flags & IMREAD_IGNORE_ORIENTATION) == 0 && flags != IMREAD_UNCHANGED )
+- {
+- ApplyExifOrientation(filename, mat);
+- }
+-
++ if (decoder->readData(mat))
++ success = true;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imreadmulti_('" << filename << "'): can't read data: " << e.what() << std::endl << std::flush;
++ }
++ catch (...)
++ {
++ std::cerr << "imreadmulti_('" << filename << "'): can't read data: unknown exception" << std::endl << std::flush;
++ }
++ if (!success)
+ break;
++
++ // optionally rotate the data if EXIF' orientation flag says so
++ if( (flags & IMREAD_IGNORE_ORIENTATION) == 0 && flags != IMREAD_UNCHANGED )
++ {
++ ApplyExifOrientation(filename, mat);
+ }
+
+ mats.push_back(mat);
+@@ -616,6 +689,7 @@ static bool imwrite_( const String& filename, const Mat& image,
+ }
+
+ encoder->setDestination( filename );
++ CV_Assert(params.size() <= CV_IO_MAX_IMAGE_PARAMS*2);
+ bool code = encoder->write( *pimage, params );
+
+ // CV_Assert( code );
+@@ -663,22 +737,35 @@ imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 )
+ decoder->setSource(filename);
+ }
+
+- if( !decoder->readHeader() )
++ bool success = false;
++ try
++ {
++ if (decoder->readHeader())
++ success = true;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imdecode_('" << filename << "'): can't read header: " << e.what() << std::endl << std::flush;
++ }
++ catch (...)
++ {
++ std::cerr << "imdecode_('" << filename << "'): can't read header: unknown exception" << std::endl << std::flush;
++ }
++ if (!success)
+ {
+ decoder.release();
+- if ( !filename.empty() )
++ if (!filename.empty())
+ {
+- if ( remove(filename.c_str()) != 0 )
++ if (0 != remove(filename.c_str()))
+ {
+- CV_Error( CV_StsError, "unable to remove temporary file" );
++ std::cerr << "unable to remove temporary file:" << filename << std::endl << std::flush;
+ }
+ }
+ return 0;
+ }
+
+- CvSize size;
+- size.width = decoder->width();
+- size.height = decoder->height();
++ // established the required input image size
++ Size size = validateInputImageSize(Size(decoder->width(), decoder->height()));
+
+ int type = decoder->type();
+ if( (flags & IMREAD_LOAD_GDAL) != IMREAD_LOAD_GDAL && flags != IMREAD_UNCHANGED )
+@@ -712,17 +799,30 @@ imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 )
+ temp = cvarrToMat(image);
+ }
+
+- bool code = decoder->readData( *data );
++ success = false;
++ try
++ {
++ if (decoder->readData(*data))
++ success = true;
++ }
++ catch (const cv::Exception& e)
++ {
++ std::cerr << "imdecode_('" << filename << "'): can't read data: " << e.what() << std::endl << std::flush;
++ }
++ catch (...)
++ {
++ std::cerr << "imdecode_('" << filename << "'): can't read data: unknown exception" << std::endl << std::flush;
++ }
+ decoder.release();
+- if ( !filename.empty() )
++ if (!filename.empty())
+ {
+- if ( remove(filename.c_str()) != 0 )
++ if (0 != remove(filename.c_str()))
+ {
+- CV_Error( CV_StsError, "unable to remove temporary file" );
++ std::cerr << "unable to remove temporary file:" << filename << std::endl << std::flush;
+ }
+ }
+
+- if( !code )
++ if (!success)
+ {
+ cvReleaseImage( &image );
+ cvReleaseMat( &matrix );
+@@ -859,7 +959,7 @@ cvSaveImage( const char* filename, const CvArr* arr, const int* _params )
+ if( _params )
+ {
+ for( ; _params[i] > 0; i += 2 )
+- ;
++ CV_Assert(i < CV_IO_MAX_IMAGE_PARAMS*2); // Limit number of params for security reasons
+ }
+ return cv::imwrite_(filename, cv::cvarrToMat(arr),
+ i > 0 ? std::vector<int>(_params, _params+i) : std::vector<int>(),
+@@ -890,7 +990,7 @@ cvEncodeImage( const char* ext, const CvArr* arr, const int* _params )
+ if( _params )
+ {
+ for( ; _params[i] > 0; i += 2 )
+- ;
++ CV_Assert(i < CV_IO_MAX_IMAGE_PARAMS*2); // Limit number of params for security reasons
+ }
+ cv::Mat img = cv::cvarrToMat(arr);
+ if( CV_IS_IMAGE(arr) && ((const IplImage*)arr)->origin == IPL_ORIGIN_BL )
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch
new file mode 100644
index 000000000..a22b04a90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch
@@ -0,0 +1,80 @@
+From ace48a628dca34d742615598afeef42ed323a029 Mon Sep 17 00:00:00 2001
+From: Huang Qiyu <huangqy.fnst@cn.fujitsu.com>
+Date: Fri, 19 May 2017 04:27:50 +0900
+Subject: [PATCH 3/3] To fix errors as following:
+
+"test_main.cpp:45: undefined reference to `parseCustomOptions(int, char**)'"
+"perf_abs.cpp:13: undefined reference to `cvtest::param_seed'"
+"test_superres.cpp:270: undefined reference to `checkIppStatus()'"
+
+Signed-off-by: Huang Qiyu <huangqy.fnst@cn.fujitsu.com>
+
+Also add the visibility changes for certain OpenCL-related functions in
+ts module.
+
+Signed-off-by: Ismo Puustinen <ismo.puustinen@intel.com>
+---
+ modules/ts/include/opencv2/ts.hpp | 6 +++---
+ modules/ts/include/opencv2/ts/ocl_test.hpp | 2 +-
+ modules/ts/include/opencv2/ts/ts_ext.hpp | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/modules/ts/include/opencv2/ts.hpp b/modules/ts/include/opencv2/ts.hpp
+index 41a76b13e..205646140 100644
+--- a/modules/ts/include/opencv2/ts.hpp
++++ b/modules/ts/include/opencv2/ts.hpp
+@@ -555,7 +555,7 @@ protected:
+ }
+ };
+
+-extern uint64 param_seed;
++CV_EXPORTS extern uint64 param_seed;
+
+ struct CV_EXPORTS DefaultRngAuto
+ {
+@@ -611,14 +611,14 @@ CV_EXPORTS std::string findDataFile(const std::string& relative_path, bool requi
+
+ #ifdef HAVE_OPENCL
+ namespace ocl {
+-void dumpOpenCLDevice();
++CV_EXPORTS void dumpOpenCLDevice();
+ }
+ #define TEST_DUMP_OCL_INFO cvtest::ocl::dumpOpenCLDevice();
+ #else
+ #define TEST_DUMP_OCL_INFO
+ #endif
+
+-void parseCustomOptions(int argc, char **argv);
++CV_EXPORTS void parseCustomOptions(int argc, char **argv);
+
+ #define CV_TEST_INIT0_NOOP (void)0
+
+diff --git a/modules/ts/include/opencv2/ts/ocl_test.hpp b/modules/ts/include/opencv2/ts/ocl_test.hpp
+index 54b33ece8..ef56bf9ef 100644
+--- a/modules/ts/include/opencv2/ts/ocl_test.hpp
++++ b/modules/ts/include/opencv2/ts/ocl_test.hpp
+@@ -82,7 +82,7 @@ inline UMat ToUMat(InputArray src)
+ return dst;
+ }
+
+-extern int test_loop_times;
++CV_EXPORTS extern int test_loop_times;
+
+ #define MAX_VALUE 357
+
+diff --git a/modules/ts/include/opencv2/ts/ts_ext.hpp b/modules/ts/include/opencv2/ts/ts_ext.hpp
+index 0bdd346dd..2cd34dfce 100644
+--- a/modules/ts/include/opencv2/ts/ts_ext.hpp
++++ b/modules/ts/include/opencv2/ts/ts_ext.hpp
+@@ -9,7 +9,7 @@
+ #define OPENCV_TS_EXT_HPP
+
+ namespace cvtest {
+-void checkIppStatus();
++CV_EXPORTS void checkIppStatus();
+ }
+
+ #define CV_TEST_INIT \
+--
+2.13.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-imgproc-test-add-checks-for-remove-call.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-imgproc-test-add-checks-for-remove-call.patch
new file mode 100644
index 000000000..5f4a60c96
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0003-imgproc-test-add-checks-for-remove-call.patch
@@ -0,0 +1,186 @@
+Upstream-Status: Backport [https://github.com/opencv/opencv/pull/9376/commits/78a310630fb0a1f6d089576202343e672f27609d]
+
+Fix CVEs for opencv 3.3.
+
+* CVE-2017-12597
+* CVE-2017-12598
+* CVE-2017-12599
+* CVE-2017-12600
+* CVE-2017-12601
+* CVE-2017-12602
+* CVE-2017-12603
+* CVE-2017-12604
+* CVE-2017-12605
+* CVE-2017-12606
+* CVE-2017-12862
+* CVE-2017-12863
+* CVE-2017-12864
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 78a310630fb0a1f6d089576202343e672f27609d Mon Sep 17 00:00:00 2001
+From: Alexander Alekhin <alexander.alekhin@intel.com>
+Date: Wed, 16 Aug 2017 13:53:12 +0300
+Subject: [PATCH 3/3] imgproc(test): add checks for remove() call
+
+---
+ modules/imgcodecs/test/test_grfmt.cpp | 2 +-
+ modules/imgcodecs/test/test_jpeg.cpp | 12 ++++++------
+ modules/imgcodecs/test/test_png.cpp | 2 +-
+ modules/imgcodecs/test/test_read_write.cpp | 4 ++--
+ modules/imgcodecs/test/test_tiff.cpp | 8 ++++----
+ modules/imgcodecs/test/test_webp.cpp | 6 +++---
+ 6 files changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/modules/imgcodecs/test/test_grfmt.cpp b/modules/imgcodecs/test/test_grfmt.cpp
+index 64a0c1e3a..74b72c3b3 100644
+--- a/modules/imgcodecs/test/test_grfmt.cpp
++++ b/modules/imgcodecs/test/test_grfmt.cpp
+@@ -175,7 +175,7 @@ TEST_P(Imgcodecs_ExtSize, write_imageseq)
+ EXPECT_LT(n, 1.);
+ EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), img, img_gt);
+ }
+- remove(filename.c_str());
++ EXPECT_EQ(0, remove(filename.c_str()));
+ }
+ }
+
+diff --git a/modules/imgcodecs/test/test_jpeg.cpp b/modules/imgcodecs/test/test_jpeg.cpp
+index 5546f2d91..6ddb02840 100644
+--- a/modules/imgcodecs/test/test_jpeg.cpp
++++ b/modules/imgcodecs/test/test_jpeg.cpp
+@@ -123,8 +123,8 @@ TEST(Imgcodecs_Jpeg, encode_decode_progressive_jpeg)
+
+ EXPECT_EQ(0, cvtest::norm(img_jpg_progressive, img_jpg_normal, NORM_INF));
+
+- remove(output_progressive.c_str());
+- remove(output_normal.c_str());
++ EXPECT_EQ(0, remove(output_progressive.c_str()));
++ EXPECT_EQ(0, remove(output_normal.c_str()));
+ }
+
+ TEST(Imgcodecs_Jpeg, encode_decode_optimize_jpeg)
+@@ -148,8 +148,8 @@ TEST(Imgcodecs_Jpeg, encode_decode_optimize_jpeg)
+
+ EXPECT_EQ(0, cvtest::norm(img_jpg_optimized, img_jpg_normal, NORM_INF));
+
+- remove(output_optimized.c_str());
+- remove(output_normal.c_str());
++ EXPECT_EQ(0, remove(output_optimized.c_str()));
++ EXPECT_EQ(0, remove(output_normal.c_str()));
+ }
+
+ TEST(Imgcodecs_Jpeg, encode_decode_rst_jpeg)
+@@ -173,8 +173,8 @@ TEST(Imgcodecs_Jpeg, encode_decode_rst_jpeg)
+
+ EXPECT_EQ(0, cvtest::norm(img_jpg_rst, img_jpg_normal, NORM_INF));
+
+- remove(output_rst.c_str());
+- remove(output_normal.c_str());
++ EXPECT_EQ(0, remove(output_rst.c_str()));
++ EXPECT_EQ(0, remove(output_normal.c_str()));
+ }
+
+ #endif // HAVE_JPEG
+diff --git a/modules/imgcodecs/test/test_png.cpp b/modules/imgcodecs/test/test_png.cpp
+index c46f90119..4e97043e1 100644
+--- a/modules/imgcodecs/test/test_png.cpp
++++ b/modules/imgcodecs/test/test_png.cpp
+@@ -17,7 +17,7 @@ TEST(Imgcodecs_Png, write_big)
+ EXPECT_EQ(13043, img.cols);
+ EXPECT_EQ(13917, img.rows);
+ ASSERT_NO_THROW(imwrite(dst_file, img));
+- remove(dst_file.c_str());
++ EXPECT_EQ(0, remove(dst_file.c_str()));
+ }
+
+ TEST(Imgcodecs_Png, encode)
+diff --git a/modules/imgcodecs/test/test_read_write.cpp b/modules/imgcodecs/test/test_read_write.cpp
+index 38f10225f..5119813bf 100644
+--- a/modules/imgcodecs/test/test_read_write.cpp
++++ b/modules/imgcodecs/test/test_read_write.cpp
+@@ -50,7 +50,7 @@ TEST(Imgcodecs_Image, read_write_bmp)
+ psnr = cvtest::PSNR(buf_loaded, image);
+ EXPECT_GT(psnr, thresDbell);
+
+- remove(dst_name.c_str());
++ EXPECT_EQ(0, remove(dst_name.c_str()));
+ }
+ }
+
+@@ -95,7 +95,7 @@ TEST_P(Imgcodecs_Image, read_write)
+ psnr = cvtest::PSNR(buf_loaded, image);
+ EXPECT_GT(psnr, thresDbell);
+
+- remove(full_name.c_str());
++ EXPECT_EQ(0, remove(full_name.c_str()));
+ }
+
+ const string exts[] = {
+diff --git a/modules/imgcodecs/test/test_tiff.cpp b/modules/imgcodecs/test/test_tiff.cpp
+index 0264da4cd..6ef0c1748 100644
+--- a/modules/imgcodecs/test/test_tiff.cpp
++++ b/modules/imgcodecs/test/test_tiff.cpp
+@@ -41,8 +41,8 @@ TEST(Imgcodecs_Tiff, decode_tile16384x16384)
+ // not enough memory
+ }
+
+- remove(file3.c_str());
+- remove(file4.c_str());
++ EXPECT_EQ(0, remove(file3.c_str()));
++ EXPECT_EQ(0, remove(file4.c_str()));
+ }
+
+ TEST(Imgcodecs_Tiff, write_read_16bit_big_little_endian)
+@@ -88,7 +88,7 @@ TEST(Imgcodecs_Tiff, write_read_16bit_big_little_endian)
+ EXPECT_EQ(0xDEAD, img.at<ushort>(0,0));
+ EXPECT_EQ(0xBEEF, img.at<ushort>(0,1));
+
+- remove(filename.c_str());
++ EXPECT_EQ(0, remove(filename.c_str()));
+ }
+ }
+
+@@ -143,7 +143,7 @@ TEST(Imgcodecs_Tiff, decode_infinite_rowsperstrip)
+
+ EXPECT_NO_THROW(cv::imread(filename, IMREAD_UNCHANGED));
+
+- remove(filename.c_str());
++ EXPECT_EQ(0, remove(filename.c_str()));
+ }
+
+ //==================================================================================================
+diff --git a/modules/imgcodecs/test/test_webp.cpp b/modules/imgcodecs/test/test_webp.cpp
+index 6d40ce21e..d82fdd289 100644
+--- a/modules/imgcodecs/test/test_webp.cpp
++++ b/modules/imgcodecs/test/test_webp.cpp
+@@ -44,7 +44,7 @@ TEST(Imgcodecs_WebP, encode_decode_lossless_webp)
+ }
+ }
+
+- remove(output.c_str());
++ EXPECT_EQ(0, remove(output.c_str()));
+
+ cv::Mat decode = cv::imdecode(buf, IMREAD_COLOR);
+ ASSERT_FALSE(decode.empty());
+@@ -71,7 +71,7 @@ TEST(Imgcodecs_WebP, encode_decode_lossy_webp)
+
+ EXPECT_NO_THROW(cv::imwrite(output, img, params));
+ cv::Mat img_webp = cv::imread(output);
+- remove(output.c_str());
++ EXPECT_EQ(0, remove(output.c_str()));
+ EXPECT_FALSE(img_webp.empty());
+ EXPECT_EQ(3, img_webp.channels());
+ EXPECT_EQ(512, img_webp.cols);
+@@ -96,7 +96,7 @@ TEST(Imgcodecs_WebP, encode_decode_with_alpha_webp)
+
+ EXPECT_NO_THROW(cv::imwrite(output, img));
+ cv::Mat img_webp = cv::imread(output);
+- remove(output.c_str());
++ EXPECT_EQ(0, remove(output.c_str()));
+ EXPECT_FALSE(img_webp.empty());
+ EXPECT_EQ(4, img_webp.channels());
+ EXPECT_EQ(512, img_webp.cols);
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/CVE-2017-14136.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/CVE-2017-14136.patch
new file mode 100644
index 000000000..7ad50a2d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/CVE-2017-14136.patch
@@ -0,0 +1,288 @@
+Upstream-Status: Backport [https://github.com/opencv/opencv/pull/9448/commits/aacae20]
+
+Backport patch to fix CVE-2017-14136.
+
+Ref: https://github.com/opencv/opencv/issues/9443
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From aacae2065744adb05e858d327198c7bbe7f452b0 Mon Sep 17 00:00:00 2001
+From: Alexander Alekhin <alexander.alekhin@intel.com>
+Date: Wed, 23 Aug 2017 15:15:27 +0300
+Subject: [PATCH] imgcodesc: fix code problems with integer overflow / address
+ arithmetic / UB
+
+---
+ modules/imgcodecs/src/grfmt_bmp.cpp | 8 ++---
+ modules/imgcodecs/src/grfmt_exr.cpp | 10 +++----
+ modules/imgcodecs/src/grfmt_jpeg.cpp | 2 +-
+ modules/imgcodecs/src/grfmt_jpeg2000.cpp | 6 ++--
+ modules/imgcodecs/src/grfmt_pam.cpp | 2 +-
+ modules/imgcodecs/src/grfmt_sunras.cpp | 6 ++--
+ modules/imgcodecs/src/utils.cpp | 51 +++++++++++++++++++-------------
+ modules/imgcodecs/src/utils.hpp | 2 ++
+ 8 files changed, 50 insertions(+), 37 deletions(-)
+
+diff --git a/modules/imgcodecs/src/grfmt_bmp.cpp b/modules/imgcodecs/src/grfmt_bmp.cpp
+index 257f97c2d8b..69768e276a3 100644
+--- a/modules/imgcodecs/src/grfmt_bmp.cpp
++++ b/modules/imgcodecs/src/grfmt_bmp.cpp
+@@ -193,7 +193,7 @@ bool BmpDecoder::readHeader()
+ bool BmpDecoder::readData( Mat& img )
+ {
+ uchar* data = img.ptr();
+- int step = (int)img.step;
++ int step = validateToInt(img.step);
+ bool color = img.channels() > 1;
+ uchar gray_palette[256] = {0};
+ bool result = false;
+@@ -206,7 +206,7 @@ bool BmpDecoder::readData( Mat& img )
+
+ if( m_origin == IPL_ORIGIN_BL )
+ {
+- data += (m_height - 1)*step;
++ data += (m_height - 1)*(size_t)step;
+ step = -step;
+ }
+
+@@ -530,7 +530,7 @@ bool BmpEncoder::write( const Mat& img, const std::vector<int>& )
+ int bitmapHeaderSize = 40;
+ int paletteSize = channels > 1 ? 0 : 1024;
+ int headerSize = 14 /* fileheader */ + bitmapHeaderSize + paletteSize;
+- int fileSize = fileStep*height + headerSize;
++ size_t fileSize = (size_t)fileStep*height + headerSize;
+ PaletteEntry palette[256];
+
+ if( m_buf )
+@@ -540,7 +540,7 @@ bool BmpEncoder::write( const Mat& img, const std::vector<int>& )
+ strm.putBytes( fmtSignBmp, (int)strlen(fmtSignBmp) );
+
+ // write file header
+- strm.putDWord( fileSize ); // file size
++ strm.putDWord( validateToInt(fileSize) ); // file size
+ strm.putDWord( 0 );
+ strm.putDWord( headerSize );
+
+diff --git a/modules/imgcodecs/src/grfmt_exr.cpp b/modules/imgcodecs/src/grfmt_exr.cpp
+index 0d2ae9fa7d2..78ffe6c7668 100644
+--- a/modules/imgcodecs/src/grfmt_exr.cpp
++++ b/modules/imgcodecs/src/grfmt_exr.cpp
+@@ -195,7 +195,7 @@ bool ExrDecoder::readData( Mat& img )
+ bool color = img.channels() > 1;
+
+ uchar* data = img.ptr();
+- int step = img.step;
++ size_t step = img.step;
+ bool justcopy = m_native_depth;
+ bool chromatorgb = false;
+ bool rgbtogray = false;
+@@ -203,8 +203,8 @@ bool ExrDecoder::readData( Mat& img )
+ FrameBuffer frame;
+ int xsample[3] = {1, 1, 1};
+ char *buffer;
+- int xstep;
+- int ystep;
++ size_t xstep = 0;
++ size_t ystep = 0;
+
+ xstep = m_native_depth ? 4 : 1;
+
+@@ -593,7 +593,7 @@ bool ExrEncoder::write( const Mat& img, const std::vector<int>& )
+ bool issigned = depth == CV_8S || depth == CV_16S || depth == CV_32S;
+ bool isfloat = depth == CV_32F || depth == CV_64F;
+ depth = CV_ELEM_SIZE1(depth)*8;
+- const int step = img.step;
++ const size_t step = img.step;
+
+ Header header( width, height );
+ Imf::PixelType type;
+@@ -623,7 +623,7 @@ bool ExrEncoder::write( const Mat& img, const std::vector<int>& )
+ FrameBuffer frame;
+
+ char *buffer;
+- int bufferstep;
++ size_t bufferstep;
+ int size;
+ if( type == FLOAT && depth == 32 )
+ {
+diff --git a/modules/imgcodecs/src/grfmt_jpeg.cpp b/modules/imgcodecs/src/grfmt_jpeg.cpp
+index ce942ca1995..caf768d2569 100644
+--- a/modules/imgcodecs/src/grfmt_jpeg.cpp
++++ b/modules/imgcodecs/src/grfmt_jpeg.cpp
+@@ -396,7 +396,7 @@ int my_jpeg_load_dht (struct jpeg_decompress_struct *info, unsigned char *dht,
+ bool JpegDecoder::readData( Mat& img )
+ {
+ volatile bool result = false;
+- int step = (int)img.step;
++ size_t step = img.step;
+ bool color = img.channels() > 1;
+
+ if( m_state && m_width && m_height )
+diff --git a/modules/imgcodecs/src/grfmt_jpeg2000.cpp b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
+index 950ec21375f..24dfb38bb9d 100644
+--- a/modules/imgcodecs/src/grfmt_jpeg2000.cpp
++++ b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
+@@ -156,7 +156,7 @@ bool Jpeg2KDecoder::readData( Mat& img )
+ bool result = false;
+ int color = img.channels() > 1;
+ uchar* data = img.ptr();
+- int step = (int)img.step;
++ size_t step = img.step;
+ jas_stream_t* stream = (jas_stream_t*)m_stream;
+ jas_image_t* image = (jas_image_t*)m_image;
+
+@@ -252,9 +252,9 @@ bool Jpeg2KDecoder::readData( Mat& img )
+ if( !jas_image_readcmpt( image, cmptlut[i], 0, 0, xend / xstep, yend / ystep, buffer ))
+ {
+ if( img.depth() == CV_8U )
+- result = readComponent8u( data + i, buffer, step, cmptlut[i], maxval, offset, ncmpts );
++ result = readComponent8u( data + i, buffer, validateToInt(step), cmptlut[i], maxval, offset, ncmpts );
+ else
+- result = readComponent16u( ((unsigned short *)data) + i, buffer, step / 2, cmptlut[i], maxval, offset, ncmpts );
++ result = readComponent16u( ((unsigned short *)data) + i, buffer, validateToInt(step / 2), cmptlut[i], maxval, offset, ncmpts );
+ if( !result )
+ {
+ i = ncmpts;
+diff --git a/modules/imgcodecs/src/grfmt_pam.cpp b/modules/imgcodecs/src/grfmt_pam.cpp
+index 11195dc342c..8eb9e012309 100644
+--- a/modules/imgcodecs/src/grfmt_pam.cpp
++++ b/modules/imgcodecs/src/grfmt_pam.cpp
+@@ -479,7 +479,7 @@ bool PAMDecoder::readData( Mat& img )
+ {
+ uchar* data = img.ptr();
+ int target_channels = img.channels();
+- int imp_stride = (int)img.step;
++ size_t imp_stride = img.step;
+ int sample_depth = CV_ELEM_SIZE1(m_type);
+ int src_elems_per_row = m_width*m_channels;
+ int src_stride = src_elems_per_row*sample_depth;
+diff --git a/modules/imgcodecs/src/grfmt_sunras.cpp b/modules/imgcodecs/src/grfmt_sunras.cpp
+index aca9b369318..6d448f94ed3 100644
+--- a/modules/imgcodecs/src/grfmt_sunras.cpp
++++ b/modules/imgcodecs/src/grfmt_sunras.cpp
+@@ -160,7 +160,7 @@ bool SunRasterDecoder::readData( Mat& img )
+ {
+ int color = img.channels() > 1;
+ uchar* data = img.ptr();
+- int step = (int)img.step;
++ size_t step = img.step;
+ uchar gray_palette[256] = {0};
+ bool result = false;
+ int src_pitch = ((m_width*m_bpp + 7)/8 + 1) & -2;
+@@ -308,11 +308,11 @@ bool SunRasterDecoder::readData( Mat& img )
+ code = m_strm.getByte();
+
+ if( color )
+- data = FillUniColor( data, line_end, step, width3,
++ data = FillUniColor( data, line_end, validateToInt(step), width3,
+ y, m_height, len,
+ m_palette[code] );
+ else
+- data = FillUniGray( data, line_end, step, width3,
++ data = FillUniGray( data, line_end, validateToInt(step), width3,
+ y, m_height, len,
+ gray_palette[code] );
+ if( y >= m_height )
+diff --git a/modules/imgcodecs/src/utils.cpp b/modules/imgcodecs/src/utils.cpp
+index 2ee5bafc712..474dae008ca 100644
+--- a/modules/imgcodecs/src/utils.cpp
++++ b/modules/imgcodecs/src/utils.cpp
+@@ -42,6 +42,13 @@
+ #include "precomp.hpp"
+ #include "utils.hpp"
+
++int validateToInt(size_t sz)
++{
++ int valueInt = (int)sz;
++ CV_Assert((size_t)valueInt == sz);
++ return valueInt;
++}
++
+ #define SCALE 14
+ #define cR (int)(0.299*(1 << SCALE) + 0.5)
+ #define cG (int)(0.587*(1 << SCALE) + 0.5)
+@@ -537,23 +544,25 @@ uchar* FillColorRow1( uchar* data, uchar* indices, int len, PaletteEntry* palett
+ {
+ uchar* end = data + len*3;
+
++ const PaletteEntry p0 = palette[0], p1 = palette[1];
++
+ while( (data += 24) < end )
+ {
+ int idx = *indices++;
+- *((PaletteEntry*)(data - 24)) = palette[(idx & 128) != 0];
+- *((PaletteEntry*)(data - 21)) = palette[(idx & 64) != 0];
+- *((PaletteEntry*)(data - 18)) = palette[(idx & 32) != 0];
+- *((PaletteEntry*)(data - 15)) = palette[(idx & 16) != 0];
+- *((PaletteEntry*)(data - 12)) = palette[(idx & 8) != 0];
+- *((PaletteEntry*)(data - 9)) = palette[(idx & 4) != 0];
+- *((PaletteEntry*)(data - 6)) = palette[(idx & 2) != 0];
+- *((PaletteEntry*)(data - 3)) = palette[(idx & 1) != 0];
++ *((PaletteEntry*)(data - 24)) = (idx & 128) ? p1 : p0;
++ *((PaletteEntry*)(data - 21)) = (idx & 64) ? p1 : p0;
++ *((PaletteEntry*)(data - 18)) = (idx & 32) ? p1 : p0;
++ *((PaletteEntry*)(data - 15)) = (idx & 16) ? p1 : p0;
++ *((PaletteEntry*)(data - 12)) = (idx & 8) ? p1 : p0;
++ *((PaletteEntry*)(data - 9)) = (idx & 4) ? p1 : p0;
++ *((PaletteEntry*)(data - 6)) = (idx & 2) ? p1 : p0;
++ *((PaletteEntry*)(data - 3)) = (idx & 1) ? p1 : p0;
+ }
+
+- int idx = indices[0] << 24;
++ int idx = indices[0];
+ for( data -= 24; data < end; data += 3, idx += idx )
+ {
+- PaletteEntry clr = palette[idx < 0];
++ const PaletteEntry clr = (idx & 128) ? p1 : p0;
+ WRITE_PIX( data, clr );
+ }
+
+@@ -565,23 +574,25 @@ uchar* FillGrayRow1( uchar* data, uchar* indices, int len, uchar* palette )
+ {
+ uchar* end = data + len;
+
++ const uchar p0 = palette[0], p1 = palette[1];
++
+ while( (data += 8) < end )
+ {
+ int idx = *indices++;
+- *((uchar*)(data - 8)) = palette[(idx & 128) != 0];
+- *((uchar*)(data - 7)) = palette[(idx & 64) != 0];
+- *((uchar*)(data - 6)) = palette[(idx & 32) != 0];
+- *((uchar*)(data - 5)) = palette[(idx & 16) != 0];
+- *((uchar*)(data - 4)) = palette[(idx & 8) != 0];
+- *((uchar*)(data - 3)) = palette[(idx & 4) != 0];
+- *((uchar*)(data - 2)) = palette[(idx & 2) != 0];
+- *((uchar*)(data - 1)) = palette[(idx & 1) != 0];
++ *((uchar*)(data - 8)) = (idx & 128) ? p1 : p0;
++ *((uchar*)(data - 7)) = (idx & 64) ? p1 : p0;
++ *((uchar*)(data - 6)) = (idx & 32) ? p1 : p0;
++ *((uchar*)(data - 5)) = (idx & 16) ? p1 : p0;
++ *((uchar*)(data - 4)) = (idx & 8) ? p1 : p0;
++ *((uchar*)(data - 3)) = (idx & 4) ? p1 : p0;
++ *((uchar*)(data - 2)) = (idx & 2) ? p1 : p0;
++ *((uchar*)(data - 1)) = (idx & 1) ? p1 : p0;
+ }
+
+- int idx = indices[0] << 24;
++ int idx = indices[0];
+ for( data -= 8; data < end; data++, idx += idx )
+ {
+- data[0] = palette[idx < 0];
++ data[0] = (idx & 128) ? p1 : p0;
+ }
+
+ return data;
+diff --git a/modules/imgcodecs/src/utils.hpp b/modules/imgcodecs/src/utils.hpp
+index cab10609db2..7af4c6174ee 100644
+--- a/modules/imgcodecs/src/utils.hpp
++++ b/modules/imgcodecs/src/utils.hpp
+@@ -42,6 +42,8 @@
+ #ifndef _UTILS_H_
+ #define _UTILS_H_
+
++int validateToInt(size_t step);
++
+ struct PaletteEntry
+ {
+ unsigned char b, g, r, a;
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/already-exists.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/already-exists.patch
new file mode 100644
index 000000000..6e24f2de8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/already-exists.patch
@@ -0,0 +1,394 @@
+From e4bf148cddf277834e57c9afeec8daff8378a655 Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+Date: Wed, 22 Nov 2017 15:27:07 +0100
+Subject: [PATCH] Fix: File already exists in database: caffe.proto
+
+Fixes error when importing python cv
+
+Upstream-status: Backport https://github.com/opencv/opencv/pull/10092
+Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
+---
+ modules/dnn/CMakeLists.txt | 6 +++---
+ modules/dnn/src/caffe/caffe_importer.cpp | 1 -
+ modules/dnn/src/caffe/caffe_io.cpp | 1 -
+ modules/dnn/src/caffe/caffe_io.hpp | 2 +-
+ modules/dnn/src/caffe/{caffe.proto => opencv-caffe.proto} | 0
+ 5 files changed, 4 insertions(+), 6 deletions(-)
+ rename modules/dnn/src/caffe/{caffe.proto => opencv-caffe.proto} (100%)
+
+diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
+index c6329a742263..8ef00ef983ff 100644
+--- a/modules/dnn/CMakeLists.txt
++++ b/modules/dnn/CMakeLists.txt
+@@ -55,13 +55,13 @@ ocv_warnings_disable(CMAKE_CXX_FLAGS
+
+ if(PROTOBUF_UPDATE_FILES)
+ file(GLOB proto_files src/tensorflow/*.proto)
+- list(APPEND proto_files src/caffe/caffe.proto)
++ list(APPEND proto_files src/caffe/opencv-caffe.proto)
+ PROTOBUF_GENERATE_CPP(Protobuf_HDRS Protobuf_SRCS ${proto_files})
+ else()
+ file(GLOB fw_srcs ${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.cc)
+ file(GLOB fw_hdrs ${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.h)
+- list(APPEND fw_srcs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.cc)
+- list(APPEND fw_hdrs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.h)
++ list(APPEND fw_srcs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.cc)
++ list(APPEND fw_hdrs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.h)
+ list(APPEND Protobuf_SRCS ${fw_srcs})
+ list(APPEND Protobuf_HDRS ${fw_hdrs})
+ list(APPEND Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe)
+diff --git a/modules/dnn/src/caffe/caffe_importer.cpp b/modules/dnn/src/caffe/caffe_importer.cpp
+index c075651b95b3..2c977c84b0f4 100644
+--- a/modules/dnn/src/caffe/caffe_importer.cpp
++++ b/modules/dnn/src/caffe/caffe_importer.cpp
+@@ -42,7 +42,6 @@
+ #include "../precomp.hpp"
+
+ #ifdef HAVE_PROTOBUF
+-#include "caffe.pb.h"
+
+ #include <iostream>
+ #include <fstream>
+diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
+index 0f46ea77df9a..1d3c518f1328 100644
+--- a/modules/dnn/src/caffe/caffe_io.cpp
++++ b/modules/dnn/src/caffe/caffe_io.cpp
+@@ -99,7 +99,6 @@
+ #include <fstream>
+ #include <vector>
+
+-#include "caffe.pb.h"
+ #include "caffe_io.hpp"
+ #include "glog_emulator.hpp"
+
+diff --git a/modules/dnn/src/caffe/caffe_io.hpp b/modules/dnn/src/caffe/caffe_io.hpp
+index 09bc5709a24e..f5912c3bcec1 100644
+--- a/modules/dnn/src/caffe/caffe_io.hpp
++++ b/modules/dnn/src/caffe/caffe_io.hpp
+@@ -91,7 +91,7 @@
+ #define __OPENCV_DNN_CAFFE_IO_HPP__
+ #ifdef HAVE_PROTOBUF
+
+-#include "caffe.pb.h"
++#include "opencv-caffe.pb.h"
+
+ namespace cv {
+ namespace dnn {
+diff --git a/modules/dnn/src/caffe/caffe.proto b/modules/dnn/src/caffe/opencv-caffe.proto
+similarity index 100%
+rename from modules/dnn/src/caffe/caffe.proto
+rename to modules/dnn/src/caffe/opencv-caffe.proto
+diff --git a/modules/dnn/src/layers/detection_output_layer.cpp b/modules/dnn/src/layers/detection_output_layer.cpp
+index 0b72326f7e7d..f413bad5b81a 100644
+--- a/modules/dnn/src/layers/detection_output_layer.cpp
++++ b/modules/dnn/src/layers/detection_output_layer.cpp
+@@ -44,7 +44,7 @@
+ #include "layers_common.hpp"
+ #include <float.h>
+ #include <string>
+-#include <caffe.pb.h>
++#include <opencv-caffe.pb.h>
+
+ namespace cv
+ {
+diff --git a/modules/dnn/src/caffe/caffe_importer.cpp b/modules/dnn/src/caffe/caffe_importer.cpp
+index 2c977c84b0f4..a1827a381117 100644
+--- a/modules/dnn/src/caffe/caffe_importer.cpp
++++ b/modules/dnn/src/caffe/caffe_importer.cpp
+@@ -78,8 +78,8 @@ static cv::String toString(const T &v)
+
+ class CaffeImporter : public Importer
+ {
+- caffe::NetParameter net;
+- caffe::NetParameter netBinary;
++ opencvcaffe::NetParameter net;
++ opencvcaffe::NetParameter netBinary;
+
+ public:
+
+@@ -197,7 +197,7 @@ public:
+ }
+ }
+
+- void blobShapeFromProto(const caffe::BlobProto &pbBlob, MatShape& shape)
++ void blobShapeFromProto(const opencvcaffe::BlobProto &pbBlob, MatShape& shape)
+ {
+ shape.clear();
+ if (pbBlob.has_num() || pbBlob.has_channels() || pbBlob.has_height() || pbBlob.has_width())
+@@ -209,7 +209,7 @@ public:
+ }
+ else if (pbBlob.has_shape())
+ {
+- const caffe::BlobShape &_shape = pbBlob.shape();
++ const opencvcaffe::BlobShape &_shape = pbBlob.shape();
+
+ for (int i = 0; i < _shape.dim_size(); i++)
+ shape.push_back((int)_shape.dim(i));
+@@ -218,7 +218,7 @@ public:
+ CV_Error(Error::StsError, "Unknown shape of input blob");
+ }
+
+- void blobFromProto(const caffe::BlobProto &pbBlob, cv::Mat &dstBlob)
++ void blobFromProto(const opencvcaffe::BlobProto &pbBlob, cv::Mat &dstBlob)
+ {
+ MatShape shape;
+ blobShapeFromProto(pbBlob, shape);
+@@ -233,7 +233,7 @@ public:
+ dstData[i] = pbBlob.data(i);
+ }
+
+- void extractBinaryLayerParms(const caffe::LayerParameter& layer, LayerParams& layerParams)
++ void extractBinaryLayerParms(const opencvcaffe::LayerParameter& layer, LayerParams& layerParams)
+ {
+ const std::string &name = layer.name();
+
+@@ -247,7 +247,7 @@ public:
+ if (li == netBinary.layer_size() || netBinary.layer(li).blobs_size() == 0)
+ return;
+
+- const caffe::LayerParameter &binLayer = netBinary.layer(li);
++ const opencvcaffe::LayerParameter &binLayer = netBinary.layer(li);
+ layerParams.blobs.resize(binLayer.blobs_size());
+ for (int bi = 0; bi < binLayer.blobs_size(); bi++)
+ {
+@@ -289,7 +289,7 @@ public:
+
+ for (int li = 0; li < layersSize; li++)
+ {
+- const caffe::LayerParameter &layer = net.layer(li);
++ const opencvcaffe::LayerParameter &layer = net.layer(li);
+ String name = layer.name();
+ String type = layer.type();
+ LayerParams layerParams;
+@@ -313,7 +313,7 @@ public:
+ addedBlobs.clear();
+ }
+
+- void addOutput(const caffe::LayerParameter &layer, int layerId, int outNum)
++ void addOutput(const opencvcaffe::LayerParameter &layer, int layerId, int outNum)
+ {
+ const std::string &name = layer.top(outNum);
+
+diff --git a/modules/dnn/src/caffe/caffe_io.hpp b/modules/dnn/src/caffe/caffe_io.hpp
+index f5912c3bcec1..24cd5fa254eb 100644
+--- a/modules/dnn/src/caffe/caffe_io.hpp
++++ b/modules/dnn/src/caffe/caffe_io.hpp
+@@ -98,9 +98,9 @@ namespace dnn {
+
+ // Read parameters from a file into a NetParameter proto message.
+ void ReadNetParamsFromTextFileOrDie(const char* param_file,
+- caffe::NetParameter* param);
++ opencvcaffe::NetParameter* param);
+ void ReadNetParamsFromBinaryFileOrDie(const char* param_file,
+- caffe::NetParameter* param);
++ opencvcaffe::NetParameter* param);
+
+ }
+ }
+diff --git a/modules/dnn/src/caffe/opencv-caffe.proto b/modules/dnn/src/caffe/opencv-caffe.proto
+index 3d23fb48ea6a..df4e1d3269ae 100644
+--- a/modules/dnn/src/caffe/opencv-caffe.proto
++++ b/modules/dnn/src/caffe/opencv-caffe.proto
+@@ -48,7 +48,7 @@
+
+ syntax = "proto2";
+
+-package caffe;
++package opencvcaffe;
+
+ // Specifies the shape (dimensions) of a Blob.
+ message BlobShape {
+diff --git a/modules/dnn/src/layers/detection_output_layer.cpp b/modules/dnn/src/layers/detection_output_layer.cpp
+index f413bad5b81a..832c257eebf9 100644
+--- a/modules/dnn/src/layers/detection_output_layer.cpp
++++ b/modules/dnn/src/layers/detection_output_layer.cpp
+@@ -72,7 +72,7 @@ public:
+
+ int _backgroundLabelId;
+
+- typedef caffe::PriorBoxParameter_CodeType CodeType;
++ typedef opencvcaffe::PriorBoxParameter_CodeType CodeType;
+ CodeType _codeType;
+
+ bool _varianceEncodedInTarget;
+@@ -85,7 +85,7 @@ public:
+ enum { _numAxes = 4 };
+ static const std::string _layerName;
+
+- typedef std::map<int, std::vector<caffe::NormalizedBBox> > LabelBBox;
++ typedef std::map<int, std::vector<opencvcaffe::NormalizedBBox> > LabelBBox;
+
+ bool getParameterDict(const LayerParams &params,
+ const std::string &parameterName,
+@@ -131,11 +131,11 @@ public:
+ {
+ String codeTypeString = params.get<String>("code_type").toLowerCase();
+ if (codeTypeString == "corner")
+- _codeType = caffe::PriorBoxParameter_CodeType_CORNER;
++ _codeType = opencvcaffe::PriorBoxParameter_CodeType_CORNER;
+ else if (codeTypeString == "center_size")
+- _codeType = caffe::PriorBoxParameter_CodeType_CENTER_SIZE;
++ _codeType = opencvcaffe::PriorBoxParameter_CodeType_CENTER_SIZE;
+ else
+- _codeType = caffe::PriorBoxParameter_CodeType_CORNER;
++ _codeType = opencvcaffe::PriorBoxParameter_CodeType_CORNER;
+ }
+
+ DetectionOutputLayerImpl(const LayerParams &params)
+@@ -215,7 +215,7 @@ public:
+ GetConfidenceScores(confidenceData, num, numPriors, _numClasses, allConfidenceScores);
+
+ // Retrieve all prior bboxes
+- std::vector<caffe::NormalizedBBox> priorBBoxes;
++ std::vector<opencvcaffe::NormalizedBBox> priorBBoxes;
+ std::vector<std::vector<float> > priorVariances;
+ GetPriorBBoxes(priorData, numPriors, priorBBoxes, priorVariances);
+
+@@ -272,7 +272,7 @@ public:
+ for (size_t j = 0; j < indices.size(); ++j, ++count)
+ {
+ int idx = indices[j];
+- const caffe::NormalizedBBox& decode_bbox = label_bboxes->second[idx];
++ const opencvcaffe::NormalizedBBox& decode_bbox = label_bboxes->second[idx];
+ outputsData[count * 7] = i;
+ outputsData[count * 7 + 1] = label;
+ outputsData[count * 7 + 2] = scores[idx];
+@@ -355,7 +355,7 @@ public:
+
+ // Compute bbox size
+ template<bool normalized>
+- static float BBoxSize(const caffe::NormalizedBBox& bbox)
++ static float BBoxSize(const opencvcaffe::NormalizedBBox& bbox)
+ {
+ if (bbox.xmax() < bbox.xmin() || bbox.ymax() < bbox.ymin())
+ {
+@@ -388,10 +388,10 @@ public:
+ // Decode a bbox according to a prior bbox
+ template<bool variance_encoded_in_target>
+ static void DecodeBBox(
+- const caffe::NormalizedBBox& prior_bbox, const std::vector<float>& prior_variance,
++ const opencvcaffe::NormalizedBBox& prior_bbox, const std::vector<float>& prior_variance,
+ const CodeType code_type,
+- const bool clip_bbox, const caffe::NormalizedBBox& bbox,
+- caffe::NormalizedBBox& decode_bbox)
++ const bool clip_bbox, const opencvcaffe::NormalizedBBox& bbox,
++ opencvcaffe::NormalizedBBox& decode_bbox)
+ {
+ float bbox_xmin = variance_encoded_in_target ? bbox.xmin() : prior_variance[0] * bbox.xmin();
+ float bbox_ymin = variance_encoded_in_target ? bbox.ymin() : prior_variance[1] * bbox.ymin();
+@@ -399,13 +399,13 @@ public:
+ float bbox_ymax = variance_encoded_in_target ? bbox.ymax() : prior_variance[3] * bbox.ymax();
+ switch(code_type)
+ {
+- case caffe::PriorBoxParameter_CodeType_CORNER:
++ case opencvcaffe::PriorBoxParameter_CodeType_CORNER:
+ decode_bbox.set_xmin(prior_bbox.xmin() + bbox_xmin);
+ decode_bbox.set_ymin(prior_bbox.ymin() + bbox_ymin);
+ decode_bbox.set_xmax(prior_bbox.xmax() + bbox_xmax);
+ decode_bbox.set_ymax(prior_bbox.ymax() + bbox_ymax);
+ break;
+- case caffe::PriorBoxParameter_CodeType_CENTER_SIZE:
++ case opencvcaffe::PriorBoxParameter_CodeType_CENTER_SIZE:
+ {
+ float prior_width = prior_bbox.xmax() - prior_bbox.xmin();
+ CV_Assert(prior_width > 0);
+@@ -431,7 +431,7 @@ public:
+ };
+ if (clip_bbox)
+ {
+- // Clip the caffe::NormalizedBBox such that the range for each corner is [0, 1]
++ // Clip the opencvcaffe::NormalizedBBox such that the range for each corner is [0, 1]
+ decode_bbox.set_xmin(std::max(std::min(decode_bbox.xmin(), 1.f), 0.f));
+ decode_bbox.set_ymin(std::max(std::min(decode_bbox.ymin(), 1.f), 0.f));
+ decode_bbox.set_xmax(std::max(std::min(decode_bbox.xmax(), 1.f), 0.f));
+@@ -443,11 +443,11 @@ public:
+
+ // Decode a set of bboxes according to a set of prior bboxes
+ static void DecodeBBoxes(
+- const std::vector<caffe::NormalizedBBox>& prior_bboxes,
++ const std::vector<opencvcaffe::NormalizedBBox>& prior_bboxes,
+ const std::vector<std::vector<float> >& prior_variances,
+ const CodeType code_type, const bool variance_encoded_in_target,
+- const bool clip_bbox, const std::vector<caffe::NormalizedBBox>& bboxes,
+- std::vector<caffe::NormalizedBBox>& decode_bboxes)
++ const bool clip_bbox, const std::vector<opencvcaffe::NormalizedBBox>& bboxes,
++ std::vector<opencvcaffe::NormalizedBBox>& decode_bboxes)
+ {
+ CV_Assert(prior_bboxes.size() == prior_variances.size());
+ CV_Assert(prior_bboxes.size() == bboxes.size());
+@@ -470,7 +470,7 @@ public:
+
+ // Decode all bboxes in a batch
+ static void DecodeBBoxesAll(const std::vector<LabelBBox>& all_loc_preds,
+- const std::vector<caffe::NormalizedBBox>& prior_bboxes,
++ const std::vector<opencvcaffe::NormalizedBBox>& prior_bboxes,
+ const std::vector<std::vector<float> >& prior_variances,
+ const int num, const bool share_location,
+ const int num_loc_classes, const int background_label_id,
+@@ -503,10 +503,10 @@ public:
+ // Get prior bounding boxes from prior_data
+ // prior_data: 1 x 2 x num_priors * 4 x 1 blob.
+ // num_priors: number of priors.
+- // prior_bboxes: stores all the prior bboxes in the format of caffe::NormalizedBBox.
++ // prior_bboxes: stores all the prior bboxes in the format of opencvcaffe::NormalizedBBox.
+ // prior_variances: stores all the variances needed by prior bboxes.
+ static void GetPriorBBoxes(const float* priorData, const int& numPriors,
+- std::vector<caffe::NormalizedBBox>& priorBBoxes,
++ std::vector<opencvcaffe::NormalizedBBox>& priorBBoxes,
+ std::vector<std::vector<float> >& priorVariances)
+ {
+ priorBBoxes.clear(); priorBBoxes.resize(numPriors);
+@@ -514,7 +514,7 @@ public:
+ for (int i = 0; i < numPriors; ++i)
+ {
+ int startIdx = i * 4;
+- caffe::NormalizedBBox& bbox = priorBBoxes[i];
++ opencvcaffe::NormalizedBBox& bbox = priorBBoxes[i];
+ bbox.set_xmin(priorData[startIdx]);
+ bbox.set_ymin(priorData[startIdx + 1]);
+ bbox.set_xmax(priorData[startIdx + 2]);
+@@ -565,7 +565,7 @@ public:
+ {
+ labelBBox[label].resize(numPredsPerClass);
+ }
+- caffe::NormalizedBBox& bbox = labelBBox[label][p];
++ opencvcaffe::NormalizedBBox& bbox = labelBBox[label][p];
+ bbox.set_xmin(locData[startIdx + c * 4]);
+ bbox.set_ymin(locData[startIdx + c * 4 + 1]);
+ bbox.set_xmax(locData[startIdx + c * 4 + 2]);
+@@ -612,7 +612,7 @@ public:
+ // nms_threshold: a threshold used in non maximum suppression.
+ // top_k: if not -1, keep at most top_k picked indices.
+ // indices: the kept indices of bboxes after nms.
+- static void ApplyNMSFast(const std::vector<caffe::NormalizedBBox>& bboxes,
++ static void ApplyNMSFast(const std::vector<opencvcaffe::NormalizedBBox>& bboxes,
+ const std::vector<float>& scores, const float score_threshold,
+ const float nms_threshold, const float eta, const int top_k,
+ std::vector<int>& indices)
+@@ -674,10 +674,10 @@ public:
+
+ // Compute the jaccard (intersection over union IoU) overlap between two bboxes.
+ template<bool normalized>
+- static float JaccardOverlap(const caffe::NormalizedBBox& bbox1,
+- const caffe::NormalizedBBox& bbox2)
++ static float JaccardOverlap(const opencvcaffe::NormalizedBBox& bbox1,
++ const opencvcaffe::NormalizedBBox& bbox2)
+ {
+- caffe::NormalizedBBox intersect_bbox;
++ opencvcaffe::NormalizedBBox intersect_bbox;
+ if (bbox2.xmin() > bbox1.xmax() || bbox2.xmax() < bbox1.xmin() ||
+ bbox2.ymin() > bbox1.ymax() || bbox2.ymax() < bbox1.ymin())
+ {
+diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
+index 1d3c518f1328..3cf6e255aa60 100644
+--- a/modules/dnn/src/caffe/caffe_io.cpp
++++ b/modules/dnn/src/caffe/caffe_io.cpp
+@@ -107,7 +107,7 @@ namespace dnn {
+
+ using std::string;
+ using std::map;
+-using namespace caffe;
++using namespace opencvcaffe;
+ using namespace ::google::protobuf;
+ using namespace ::google::protobuf::io;
+
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fixpkgconfig.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fixpkgconfig.patch
new file mode 100644
index 000000000..3aeda7d44
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fixpkgconfig.patch
@@ -0,0 +1,29 @@
+diff --git a/cmake/OpenCVGenPkgconfig.cmake b/cmake/OpenCVGenPkgconfig.cmake
+index b8cb8777c06b..75281ee964fd 100644
+--- a/cmake/OpenCVGenPkgconfig.cmake
++++ b/cmake/OpenCVGenPkgconfig.cmake
+@@ -27,7 +27,7 @@ macro(fix_prefix lst isown)
+ get_filename_component(libdir "${item}" PATH)
+ get_filename_component(libname "${item}" NAME_WE)
+ string(REGEX REPLACE "^lib(.*)" "\\1" libname "${libname}")
+- list(APPEND _lst "-L${libdir}" "-l${libname}")
++ list(APPEND _lst "-l${libname}")
+ else()
+ list(APPEND _lst "-l${item}")
+ endif()
+@@ -66,10 +66,14 @@ ocv_list_unique(_3rdparty)
+
+ set(OPENCV_PC_LIBS
+ "-L\${exec_prefix}/${OPENCV_LIB_INSTALL_PATH}"
++ "-L\${exec_prefix}/${OPENCV_3P_LIB_INSTALL_PATH}"
+ "${_modules}"
+ )
+ if (BUILD_SHARED_LIBS)
+- set(OPENCV_PC_LIBS_PRIVATE "${_extra}")
++ set(OPENCV_PC_LIBS_PRIVATE
++ "-L\${exec_prefix}/${OPENCV_LIB_INSTALL_PATH}"
++ "${_extra}"
++ )
+ else()
+ set(OPENCV_PC_LIBS_PRIVATE
+ "-L\${exec_prefix}/${OPENCV_3P_LIB_INSTALL_PATH}"
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/javagen.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/javagen.patch
new file mode 100644
index 000000000..56526ecd8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/javagen.patch
@@ -0,0 +1,16 @@
+Upstream-status: Inappropriate [OE specific] https://github.com/opencv/opencv/pull/10039#issuecomment-342539288
+
+Signed-off-by: Ricardo Ribalda <ricardo.ribalda@gmail.com>
+diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt
+index 74bc0ef04169..4622fbf9a5f1 100644
+--- a/modules/java/CMakeLists.txt
++++ b/modules/java/CMakeLists.txt
+@@ -291,7 +291,7 @@ foreach(java_file ${step3_input_files})
+ endif()
+ if(__configure)
+ configure_file("${java_file}" "${java_src_dir}/${output_name}" @ONLY)
+- elseif(NOT "${java_file}" MATCHES "${OpenCV_BINARY_DIR}/")
++ elseif(EXISTS "${java_file}" AND NOT "${java_file}" MATCHES "${OpenCV_BINARY_DIR}/")
+ configure_file("${java_file}" "${java_src_dir}/${output_name}" COPYONLY)
+ else()
+ add_custom_command(OUTPUT "${java_src_dir}/${output_name}"
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/protobuf.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/protobuf.patch
new file mode 100644
index 000000000..c63dc142e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/protobuf.patch
@@ -0,0 +1,57 @@
+Upstream-status: Inappropriate [OE specific]
+
+Signed-off-by: Ricardo Ribalda <ricardo.ribalda@gmail.com>
+diff --git a/cmake/OpenCVFindLibProtobuf.cmake b/cmake/OpenCVFindLibProtobuf.cmake
+index b6ce1e7fd56b..e916ec0df2a6 100644
+--- a/cmake/OpenCVFindLibProtobuf.cmake
++++ b/cmake/OpenCVFindLibProtobuf.cmake
+@@ -7,21 +7,21 @@ OCV_OPTION(BUILD_PROTOBUF "Force to build libprotobuf from sources" ON)
+ OCV_OPTION(PROTOBUF_UPDATE_FILES "Force to rebuild .proto files" OFF)
+
+ if(PROTOBUF_UPDATE_FILES)
+- if(NOT DEFINED Protobuf_PROTOC_EXECUTABLE)
++ if(NOT DEFINED PROTOBUF_PROTOC_EXECUTABLE)
+ find_package(Protobuf QUIET)
+ endif()
+- if(DEFINED Protobuf_PROTOC_EXECUTABLE AND EXISTS ${Protobuf_PROTOC_EXECUTABLE})
+- message(STATUS "The protocol buffer compiler is found (${Protobuf_PROTOC_EXECUTABLE})")
++ if(DEFINED PROTOBUF_PROTOC_EXECUTABLE AND EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
++ message(STATUS "The protocol buffer compiler is found (${PROTOBUF_PROTOC_EXECUTABLE})")
+ else()
+- message(FATAL_ERROR "The protocol buffer compiler is not found (Protobuf_PROTOC_EXECUTABLE='${Protobuf_PROTOC_EXECUTABLE}')")
++ message(FATAL_ERROR "The protocol buffer compiler is not found (PROTOBUF_PROTOC_EXECUTABLE='${PROTOBUF_PROTOC_EXECUTABLE}')")
+ endif()
+ endif()
+
+-if(NOT BUILD_PROTOBUF AND NOT (DEFINED Protobuf_INCLUDE_DIRS AND DEFINED Protobuf_LIBRARIES))
++if(NOT BUILD_PROTOBUF AND NOT (DEFINED PROTOBUF_INCLUDE_DIR AND DEFINED PROTOBUF_LIBRARIES))
+ find_package(Protobuf QUIET)
+ endif()
+
+-if(Protobuf_FOUND)
++if(PROTOBUF_FOUND OR (DEFINED PROTOBUF_INCLUDE_DIR AND DEFINED PROTOBUF_LIBRARIES))
+ # nothing
+ else()
+ set(Protobuf_LIBRARIES libprotobuf)
+diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
+index 2a71568d1a44..c6329a742263 100644
+--- a/modules/dnn/CMakeLists.txt
++++ b/modules/dnn/CMakeLists.txt
+@@ -7,7 +7,7 @@ if(DEFINED BUILD_opencv_dnn AND NOT BUILD_opencv_dnn)
+ endif()
+
+ include(${OpenCV_SOURCE_DIR}/cmake/OpenCVFindLibProtobuf.cmake)
+-if(NOT Protobuf_FOUND)
++if(NOT PROTOBUF_FOUND)
+ ocv_module_disable(opencv_dnn)
+ endif()
+
+@@ -72,7 +72,7 @@ ocv_source_group("Src\\protobuf" FILES ${Protobuf_SRCS} ${Protobuf_HDRS})
+ ocv_module_include_directories(include ${Protobuf_INCLUDE_DIRS})
+
+ ocv_glob_module_sources(${Protobuf_SRCS} ${Protobuf_HDRS} ${CBLAS_H_PROXY_PATH})
+-ocv_create_module(${Protobuf_LIBRARIES} ${LAPACK_LIBRARIES})
++ocv_create_module(${PROTOBUF_LIBRARIES} ${LAPACK_LIBRARIES})
+ ocv_add_samples()
+ ocv_add_accuracy_tests()
+ ocv_add_perf_tests()
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/tinydnn.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/tinydnn.patch
new file mode 100644
index 000000000..c433fc312
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/tinydnn.patch
@@ -0,0 +1,34 @@
+Upstream-status: Inappropriate [OE specific]
+
+Signed-off-by: Ricardo Ribalda <ricardo.ribalda@gmail.com>
+diff --git a/modules/dnn_modern/CMakeLists.txt b/modules/dnn_modern/CMakeLists.txt
+index 79b64b12160b..ba06a0a163e4 100644
+--- a/modules/dnn_modern/CMakeLists.txt
++++ b/modules/dnn_modern/CMakeLists.txt
+@@ -15,24 +15,8 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+ # MODULE REQUIREMENTS
+ # ----------------------------------------------------------------------------
+
+-set(TINY_DNN_CPP_PATH "${OpenCV_BINARY_DIR}/3rdparty/tinydnn")
+-set(TINY_DNN_CPP_ROOT "${TINY_DNN_CPP_PATH}/tiny-dnn-1.0.0a3")
+-ocv_download(FILENAME "v1.0.0a3.tar.gz"
+- HASH "adb1c512e09ca2c7a6faef36f9c53e59"
+- URL
+- "${OPENCV_TINY_DNN_URL}"
+- "$ENV{OPENCV_TINY_DNN_URL}"
+- "https://github.com/tiny-dnn/tiny-dnn/archive/"
+- DESTINATION_DIR "${TINY_DNN_CPP_PATH}"
+- STATUS TINY_DNN_DOWNLOAD_SUCCESS
+- ID "tiny-dnn"
+- UNPACK RELATIVE_URL)
+-
+-if(NOT TINY_DNN_DOWNLOAD_SUCCESS)
+- message(STATUS "Failed to download tiny-dnn sources")
+-endif()
+-
+-find_package(TinyDNN QUIET)
++set(TINYDNN_INCLUDE_DIRS "${OpenCV_SOURCE_DIR}/3rdparty/tinydnn/tiny-dnn-1.0.0a3")
++set(TinyDNN_FOUND TRUE)
+
+ include(CheckCXXCompilerFlag)
+ CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/uselocalxfeatures.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/uselocalxfeatures.patch
new file mode 100644
index 000000000..fc273a891
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/uselocalxfeatures.patch
@@ -0,0 +1,20 @@
+diff --git a/modules/xfeatures2d/CMakeLists.txt b/modules/xfeatures2d/CMakeLists.txt
+index e1755595..c7009c47 100644
+--- a/modules/xfeatures2d/CMakeLists.txt
++++ b/modules/xfeatures2d/CMakeLists.txt
+@@ -5,10 +5,10 @@ ocv_define_module(xfeatures2d opencv_core opencv_imgproc opencv_features2d openc
+ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_vgg.cmake)
+ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_boostdesc.cmake)
+ set(DOWNLOAD_DIR "${OpenCV_BINARY_DIR}/downloads/xfeatures2d")
+-download_boost_descriptors("${DOWNLOAD_DIR}" boost_status)
+-download_vgg_descriptors("${DOWNLOAD_DIR}" vgg_status)
+-if(NOT boost_status OR NOT vgg_status)
+- ocv_module_disable(xfeatures2d)
+-endif()
++#download_boost_descriptors("${DOWNLOAD_DIR}" boost_status)
++#download_vgg_descriptors("${DOWNLOAD_DIR}" vgg_status)
++#if(NOT boost_status OR NOT vgg_status)
++# ocv_module_disable(xfeatures2d)
++#endif()
+
+ ocv_module_include_directories("${DOWNLOAD_DIR}")
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.3.bb b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.3.bb
new file mode 100644
index 000000000..ca62de7c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.3.bb
@@ -0,0 +1,203 @@
+SUMMARY = "Opencv : The Open Computer Vision Library"
+HOMEPAGE = "http://opencv.org/"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2b2f8752cc5edf504d283107d033f544"
+
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
+
+DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp"
+
+SRCREV_opencv = "87c27a074db9f6d9d60513f351daa903606ca370"
+SRCREV_contrib = "2a9d1b22ed76eb22fad1a5edf6faf4d05f207b13"
+SRCREV_ipp = "a62e20676a60ee0ad6581e217fe7e4bada3b95db"
+SRCREV_boostdesc = "34e4206aef44d50e6bbcd0ab06354b52e7466d26"
+SRCREV_vgg = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d"
+SRC_URI[tinydnn.md5sum] = "adb1c512e09ca2c7a6faef36f9c53e59"
+SRC_URI[tinydnn.sha256sum] = "e2c61ce8c5debaa644121179e9dbdcf83f497f39de853f8dd5175846505aa18b"
+
+def ipp_filename(d):
+ import re
+ arch = d.getVar('TARGET_ARCH', True)
+ if re.match("i.86$", arch):
+ return "ippicv_2017u2_lnx_ia32_20170418.tgz"
+ else:
+ return "ippicv_2017u2_lnx_intel64_20170418.tgz"
+
+def ipp_md5sum(d):
+ import re
+ arch = d.getVar('TARGET_ARCH', True)
+ if re.match("i.86$", arch):
+ return "f2cece00d802d4dea86df52ed095257e"
+ else:
+ return "808b791a6eac9ed78d32a7666804320e"
+
+IPP_FILENAME = "${@ipp_filename(d)}"
+IPP_MD5 = "${@ipp_md5sum(d)}"
+
+SRCREV_FORMAT = "opencv_contrib_ipp_boostdesc_vgg"
+SRC_URI = "git://github.com/opencv/opencv.git;name=opencv \
+ git://github.com/opencv/opencv_contrib.git;destsuffix=contrib;name=contrib \
+ git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20170418;destsuffix=ipp;name=ipp \
+ git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_boostdesc_20161012;destsuffix=boostdesc;name=boostdesc \
+ git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_vgg_20160317;destsuffix=vgg;name=vgg \
+ https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz;destsuffix=git/3rdparty/tinydnn/tiny-dnn-1.0.0a3;name=tinydnn;unpack=false \
+ file://0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch \
+ file://fixpkgconfig.patch \
+ file://uselocalxfeatures.patch;patchdir=../contrib/ \
+ file://tinydnn.patch;patchdir=../contrib/ \
+ file://0002-Make-opencv-ts-create-share-library-intead-of-static.patch \
+ file://0003-To-fix-errors-as-following.patch \
+ file://0001-build-workaround-GCC-7.1.1-compilation-issue-with-sa.patch \
+ file://0002-imgcodecs-refactoring-improve-code-quality.patch \
+ file://0003-imgproc-test-add-checks-for-remove-call.patch \
+ file://0001-Dont-use-isystem.patch \
+ file://0001-carotene-don-t-use-__asm__-with-aarch64.patch \
+ file://0002-Do-not-enable-asm-with-clang.patch \
+ file://CVE-2017-14136.patch \
+ file://javagen.patch \
+ file://protobuf.patch \
+ file://already-exists.patch \
+"
+PV = "3.3+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+do_unpack_extra() {
+ mkdir -p ${S}/3rdparty/tinydnn/
+ tar xzf ${WORKDIR}/v1.0.0a3.tar.gz -C ${S}/3rdparty/tinydnn/
+ tar xzf ${WORKDIR}/ipp/ippicv/${IPP_FILENAME} -C ${WORKDIR}
+ cp ${WORKDIR}/vgg/*.i ${WORKDIR}/contrib/modules/xfeatures2d/src
+ cp ${WORKDIR}/boostdesc/*.i ${WORKDIR}/contrib/modules/xfeatures2d/src
+}
+addtask unpack_extra after do_unpack before do_patch
+
+EXTRA_OECMAKE = "-DOPENCV_EXTRA_MODULES_PATH=${WORKDIR}/contrib/modules \
+ -DWITH_1394=OFF \
+ -DCMAKE_SKIP_RPATH=ON \
+ -DOPENCV_ICV_HASH=${IPP_MD5} \
+ -DIPPROOT=${WORKDIR}/ippicv_lnx \
+ ${@bb.utils.contains("TARGET_CC_ARCH", "-msse3", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1", "", d)} \
+ ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.1", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1", "", d)} \
+ ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.2", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1 -DENABLE_SSE42=1", "", d)} \
+ ${@oe.utils.conditional("libdir", "/usr/lib64", "-DLIB_SUFFIX=64", "", d)} \
+ ${@oe.utils.conditional("libdir", "/usr/lib32", "-DLIB_SUFFIX=32", "", d)} \
+"
+EXTRA_OECMAKE_append_x86 = " -DX86=ON"
+
+PACKAGECONFIG ??= "python3 eigen jpeg png tiff v4l libv4l gstreamer samples tbb gphoto2 \
+ ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \
+ ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libav", "", d)}"
+
+PACKAGECONFIG[amdblas] = "-DWITH_OPENCLAMDBLAS=ON,-DWITH_OPENCLAMDBLAS=OFF,libclamdblas,"
+PACKAGECONFIG[amdfft] = "-DWITH_OPENCLAMDFFT=ON,-DWITH_OPENCLAMDFFT=OFF,libclamdfft,"
+PACKAGECONFIG[dnn] = "-DBUILD_opencv_dnn=ON -DPROTOBUF_UPDATE_FILES=ON -DBUILD_PROTOBUF=OFF,-DBUILD_opencv_dnn=OFF,protobuf protobuf-native,"
+PACKAGECONFIG[eigen] = "-DWITH_EIGEN=ON,-DWITH_EIGEN=OFF,libeigen gflags glog,"
+PACKAGECONFIG[freetype] = "-DBUILD_opencv_freetype=ON,-DBUILD_opencv_freetype=OFF,freetype,"
+PACKAGECONFIG[gphoto2] = "-DWITH_GPHOTO2=ON,-DWITH_GPHOTO2=OFF,libgphoto2,"
+PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER=ON,-DWITH_GSTREAMER=OFF,gstreamer1.0 gstreamer1.0-plugins-base,"
+PACKAGECONFIG[gtk] = "-DWITH_GTK=ON,-DWITH_GTK=OFF,gtk+3,"
+PACKAGECONFIG[jasper] = "-DWITH_JASPER=ON,-DWITH_JASPER=OFF,jasper,"
+PACKAGECONFIG[java] = "-DJAVA_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native fastjar-native openjdk-8-native,"
+PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg,"
+PACKAGECONFIG[libav] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,libav,"
+PACKAGECONFIG[libv4l] = "-DWITH_LIBV4L=ON,-DWITH_LIBV4L=OFF,v4l-utils,"
+PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,opencl-headers virtual/opencl-icd,"
+PACKAGECONFIG[oracle-java] = "-DJAVA_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${ORACLE_JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native oracle-jse-jdk oracle-jse-jdk-native,"
+PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng,"
+PACKAGECONFIG[python2] = "-DPYTHON2_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python-numpy,"
+PACKAGECONFIG[python3] = "-DPYTHON3_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python3-numpy,"
+PACKAGECONFIG[samples] = "-DBUILD_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,,"
+PACKAGECONFIG[tbb] = "-DWITH_TBB=ON,-DWITH_TBB=OFF,tbb,"
+PACKAGECONFIG[text] = "-DBUILD_opencv_text=ON,-DBUILD_opencv_text=OFF,tesseract,"
+PACKAGECONFIG[tiff] = "-DWITH_TIFF=ON,-DWITH_TIFF=OFF,tiff,"
+PACKAGECONFIG[v4l] = "-DWITH_V4L=ON,-DWITH_V4L=OFF,v4l-utils,"
+
+inherit pkgconfig cmake
+
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'distutils3-base', '', d)}
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'distutils-base', '', d)}
+
+export PYTHON_CSPEC="-I${STAGING_INCDIR}/${PYTHON_DIR}"
+export PYTHON="${STAGING_BINDIR_NATIVE}/${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3', 'python', d)}"
+export ORACLE_JAVA_HOME="${STAGING_DIR_NATIVE}/usr/bin/java"
+export JAVA_HOME="${STAGING_DIR_NATIVE}/usr/lib/jvm/openjdk-8-native"
+export ANT_DIR="${STAGING_DIR_NATIVE}/usr/share/ant/"
+
+TARGET_CC_ARCH += "-I${S}/include "
+
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'samples', '${PN}-samples', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'oracle-java', '${PN}-java', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'java', '${PN}-java', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'python-${BPN}', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-${BPN}', '', d)} \
+ ${PN}-apps"
+
+python populate_packages_prepend () {
+ cv_libdir = d.expand('${libdir}')
+ do_split_packages(d, cv_libdir, '^lib(.*)\.so$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev', allow_links=True)
+ do_split_packages(d, cv_libdir, '^lib(.*)\.la$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev')
+ do_split_packages(d, cv_libdir, '^lib(.*)\.a$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev')
+ do_split_packages(d, cv_libdir, '^lib(.*)\.so\.*', 'lib%s', 'OpenCV %s library', extra_depends='', allow_links=True)
+
+ pn = d.getVar('PN')
+ metapkg = pn + '-dev'
+ d.setVar('ALLOW_EMPTY_' + metapkg, "1")
+ blacklist = [ metapkg ]
+ metapkg_rdepends = [ ]
+ packages = d.getVar('PACKAGES').split()
+ for pkg in packages[1:]:
+ if not pkg in blacklist and not pkg in metapkg_rdepends and pkg.endswith('-dev'):
+ metapkg_rdepends.append(pkg)
+ d.setVar('RRECOMMENDS_' + metapkg, ' '.join(metapkg_rdepends))
+
+ metapkg = pn
+ d.setVar('ALLOW_EMPTY_' + metapkg, "1")
+ blacklist = [ metapkg, "libopencv-ts" ]
+ metapkg_rdepends = [ ]
+ for pkg in packages[1:]:
+ if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.endswith('-doc') and not pkg.endswith('-locale') and not pkg.endswith('-staticdev'):
+ metapkg_rdepends.append(pkg)
+ d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
+}
+
+PACKAGES_DYNAMIC += "^libopencv-.*"
+
+FILES_${PN} = ""
+FILES_${PN}-dbg += "${datadir}/OpenCV/java/.debug/* ${datadir}/OpenCV/samples/bin/.debug/*"
+FILES_${PN}-dev = "${includedir} ${libdir}/pkgconfig ${datadir}/OpenCV/*.cmake"
+FILES_${PN}-staticdev += "${datadir}/OpenCV/3rdparty/lib/*.a"
+FILES_${PN}-apps = "${bindir}/* ${datadir}/OpenCV"
+FILES_${PN}-java = "${datadir}/OpenCV/java"
+FILES_${PN}-samples = "${datadir}/OpenCV/samples/"
+
+INSANE_SKIP_${PN}-java = "libdir"
+INSANE_SKIP_${PN}-dbg = "libdir"
+
+ALLOW_EMPTY_${PN} = "1"
+
+SUMMARY_python-opencv = "Python bindings to opencv"
+FILES_python-opencv = "${PYTHON_SITEPACKAGES_DIR}/*"
+RDEPENDS_python-opencv = "python-core python-numpy"
+
+SUMMARY_python3-opencv = "Python bindings to opencv"
+FILES_python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*"
+RDEPENDS_python3-opencv = "python3-core python3-numpy"
+
+do_install_append() {
+ cp ${S}/include/opencv/*.h ${D}${includedir}/opencv/
+ sed -i '/blobtrack/d' ${D}${includedir}/opencv/cvaux.h
+
+ # Move Python files into correct library folder (for multilib build)
+ if [ "$libdir" != "/usr/lib" -a -d ${D}/usr/lib ]; then
+ mv ${D}/usr/lib/* ${D}/${libdir}/
+ rm -rf ${D}/usr/lib
+ fi
+
+ if ${@bb.utils.contains("PACKAGECONFIG", "samples", "true", "false", d)}; then
+ install -d ${D}${datadir}/OpenCV/samples/bin/
+ cp -f bin/*-tutorial-* bin/*-example-* ${D}${datadir}/OpenCV/samples/bin/
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/initscript b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/initscript
new file mode 100644
index 000000000..08d1067a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/initscript
@@ -0,0 +1,35 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/openldap and type
+# > update-rc.d openldap defaults 60
+#
+
+# Source function library.
+. /etc/init.d/functions
+
+slapd=/usr/sbin/slapd
+test -x "$slapd" || exit 0
+
+
+case "$1" in
+ start)
+ echo -n "Starting OpenLDAP: "
+ start-stop-daemon --start --quiet --exec $slapd
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping OpenLDAP: "
+ start-stop-daemon --stop --quiet --pidfile /var/run/slapd.pid
+ echo "."
+ ;;
+ status)
+ status $slapd;
+ exit $?
+ ;;
+ *)
+ echo "Usage: /etc/init.d/openldap {start|stop|status}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/install-strip.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/install-strip.patch
new file mode 100644
index 000000000..2992b7030
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/install-strip.patch
@@ -0,0 +1,14 @@
+# This patch ensures that the install operations which strip
+# programs and libraries (LTINSTALL) work in a cross build
+# environment.
+--- openldap-2.2.24/.pc/install-strip.patch/build/top.mk 2005-01-20 09:00:55.000000000 -0800
++++ openldap-2.2.24/build/top.mk 2005-04-16 13:48:20.536710376 -0700
+@@ -116,7 +116,7 @@
+ LTLINK_MOD = $(LIBTOOL) $(LTONLY_MOD) --mode=link \
+ $(CC) $(LT_CFLAGS) $(LDFLAGS) $(LTFLAGS_MOD)
+
+-LTINSTALL = $(LIBTOOL) --mode=install $(INSTALL)
++LTINSTALL = STRIPPROG="" $(LIBTOOL) --mode=install $(top_srcdir)/contrib/ldapc++/install-sh -c
+ LTFINISH = $(LIBTOOL) --mode=finish
+
+ # Misc UNIX commands used in build environment
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch
new file mode 100644
index 000000000..dcf541137
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch
@@ -0,0 +1,30 @@
+From: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+slapd depends on ICU if it was built first.
+
+Upstream-status: inappropiate [embedded specific]
+---
+ configure.in | 8 --------
+ 1 file changed, 8 deletions(-)
+
+--- openldap-2.4.23.orig/configure.in
++++ openldap-2.4.23/configure.in
+@@ -2045,18 +2045,10 @@ if test $ol_enable_ndb != no ; then
+ SLAPD_LIBS="$SLAPD_LIBS \$(SLAPD_NDB_LIBS)"
+ fi
+ fi
+
+ dnl ----------------------------------------------------------------
+-dnl International Components for Unicode
+-OL_ICU
+-if test "$ol_icu" = no ; then
+- AC_MSG_WARN([ICU not available])
+-else
+- ICU_LIBS="$ol_icu"
+-fi
+-dnl ----------------------------------------------------------------
+ dnl
+ dnl Check for Cyrus SASL
+ dnl
+ WITH_SASL=no
+ ol_link_sasl=no
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-2.4.28-gnutls-gcrypt.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-2.4.28-gnutls-gcrypt.patch
new file mode 100644
index 000000000..c7b1552c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-2.4.28-gnutls-gcrypt.patch
@@ -0,0 +1,17 @@
+From http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-nds/openldap/files/
+
+Upstream-status: Unknown
+
+--
+
+--- openldap-2.4.28/configure.in.orig 2012-02-11 22:40:36.004360795 +0000
++++ openldap-2.4.28/configure.in 2012-02-11 22:40:13.410986851 +0000
+@@ -1214,7 +1214,7 @@
+ ol_with_tls=gnutls
+ ol_link_tls=yes
+
+- TLS_LIBS="-lgnutls"
++ TLS_LIBS="-lgnutls -lgcrypt"
+
+ AC_DEFINE(HAVE_GNUTLS, 1,
+ [define if you have GNUtls])
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-CVE-2015-3276.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-CVE-2015-3276.patch
new file mode 100644
index 000000000..de9ca528a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-CVE-2015-3276.patch
@@ -0,0 +1,59 @@
+openldap CVE-2015-3276
+
+the patch comes from:
+https://bugzilla.redhat.com/show_bug.cgi?id=1238322
+https://bugzilla.redhat.com/attachment.cgi?id=1055640
+
+The nss_parse_ciphers function in libraries/libldap/tls_m.c in
+OpenLDAP does not properly parse OpenSSL-style multi-keyword mode
+cipher strings, which might cause a weaker than intended cipher to
+be used and allow remote attackers to have unspecified impact via
+unknown vectors.
+
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ libraries/libldap/tls_m.c | 27 ++++++++++++++++-----------
+ 1 file changed, 16 insertions(+), 11 deletions(-)
+
+diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c
+index 9b101f9..e6f3051 100644
+--- a/libraries/libldap/tls_m.c
++++ b/libraries/libldap/tls_m.c
+@@ -621,18 +621,23 @@ nss_parse_ciphers(const char *cipherstr, int cipher_list[ciphernum])
+ */
+ if (mask || strength || protocol) {
+ for (i=0; i<ciphernum; i++) {
+- if (((ciphers_def[i].attr & mask) ||
+- (ciphers_def[i].strength & strength) ||
+- (ciphers_def[i].version & protocol)) &&
+- (cipher_list[i] != -1)) {
+- /* Enable the NULL ciphers only if explicity
+- * requested */
+- if (ciphers_def[i].attr & SSL_eNULL) {
+- if (mask & SSL_eNULL)
+- cipher_list[i] = action;
+- } else
++ /* if more than one mask is provided
++ * then AND logic applies (to match openssl)
++ */
++ if ( cipher_list[i] == -1) )
++ continue;
++ if ( mask && ! (ciphers_def[i].attr & mask) )
++ continue;
++ if ( strength && ! (ciphers_def[i].strength & strength) )
++ continue;
++ if ( protocol && ! (ciphers_def[i].version & protocol) )
++ continue;
++ /* Enable the NULL ciphers only if explicity requested */
++ if (ciphers_def[i].attr & SSL_eNULL) {
++ if (mask & SSL_eNULL)
+ cipher_list[i] = action;
+- }
++ } else
++ cipher_list[i] = action;
+ }
+ } else {
+ for (i=0; i<ciphernum; i++) {
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-m4-pthread.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-m4-pthread.patch
new file mode 100644
index 000000000..b669b7254
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/openldap-m4-pthread.patch
@@ -0,0 +1,20 @@
+--- openldap-2.3.11/build/openldap.m4.orig 2005-11-11 00:11:18.604322590 -0800
++++ openldap-2.3.11/build/openldap.m4 2005-11-11 00:26:21.621145856 -0800
+@@ -788,7 +788,7 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
+ ]])
+
+ AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
+-AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
++[AC_LANG_SOURCE([[OL_PTHREAD_TEST_INCLUDES
+
+ int main(argc, argv)
+ int argc;
+@@ -796,7 +796,7 @@ int main(argc, argv)
+ {
+ OL_PTHREAD_TEST_FUNCTION
+ }
+-]))
++]])])
+ dnl --------------------------------------------------------------------
+ AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2)
+ if test "$ol_link_threads" = no ; then
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/slapd.service b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/slapd.service
new file mode 100644
index 000000000..f5f83fdc3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/slapd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Standalone LDAP Daemon
+After=syslog.target network.target
+
+[Service]
+Type=forking
+ExecStart=@SBINDIR@/slapd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/thread_stub.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/thread_stub.patch
new file mode 100644
index 000000000..540ba4a63
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/thread_stub.patch
@@ -0,0 +1,20 @@
+openldap: set pointer
+
+When the function ldap_pvt_thread_pool_getkey() succeeds, it
+must set the value of *data since the caller may try to use it.
+
+Upstream-Status: pending
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+
+--- a/libraries/libldap_r/thr_stub.c
++++ b/libraries/libldap_r/thr_stub.c
+@@ -217,6 +217,7 @@ ldap_pvt_thread_pool_unidle ( ldap_pvt_t
+ int ldap_pvt_thread_pool_getkey (
+ void *ctx, void *key, void **data, ldap_pvt_thread_pool_keyfree_t **kfree )
+ {
++ if (data) *data = NULL; /* avoid problems with uninitialized *data */
+ return(0);
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/use-urandom.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/use-urandom.patch
new file mode 100644
index 000000000..e7b988faf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/use-urandom.patch
@@ -0,0 +1,38 @@
+openldap: assume /dev/urandom exists
+
+When we are cross-compiling, we want to assume
+that /dev/urandom exists. We could change the source
+code to look for it, but this is the easy way out.
+
+Upstream-Status: pending
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+
+--- a/configure.in
++++ b/configure.in
+@@ -2142,8 +2142,8 @@ fi
+
+ dnl ----------------------------------------------------------------
+ dnl Check for entropy sources
++dev=no
+ if test $cross_compiling != yes && test "$ac_cv_mingw32" != yes ; then
+- dev=no
+ if test -r /dev/urandom ; then
+ dev="/dev/urandom";
+ elif test -r /idev/urandom ; then
+@@ -2156,9 +2156,11 @@ if test $cross_compiling != yes && test
+ dev="/idev/random";
+ fi
+
+- if test $dev != no ; then
+- AC_DEFINE_UNQUOTED(URANDOM_DEVICE,"$dev",[set to urandom device])
+- fi
++elif test $cross_compiling == yes ; then
++ dev="/dev/urandom";
++fi
++if test $dev != no ; then
++ AC_DEFINE_UNQUOTED(URANDOM_DEVICE,"$dev",[set to urandom device])
+ fi
+
+ dnl ----------------------------------------------------------------
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.45.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.45.bb
new file mode 100644
index 000000000..82d661983
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.45.bb
@@ -0,0 +1,256 @@
+# OpenLDAP, a license free (see http://www.OpenLDAP.org/license.html)
+#
+SUMMARY = "OpenLDAP Directory Service"
+DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
+HOMEPAGE = "http://www.OpenLDAP.org/license.html"
+# The OpenLDAP Public License - see the HOMEPAGE - defines
+# the license. www.openldap.org claims this is Open Source
+# (see http://www.openldap.org), the license appears to be
+# basically BSD. opensource.org does not record this license
+# at present (so it is apparently not OSI certified).
+LICENSE = "OpenLDAP"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=25fd3721960f39128cd15a749fd21139 \
+ file://LICENSE;md5=153d07ef052c4a37a8fac23bc6031972 \
+"
+SECTION = "libs"
+
+LDAP_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
+
+SRC_URI = "ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${BP}.tgz \
+ file://openldap-m4-pthread.patch \
+ file://kill-icu.patch \
+ file://openldap-2.4.28-gnutls-gcrypt.patch \
+ file://use-urandom.patch \
+ file://initscript \
+ file://slapd.service \
+ file://thread_stub.patch \
+ file://openldap-CVE-2015-3276.patch \
+"
+
+SRC_URI[md5sum] = "00ff8301277cdfd0af728a6927042a13"
+SRC_URI[sha256sum] = "cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb897cd5626df3824"
+
+DEPENDS = "util-linux groff-native"
+
+# The original top.mk used INSTALL, not INSTALL_STRIP_PROGRAM when
+# installing .so and executables, this fails in cross compilation
+# environments
+SRC_URI += "file://install-strip.patch"
+
+inherit autotools-brokensep update-rc.d systemd
+
+# CV SETTINGS
+# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
+# when cross compiling (should be in site?)
+EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"
+
+# CONFIG DEFINITIONS
+# The following is necessary because it cannot be determined for a
+# cross compile automagically. Select should yield fine on all OE
+# systems...
+EXTRA_OECONF += "--with-yielding-select=yes"
+# Shared libraries are nice...
+EXTRA_OECONF += "--enable-dynamic"
+
+PACKAGECONFIG ??= "gnutls modules \
+ mdb ldap meta monitor null passwd shell proxycache dnssrv \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+#--with-tls with TLS/SSL support auto|openssl|gnutls [auto]
+PACKAGECONFIG[gnutls] = "--with-tls=gnutls,,gnutls libgcrypt"
+PACKAGECONFIG[openssl] = "--with-tls=openssl,,openssl"
+
+PACKAGECONFIG[sasl] = "--with-cyrus-sasl,--without-cyrus-sasl,cyrus-sasl"
+PACKAGECONFIG[modules] = "lt_cv_dlopen_self=yes --enable-modules,--disable-modules,libtool"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+
+# SLAPD options
+#
+# UNIX crypt(3) passwd support:
+EXTRA_OECONF += "--enable-crypt"
+
+# SLAPD BACKEND
+#
+# The backend must be set by the configuration. This controls the
+# required database.
+#
+# Backends="bdb dnssrv hdb ldap mdb meta monitor ndb null passwd perl relay shell sock sql"
+#
+# Note that multiple backends can be built. The ldbm backend requires a
+# build-time choice of database API. The bdb backend forces this to be
+# DB4. To use the gdbm (or other) API the Berkely database module must
+# be removed from the build.
+md = "${libexecdir}/openldap"
+#
+#--enable-bdb enable Berkeley DB backend no|yes|mod yes
+# The Berkely DB is the standard choice. This version of OpenLDAP requires
+# the version 4 implementation or better.
+PACKAGECONFIG[bdb] = "--enable-bdb=yes,--enable-bdb=no,db"
+
+#--enable-dnssrv enable dnssrv backend no|yes|mod no
+PACKAGECONFIG[dnssrv] = "--enable-dnssrv=mod,--enable-dnssrv=no"
+
+#--enable-hdb enable Hierarchical DB backend no|yes|mod no
+PACKAGECONFIG[hdb] = "--enable-hdb=yes,--enable-hdb=no,db"
+
+#--enable-ldap enable ldap backend no|yes|mod no
+PACKAGECONFIG[ldap] = "--enable-ldap=mod,--enable-ldap=no,"
+
+#--enable-mdb enable mdb database backend no|yes|mod [yes]
+PACKAGECONFIG[mdb] = "--enable-mdb=yes,--enable-mdb=no,"
+
+#--enable-meta enable metadirectory backend no|yes|mod no
+PACKAGECONFIG[meta] = "--enable-meta=mod,--enable-meta=no,"
+
+#--enable-monitor enable monitor backend no|yes|mod yes
+PACKAGECONFIG[monitor] = "--enable-monitor=mod,--enable-monitor=no,"
+
+#--enable-ndb enable MySQL NDB Cluster backend no|yes|mod [no]
+PACKAGECONFIG[ndb] = "--enable-ndb=mod,--enable-ndb=no,"
+
+#--enable-null enable null backend no|yes|mod no
+PACKAGECONFIG[null] = "--enable-null=mod,--enable-null=no,"
+
+#--enable-passwd enable passwd backend no|yes|mod no
+PACKAGECONFIG[passwd] = "--enable-passwd=mod,--enable-passwd=no,"
+
+#--enable-perl enable perl backend no|yes|mod no
+# This requires a loadable perl dynamic library, if enabled without
+# doing something appropriate (building perl?) the build will pick
+# up the build machine perl - not good (inherit perlnative?)
+PACKAGECONFIG[perl] = "--enable-perl=mod,--enable-perl=no,perl"
+
+#--enable-relay enable relay backend no|yes|mod [yes]
+PACKAGECONFIG[relay] = "--enable-relay=mod,--enable-relay=no,"
+
+#--enable-shell enable shell backend no|yes|mod no
+# configure: WARNING: Use of --without-threads is recommended with back-shell
+PACKAGECONFIG[shell] = "--enable-shell=mod --without-threads,--enable-shell=no,"
+
+#--enable-sock enable sock backend no|yes|mod [no]
+PACKAGECONFIG[sock] = "--enable-sock=mod,--enable-sock=no,"
+
+#--enable-sql enable sql backend no|yes|mod no
+# sql requires some sql backend which provides sql.h, sqlite* provides
+# sqlite.h (which may be compatible but hasn't been tried.)
+PACKAGECONFIG[sql] = "--enable-sql=mod,--enable-sql=no,sqlite3"
+
+#--enable-dyngroup Dynamic Group overlay no|yes|mod no
+# This is a demo, Proxy Cache defines init_module which conflicts with the
+# same symbol in dyngroup
+PACKAGECONFIG[dyngroup] = "--enable-dyngroup=mod,--enable-dyngroup=no,"
+
+#--enable-proxycache Proxy Cache overlay no|yes|mod no
+PACKAGECONFIG[proxycache] = "--enable-proxycache=mod,--enable-proxycache=no,"
+FILES_${PN}-overlay-proxycache = "${md}/pcache-*.so.*"
+PACKAGES += "${PN}-overlay-proxycache"
+
+# Append URANDOM_DEVICE='/dev/urandom' to CPPFLAGS:
+# This allows tls to obtain random bits from /dev/urandom, by default
+# it was disabled for cross-compiling.
+CPPFLAGS_append = " -D_GNU_SOURCE -DURANDOM_DEVICE=\'/dev/urandom\' -fPIC"
+
+LDFLAGS_append = " -pthread"
+
+do_configure() {
+ cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/ltmain.sh ${S}/build
+ rm -f ${S}/libtool
+ aclocal
+ libtoolize --force --copy
+ gnu-configize
+ autoconf
+ oe_runconf
+}
+
+LEAD_SONAME = "libldap-${LDAP_VER}.so.*"
+
+# The executables go in a separate package. This allows the
+# installation of the libraries with no daemon support.
+# Each module also has its own package - see above.
+PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"
+
+# Package contents - shift most standard contents to -bin
+FILES_${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/${BPN}/data"
+FILES_${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run ${localstatedir}/volatile/run \
+ ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
+ ${sysconfdir}/openldap/DB_CONFIG.example ${systemd_unitdir}/system/*"
+FILES_${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp ${localstatedir}/run ${localstatedir}/volatile/run"
+FILES_${PN}-bin = "${bindir}"
+FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libdir}/*.a ${libexecdir}/openldap/*.a ${libexecdir}/openldap/*.la ${libexecdir}/openldap/*.so"
+FILES_${PN}-dbg += "${libexecdir}/openldap/.debug"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
+ chmod 755 ${D}${sysconfdir}/init.d/openldap
+ # This is duplicated in /etc/openldap and is for slapd
+ rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
+
+ # Installing slapd under ${sbin} is more FHS and LSB compliance
+ mv ${D}${libexecdir}/slapd ${D}/${sbindir}/slapd
+ rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
+ SLAPTOOLS="slapadd slapcat slapdn slapindex slappasswd slaptest slapauth slapacl slapschema"
+ cd ${D}/${sbindir}/
+ rm -f ${SLAPTOOLS}
+ for i in ${SLAPTOOLS}; do ln -sf slapd $i; done
+
+ rmdir "${D}${localstatedir}/run"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/slapd.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/*.service
+
+ # Uses mdm as the database
+ # and localstatedir as data directory ...
+ sed -e 's/# modulepath/modulepath/' \
+ -e 's/# moduleload\s*back_bdb.*/moduleload back_mdb/' \
+ -e 's/database\s*bdb/database mdb/' \
+ -e 's%^directory\s*.*%directory ${localstatedir}/${BPN}/data/%' \
+ -i ${D}${sysconfdir}/openldap/slapd.conf
+
+ mkdir -p ${D}${localstatedir}/${BPN}/data
+
+
+}
+
+INITSCRIPT_PACKAGES = "${PN}-slapd"
+INITSCRIPT_NAME_${PN}-slapd = "openldap"
+INITSCRIPT_PARAMS_${PN}-slapd = "defaults"
+SYSTEMD_SERVICE_${PN}-slapd = "hostapd.service"
+SYSTEMD_AUTO_ENABLE_${PN}-slapd ?= "disable"
+
+
+PACKAGES_DYNAMIC += "^${PN}-backends.* ^${PN}-backend-.*"
+
+# The modules require their .so to be dynamicaly loaded
+INSANE_SKIP_${PN}-backend-dnssrv += "dev-so"
+INSANE_SKIP_${PN}-backend-ldap += "dev-so"
+INSANE_SKIP_${PN}-backend-meta += "dev-so"
+INSANE_SKIP_${PN}-backend-mdb += "dev-so"
+INSANE_SKIP_${PN}-backend-monitor += "dev-so"
+INSANE_SKIP_${PN}-backend-null += "dev-so"
+INSANE_SKIP_${PN}-backend-passwd += "dev-so"
+INSANE_SKIP_${PN}-backend-shell += "dev-so"
+
+
+python populate_packages_prepend () {
+ backend_dir = d.expand('${libexecdir}/openldap')
+ do_split_packages(d, backend_dir, 'back_([a-z]*)\.so$', 'openldap-backend-%s', 'OpenLDAP %s backend', prepend=True, extra_depends='', allow_links=True)
+ do_split_packages(d, backend_dir, 'back_([a-z]*)\-.*\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)
+
+ metapkg = "${PN}-backends"
+ d.setVar('ALLOW_EMPTY_' + metapkg, "1")
+ d.setVar('FILES_' + metapkg, "")
+ metapkg_rdepends = []
+ packages = d.getVar('PACKAGES').split()
+ for pkg in packages[1:]:
+ if pkg.count("openldap-backend-") and not pkg in metapkg_rdepends and not pkg.count("-dev") and not pkg.count("-dbg") and not pkg.count("static") and not pkg.count("locale"):
+ metapkg_rdepends.append(pkg)
+ d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
+ d.setVar('DESCRIPTION_' + metapkg, 'OpenLDAP backends meta package')
+ packages.append(metapkg)
+ d.setVar('PACKAGES', ' '.join(packages))
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.16.0.bb b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.16.0.bb
new file mode 100644
index 000000000..fd67181dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.16.0.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Smart card library and applications"
+DESCRIPTION = "OpenSC is a tool for accessing smart card devices. Basic\
+functionality (e.g. SELECT FILE, READ BINARY) should work on any ISO\
+7816-4 compatible smart card. Encryption and decryption using private\
+keys on the smart card is possible with PKCS\
+such as the FINEID (Finnish Electronic IDentity) card. Swedish Posten\
+eID cards have also been confirmed to work."
+
+HOMEPAGE = "http://www.opensc-project.org/opensc/"
+SECTION = "System Environment/Libraries"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/o/${BPN}/${BPN}_${PV}.orig.tar.gz"
+
+SRC_URI[md5sum] = "724d128f23cd7a74b28d04300ce7bcbd"
+SRC_URI[sha256sum] = "3ac8c29542bb48179e7086d35a1b8907a4e86aca3de3323c2f48bd74eaaf5729"
+
+DEPENDS = "openct pcsc-lite virtual/libiconv openssl"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " \
+ --disable-static \
+ --enable-openct \
+ --disable-pcsc \
+ --disable-ctapi \
+ --disable-doc \
+"
+EXTRA_OEMAKE = "DESTDIR=${D}"
+
+RDEPENDS_${PN} = "readline"
+
+FILES_${PN} += "\
+ ${libdir}/opensc-pkcs11.so \
+ ${libdir}/onepin-opensc-pkcs11.so \
+ ${libdir}/pkcs11-spy.so \
+"
+FILES_${PN}-dev += "\
+ ${libdir}/pkcs11/opensc-pkcs11.so \
+ ${libdir}/pkcs11/onepin-opensc-pkcs11.so \
+ ${libdir}/pkcs11/pkcs11-spy.so \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/opensync/wbxml2_0.10.8.bb b/meta-openembedded/meta-oe/recipes-support/opensync/wbxml2_0.10.8.bb
new file mode 100644
index 000000000..8c948c565
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opensync/wbxml2_0.10.8.bb
@@ -0,0 +1,23 @@
+SUMMARY = "WBXML parsing and encoding library"
+HOMEPAGE = "http://libwbxml.opensync.org/"
+SECTION = "libs"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c1128ee5341ccd5927d8bafe4b6266e1"
+
+DEPENDS = "expat"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libwbxml/libwbxml-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "f5031e9f730ffd9dc6a2d1ded585e1d1"
+SRC_URI[sha256sum] = "a057daa098f12838eb4e635bb28413027f1b73819872c3fbf64e3207790a3f7d"
+
+S = "${WORKDIR}/libwbxml-${PV}"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
+
+PACKAGES += "${PN}-tools"
+
+FILES_${PN}-tools = "${bindir}"
+FILES_${PN} = "${libdir}/*.so.*"
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/checkserverkey b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/checkserverkey
new file mode 100644
index 000000000..bcfa36101
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/checkserverkey
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+if [ ! -f "/etc/openwbem/serverkey.pem" ]; then
+ if [ -f "/etc/ssl/servercerts/servercert.pem" \
+ -a -f "/etc/ssl/servercerts/serverkey.pem" ]; then
+ echo "Using common server certificate /etc/ssl/servercerts/servercert.pem"
+ ln -s /etc/ssl/servercerts/server{cert,key}.pem /etc/openwbem/
+ else
+ echo "FAILED: Starting OpenWBEM server"
+ echo "There is no ssl server key available for OpenWBEM server to use."
+ echo -e "Please generate one with the following script and start the OpenWBEM service again:\n"
+ echo "##################################"
+ echo "/etc/openwbem/owgencert"
+ echo "================================="
+
+ echo "NOTE: The script uses /dev/random device for generating some random bits while generating the server key."
+ echo " If this takes too long, you can replace the value of \"RANDFILE\" in /etc/openwsman/ssleay.cnf with /dev/urandom. Please understand the implications"
+ exit 1
+ fi
+fi
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/loadmof.sh b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/loadmof.sh
new file mode 100644
index 000000000..dd87811a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/loadmof.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+#
+# options:
+# loadmof.sh <MOF_PATH> <NAMESPACE> <FILES>
+#
+# - or -
+#
+# options:
+# loadmof.sh -n <NAMESPACE> <FILES> [...]
+#
+# The former is preserved for compatibility with Pegasus and
+# sblim providers. The latter is preferred. If $1 is "-n",
+# the latter code path is executed. Otherwise the former is
+# executed.
+
+if [ "x$1" != "x-n" -a "x$1" != "x-v" ]; then
+# OLD STYLE
+if [ -f "/etc/init.d/owcimomd" ]; then
+ /etc/init.d/owcimomd status 1>&2 > /dev/null
+ if [ $? = "0" ]; then
+ CIMOM_RUNNING="true"
+ else
+ CIMOM_RUNNING="false"
+ fi
+else
+ exit 1
+fi
+if [ "$YAST_IS_RUNNING" = "instsys" ]; then
+ CIMOM_RUNNING="false"
+fi
+
+CIMOM=$1
+shift
+case "$CIMOM" in
+ pegasus)
+ exit 0
+ ;;
+esac
+MOF_PATH=$1
+shift
+NS=$1
+shift
+
+REPOSITORY="/var/lib/openwbem"
+#tmp_dir=`mktemp -d -p /tmp openwbem.XXXXXX`
+case "$CIMOM_RUNNING" in
+ true|false)
+ while [ "$#" -gt 0 ]
+ do
+ echo "Loading $MOF_PATH/$1"
+ #sed "s/cmpi:/cmpi::/g" $MOF_PATH/$1 > $tmp_dir/$1
+ /usr/bin/owmofc -c -n $NS -d $REPOSITORY $MOF_PATH/$1 > /dev/null 2>&1
+ shift
+ done
+ ;;
+esac
+#rm -rf $tmp_dir
+# END OLD STYLE
+
+else
+# NEW STYLE
+if [ "x$3" = "x" ]; then
+ echo "Usage: $0 -n <NAMESPACE> <FILES> [...]"
+ exit 1
+fi
+
+if [ "x$1" = "x-v" ]; then
+ VERBOSE=1
+ shift
+fi
+
+# get rid of "-n" arg
+shift
+
+NS="$1"
+
+shift
+
+DBDIR=/var/lib/openwbem
+LOGFILE=$DBDIR/loadmof.log
+CIMOM_INIT=/etc/init.d/owcimomd
+if [ "$YAST_IS_RUNNING" != "instsys" ] ; then
+ $CIMOM_INIT status > /dev/null 2>&1
+ CIMOM_RUNNING=$?
+fi
+if [ "x$CIMOM_RUNNING" = "x0" ]; then
+ $CIMOM_INIT stop > /dev/null 2>&1
+fi
+bkpdir=$DBDIR/backup-$$
+mkdir $bkpdir
+cp -a $DBDIR/*.{dat,ndx,lock} $bkpdir/
+rm -f $LOGFILE.9
+for i in 8 7 6 5 4 3 2 1 0; do
+ let newI=$i+1
+ if [ -f $LOGFILE.$i ]; then
+ mv $LOGFILE.$i $LOGFILE.$newI
+ fi
+done
+if [ -f $LOGFILE ]; then
+ mv $LOGFILE $LOGFILE.0
+fi
+if [ "x$VERBOSE" = "x1" ]; then
+ /usr/bin/owmofc -c -n $NS -d $DBDIR -s /usr/share/mof/cim-current "$@" 2>&1 | tee $LOGFILE
+else
+ /usr/bin/owmofc -c -n $NS -d $DBDIR -s /usr/share/mof/cim-current "$@" > $LOGFILE 2>&1
+fi
+RVAL=$?
+if [ "x$RVAL" != "x0" ]; then
+ echo "MOF import failed! Check $LOGFILE for details."
+ mv $bkpdir/* $DBDIR/
+fi
+rm -rf $bkpdir
+if [ "x$CIMOM_RUNNING" = "x0" ]; then
+ $CIMOM_INIT start > /dev/null 2>&1
+fi
+exit $RVAL
+fi
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/novell-openwbem-root-acl.mof b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/novell-openwbem-root-acl.mof
new file mode 100644
index 000000000..c9970c79e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/novell-openwbem-root-acl.mof
@@ -0,0 +1,21 @@
+#pragma namespace("root/security")
+
+instance of OpenWBEM_NamespaceACL
+{
+ nspace = "root";
+ capability = "";
+};
+
+instance of OpenWBEM_NamespaceACL
+{
+ nspace = "root/cimv2";
+ capability = "";
+};
+
+instance of OpenWBEM_UserACL
+{
+ nspace = "root/cimv2";
+ username = "root";
+ capability = "rw";
+};
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-etc_pam.d_openwbem b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-etc_pam.d_openwbem
new file mode 100644
index 000000000..b3785aa49
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-etc_pam.d_openwbem
@@ -0,0 +1,7 @@
+#%PAM-1.0
+auth required pam_unix2.so nullok
+auth required pam_nologin.so
+account required pam_unix2.so
+password required pam_pwcheck.so nullok
+password required pam_unix2.so nullok use_first_pass use_authtok
+session required pam_unix2.so none
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-owcimomd.init b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-owcimomd.init
new file mode 100644
index 000000000..47fa8a7c6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-owcimomd.init
@@ -0,0 +1,131 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: owcimomd
+# Required-Start: $network
+# Required-Stop: $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: OpenWBEM CIMOM Daemon
+# Description: owcimomd
+# Start/Stop the OpenWBEM CIMOM Daemon
+### END INIT INFO
+#
+#
+# chkconfig: 2345 36 64
+# description: OpenWBEM CIMOM Daemon
+# processname: owcimomd
+
+NAME=owcimomd
+DAEMON=/usr/sbin/$NAME
+OPTIONS=
+PIDFILE=/var/run/$NAME.pid
+
+if [ $EUID != 0 ]; then
+ echo "This script must be run as root."
+ exit 1;
+fi
+
+if [ "$DESCRIPTIVE" = "" ]; then
+ DESCRIPTIVE="OpenWBEM CIMOM Daemon"
+fi
+
+lockfile=${SVIlock:-/var/lock/subsys/$NAME}
+
+[ -x $DAEMON ] || exit 0
+
+# See how we were called.
+. /etc/init.d/functions
+
+start() {
+ if [ ! -f "/etc/openwbem/serverkey.pem" ]; then
+ if [ -f "/etc/ssl/servercerts/servercert.pem" \
+ -a -f "/etc/ssl/servercerts/serverkey.pem" ]; then
+ echo "Using common server certificate /etc/ssl/servercerts/servercert.pem"
+ ln -s /etc/ssl/servercerts/server{cert,key}.pem /etc/openwbem/
+ else
+ echo "Generating OpenWBEM server public certificate and private key"
+ FQDN=`hostname --fqdn`
+ if [ "x${FQDN}" = "x" ]; then
+ FQDN=localhost.localdomain
+ fi
+cat << EOF | sh /etc/openwbem/owgencert > /dev/null 2>&1
+--
+SomeState
+SomeCity
+SomeOrganization
+SomeOrganizationalUnit
+${FQDN}
+root@${FQDN}
+EOF
+ fi
+ fi
+
+ # Start daemons.
+ echo -n "Starting the $DESCRIPTIVE"
+ daemon $DAEMON $OPTIONS > /dev/null 2>&1
+ RETVAL=$?
+
+ if [ $RETVAL -eq 0 ]; then
+ touch $lockfile
+ success
+ fi
+
+ echo
+ return $RETVAL
+}
+
+stop() {
+ # Stop daemons.
+ echo -n "Shutting down $DESCRIPTIVE"
+ killproc $DAEMON
+ RETVAL=$?
+
+ if [ $RETVAL -eq 0 ]; then
+ rm -f $lockfile
+ success
+ else
+ failure
+ fi
+ echo
+ return $RETVAL
+}
+
+restart() {
+ stop
+ start
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+
+ stop)
+ stop
+ ;;
+
+ restart|force-reload)
+ restart
+ ;;
+
+ reload)
+ echo -n "Reload service $DESCRIPTIVE"
+ killproc -p $PIDFILE -HUP $DAEMON
+ RETVAL=$?
+ echo
+ exit $RETVAL
+ ;;
+
+ status)
+ echo -n "Checking for service $DESCRIPTIVE"
+ status $DAEMON
+ RETVAL=$?
+ exit $RETVAL
+ ;;
+
+ *)
+ echo "Usage: $0 {restart|start|stop|reload|force-reload|status}"
+esac
+
+exit $RETVAL
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-rpmlintrc b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-rpmlintrc
new file mode 100644
index 000000000..785e32aaa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/openwbem-rpmlintrc
@@ -0,0 +1,2 @@
+addFilter("devel-file-in-non-devel-package .*/lib.*\.so")
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/owcimomd.service b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/owcimomd.service
new file mode 100644
index 000000000..c6694b719
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/owcimomd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Web Based Enterprise Management (WBEM) Implementation
+After=syslog.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/owcimomd
+ExecStartPre=/etc/openwbem/checkserverkey
+PIDFile=/var/run/owcimomd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/rmmof.sh b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/rmmof.sh
new file mode 100644
index 000000000..a495415be
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openwbem/openwbem/rmmof.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# options:
+# rmmof.sh <MOF_PATH> <NAMESPACE> <FILES>
+#
+# - or -
+#
+# options:
+# loadmof.sh -n <NAMESPACE> <FILES> [...]
+#
+# The former is preserved for compatibility with Pegasus and
+# sblim providers. The latter is preferred. If $1 is "-n",
+# the latter code path is executed. Otherwise the former is
+# executed.
+
+if [ "x$3" = "x" ]; then
+ echo "Usage: $0 -n <NAMESPACE> <FILES> [...]"
+ exit 1
+fi
+
+# get rid of "-n" arg
+shift
+
+NS="$1"
+
+shift
+
+DBDIR=/var/lib/openwbem
+CIMOM_INIT=/etc/init.d/owcimomd
+if [ "$YAST_IS_RUNNING" != "instsys" ] ; then
+ $CIMOM_INIT status
+ CIMOM_RUNNING=$?
+fi
+if [ "x$CIMOM_RUNNING" = "x0" ]; then
+ $CIMOM_INIT stop
+fi
+bkpdir=/tmp/owrep.bkp-$$
+mkdir $bkpdir
+cp -a $DBDIR $bkpdir/
+echo "Compiling MOF files"
+/usr/bin/owmofc -r -n $NS -d $DBDIR "$@" > /dev/null 2>&1
+RVAL=$?
+if [ "x$RVAL" != "x0" ]; then
+ echo "MOF import failed!"
+ rm -rf $DBDIR
+ mv $bkpdir/openwbem $DBDIR
+fi
+rm -rf $bkpdir
+if [ "x$CIMOM_RUNNING" = "x0" ]; then
+ $CIMOM_INIT start
+fi
+exit $RVAL
+
diff --git a/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd/fix-var-lock.patch b/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd/fix-var-lock.patch
new file mode 100644
index 000000000..aa84e180e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd/fix-var-lock.patch
@@ -0,0 +1,30 @@
+Use /var/lock instead of /var/lock/subsys
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: p910nd/p910nd.8
+===================================================================
+--- p910nd.orig/p910nd.8 2011-11-14 22:41:41.904615879 +0100
++++ p910nd/p910nd.8 2011-11-14 22:49:52.299047607 +0100
+@@ -83,7 +83,7 @@
+ .SH "SEE ALSO"
+ printcap(5), hosts_access(5)
+ .SH FILES
+-/var/run/p9100d.pid, /var/lock/subsys/p9100d, /etc/hosts.allow, /etc/hosts.deny
++/var/run/p9100d.pid, /var/lock/p9100d, /etc/hosts.allow, /etc/hosts.deny
+ .SH COPYRIGHT
+ .I p910nd
+ is under the GNU Public License Version 2
+Index: p910nd/p910nd.c
+===================================================================
+--- p910nd.orig/p910nd.c 2011-11-14 22:47:41.986401420 +0100
++++ p910nd/p910nd.c 2011-11-14 22:49:27.274923524 +0100
+@@ -122,7 +122,7 @@
+ #ifdef LOCKFILE_DIR
+ #define LOCKFILE LOCKFILE_DIR "/p910%cd"
+ #else
+-#define LOCKFILE "/var/lock/subsys/p910%cd"
++#define LOCKFILE "/var/lock/p910%cd"
+ #endif
+ #ifndef PRINTERFILE
+ #define PRINTERFILE "/dev/lp%c"
diff --git a/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd_0.95.bb b/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd_0.95.bb
new file mode 100644
index 000000000..5ebbb29e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/p910nd/p910nd_0.95.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "A small network printer daemon for embedded situations that passes the job directly to the printer"
+HOMEPAGE = "http://p910nd.sourceforge.net/"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/p910nd/p910nd-${PV}.tar.bz2 \
+ file://fix-var-lock.patch"
+
+SRC_URI[md5sum] = "c7ac6afdf7730ac8387a8e87198d4491"
+SRC_URI[sha256sum] = "7d78642c86dc247fbdef1ff85c56629dcdc6b2a457c786420299e284fffcb029"
+
+do_compile () {
+ ${CC} ${LDFLAGS} -o p910nd p910nd.c
+}
+
+do_install () {
+ install -D -m 0755 ${S}/p910nd ${D}${sbindir}/p910nd
+ install -D -m 0644 ${S}/p910nd.conf ${D}${sysconfdir}/p910nd.conf
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.22.bb b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.22.bb
new file mode 100644
index 000000000..90d58b00d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.22.bb
@@ -0,0 +1,49 @@
+SUMMARY = "PC/SC Lite smart card framework and applications"
+HOMEPAGE = "http://pcsclite.alioth.debian.org/"
+LICENSE = "BSD & GPLv3+"
+LICENSE_${PN} = "BSD"
+LICENSE_${PN}-lib = "BSD"
+LICENSE_${PN}-doc = "BSD"
+LICENSE_${PN}-dev = "BSD"
+LICENSE_${PN}-dbg = "BSD & GPLv3+"
+LICENSE_${PN}-spy = "GPLv3+"
+LICENSE_${PN}-spy-dev = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f38b3d1c7ef7fc2c8b6d20cd38efdc29"
+DEPENDS = "udev"
+
+SRC_URI = "https://alioth.debian.org/frs/download.php/file/4225/pcsc-lite-${PV}.tar.bz2"
+SRC_URI[md5sum] = "0ec103b1ef298d0c58d6ef6b00b9cf17"
+SRC_URI[sha256sum] = "6a358f61ed3b66a7f6e1f4e794a94c7be4c81b7a58ec360c33791e8d7d9bd405"
+
+
+inherit autotools systemd pkgconfig
+
+EXTRA_OECONF = " \
+ --disable-libusb \
+ --enable-libudev \
+ --enable-usbdropdir=${libdir}/pcsc/drivers \
+"
+
+S = "${WORKDIR}/pcsc-lite-${PV}"
+
+PACKAGES = "${PN} ${PN}-dbg ${PN}-dev ${PN}-lib ${PN}-doc ${PN}-spy ${PN}-spy-dev"
+
+RRECOMMENDS_${PN} = "ccid"
+
+FILES_${PN} = "${sbindir}/pcscd"
+FILES_${PN}-lib = "${libdir}/libpcsclite*${SOLIBS}"
+FILES_${PN}-dev = "${includedir} \
+ ${libdir}/pkgconfig \
+ ${libdir}/libpcsclite.la \
+ ${libdir}/libpcsclite.so"
+
+FILES_${PN}-spy = "${bindir}/pcsc-spy \
+ ${libdir}/libpcscspy*${SOLIBS}"
+FILES_${PN}-spy-dev = "${libdir}/libpcscspy.la \
+ ${libdir}/libpcscspy.so "
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "pcscd.socket"
+RDEPENDS_${PN}-spy +="python"
diff --git a/meta-openembedded/meta-oe/recipes-support/picocom/picocom_git.bb b/meta-openembedded/meta-oe/recipes-support/picocom/picocom_git.bb
new file mode 100644
index 000000000..e091094cf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/picocom/picocom_git.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Lightweight and minimal (~20K) dumb-terminal emulation program"
+SECTION = "console/utils"
+LICENSE = "GPLv2+"
+HOMEPAGE = "http://code.google.com/p/picocom/"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3000e4830620e310fe65c0eb69df9e8a"
+
+BASEPV = "2.2"
+PV = "${BASEPV}+git${SRCPV}"
+
+SRCREV = "deffd18c24145bd6f965f44e735a50b65810ccdc"
+
+SRC_URI = "git://github.com/npat-efault/picocom"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "'CC=${CC}' 'LD=${CC}' 'VERSION=${BASEPV}' \
+ 'CFLAGS=${CFLAGS}' 'LDFLAGS=${LDFLAGS}' "
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${BPN} pcasc pcxm pcym pczm ${D}${bindir}/
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/fix_qa-issue_include.patch b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/fix_qa-issue_include.patch
new file mode 100644
index 000000000..ecdbffb51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/fix_qa-issue_include.patch
@@ -0,0 +1,18 @@
+libotr: Fix QA-issue where also files from buildhost would be included
+
+Warning was:
+cc1: warning: include location "/usr/include" is unsafe for
+cross-compilation [-Wpoison-system-directories]
+
+Upstream-Status: Pending
+
+Signed-off-by: Jakob Drexel <jake42@rommel.stw.uni-erlangen.de>
+
+--- a/toolkit/Makefile.am 2012-05-03 15:52:22.000000000 +0200
++++ b/toolkit/Makefile.am 2014-01-13 12:12:26.030369357 +0100
+@@ -1,4 +1,4 @@
+-AM_CPPFLAGS = -I$(includedir) -I../src @LIBGCRYPT_CFLAGS@
++AM_CPPFLAGS = -I../src @LIBGCRYPT_CFLAGS@
+
+ noinst_HEADERS = aes.h ctrmode.h parse.h sesskeys.h readotr.h sha1hmac.h
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/sepbuild.patch b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/sepbuild.patch
new file mode 100644
index 000000000..dda17a957
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr/sepbuild.patch
@@ -0,0 +1,16 @@
+Fix builds with ${B} != ${S}
+
+Upstream-Status: Pending
+
+RP 2014/7/17
+
+Index: libotr-4.0.0/toolkit/Makefile.am
+===================================================================
+--- libotr-4.0.0.orig/toolkit/Makefile.am 2014-07-16 18:09:59.777858022 +0000
++++ libotr-4.0.0/toolkit/Makefile.am 2014-07-17 06:28:51.359066155 +0000
+@@ -1,4 +1,4 @@
+-AM_CPPFLAGS = -I../src @LIBGCRYPT_CFLAGS@
++AM_CPPFLAGS = -I$(top_srcdir)/src @LIBGCRYPT_CFLAGS@
+
+ noinst_HEADERS = aes.h ctrmode.h parse.h sesskeys.h readotr.h sha1hmac.h
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/libotr_4.1.1.bb b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr_4.1.1.bb
new file mode 100644
index 000000000..c70124421
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/libotr_4.1.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "(OTR) Messaging allows you to have private conversations over instant messaging"
+HOMEPAGE = "http://www.cypherpunks.ca/otr/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=92fe174bad6da3763f6e9e9eaff6df24"
+DEPENDS = "libgcrypt libgpg-error"
+
+SRC_URI = "http://www.cypherpunks.ca/otr/${BP}.tar.gz \
+ file://fix_qa-issue_include.patch \
+ file://sepbuild.patch \
+"
+
+SRC_URI[md5sum] = "dac5a8778a35f674c046ddf5d97e4d81"
+SRC_URI[sha256sum] = "8b3b182424251067a952fb4e6c7b95a21e644fbb27fbd5f8af2b2ed87ca419f5"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin-otr_4.0.2.bb b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin-otr_4.0.2.bb
new file mode 100644
index 000000000..5a21cd3fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin-otr_4.0.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "(OTR) Messaging allows you to have private conversations over instant messaging"
+HOMEPAGE = "https://otr.cypherpunks.ca/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=92fe174bad6da3763f6e9e9eaff6df24"
+DEPENDS = "libgcrypt libotr pidgin gtk+ intltool-native glib-2.0 glib-2.0-native"
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "https://otr.cypherpunks.ca/${BP}.tar.gz \
+"
+SRC_URI[md5sum] = "7ef14e1334a4bc80e5d530f9a3cfc626"
+SRC_URI[sha256sum] = "f4b59eef4a94b1d29dbe0c106dd00cdc630e47f18619fc754e5afbf5724ebac4"
+
+FILES_${PN} = "${libdir}/pidgin/*"
+
+inherit autotools pkgconfig distro_features_check
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/pidgin-cross-python-265.patch b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/pidgin-cross-python-265.patch
new file mode 100644
index 000000000..312fc8593
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/pidgin-cross-python-265.patch
@@ -0,0 +1,42 @@
+From 855cc20bafa30597ae7a62f7672d42654b25cde0 Mon Sep 17 00:00:00 2001
+From: Herrie <github.com@herrie.org>
+Date: Mon, 24 Jul 2017 21:30:16 +0200
+Subject: [PATCH] Use pkg-config instead of ${PYTHON}-config to find python
+
+---
+ configure.ac | 21 ++++++++-------------
+ 1 file changed, 8 insertions(+), 13 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index d20a18e..c741829 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1567,20 +1567,15 @@ AM_CONDITIONAL(ENABLE_DBUS, test "x$enable_dbus" = "xyes")
+ dnl Check for Python headers (currently useful only for libgnt)
+ dnl (Thanks to XChat)
+ if test "x$enable_consoleui" = "xyes" -a ! -z "$PYTHON" -a x"$PYTHON" != x"no" ; then
+- AC_MSG_CHECKING(for Python compile flags)
+- if test -f ${PYTHON}-config; then
+- PY_CFLAGS=`${PYTHON}-config --includes`
+- PY_LIBS=`${PYTHON}-config --libs`
+- AC_DEFINE(USE_PYTHON, [1], [Define if python headers are available.])
+- AC_MSG_RESULT(ok)
+- else
+- AC_MSG_RESULT([Cannot find ${PYTHON}-config])
+- PY_CFLAGS=""
+- PY_LIBS=""
+- fi
++ AC_MSG_CHECKING(for Python compile flags)
++ PKG_CHECK_MODULES(PY, python, [
++ AC_SUBST(PY_CFLAGS)
++ AC_SUBST(PY_LIBS)
++ ], [
++ AC_MSG_RESULT(no)
++ AC_MSG_ERROR([Can't find python])
++ ])
+ fi
+-AC_SUBST(PY_CFLAGS)
+-AC_SUBST(PY_LIBS)
+
+ dnl #######################################################################
+ dnl # Check for Mono support
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/purple-OE-branding-25.patch b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/purple-OE-branding-25.patch
new file mode 100644
index 000000000..9a24fbbc5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/purple-OE-branding-25.patch
@@ -0,0 +1,24 @@
+From 43e9db656431ffb22b429d5fca4ce3b4af21bc9e Mon Sep 17 00:00:00 2001
+From: Herrie <github.com@herrie.org>
+Date: Mon, 24 Jul 2017 21:30:16 +0200
+
+---
+ libpurple/protocols/irc/irc.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libpurple/protocols/irc/irc.h b/libpurple/protocols/irc/irc.h
+index fde35c4..66e52dd 100644
+--- a/libpurple/protocols/irc/irc.h
++++ b/libpurple/protocols/irc/irc.h
+@@ -40,9 +40,9 @@
+
+ #define IRC_DEFAULT_CHARSET "UTF-8"
+ #define IRC_DEFAULT_AUTODETECT FALSE
+-#define IRC_DEFAULT_ALIAS "purple"
++#define IRC_DEFAULT_ALIAS "OE-user"
+
+-#define IRC_DEFAULT_QUIT "Leaving."
++#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org"
+
+ #define IRC_INITIAL_BUFSIZE 1024
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/sanitize-configure.ac.patch b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/sanitize-configure.ac.patch
new file mode 100644
index 000000000..84dbcdc27
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin/sanitize-configure.ac.patch
@@ -0,0 +1,43 @@
+From c3058f9eadaf5ff28ba776cfed54b609a93a1249 Mon Sep 17 00:00:00 2001
+From: Herrie <github.com@herrie.org>
+Date: Mon, 24 Jul 2017 21:30:16 +0200
+
+---
+ configure.ac | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b8acd2a..d20a18e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -642,7 +642,7 @@ if test "x$enable_consoleui" = "xyes"; then
+ if test "x$enable_consoleui" = "xyes"; then
+ dnl # Some distros put the headers in ncursesw/, some don't
+ found_ncurses_h=no
+- for location in $ac_ncurses_includes $NCURSES_HEADERS /usr/include/ncursesw /usr/include
++ for location in $ac_ncurses_includes $NCURSES_HEADERS
+ do
+ f="$location/ncurses.h"
+ orig_CFLAGS="$CFLAGS"
+@@ -2397,10 +2397,6 @@ if test "$kerberos" != "no" ; then
+ KRB4_CFLAGS="$KRB4_CFLAGS -I${kerberos}/include/kerberosIV"
+ fi
+ KRB4_LDFLAGS="-L${kerberos}/lib"
+- elif test -d /usr/local/include/kerberosIV ; then
+- KRB4_CFLAGS="-I/usr/local/include/kerberosIV"
+- elif test -d /usr/include/kerberosIV ; then
+- KRB4_CFLAGS="-I/usr/include/kerberosIV"
+ fi
+ AC_DEFINE(ZEPHYR_USES_KERBEROS, 1, [Define if kerberos should be used in Zephyr.])
+
+@@ -2433,10 +2429,6 @@ if test "$zephyr" != "no" ; then
+ ZEPHYR_LDFLAGS="-L${zephyr}/lib"
+ elif test -d /usr/athena/include/zephyr ; then
+ ZEPHYR_CFLAGS="-I/usr/athena/include"
+- elif test -d /usr/include/zephyr ; then
+- ZEPHYR_CFLAGS="-I/usr/include"
+- elif test -d /usr/local/include/zephyr ; then
+- ZEPHYR_CFLAGS="-I/usr/local/include"
+ fi
+ AC_DEFINE(LIBZEPHYR_EXT, 1 , [Define if external libzephyr should be used.])
+ AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno")
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin_2.12.0.bb b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin_2.12.0.bb
new file mode 100644
index 000000000..088f08b7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/pidgin_2.12.0.bb
@@ -0,0 +1,120 @@
+SUMMARY = "multi-protocol instant messaging client"
+SECTION = "x11/network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "python virtual/libintl intltool-native libxml2 gconf glib-2.0-native"
+
+inherit autotools gettext pkgconfig gconf perlnative
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \
+ file://sanitize-configure.ac.patch \
+ file://purple-OE-branding-25.patch \
+ file://pidgin-cross-python-265.patch \
+"
+
+SRC_URI[md5sum] = "8287400c4e5663e0e7844e868d5152af"
+SRC_URI[sha256sum] = "8c3d3536d6d3c971bd433ff9946678af70a0f6aa4e6969cc2a83bb357015b7f8"
+
+PACKAGECONFIG ??= "gnutls consoleui avahi dbus idn nss \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 gtk startup-notification', '', d)} \
+"
+PACKAGECONFIG[farsight2] = "--enable-farstream,--disable-farstream,farsight2"
+# --disable-gstreamer compile without GStreamer audio support
+# --disable-gstreamer-video
+# compile without GStreamer 1.0 Video Overlay support
+# --disable-gstreamer-interfaces
+# compile without GStreamer 0.10 interface support
+# --with-gstreamer=<version>
+# compile with GStreamer 0.10 or 1.0 interface
+PACKAGECONFIG[gstreamer] = "--enable-gstreamer,--disable-gstreamer,gstreamer"
+PACKAGECONFIG[vv] = "--enable-vv,--disable-vv,gstreamer"
+PACKAGECONFIG[idn] = "--enable-idn,--disable-idn,libidn"
+PACKAGECONFIG[gtk] = "--enable-gtkui,--disable-gtkui,gtk+"
+PACKAGECONFIG[x11] = "--with-x=yes --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR},--with-x=no,virtual/libx11"
+PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+PACKAGECONFIG[consoleui] = "--enable-consoleui --with-ncurses-headers=${STAGING_INCDIR},--disable-consoleui,ncurses"
+PACKAGECONFIG[gnutls] = "--enable-gnutls --with-gnutls-includes=${STAGING_INCDIR} --with-gnutls-libs=${STAGING_LIBDIR},--disable-gnutls,gnutls,libpurple-plugin-ssl-gnutls"
+PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus dbus-glib"
+PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
+PACKAGECONFIG[nss] = "--enable-nss,--disable-nss,nss nspr,libpurple-plugin-ssl-nss"
+
+EXTRA_OECONF = " \
+ --disable-perl \
+ --disable-tcl \
+ --disable-gevolution \
+ --disable-schemas-install \
+ --disable-gtkspell \
+ --disable-meanwhile \
+ --disable-nm \
+ --disable-screensaver \
+"
+
+do_configure_prepend() {
+ touch ${S}/po/Makefile
+ sed -i "s#PY_VERSION=`$PYTHON -c 'import sys ; print sys.version[0:3]'`#PY_VERSION=${PYTHON_BASEVERSION}#g" ${S}/configure.ac
+}
+
+OE_LT_RPATH_ALLOW=":${libdir}/purple-2:"
+OE_LT_RPATH_ALLOW[export]="1"
+
+PACKAGES =+ "libpurple-dbg libpurple-dev libpurple libgnt-dbg libgnt libgnt-dev finch-dbg finch finch-dev ${PN}-data"
+
+LEAD_SONAME = "libpurple.so.0"
+FILES_libpurple = "${libdir}/libpurple*.so.* ${libdir}/purple-2 ${bindir}/purple-* ${sysconfdir}/gconf/schemas/purple* ${datadir}/purple/ca-certs"
+FILES_libpurple-dev = "${libdir}/libpurple*.la \
+ ${libdir}/libpurple*.so \
+ ${libdir}/purple-2/*.la \
+ ${libdir}/purple-2/libjabber.so \
+ ${libdir}/purple-2/liboscar.so \
+ ${libdir}/purple-2/libymsg.so \
+ ${datadir}/aclocal"
+FILES_libpurple-dbg += "${libdir}/.debug/libpurple* \
+ ${libdir}/purple-2/.debug"
+FILES_libgnt = "${libdir}/libgnt.so.* ${libdir}/gnt/*.so"
+FILES_libgnt-dev = "${libdir}/gnt/*.la"
+FILES_libgnt-dbg = "${libdir}/gnt/.debug"
+FILES_finch = "${bindir}/finch"
+FILES_finch-dev = "${libdir}/finch/*.la"
+FILES_finch-dbg = "${bindir}/.debug/finch \
+ ${libdir}/finch/.debug"
+
+FILES_${PN} = "${bindir} ${datadir}/${PN} ${libdir}/${PN}/*.so \
+ ${datadir}/applications"
+RRECOMMENDS_${PN} = "${PN}-data libpurple-protocol-irc libpurple-protocol-xmpp"
+
+FILES_${PN}-data = "${datadir}/pixmaps ${datadir}/sounds ${datadir}/icons ${datadir}/appdata"
+FILES_${PN}-dev += "${libdir}/${PN}/*.la"
+
+PACKAGES_DYNAMIC += "^libpurple-protocol-.* ^libpurple-plugin-.* ^pidgin-plugin-.* ^finch-plugin-.*"
+
+python populate_packages_prepend () {
+ pidgroot = d.expand('${libdir}/pidgin')
+ purple = d.expand('${libdir}/purple-2')
+ finch = d.expand('${libdir}/finch')
+
+ do_split_packages(d, pidgroot, '^([^l][^i][^b].*)\.so$',
+ output_pattern='pidgin-plugin-%s',
+ description='Pidgin plugin %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, purple, '^lib(.*)\.so$',
+ output_pattern='libpurple-protocol-%s',
+ description='Libpurple protocol plugin for %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, purple, '^(ssl-.*)\.so$',
+ output_pattern='libpurple-plugin-%s',
+ description='libpurple plugin %s',
+ prepend=True, extra_depends='libpurple-plugin-ssl')
+
+ do_split_packages(d, purple, '^([^l][^i][^b].*)\.so$',
+ output_pattern='libpurple-plugin-%s',
+ description='libpurple plugin %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, finch, '^([^l][^i][^b].*)\.so$',
+ output_pattern='finch-plugin-%s',
+ description='Finch plugin %s',
+ prepend=True, extra_depends='')
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-make-Respect-variables-from-environement.patch b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-make-Respect-variables-from-environement.patch
new file mode 100644
index 000000000..2d0ea0252
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-make-Respect-variables-from-environement.patch
@@ -0,0 +1,60 @@
+From 6245f18091cad11520c159248c1cf7a84f12857c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 5 Apr 2017 13:15:43 -0700
+Subject: [PATCH] make: Respect variables from environement
+
+link with shared zlib
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.unx | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/Makefile.unx b/Makefile.unx
+index 772da46..4ae7061 100644
+--- a/Makefile.unx
++++ b/Makefile.unx
+@@ -24,18 +24,16 @@ ZINC = -I$(ZPATH)
+ ZLIB = $(ZPATH)/libz.a
+
+ INCS = $(ZINC)
+-LIBS = $(ZLIB)
++LIBS = -lz
+
+-CC = gcc
+-LD = gcc
+-RM = rm
+-CFLAGS = -O -Wall $(INCS) -DUSE_ZLIB
++CC ?= gcc
++LD ?= gcc
++RM ?= rm
++CFLAGS += -O -Wall $(INCS) -DUSE_ZLIB
+ # [note that -Wall is a gcc-specific compilation flag ("all warnings on")]
+ O = .o
+ E =
+
+-LDFLAGS =
+-
+ PROG = pngcheck
+ PROG2 = pngsplit
+ PROG3 = png-fix-IDAT-windowsize
+@@ -57,13 +55,13 @@ EXES = $(PROG)$(E) $(PROG2)$(E) $(PROG3)$(E)
+ all: $(EXES)
+
+ $(PROG)$(E): $(PROG).c
+- $(CC) $(CFLAGS) -o $@ $(PROG).c $(LIBS)
++ $(CC) $(CFLAGS) -o $@ $(PROG).c $(LDFLAGS) $(LIBS)
+
+ $(PROG2)$(E): gpl/$(PROG2).c
+- $(CC) $(CFLAGS) -o $@ gpl/$(PROG2).c $(LIBS)
++ $(CC) $(CFLAGS) -o $@ gpl/$(PROG2).c $(LDFLAGS) $(LIBS)
+
+ $(PROG3)$(E): gpl/$(PROG3).c
+- $(CC) $(CFLAGS) -o $@ gpl/$(PROG3).c $(LIBS)
++ $(CC) $(CFLAGS) -o $@ gpl/$(PROG3).c $(LDFLAGS) $(LIBS)
+
+
+ # maintenance ---------------------------------------------------------------
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-png-fix-IDAT-windowsize-Fix-format-string-errors-in-.patch b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-png-fix-IDAT-windowsize-Fix-format-string-errors-in-.patch
new file mode 100644
index 000000000..6d4465fbe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/0001-png-fix-IDAT-windowsize-Fix-format-string-errors-in-.patch
@@ -0,0 +1,36 @@
+From d4d8257953bd1e7be167aed24c0578362cc5f675 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 5 Apr 2017 13:12:30 -0700
+Subject: [PATCH 1/2] png-fix-IDAT-windowsize: Fix format string errors in
+ fprintf
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gpl/png-fix-IDAT-windowsize.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gpl/png-fix-IDAT-windowsize.c b/gpl/png-fix-IDAT-windowsize.c
+index 6d4ef9c..d212017 100644
+--- a/gpl/png-fix-IDAT-windowsize.c
++++ b/gpl/png-fix-IDAT-windowsize.c
+@@ -127,7 +127,7 @@ int main(int argc, char *argv[])
+ fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n",
+ ZLIB_VERSION, zlib_version);
+ fprintf(stderr, "\n");
+- fprintf(stderr, png_fix_IDAT_windowsize_usage);
++ fprintf(stderr, "%s", png_fix_IDAT_windowsize_usage);
+ fflush(stderr);
+ return 1;
+ }
+@@ -143,7 +143,7 @@ int main(int argc, char *argv[])
+ fflush(stdout);
+
+ if ( argn == argc ) {
+- fprintf(stderr, png_fix_IDAT_windowsize_usage);
++ fprintf(stderr, "%s", png_fix_IDAT_windowsize_usage);
+ fflush(stderr);
+ return 5;
+ } else {
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/10-pngsplit-format-strings.patch b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/10-pngsplit-format-strings.patch
new file mode 100644
index 000000000..f2c86689e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck/10-pngsplit-format-strings.patch
@@ -0,0 +1,40 @@
+From: Jari Aalto <jari.aalto@cante.net>
+Subject: Correct fomat strings fro hardened build flags
+
+---
+ gpl/pngsplit.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/gpl/pngsplit.c
++++ b/gpl/pngsplit.c
+@@ -141,8 +141,8 @@
+ 0 == strncmp( argv[argn], "-quiet", 2 ) )
+ verbose = 0;
+ else {
+- fprintf(stderr, pngsplit_hdr);
+- fprintf(stderr, pngsplit_usage);
++ fprintf(stderr, "%s", pngsplit_hdr);
++ fprintf(stderr, "%s", pngsplit_usage);
+ fflush(stderr);
+ return 1;
+ }
+@@ -150,8 +150,8 @@
+ }
+
+ if ( argn == argc ) {
+- fprintf(stderr, pngsplit_hdr);
+- fprintf(stderr, pngsplit_usage);
++ fprintf(stderr, "%s", pngsplit_hdr);
++ fprintf(stderr, "%s", pngsplit_usage);
+ fflush(stderr);
+ return 5;
+ } else {
+@@ -162,7 +162,7 @@
+
+ /*============================= MAIN LOOP =============================*/
+
+- fprintf(stdout, pngsplit_hdr);
++ fprintf(stdout, "%s", pngsplit_hdr);
+ fflush(stdout);
+
+ while (argn <= argc) {
diff --git a/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck_2.3.0.bb b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck_2.3.0.bb
new file mode 100644
index 000000000..9f617ecda
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pngcheck/pngcheck_2.3.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "pngcheck verifies the integrity of PNG, JNG and MNG files"
+HOMEPAGE = "http://www.libpng.org/pub/png/apps/pngcheck.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://gpl/COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "zlib libpng"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/png-mng/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+ file://10-pngsplit-format-strings.patch \
+ file://0001-png-fix-IDAT-windowsize-Fix-format-string-errors-in-.patch \
+ file://0001-make-Respect-variables-from-environement.patch \
+ "
+
+SRC_URI[md5sum] = "980bd6d9a3830fdce746d7fe3c9166ee"
+SRC_URI[sha256sum] = "77f0a039ac64df55fbd06af6f872fdbad4f639d009bbb5cd5cbe4db25690f35f"
+
+CFLAGS += "-DUSE_ZLIB"
+
+EXTRA_OEMAKE = "-f ${S}/Makefile.unx"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install pngcheck ${D}${bindir}
+ install png-fix-IDAT-windowsize ${D}${bindir}
+ install pngsplit ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest b/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest
new file mode 100644
index 000000000..c479f7ac1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest
@@ -0,0 +1,9 @@
+#!/bin/sh
+while read runner; do
+ pushd . >/dev/null
+ cd bin
+ echo Testing $runner
+ ./$runner-testrunner -all
+ popd >/dev/null
+done < testrunners
+
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.8.0.1.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.8.0.1.bb
new file mode 100644
index 000000000..160b4d391
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.8.0.1.bb
@@ -0,0 +1,106 @@
+SUMMARY = "Modern, powerful open source cross-platform C++ class libraries"
+DESCRIPTION = "Modern, powerful open source C++ class libraries and frameworks for building network- and internet-based applications that run on desktop, server, mobile and embedded systems."
+SECTION = "libs"
+HOMEPAGE = "http://pocoproject.org/"
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4267f48fc738f50380cbeeb76f95cebc"
+
+# These dependencies are required by Foundation
+DEPENDS = "libpcre zlib"
+
+inherit cmake ptest
+
+BBCLASSEXTEND = "native"
+
+SRCREV = "af527ab21fca5ab2659285408aec9920ed7c7b17"
+SRC_URI = " \
+ git://github.com/pocoproject/poco.git \
+ file://run-ptest \
+ "
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=RelWithDebInfo -DPOCO_UNBUNDLED=ON \
+ -DZLIB_LIBRARY_RELEASE:STRING=z -DPCRE_LIBRARY:STRING=pcre \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', '-DENABLE_TESTS=ON ', '', d)}"
+
+# For the native build we want to use the bundled version
+EXTRA_OECMAKE_append_class-native = " -DPOCO_UNBUNDLED=OFF"
+
+# do not use rpath
+EXTRA_OECMAKE_append = " -DCMAKE_SKIP_RPATH=ON"
+
+# By default the most commonly used poco components are built
+# Foundation is built anyway and doesn't need to be listed explicitly
+# these don't have dependencies outside oe-core
+PACKAGECONFIG ??= "XML JSON MongoDB PDF Util Net NetSSL Crypto Data DataSQLite Zip"
+
+PACKAGECONFIG[XML] = "-DENABLE_XML=ON -DEXPAT_LIBRARY:STRING=expat,-DENABLE_XML=OFF,expat"
+PACKAGECONFIG[JSON] = "-DENABLE_JSON=ON,-DENABLE_JSON=OFF"
+PACKAGECONFIG[MongoDB] = "-DENABLE_MONGODB=ON,-DENABLE_MONGODB=OFF"
+PACKAGECONFIG[PDF] = "-DENABLE_PDF=ON,-DENABLE_PDF=OFF,zlib"
+PACKAGECONFIG[Util] = "-DENABLE_UTIL=ON,-DENABLE_UTIL=OFF"
+PACKAGECONFIG[Net] = "-DENABLE_NET=ON,-DENABLE_NET=OFF"
+PACKAGECONFIG[NetSSL] = "-DENABLE_NETSSL=ON -DOPENSSL_SSL_LIBRARY:STRING=ssl -DOPENSSL_CRYPTO_LIBRARY:STRING=crypto,-DENABLE_NETSSL=OFF,openssl"
+PACKAGECONFIG[Crypto] = "-DENABLE_CRYPTO=ON -DOPENSSL_SSL_LIBRARY:STRING=ssl -DOPENSSL_CRYPTO_LIBRARY:STRING=crypto,-DENABLE_CRYPTO=OFF,openssl"
+PACKAGECONFIG[Data] = "-DENABLE_DATA=ON,-DENABLE_DATA=OFF"
+PACKAGECONFIG[DataSQLite] = "-DENABLE_DATA_SQLITE=ON -DSQLITE3_LIBRARY:STRING=sqlite3,-DENABLE_DATA_SQLITE=OFF,sqlite3"
+PACKAGECONFIG[Zip] = "-DENABLE_ZIP=ON,-DENABLE_ZIP=OFF"
+
+# Additional components not build by default,
+# they might have dependencies not included in oe-core
+# or they don't work on all architectures
+PACKAGECONFIG[mod_poco] = "-DENABLE_APACHECONNECTOR=ON,-DENABLE_APACHECONNECTOR=OFF,apr apache2"
+PACKAGECONFIG[CppParser] = "-DENABLE_CPPPARSER=ON,-DENABLE_CPPPARSER=OFF"
+PACKAGECONFIG[DataMySQL] = "-DENABLE_DATA_MYSQL=ON -DMYSQL_LIB:STRING=mysqlclient_r,-DENABLE_DATA_MYSQL=OFF,mariadb"
+PACKAGECONFIG[DataODBC] = "-DENABLE_DATA_ODBC=ON,-DENABLE_DATA_ODBC=OFF,libiodbc"
+PACKAGECONFIG[PageCompiler] = "-DENABLE_PAGECOMPILER=ON,-DENABLE_PAGECOMPILER=OFF"
+PACKAGECONFIG[PageCompilerFile2Page] = "-DENABLE_PAGECOMPILER_FILE2PAGE=ON,-DENABLE_PAGECOMPILER_FILE2PAGE=OFF"
+PACKAGECONFIG[SevenZip] = "-DENABLE_SEVENZIP=ON,-DENABLE_SEVENZIP=OFF"
+
+# Make a package for each library
+PACKAGES = "${PN}-dbg ${POCO_PACKAGES}"
+python __anonymous () {
+ packages = []
+ testrunners = []
+ components = d.getVar("PACKAGECONFIG").split()
+ components.append("Foundation")
+ for lib in components:
+ pkg = ("poco-%s" % lib.lower()).replace("_","")
+ packages.append(pkg)
+ if not d.getVar("FILES_%s" % pkg):
+ d.setVar("FILES_%s" % pkg, "${libdir}/libPoco%s.so.*" % lib)
+ testrunners.append("%s" % lib)
+
+ d.setVar("POCO_PACKAGES", " ".join(packages))
+ d.setVar("POCO_TESTRUNNERS", "\n".join(testrunners))
+}
+
+# "poco" is a metapackage which pulls in all Poco components
+PACKAGES += "${PN}"
+RRECOMMENDS_${PN} += "${POCO_PACKAGES}"
+RRECOMMENDS_${PN}_class-native = ""
+ALLOW_EMPTY_${PN} = "1"
+
+# -dev last to pick up the remaining stuff
+PACKAGES += "${PN}-dev ${PN}-staticdev"
+FILES_${PN}-dev = "${includedir} ${libdir}/libPoco*.so ${libdir}/cmake"
+FILES_${PN}-staticdev = "${libdir}/libPoco*.a"
+
+# ptest support
+FILES_${PN}-dbg += "${PTEST_PATH}/bin/.debug"
+
+# cppunit is only built if tests are enabled
+PACKAGES += "${PN}-cppunit"
+FILES_${PN}-cppunit += "${libdir}/libCppUnit.so*"
+ALLOW_EMPTY_${PN}-cppunit = "1"
+
+RDEPENDS_${PN}-ptest += "${PN}-cppunit"
+
+do_install_ptest () {
+ cp -rf ${B}/bin/ ${D}${PTEST_PATH}
+ cp -f ${B}/lib/libCppUnit.so* ${D}${libdir}
+ cp -rf ${B}/*/testsuite/data ${D}${PTEST_PATH}/bin/
+ find "${D}${PTEST_PATH}" -executable -exec chrpath -d {} \;
+ echo "${POCO_TESTRUNNERS}" > "${D}${PTEST_PATH}/testrunners"
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler-data_0.4.8.bb b/meta-openembedded/meta-oe/recipes-support/poppler/poppler-data_0.4.8.bb
new file mode 100644
index 000000000..343b6db81
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler-data_0.4.8.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Encoding files for Poppler"
+DESCRIPTION = "Encoding files for use with poppler that enable poppler to \
+ correctly render CJK and Cyrrilic."
+LICENSE = "BSD & GPLv2 & GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4870b98343f0bbb25fa43b9d2ba59448 \
+ file://COPYING.adobe;md5=63c6a8a9df204c00461fa5f163d8a663 \
+ file://COPYING.gpl2;md5=751419260aa954499f7abaabaa882bbe \
+"
+
+inherit allarch
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+CMAP_RESOURCES_BASE = "https://github.com/adobe-type-tools/cmap-resources/raw/0561ebca035813ed04c3485bca636a0aa7abdc1d/cmapresources_identity-0/CMap"
+
+SRC_URI = "http://poppler.freedesktop.org/${BP}.tar.gz \
+ ${CMAP_RESOURCES_BASE}/Identity-H;name=idh \
+ ${CMAP_RESOURCES_BASE}/Identity-V;name=idv"
+
+SRC_URI[md5sum] = "00f8989c804de84af0ba2ea629949980"
+SRC_URI[sha256sum] = "1096a18161f263cccdc6d8a2eb5548c41ff8fcf9a3609243f1b6296abdf72872"
+SRC_URI[idh.md5sum] = "009c93cf0141ab7bd6acb7eea14306cc"
+SRC_URI[idh.sha256sum] = "ae702c203a82ea124e9b96590f821db6fbf8754e2c4547a9dba0e82f94739e95"
+SRC_URI[idv.md5sum] = "2f32a45d43d001c26eeac6b878855fbf"
+SRC_URI[idv.sha256sum] = "89a85daf7031e93c883e76b9168a226dfd585bf5506e9e1956772163f15cb082"
+
+do_compile() {
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} prefix=${prefix} datadir=${datadir}
+ install -d ${D}${datadir}/poppler/cMap
+ install -m644 ${WORKDIR}/Identity-* ${D}${datadir}/poppler/cMap/
+}
+
+FILES_${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-Do-not-overwrite-all-our-build-flags.patch b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-Do-not-overwrite-all-our-build-flags.patch
new file mode 100644
index 000000000..18f508519
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-Do-not-overwrite-all-our-build-flags.patch
@@ -0,0 +1,38 @@
+From b6fc6c36d359a50503138cd87d7147faf6dff893 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Sat, 17 Mar 2018 20:52:10 +0100
+Subject: [PATCH] Do not overwrite all our build flags
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ cmake/modules/PopplerMacros.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/modules/PopplerMacros.cmake b/cmake/modules/PopplerMacros.cmake
+index ccb2790..0f392cb 100644
+--- a/cmake/modules/PopplerMacros.cmake
++++ b/cmake/modules/PopplerMacros.cmake
+@@ -125,14 +125,14 @@ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(DEFAULT_COMPILE_WARNINGS_EXTRA "${_warn} ${_warnx}")
+
+ set(_save_cxxflags "${CMAKE_CXX_FLAGS}")
+- set(CMAKE_CXX_FLAGS "-fno-exceptions -fno-check-new -fno-common -D_DEFAULT_SOURCE")
++ set(CMAKE_CXX_FLAGS "-fno-exceptions -fno-check-new -fno-common -D_DEFAULT_SOURCE ${_save_cxxflags}")
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g ${_save_cxxflags}")
+ set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG ${_save_cxxflags}")
+ set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline ${_save_cxxflags}")
+ set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline ${_save_cxxflags}")
+ set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs ${_save_cxxflags}")
+ set(_save_cflags "${CMAKE_C_FLAGS}")
+- set(CMAKE_C_FLAGS "-std=c99 -D_DEFAULT_SOURCE")
++ set(CMAKE_C_FLAGS "-std=c99 -D_DEFAULT_SOURCE ${_save_cflags}")
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g ${_save_cflags}")
+ set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG ${_save_cflags}")
+ set(CMAKE_C_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline ${_save_cflags}")
+--
+2.14.3
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0002-CairoOutputDev.cc-fix-build-error-when-using-fixedpo.patch b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0002-CairoOutputDev.cc-fix-build-error-when-using-fixedpo.patch
new file mode 100644
index 000000000..3c231fe93
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0002-CairoOutputDev.cc-fix-build-error-when-using-fixedpo.patch
@@ -0,0 +1,100 @@
+From 6287663e7db04df7e6dec58a1fc5bb5d510e8bde Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Mon, 9 Apr 2018 19:11:20 +0200
+Subject: [PATCH] CairoOutputDev.cc: fix build error when using fixedpoint
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc: In function 'int splashRound(SplashCoord)':
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:1604:28: error: call of overloaded 'floor(FixedPoint)' is ambiguous
+| return (int)floor(x + 0.5);
+| ^
+| In file included from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/features.h:428:0,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/os_defines.h:39,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/c++config.h:533,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cstdint:38,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:44:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h:165:1: note: candidate: double floor(double)
+| __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+| ^
+| In file included from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/math.h:36:0,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:46:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cmath:260:3: note: candidate: constexpr float std::floor(float)
+| floor(float __x)
+| ^~~~~
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cmath:264:3: note: candidate: constexpr long double std::floor(long double)
+| floor(long double __x)
+| ^~~~~
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc: In function 'int splashCeil(SplashCoord)':
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:1608:21: error: call of overloaded 'ceil(SplashCoord&)' is ambiguous
+| return (int)ceil(x);
+| ^
+| In file included from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/features.h:428:0,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/os_defines.h:39,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/c++config.h:533,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cstdint:38,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:44:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h:159:1: note: candidate: double ceil(double)
+| __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+| ^
+| In file included from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/math.h:36:0,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:46:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cmath:165:3: note: candidate: constexpr float std::ceil(float)
+| ceil(float __x)
+| ^~~~
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cmath:169:3: note: candidate: constexpr long double std::ceil(long double)
+| ceil(long double __x)
+| ^~~~
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc: In function 'int splashFloor(SplashCoord)':
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:1612:22: error: call of overloaded 'floor(SplashCoord&)' is ambiguous
+| return (int)floor(x);
+| ^
+| In file included from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/features.h:428:0,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/os_defines.h:39,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/arm-oe-linux-gnueabi/bits/c++config.h:533,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/c++/7.3.0/cstdint:38,
+| from <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/poppler-0.63.0/poppler/CairoOutputDev.cc:44:
+| <tmpdir>/oe-core-glibc/work/armv5te-oe-linux-gnueabi/poppler/0.63.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h:165:1: note: candidate: double floor(double)
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ poppler/CairoOutputDev.cc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
+index 18124b8f..4c85ad65 100644
+--- a/poppler/CairoOutputDev.cc
++++ b/poppler/CairoOutputDev.cc
+@@ -1602,15 +1602,27 @@ void CairoOutputDev::endActualText(GfxState *state)
+ }
+
+ static inline int splashRound(SplashCoord x) {
++#if defined(USE_FIXEDPOINT)
++ return FixedPoint::floor(x + 0.5);
++#else
+ return (int)floor(x + 0.5);
++#endif
+ }
+
+ static inline int splashCeil(SplashCoord x) {
++#if defined(USE_FIXEDPOINT)
++ return FixedPoint::ceil(x);
++#else
+ return (int)ceil(x);
++#endif
+ }
+
+ static inline int splashFloor(SplashCoord x) {
++#if defined(USE_FIXEDPOINT)
++ return FixedPoint::floor(x);
++#else
+ return (int)floor(x);
++#endif
+ }
+
+ static
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.63.0.bb b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.63.0.bb
new file mode 100644
index 000000000..8acb35628
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.63.0.bb
@@ -0,0 +1,56 @@
+SUMMARY = "Poppler is a PDF rendering library based on the xpdf-3.0 code base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = " \
+ http://poppler.freedesktop.org/${BP}.tar.xz \
+ file://0001-Do-not-overwrite-all-our-build-flags.patch \
+ file://0002-CairoOutputDev.cc-fix-build-error-when-using-fixedpo.patch \
+"
+SRC_URI[md5sum] = "66a54da4896b1408611699feda5c1821"
+SRC_URI[sha256sum] = "27cc8addafc791e1a26ce6acc2b490926ea73a4f89196dd8a7742cff7cf8a111"
+
+DEPENDS = "fontconfig zlib cairo lcms"
+
+inherit cmake pkgconfig gobject-introspection
+
+PACKAGECONFIG ??= "jpeg openjpeg png tiff nss ${@bb.utils.contains('BBFILE_COLLECTIONS', 'qt5-layer', 'qt5', '', d)}"
+PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON -DENABLE_DCTDECODER=libjpeg,-DWITH_JPEG=OFF -DENABLE_DCTDECODER=none,jpeg"
+PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng"
+PACKAGECONFIG[tiff] = "-DWITH_TIFF=ON,-DWITH_TIFF=OFF,tiff"
+PACKAGECONFIG[curl] = "-DENABLE_LIBCURL=ON,-DENABLE_LIBCURL=OFF,curl"
+PACKAGECONFIG[openjpeg] = "-DENABLE_LIBOPENJPEG=openjpeg2,-DENABLE_LIBOPENJPEG=none,openjpeg"
+PACKAGECONFIG[qt5] = "-DENABLE_QT5=ON,-DENABLE_QT5=OFF,qtbase qttools-native"
+PACKAGECONFIG[nss] = "-DWITH_NSS3=ON,-DWITH_NSS3=OFF,nss"
+
+# surprise - did not expect this to work :)
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'qt5', 'cmake_qt5', '', d)}
+
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
+
+EXTRA_OECMAKE += " \
+ -DENABLE_XPDF_HEADERS=ON \
+ -DBUILD_GTK_TESTS=OFF \
+ -DENABLE_ZLIB=ON \
+"
+
+do_configure_append() {
+ # poppler macro uses pkg-config to check for g-ir runtimes. Something
+ # makes them point to /usr/bin. Align them to sysroot - that's where the
+ # git-wrappers are:
+ sed -i 's: ${bindir}/g-ir: ${STAGING_BINDIR}/g-ir:' ${B}/build.ninja
+}
+
+# check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points
+def get_poppler_fpu_setting(bb, d):
+ if d.getVar('TARGET_FPU') in [ 'soft' ]:
+ return "-DUSE_FIXEDPOINT=ON"
+ return ""
+
+EXTRA_OECMAKE += "${@get_poppler_fpu_setting(bb, d)}"
+
+PACKAGES =+ "libpoppler libpoppler-glib"
+FILES_libpoppler = "${libdir}/libpoppler.so.*"
+FILES_libpoppler-glib = "${libdir}/libpoppler-glib.so.*"
+
+RDEPENDS_libpoppler = "poppler-data"
diff --git a/meta-openembedded/meta-oe/recipes-support/portaudio/files/ldflags.patch b/meta-openembedded/meta-oe/recipes-support/portaudio/files/ldflags.patch
new file mode 100644
index 000000000..aca93a51f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/portaudio/files/ldflags.patch
@@ -0,0 +1,51 @@
+Upstream forgot to pass LDFLAGS to everything apart from the main library.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/Makefile.in b/Makefile.in
+index 5e1a764..61ecdd1 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -171,20 +171,20 @@ lib/$(PALIB): lib-stamp $(LTOBJS) $(MAKEFILE) $(PAINC)
+ @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(PA_LDFLAGS) -o lib/$(PALIB) $(LTOBJS) $(DLL_LIBS)
+
+ $(ALL_TESTS): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) test/%.c
+- @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS)
+- @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS)
+
+ $(EXAMPLES): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) examples/%.c
+- @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS)
+- @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS)
+
+ $(SELFTESTS): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) qa/%.c
+- @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS)
+- @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS)
+
+ bin/paloopback: lib/$(PALIB) $(MAKEFILE) $(PAINC) $(LOOPBACK_OBJS)
+- @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS)
+- @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS)
++ @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS)
+
+ install: lib/$(PALIB) portaudio-2.0.pc
+ $(INSTALL) -d $(DESTDIR)$(libdir)
+@@ -224,10 +224,10 @@ distclean: clean
+ $(CC) -c $(CFLAGS) $< -o $@
+
+ %.lo: %.c $(MAKEFILE) $(PAINC)
+- $(LIBTOOL) --mode=compile $(CC) -c $(CFLAGS) $< -o $@
++ $(LIBTOOL) --mode=compile $(CC) -c $(CFLAGS) $(LDFLAGS) $< -o $@
+
+ %.lo: %.cpp $(MAKEFILE) $(PAINC)
+- $(LIBTOOL) --mode=compile --tag=CXX $(CXX) -c $(CXXFLAGS) $< -o $@
++ $(LIBTOOL) --mode=compile --tag=CXX $(CXX) -c $(CXXFLAGS) $(LDFLAGS) $< -o $@
+
+ %.o: %.cpp $(MAKEFILE) $(PAINC)
+ $(CXX) -c $(CXXFLAGS) $< -o $@
diff --git a/meta-openembedded/meta-oe/recipes-support/portaudio/portaudio-v19_20161030.bb b/meta-openembedded/meta-oe/recipes-support/portaudio/portaudio-v19_20161030.bb
new file mode 100644
index 000000000..489f8ad9e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/portaudio/portaudio-v19_20161030.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A portable audio library"
+SECTION = "libs/multimedia"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=26107732c2ab637c5710446fcfaf02df"
+
+PV = "v190600"
+
+SRC_URI = "http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz \
+ file://ldflags.patch"
+SRC_URI[md5sum] = "4df8224e047529ca9ad42f0521bf81a8"
+SRC_URI[sha256sum] = "f5a21d7dcd6ee84397446fa1fa1a0675bb2e8a4a6dceb4305a8404698d8d1513"
+
+S = "${WORKDIR}/portaudio"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= "alsa jack"
+PACKAGECONFIG[alsa] = "--with-alsa, --without-alsa, alsa-lib,"
+PACKAGECONFIG[jack] = "--with-jack, --without-jack, jack,"
+
+EXTRA_OECONF = "--without-oss --without-asihpi"
+
+do_install_append() {
+ mkdir --parents ${D}${bindir}
+ for b in ${B}/bin/pa*; do
+ # Bit nasty, should always work
+ ${B}/*-libtool --mode install install $b ${D}${bindir}
+ done
+}
+
+PACKAGES += "portaudio-examples"
+FILES_portaudio-examples = "${bindir}"
diff --git a/meta-openembedded/meta-oe/recipes-support/pps-tools/pps-tools_git.bb b/meta-openembedded/meta-oe/recipes-support/pps-tools/pps-tools_git.bb
new file mode 100644
index 000000000..8bf903699
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pps-tools/pps-tools_git.bb
@@ -0,0 +1,17 @@
+SUMMARY = "User-space tools for LinuxPPS"
+HOMEPAGE = "http://linuxpps.org"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+PV = "0.0.0+git${SRCPV}"
+SRCREV = "0deb9c7e135e9380a6d09e9d2e938a146bb698c8"
+SRC_URI = "git://github.com/ago/pps-tools.git"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -d ${D}${bindir} ${D}${includedir} \
+ ${D}${includedir}/sys
+ oe_runmake 'DESTDIR=${D}' install
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-compile-errors.patch b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-compile-errors.patch
new file mode 100644
index 000000000..8341a8ecd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-compile-errors.patch
@@ -0,0 +1,606 @@
+From 898e9514bc889b4a540f667efed95a5af101c824 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 2 Dec 2014 07:00:36 +0900
+Subject: [PATCH 1/3] From debian to fix compile errors
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ src/Makefile.0 | 7 +++----
+ src/autoconf | 64 +++++++++++++-------------------------------------------
+ src/comsat.c | 65 +++++++++++++++++++--------------------------------------
+ src/fields.c | 6 +++---
+ src/foldinfo.h | 2 +-
+ src/formail.c | 6 +++---
+ src/formisc.c | 2 +-
+ src/formisc.h | 2 +-
+ src/mailfold.c | 14 ++++++++++---
+ src/manconf.c | 2 +-
+ src/memblk.c | 24 ++++++++++-----------
+ src/memblk.h | 2 +-
+ src/network.h | 10 ++-------
+ src/pipes.c | 10 ++++-----
+ src/procmail.c | 3 +--
+ src/recommend.c | 2 +-
+ 16 files changed, 81 insertions(+), 140 deletions(-)
+
+diff --git a/src/Makefile.0 b/src/Makefile.0
+index 6eb5b51..15a2039 100644
+--- a/src/Makefile.0
++++ b/src/Makefile.0
+@@ -40,7 +40,7 @@ multigram: multigram.$(O) $(MG_OBJ) setid
+ @cd ..; $(MAKE) config.check
+
+ _autotst: _autotst.$(O) sublib.c sublib.h
+- $(CC) $(CFLAGS) $@.$(O) -o $@ $(LDFLAGS)
++ gcc $@.$(O) -o $@ $(LDFLAGS)
+
+ ../autoconf.h: autoconf Makefile ../patchlevel.h
+ @echo No this was not make -n >make_n
+@@ -175,17 +175,16 @@ recommend: recommend.$(O) sublib.$(O)
+
+ ../man/man.sed: manconf.c ../autoconf.h ../config.h includes.h procmail.h
+ ../man/man.sed: ../patchlevel.h
+- @$(CC) $(CFLAGS) "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \
++ gcc "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \
+ manconf.c $(LDFLAGS)
+ @./_autotst $@
+ @echo Housekeeping file >$@
+- @$(RM) _autotst
+
+ clean:
+ $(RM) -r _locktest
+ $(RM) procmail.$(O) $(PM_OBJ) lockfile.$(O) $(LF_OBJ) formail.$O \
+ $(FM_OBJ) multigram.$(O) $(MG_OBJ) $(BINSS) multigram ../autoconf.h \
+- _autotst* lookfor _locktst* grepfor recommend recommend.$(O) manconf \
++ lookfor _locktst* grepfor recommend recommend.$(O) manconf \
+ _Makefile lock.log *core* targetdir.h setid setid.$(O) gethome \
+ gethome.$(O) make_n realloc.log
+
+diff --git a/src/autoconf b/src/autoconf
+index 1cb4c42..ff78048 100755
+--- a/src/autoconf
++++ b/src/autoconf
+@@ -68,8 +68,6 @@
+ # #define NOfsync
+ #Ok #define endpwent()
+ #Ok #define endgrent()
+-#Ok #define endhostent()
+-#Ok #define endservent()
+ #Ok #define endprotoent()
+ # #define h_0addr_list h_addr
+ #Ok #define NOpw_passwd
+@@ -896,7 +894,7 @@ int main(){int i=0;
+ {uid_t vuid_t;i+=vuid_t=1;}
+ {gid_t vgid_t;i+=vgid_t=1;}
+ #ifndef NO_COMSAT
+- {struct hostent vhostent;i+=!(vhostent.h_addr_list=0);}
++ {struct addrinfo res; i+=!(res.ai_socktype=0);}
+ #endif
+ #ifndef NOuname
+ {struct utsname vutsname;i+=!(*vutsname.nodename='\0');}
+@@ -917,8 +915,6 @@ do
+ test -z "$i3" && grepfor mode_t 'typedef int mode_t;' && i3=I
+ test -z "$i4" && grepfor uid_t 'typedef int uid_t;' && i4=I
+ test -z "$i5" && grepfor gid_t 'typedef int gid_t;' && i5=I
+- test -z "$i6" && grepfor h_addr_list '#define h_0addr_list h_addr' && i6=I
+- test -z "$i6" && grepfor hostent '#define h_0addr_list h_addr' && i6=I
+ test -z "$i6" && grepfor member '#define h_0addr_list h_addr' && i6=I
+ test -z "$i7" && grepfor utsname "#define NOuname \
+ /* <sys/utsname.h> is there, but empty */" && i7=I
+@@ -1048,8 +1044,12 @@ int main(){char a[2];
+ {struct utsname b;uname(&b);}
+ #endif
+ #ifndef NO_COMSAT
+- gethostbyname("0");getprotobyname(COMSATprotocol);endhostent();endservent();
+- endprotoent();
++ {
++ struct addrinfo *res, hints;
++ memset(&hints, '\0', sizeof(hints));
++ if(getaddrinfo(COMSAThost,BIFF_serviceport,&hints,&res))
++ freeaddrinfo(res);
++ }
+ #endif
+ _exit(0);
+ return 0;}
+@@ -1103,14 +1103,9 @@ grepfor uname "\
+ /* <sys/utsname.h> defines it, the libraries don't */"
+ grepfor endpwent '#define endpwent()'
+ grepfor endgrent '#define endgrent()'
+-if grepfor gethostbyname '#define NO_COMSAT'
++if grepfor getaddrinfo '#define NO_COMSAT'
+ then
+ :
+-else
+- grepfor getprotobyname '#define UDP_protocolno 17'
+- grepfor endhostent '#define endhostent()'
+- grepfor endservent '#define endservent()'
+- grepfor endprotoent '#define endprotoent()'
+ fi
+ grepfor strstr '#define SLOWstrstr' ||
+ grepfor clock '#define SLOWstrstr'
+@@ -1239,39 +1234,9 @@ int main(argc,argv)int argc;const char*argv[];
+ printf("/* Insufficient memory to perform the benchmark! */\n");
+ #endif /* SLOWstrstr */
+ #ifndef NO_COMSAT
+-#ifndef UDP_protocolno
+- ;{ const struct protoent*p;
+- if(p=getprotobyname(COMSATprotocol))
+- { printf("#define UDP_protocolno %d\n",p->p_proto);
+-#else
+- ;{ if(1)
+- {
+-#endif
+- ;{ const struct servent*serv;
+- if(serv=getservbyname(COMSATservice,COMSATprotocol))
+- printf("#define BIFF_serviceport \"%d\"\n",
+- ntohs(serv->s_port));
+- }
+-#ifdef AF_INET
+- ;{ const struct hostent*host;
+- if(!strcmp("localhost",COMSAThost)&&
+- (host=gethostbyname(COMSAThost))&&
+- host->h_0addr_list&&host->h_addrtype==AF_INET&&
+- host->h_length)
+- { int j=host->h_length;
+- const unsigned char*ad=(void*)host->h_0addr_list;
+- printf("#define IP_localhost {");
+- printf("%d",*ad++);
+- while(--j)
+- printf(",%d",*ad++);
+- puts("}");
+- }
+- }
++#ifndef AF_INET
++ puts("#define NO_COMSAT");
+ #endif /* AF_INET */
+- }
+- else
+- puts("#define NO_COMSAT");
+- }
+ #endif /* NO_COMSAT */
+ ;{ unsigned long s=(size_t)~0;int bits;
+ for(bits=1;s>>=1;bits++);
+@@ -1470,15 +1435,14 @@ cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL |
+ grep 'Mlocal.*procmail' >$DEVNULL ||
+ echo '#define CF_no_procmail_yet' >>$ACONF
+
+-cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL |
+- grep '^V' >$DEVNULL ||
+- echo '#define buggy_SENDMAIL' >>$ACONF
++# cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL |
++# grep '^V' >$DEVNULL ||
++# echo '#define buggy_SENDMAIL' >>$ACONF
+
+ lpath='/bin'
+ bins="/bin"
+
+-for newd in /usr/bin /usr/ucb /usr/5bin $BINDIR /local/bin /usr/local/bin \
+- /global/bin /usr/bin/X11 /usr/X*/bin
++for newd in /usr/bin $BINDIR /usr/bin/X11 /usr/X*/bin
+ do
+ if test -d $newd
+ then
+diff --git a/src/comsat.c b/src/comsat.c
+index 77dba34..5082b16 100644
+--- a/src/comsat.c
++++ b/src/comsat.c
+@@ -27,7 +27,8 @@ static /*const*/char rcsid[]=
+ #include "comsat.h"
+
+ static int csvalid; /* is it turned on with a good address? */
+-static struct sockaddr_in csaddr;
++static struct addrinfo cai;
++static struct sockaddr *csaddr;
+ static char*cslastf,*cslgname;
+
+ void setlfcs(folder)const char*folder; /* set lastfolder for comsat */
+@@ -62,56 +63,32 @@ void setlgcs(name)const char*name; /* set logname for comsat */
+ }
+
+ int setcomsat(chp)const char*chp;
+-{ char*chad;int newvalid; struct sockaddr_in newaddr;
++{ char*chad;int newvalid; struct addrinfo *res, hints;
+ chad=strchr(chp,SERV_ADDRsep); /* @ separator? */
+ if(!chad&&!renvint(-1L,chp))
+ return csvalid=0; /* turned off comsat */
+ newvalid=1;
+ if(chad)
+ *chad++='\0'; /* split the specifier */
++ if(!chad||!*chp) /* no service */
++ chp=BIFF_serviceport; /* new balls please! */
+ if(!chad||!*chad) /* no host */
+-#ifndef IP_localhost /* Is "localhost" preresolved? */
+ chad=COMSAThost; /* nope, use default */
+-#else /* IP_localhost */
+- { static const unsigned char ip_localhost[]=IP_localhost;
+- newaddr.sin_family=AF_INET;
+- tmemmove(&newaddr.sin_addr,ip_localhost,sizeof ip_localhost);
+- }
+- else
+-#endif /* IP_localhost */
+- { const struct hostent*host; /* what host? paranoid checks */
+- if(!(host=gethostbyname(chad))||!host->h_0addr_list)
+- { bbzero(&newaddr.sin_addr,sizeof newaddr.sin_addr);
+- newvalid=0; /* host can't be found, too bad */
+- }
+- else
+- { newaddr.sin_family=host->h_addrtype; /* address number found */
+- tmemmove(&newaddr.sin_addr,host->h_0addr_list,host->h_length);
+- }
+- endhostent();
+- }
+- if(newvalid) /* so far, so good */
+- { int s;
+- if(!*chp) /* no service */
+- chp=BIFF_serviceport; /* new balls please! */
+- s=strtol(chp,&chad,10);
+- if(chp!=chad) /* the service is not numeric */
+- newaddr.sin_port=htons((short)s); /* network order */
+- else
+- { const struct servent*serv;
+- serv=getservbyname(chp,COMSATprotocol); /* so get its no. */
+- if(serv)
+- newaddr.sin_port=serv->s_port;
+- else
+- { newaddr.sin_port=htons((short)0); /* no such service */
+- newvalid=0;
+- }
+- endservent();
+- }
+- }
++ bzero(&hints,sizeof(hints));
++ hints.ai_socktype=SOCK_DGRAM;
++ hints.ai_flags=AI_ADDRCONFIG;
++ if(getaddrinfo(chad,chp,&hints,&res))
++ newvalid=0;
++
+ onguard(); /* update the address atomically */
+ if(csvalid=newvalid)
+- tmemmove(&csaddr,&newaddr,sizeof(newaddr));
++ { if(csaddr)
++ free(csaddr);
++ csaddr=malloc(res->ai_addrlen);
++ tmemmove(csaddr,res->ai_addr,res->ai_addrlen);
++ tmemmove(&cai,res,sizeof(cai));
++ freeaddrinfo(res);
++ }
+ offguard();
+ return newvalid;
+ }
+@@ -120,7 +97,7 @@ void sendcomsat(folder)const char*folder;
+ { int s;const char*p;
+ if(!csvalid||!buf) /* is comat on and set to a valid address? */
+ return;
+- if(!*cslgname||strlen(cslgname)+2>linebuf) /* is $LOGNAME bogus? */
++ if(!cslgname||!*cslgname||strlen(cslgname)+2>linebuf)/* is $LOGNAME bogus? */
+ return;
+ if(!(p=folder?folder:cslastf)) /* do we have a folder? */
+ return;
+@@ -132,8 +109,8 @@ void sendcomsat(folder)const char*folder;
+ }
+ strlcat(buf,COMSATxtrsep,linebuf); /* custom seperator */
+ strlcat(buf,p,linebuf); /* where was it delivered? */
+- if((s=socket(AF_INET,SOCK_DGRAM,UDP_protocolno))>=0)
+- { sendto(s,buf,strlen(buf),0,(struct sockaddr*)&csaddr,sizeof(csaddr));
++ if((s=socket(cai.ai_family,cai.ai_socktype,cai.ai_protocol))>=0)
++ { sendto(s,buf,strlen(buf),0,csaddr,cai.ai_addrlen);
+ rclose(s);
+ yell("Notified comsat:",buf);
+ }
+diff --git a/src/fields.c b/src/fields.c
+index a2bd77f..37ed154 100644
+--- a/src/fields.c
++++ b/src/fields.c
+@@ -110,16 +110,16 @@ void dispfield(p)register const struct field*p;
+ /* try and append one valid field to rdheader from stdin */
+ int readhead P((void))
+ { int idlen;
+- getline();
++ get_line();
+ if((idlen=breakfield(buf,buffilled))<=0) /* not the start of a valid field */
+ return 0;
+ if(idlen==STRLEN(FROM)&&eqFrom_(buf)) /* it's a From_ line */
+ { if(rdheader)
+ return 0; /* the From_ line was a fake! */
+- for(;buflast=='>';getline()); /* gather continued >From_ lines */
++ for(;buflast=='>';get_line()); /* gather continued >From_ lines */
+ }
+ else
+- for(;;getline()) /* get the rest of the continued field */
++ for(;;get_line()) /* get the rest of the continued field */
+ { switch(buflast) /* will this line be continued? */
+ { case ' ':case '\t': /* yep, it sure is */
+ continue;
+diff --git a/src/foldinfo.h b/src/foldinfo.h
+index 9e4ebb6..797f9be 100644
+--- a/src/foldinfo.h
++++ b/src/foldinfo.h
+@@ -10,7 +10,7 @@
+
+ #define ft_lock(type) ((type)>ft_MAILDIR) /* kernel lock fd */
+ #define ft_atime(type) ((type)==ft_FILE) /* force atime < mtime */
+-#define ft_dotlock(type) ((type)==ft_FILE) /* dotlock $DEFAULT */
++#define ft_dotlock(type) ((type)>ft_MAILDIR) /* dotlock $DEFAULT */
+ #define ft_delim(type) ((type)==ft_FILE) /* add MMDF delim */
+ #define ft_checkcloser(type) ((type)>ft_MH)
+ #define ft_forceblank(type) ((type)!=ft_MAILDIR) /* force blank line at end */
+diff --git a/src/formail.c b/src/formail.c
+index fe5e6be..1f5c9dd 100644
+--- a/src/formail.c
++++ b/src/formail.c
+@@ -758,9 +758,9 @@ startover:
+ lputssn(buf,buffilled),ctlength-=buffilled,buffilled=lnl=0;
+ ;{ int tbl=buflast,lwr='\n';
+ while(--ctlength>=0&&tbl!=EOF) /* skip Content-Length: bytes */
+- lnl=lwr==tbl&&lwr=='\n',putcs(lwr=tbl),tbl=getchar();
++ lnl=lwr==tbl&&lwr=='\n',lputcs(lwr=tbl),tbl=getchar();
+ if((buflast=tbl)=='\n'&&lwr!=tbl) /* just before a line break? */
+- putcs('\n'),buflast=getchar(); /* wrap up loose end */
++ lputcs('\n'),buflast=getchar(); /* wrap up loose end */
+ }
+ if(!quiet&&ctlength>0)
+ { charNUM(num,ctlength);
+@@ -819,7 +819,7 @@ splitit: { if(!lnl) /* did the previous mail end with an empty line? */
+ { if(split) /* gobble up the next start separator */
+ { buffilled=0;
+ #ifdef sMAILBOX_SEPARATOR
+- getline();buffilled=0; /* but only if it's defined */
++ get_line();buffilled=0; /* but only if it's defined */
+ #endif
+ if(buflast!=EOF) /* if any */
+ goto splitit;
+diff --git a/src/formisc.c b/src/formisc.c
+index d6cab90..338733b 100644
+--- a/src/formisc.c
++++ b/src/formisc.c
+@@ -115,7 +115,7 @@ void loadchar(c)const int c; /* append one character to buf */
+ buf[buffilled++]=c;
+ }
+
+-int getline P((void)) /* read a newline-terminated line */
++int get_line P((void)) /* read a newline-terminated line */
+ { if(buflast==EOF) /* at the end of our Latin already? */
+ { loadchar('\n'); /* fake empty line */
+ return EOF; /* spread the word */
+diff --git a/src/formisc.h b/src/formisc.h
+index 1c4ca20..f25211c 100644
+--- a/src/formisc.h
++++ b/src/formisc.h
+@@ -17,4 +17,4 @@ void
+ char*
+ skipwords P((char*start));
+ int
+- getline P((void));
++ get_line P((void));
+diff --git a/src/mailfold.c b/src/mailfold.c
+index 917b502..6c8bcf4 100644
+--- a/src/mailfold.c
++++ b/src/mailfold.c
+@@ -30,6 +30,7 @@ static /*const*/char rcsid[]=
+
+ int logopened,rawnonl;
+ off_t lasttell;
++static int trunced;
+ static long lastdump;
+ static volatile int mailread; /* if the mail is completely read in already */
+ static struct dyna_array confield; /* escapes, concatenations */
+@@ -81,6 +82,7 @@ long dump(s,type,source,len)const int s,type;const char*source;
+ long len;
+ { int i;long part;
+ lasttell=i= -1;SETerrno(EBADF);
++ trunced=0;
+ if(s>=0)
+ { if(ft_lock(type)&&(lseek(s,(off_t)0,SEEK_END),fdlock(s)))
+ nlog("Kernel-lock failed\n");
+@@ -120,13 +122,18 @@ jin: while(part&&(i=rwrite(s,source,BLKSIZ<part?BLKSIZ:(int)part)))
+ }
+ writefin:
+ i=type!=ft_PIPE&&fsync(s)&&errno!=EINVAL; /* EINVAL => wasn't a file */
++ if ((i||len)&&lasttell>=0)
++ { int serrno=errno;
++ if(!ftruncate(s,lasttell)) trunced=1;
++ SETerrno(serrno);
++ }
+ if(ft_lock(type))
+ { int serrno=errno; /* save any error information */
+ if(fdunlock())
+ nlog("Kernel-unlock failed\n");
+ SETerrno(serrno);
+ }
+- i=rclose(s)||i;
++ i=rclose(s)||i; /* if this fails, we should truncate, but it's too late */
+ } /* return an error even if nothing was to be sent */
+ return i&&!len?-1:len;
+ }
+@@ -237,7 +244,7 @@ dumpf: { switch(errno)
+ #endif
+ default:writeerr(buf);
+ }
+- if(lasttell>=0&&!truncate(boxname,lasttell)&&(logopened||verbose))
++ if(lasttell>=0&&trunced&&(logopened||verbose))
+ nlog("Truncated file to former size\n"); /* undo garbage */
+ ret0: return 0;
+ }
+@@ -378,7 +385,8 @@ void readmail(rhead,tobesent)const long tobesent;
+ dfilled=mailread=0;
+ else if(rhead) /* only read in a new header */
+ { memblk new;
+- dfilled=mailread=0;makeblock(&new,0);readdyn(&new,&dfilled,0);
++ dfilled=mailread=0;makeblock(&new,0);
++ readdyn(&new,&dfilled,thebody-themail.p);
+ if(tobesent>dfilled&&isprivate) /* put it in place here */
+ { tmemmove(themail.p+dfilled,thebody,filled-=tobesent);
+ tmemmove(themail.p,new.p,dfilled);
+diff --git a/src/manconf.c b/src/manconf.c
+index a9e9f1c..5c8ec36 100644
+--- a/src/manconf.c
++++ b/src/manconf.c
+@@ -233,7 +233,7 @@ a security violation was found (e.g. \1.B \2-@PRESERVOPT@\1or variable\
+ \2-@PRESERVOPT@\1and\1.BR \2-@FROMWHOPT@ .\1");
+ pc("LMTPOPT",LMTPOPT);
+ #else
+- ps("LMTPOPTdesc","");ps("LMTPusage","");
++ ps("LMTPOPTdesc","");ps("LMTPusage","\1");
+ #endif
+ pname("INIT_UMASK",0);printf("0%lo/g\n",(unsigned long)INIT_UMASK);lines--;
+ pn("DEFlinebuf",DEFlinebuf);
+diff --git a/src/memblk.c b/src/memblk.c
+index e2f13f0..97e02d3 100644
+--- a/src/memblk.c
++++ b/src/memblk.c
+@@ -51,11 +51,11 @@ void lockblock(mb)memblk*const mb;
+ {
+ #ifdef USE_MMAP
+ if(mb->fd>=0)
+- { long len=mb->len+1;
+- if(munmap(mb->p,len))
+- mmapfailed(len); /* don't want to continue here */
+- if((mb->p=mmap(0,len,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED)
+- mmapfailed(len);
++ { long mlen=mb->len+1;
++ if(munmap(mb->p,mlen))
++ mmapfailed(mlen); /* don't want to continue here */
++ if((mb->p=mmap(0,mlen,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED)
++ mmapfailed(mlen);
+ close(mb->fd);
+ mb->fd=ropen(devnull,O_RDWR,0); /* XXX Perhaps -1 is better? */
+ }
+@@ -77,8 +77,8 @@ int resizeblock(mb,len,nonfatal)memblk*const mb;const long len;
+ strcpy(filename,MMAP_DIR);
+ if(unique(filename,strchr(filename,'\0'),MMAP_FILE_LEN,MMAP_PERM,0,0)&&
+ (mb->fd=ropen(filename,O_RDWR,MMAP_PERM),unlink(filename),mb->fd>=0))
+- { mb->filelen=len;
+- if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1))
++ { mb->filelen=len+1;
++ if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1))
+ dropf: { close(mb->fd);mb->fd= -1;
+ if(verbose)nlog("Unable to extend or use tempfile");
+ }
+@@ -98,9 +98,9 @@ dropf: { close(mb->fd);mb->fd= -1;
+ }
+ }
+ if(mb->fd>=0)
+- { if(len>mb->filelen) /* need to extend? */
+- { mb->filelen=len;
+- if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1))
++ { if(len>=mb->filelen) /* need to extend? */
++ { mb->filelen=len+1;
++ if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1))
+ { char*p=malloc(len+1); /* can't extend, switch to malloc */
+ tmemmove(p,mb->p,mb->len);
+ munmap(mb->p,mb->len+1);
+@@ -124,9 +124,9 @@ mmap: if((mb->p=mmap(0,len+1,P_RW,MAP_SHARED,mb->fd,(off_t)0))==MAP_FAILED)
+ }
+ else
+ mb->p=realloc(mb->p,len+1);
+- mb->len=len+1;
+- mb->p[len]='\0';
++ mb->len=len;
+ ret1:
++ mb->p[len]='\0';
+ return 1;
+ }
+
+diff --git a/src/memblk.h b/src/memblk.h
+index 6fd1d1d..b57f369 100644
+--- a/src/memblk.h
++++ b/src/memblk.h
+@@ -1,6 +1,6 @@
+ typedef struct memblk {
+ char*p; /* where it starts */
+- long len; /* currently allocated size */
++ long len; /* current size, not including trailing NUL */
+ #ifdef USE_MMAP
+ off_t filelen; /* how long is the file */
+ int fd; /* file which is mmap()ed */
+diff --git a/src/network.h b/src/network.h
+index d7d08f2..b09b6c4 100644
+--- a/src/network.h
++++ b/src/network.h
+@@ -1,19 +1,13 @@
+ /*$Id: network.h,v 1.7 1997/04/02 03:15:41 srb Exp $*/
+
+-#include <sys/socket.h> /* socket() sendto() AF_INET
++#include <sys/socket.h> /* socket() sendto() */
+ /* SOCK_DGRAM */
+-#include <netdb.h> /* gethostbyname() getservbyname()
+- /* getprotobyname() */
+-#include <netinet/in.h> /* htons() struct sockaddr_in */
++#include <netdb.h> /* getaddrinfo() */
+
+ #ifndef BIFF_serviceport
+ #define BIFF_serviceport COMSATservice
+ #endif
+
+-#ifndef h_0addr_list
+-#define h_0addr_list h_addr_list[0] /* POSIX struct member */
+-#endif
+-
+ #ifndef NO_const /* since network.h is outside the autoconf const check */
+ #ifdef const /* loop, we need this backcheck for some systems */
+ #undef const
+diff --git a/src/pipes.c b/src/pipes.c
+index 1fdb9e6..7754300 100644
+--- a/src/pipes.c
++++ b/src/pipes.c
+@@ -145,7 +145,9 @@ int pipthrough(line,source,len)char*line,*source;const long len;
+ if(Stdout)
+ { *(eq=strchr(Stdout,'\0')-1)='\0'; /* chop the '=' */
+ if(!(backblock=getenv(Stdout))) /* no current value? */
+- PRDB=PWRB= -1;
++ { PRDB=PWRB= -1;
++ backlen=0;
++ }
+ else
+ { backlen=strlen(backblock);
+ goto pip;
+@@ -155,9 +157,7 @@ int pipthrough(line,source,len)char*line,*source;const long len;
+ pip: rpipe(pbackfd);
+ rpipe(pinfd); /* main pipes setup */
+ if(!(pidchild=sfork())) /* create a sending procmail */
+- { if(Stdout&&backblock)
+- backlen=strlen(backblock);
+- else
++ { if(!Stdout)
+ backblock=source,backlen=len;
+ childsetup();rclose(PRDI);rclose(PRDB);
+ rpipe(poutfd);rclose(STDOUT);
+@@ -194,7 +194,7 @@ perr: progerr(line,excode,pwait==4); /* I'm going to tell my mommy! */
+ makeblock(&temp,Stdfilled);
+ tmemmove(temp.p,Stdout,Stdfilled);
+ readdyn(&temp,&Stdfilled,Stdfilled+backlen+1);
+- Stdout=realloc(Stdout,&Stdfilled+1);
++ Stdout=realloc(Stdout,Stdfilled+1);
+ tmemmove(Stdout,temp.p,Stdfilled+1);
+ freeblock(&temp);
+ retStdout(Stdout,pwait&&pipw,!backblock);
+diff --git a/src/procmail.c b/src/procmail.c
+index 4a232f2..2bb449b 100644
+--- a/src/procmail.c
++++ b/src/procmail.c
+@@ -652,8 +652,7 @@ commint:do skipspace(); /* skip whitespace */
+ nrcond= -1;
+ if(tolock) /* clear temporary buffer for lockfile name */
+ free(tolock);
+- for(i=maxindex(flags);i;i--) /* clear the flags */
+- flags[i]=0;
++ bbzero(flags,sizeof(flags)); /* clear the flags */
+ for(tolock=0,locknext=0;;)
+ { chp=skpspace(chp);
+ switch(i= *chp++)
+diff --git a/src/recommend.c b/src/recommend.c
+index 5d41e01..9002268 100644
+--- a/src/recommend.c
++++ b/src/recommend.c
+@@ -47,7 +47,7 @@ int main(argc,argv)const int argc;const char*const argv[];
+ printf("chmod %lo %s\n",(unsigned long)(sgid|PERMIS),argv[2]);
+ else if(chmdir==1)
+ goto nogchmod;
+- if(chmdir)
++ if(0)
+ printf("chmod %c+w %s/.\n",chmdir==1?'g':'a',mailspooldir);
+ nogchmod:
+ return EXIT_SUCCESS;
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-man-file.patch b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-man-file.patch
new file mode 100644
index 000000000..7b3c643b2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-fix-man-file.patch
@@ -0,0 +1,83 @@
+From 3cbc5e6e624235f9ba40cfd5a2b18c11be371399 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 2 Dec 2014 07:02:01 +0900
+Subject: [PATCH 2/3] From debian to fix man file
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ man/procmail.man | 24 +++++++++++++++++-------
+ man/procmailrc.man | 2 +-
+ 2 files changed, 18 insertions(+), 8 deletions(-)
+
+diff --git a/man/procmail.man b/man/procmail.man
+index 175043a..1274ce8 100644
+--- a/man/procmail.man
++++ b/man/procmail.man
+@@ -44,11 +44,11 @@ at the end.
+ should be invoked automatically over the
+ .B @DOT_FORWARD@
+ file mechanism as soon as mail arrives. Alternatively, when installed by
+-a system administrator, it can be invoked from within the mailer immediately.
+-When invoked, it first sets some environment variables to default values,
+-reads the mail message from stdin until an EOF, separates the body from the
+-header, and then, if no command line arguments are present, it starts to look
+-for a file named
++a system administrator (and in the standard Red Hat Linux configuration), it
++can be invoked from within the mailer immediately. When invoked, it
++first sets some environment variables to default values, reads the mail message from
++stdin until an EOF, separates the body from the header, and then, if no command line
++arguments are present, it starts to look for a file named
+ .BR @PROCMAILRC@ .
+ According to the processing recipes in this file,
+ the mail message that just arrived gets distributed into the right folder
+@@ -166,7 +166,8 @@ must be specified on the command line. After the rcfile, procmail will
+ accept an unlimited number of arguments.@ETCRCS_desc@
+ For some advanced usage of this option you should look in the
+ .B EXAMPLES
+-section below.@LMTPOPTdesc@.SH ARGUMENTS
++section below.@LMTPOPTdesc@
++.SH ARGUMENTS
+ Any arguments containing an '=' are considered to be environment variable
+ assignments, they will
+ .I all
+@@ -723,6 +724,15 @@ path.@FW_comment@
+ .fi
+ .ad
+ .PP
++Some mailers (notably exim) do not currently accept the above syntax.
++In such case use this instead:
++.PP
++.na
++.nf
++|/usr/bin/procmail
++.fi
++.ad
++.PP
+ Procmail can also be invoked to postprocess an already filled system
+ mailbox. This can be useful if you don't want to or can't use a
+ $HOME/@DOT_FORWARD@ file (in which case the following script could
+@@ -754,7 +764,7 @@ exit 0
+ .SS "A sample small @PROCMAILRC@:"
+ .na
+ .nf
+-PATH=/bin:/usr/bin:@BINDIR@
++PATH=/usr/local/bin:/usr/bin:/bin
+ MAILDIR=$HOME/Mail #you'd better make sure it exists
+ DEFAULT=$MAILDIR/mbox #completely optional
+ LOGFILE=$MAILDIR/from #recommended
+diff --git a/man/procmailrc.man b/man/procmailrc.man
+index 472035f..7bf08dd 100644
+--- a/man/procmailrc.man
++++ b/man/procmailrc.man
+@@ -779,7 +779,7 @@ one trailing newline will be stripped.
+ .PP
+ Some non-optimal and non-obvious regexps set MATCH to an incorrect
+ value. The regexp can be made to work by removing one or more unneeded
+-'*', '+', or '?' operator on the left-hand side of the \e/ token.
++\&'*', '+', or '?' operator on the left-hand side of the \e/ token.
+ .SH MISCELLANEOUS
+ If the regular expression contains `\fB@TO_key@\fP' it will be substituted by
+ .na
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-modify-parameters.patch b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-modify-parameters.patch
new file mode 100644
index 000000000..a94e43670
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/from-debian-to-modify-parameters.patch
@@ -0,0 +1,127 @@
+From 95c742242769721f963c50702e1445fb70c6a45a Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 2 Dec 2014 07:07:33 +0900
+Subject: [PATCH 3/3] From debian to modify parameters
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ Makefile | 16 ++++++++--------
+ config.h | 13 +++++++------
+ 2 files changed, 15 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 1e9568c..9e48201 100644
+--- a/Makefile
++++ b/Makefile
+@@ -23,7 +23,7 @@ MAN5DIR = $(MANDIR)/man$(MAN5SUFFIX)
+
+ # Uncomment to install compressed man pages (possibly add extra suffix
+ # to the definitions of MAN?DIR and/or MAN?SUFFIX by hand)
+-#MANCOMPRESS = compress
++# MANCOMPRESS = compress
+
+ ############################*#
+ # Things that can be made are:
+@@ -55,7 +55,7 @@ MAN5DIR = $(MANDIR)/man$(MAN5SUFFIX)
+
+ LOCKINGTEST=__defaults__
+
+-#LOCKINGTEST=/tmp . # Uncomment and add any directories you see fit.
++LOCKINGTEST=/tmp . # Uncomment and add any directories you see fit.
+ # If LOCKINGTEST is defined, autoconf will NOT
+ # prompt you to enter additional directories.
+ # See INSTALL for more information about the
+@@ -65,7 +65,7 @@ LOCKINGTEST=__defaults__
+ # Only edit below this line if you *think* you know what you are doing #
+ ########################################################################
+
+-#LOCKINGTEST=100 # Uncomment (and change) if you think you know
++LOCKINGTEST=100 # Uncomment (and change) if you think you know
+ # it better than the autoconf lockingtests.
+ # This will cause the lockingtests to be hotwired.
+ # 100 to enable fcntl()
+@@ -74,20 +74,20 @@ LOCKINGTEST=__defaults__
+ # Or them together to get the desired combination.
+
+ # Optional system libraries we search for
+-SEARCHLIBS = -lm -ldir -lx -lsocket -lnet -linet -lnsl_s -lnsl_i -lnsl -lsun \
+- -lgen -lsockdns -ldl
++SEARCHLIBS = -lm -ldir -lx -lsocket -lnet -linet -lnsl_s -lnsl_i -lsun \
++ -lgen -lsockdns
+ # -lresolv # not really needed, is it?
+
+ # Informal list of directories where we look for the libraries in SEARCHLIBS
+-LIBPATHS=/lib /usr/lib /usr/local/lib
++LIBPATHS=/lib /usr/lib
+
+ GCC_WARNINGS = -O2 -pedantic -Wreturn-type -Wunused -Wformat -Wtraditional \
+ -Wpointer-arith -Wconversion -Waggregate-return \
+ #-Wimplicit -Wshadow -Wid-clash-6 #-Wuninitialized
+
+ # The place to put your favourite extra cc flag
+-CFLAGS0 = -O #$(GCC_WARNINGS)
+-LDFLAGS0= -s
++CFLAGS0 = $(RPM_OPT_FLAGS) #$(GCC_WARNINGS)
++LDFLAGS0=
+ # Read my libs :-)
+ LIBS=
+
+diff --git a/config.h b/config.h
+index c4135a9..a07453f 100644
+--- a/config.h
++++ b/config.h
+@@ -35,7 +35,8 @@
+ */
+ /*#define DEFSPATH "PATH=/bin:/usr/bin" /* */
+ /*#define DEFPATH "PATH=$HOME/bin:/bin:/usr/bin" /* */
+-
++#define DEFPATH "PATH=$HOME/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin" /* */
++
+ /* every environment variable appearing in PRESTENV will be set or wiped
+ * out of the environment (variables without an '=' sign will be thrown
+ * out), e.g. you could define PRESTENV as follows:
+@@ -46,13 +47,13 @@
+ */
+ #define PRESTENV {"IFS","ENV","PWD",0}
+
+-/*#define GROUP_PER_USER /* uncomment this if each
++#define GROUP_PER_USER /* uncomment this if each
+ user has his or her own
+ group and procmail can therefore trust a $HOME/.procmailrc that
+ is group writable or contained in a group writable home directory
+ if the group involved is the user's default group. */
+
+-/*#define LMTP /* uncomment this if you
++#define LMTP /* uncomment this if you
+ want to use procmail
+ as an LMTP (rfc2033) server, presumably for invocation by an MTA.
+ The file examples/local_procmail_lmtp.m4 contains info on how to
+@@ -79,7 +80,7 @@
+
+ /*#define NO_fcntl_LOCK /* uncomment any of these three if you */
+ /*#define NO_lockf_LOCK /* definitely do not want procmail to make */
+-/*#define NO_flock_LOCK /* use of those kernel-locking methods */
++#define NO_flock_LOCK /* use of those kernel-locking methods */
+ /* If you set LOCKINGTEST to a binary number
+ than there's no need to set these. These #defines are only useful
+ if you want to disable particular locking styles but are unsure which
+@@ -91,14 +92,14 @@
+ restriction does not apply to the /etc/procmailrc and
+ /etc/procmailrcs files) */
+
+-/*#define NO_NFS_ATIME_HACK /* uncomment if you're definitely not using
++#define NO_NFS_ATIME_HACK /* uncomment if you're definitely not using
+ NFS mounted filesystems and can't afford
+ procmail to sleep for 1 sec. before writing to an empty regular
+ mailbox. This lets programs correctly judge whether there is unread
+ mail present. procmail automatically suppresses this when it isn't
+ needed or under heavy load. */
+
+-/*#define DEFsendmail "/usr/sbin/sendmail" /* uncomment and/or change if
++#define DEFsendmail "/usr/sbin/sendmail" /* uncomment and/or change if
+ the autoconfigured default
+ SENDMAIL is not suitable. This program should quack like a sendmail:
+ it should accept the -oi flag (to tell it to _not_ treat a line
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/procmail/procmail/man-file-mailstat.1-from-debian.patch b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/man-file-mailstat.1-from-debian.patch
new file mode 100644
index 000000000..46d973e06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/procmail/procmail/man-file-mailstat.1-from-debian.patch
@@ -0,0 +1,60 @@
+From 8ac56108e5f0a72d1bec0fb4f1fa4763a2479331 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 2 Dec 2014 06:56:14 +0900
+Subject: [PATCH] man file mailstat.1 from debian
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ debian/mailstat.1 | 40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
+ create mode 100644 debian/mailstat.1
+
+diff --git a/debian/mailstat.1 b/debian/mailstat.1
+new file mode 100644
+index 0000000..f13265a
+--- /dev/null
++++ b/debian/mailstat.1
+@@ -0,0 +1,40 @@
++.TH MAILSTAT 1
++.SH NAME
++mailstat \- shows mail-arrival statistics
++.SH SYNOPSIS
++.B mailstat
++[\-klmots] [logfile]
++.SH DESCRIPTION
++.B mailstat
++parses a procmail-generated $LOGFILE and displays
++a summary about the messages delivered to all folders
++(total size, average size, nr of messages).
++The $LOGFILE is truncated to zero length, unless the
++.B -k
++option is used.
++Exit code 0 if mail arrived, 1 if no mail arrived.
++.SH OPTIONS
++.TP
++.I \-k
++keep logfile intact
++.TP
++.I \-l
++long display format
++.TP
++.I \-m
++merge any errors into one line
++.TP
++.I \-o
++use the old logfile
++.TP
++.I \-t
++terse display format
++.TP
++.I \-s
++silent in case of no mail
++.SH NOTES
++Customise to your heart's content, this program is only provided as a
++guideline.
++.SH AUTHOR
++This manual page was written by Santiago Vila <sanvila@debian.org>
++for the Debian GNU/Linux distribution (but may be used by others).
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/procmail/procmail_3.22.bb b/meta-openembedded/meta-oe/recipes-support/procmail/procmail_3.22.bb
new file mode 100644
index 000000000..aa474ceb1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/procmail/procmail_3.22.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Mail processing program"
+DESCRIPTION = "Procmail can be used to create mail-servers, mailing lists, sort your\
+incoming mail into separate folders/files (real convenient when subscribing\
+to one or more mailing lists or for prioritising your mail), preprocess\
+your mail, start any programs upon mail arrival (e.g. to generate different\
+chimes on your workstation for different types of mail) or selectively\
+forward certain incoming mail automatically to someone."
+HOMEPAGE = "http://www.procmail.org/"
+SECTION = "Applications/System"
+
+SRC_URI = "http://www.ring.gr.jp/archives/net/mail/${BPN}/${BP}.tar.gz \
+ file://from-debian-to-fix-compile-errors.patch \
+ file://from-debian-to-modify-parameters.patch \
+ file://from-debian-to-fix-man-file.patch \
+ file://man-file-mailstat.1-from-debian.patch"
+SRC_URI[md5sum] = "1678ea99b973eb77eda4ecf6acae53f1"
+SRC_URI[sha256sum] = "087c75b34dd33d8b9df5afe9e42801c9395f4bf373a784d9bc97153b0062e117"
+
+LICENSE = "GPL-2.0 & Artistic-1.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a71e50e197a992c862379e576e669757 \
+ file://Artistic;md5=505e00d03c3428cde21b17b2a386590e"
+
+DEPENDS = "libnet"
+inherit autotools-brokensep
+do_configure() {
+ find examples -type f | xargs chmod 644
+ export CC="${BUILD_CC}"
+ export LD="${BUILD_LD}"
+ export CFLAGS="${BUILD_CFLAGS}"
+ export AR="${BUILD_AR}"
+ export AS="${BUILD_AS}"
+ make TARGET_CFLAGS="$TARGET_CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS0="${LDFLAGS}" autoconf.h
+}
+
+do_compile() {
+ oe_runmake -i TARGET_CFLAGS="$TARGET_CFLAGS -Wno-comments -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS0="${LDFLAGS}"
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man5
+ oe_runmake -i BASENAME=${D}/usr MANDIR=${D}${mandir} install
+ install -m 0644 debian/mailstat.1 ${D}${mandir}/man1
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb
new file mode 100644
index 000000000..5e3dd67c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Terminal-based tool for monitoring the progress of data through a pipeline"
+
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.bz2"
+SRC_URI[md5sum] = "efe8e9e4cad5f3264a32258a63bf2c8e"
+SRC_URI[sha256sum] = "76f3999b1c3b3027163dce6ef667cdf8dafb75218ee25e54a03bfe590478f90e"
+
+inherit autotools
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/Makefile b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/Makefile
new file mode 100644
index 000000000..00b7d5262
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/Makefile
@@ -0,0 +1,3 @@
+
+
+all: pxaregs
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/i2c.patch b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/i2c.patch
new file mode 100644
index 000000000..36983ec47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/i2c.patch
@@ -0,0 +1,15 @@
+Index: pxaregs-1.14/pxaregs.c
+===================================================================
+--- pxaregs-1.14.orig/pxaregs.c
++++ pxaregs-1.14/pxaregs.c
+@@ -21,10 +21,6 @@
+ #include <fcntl.h>
+ #include <ctype.h>
+
+-#include <linux/i2c.h>
+-#include <linux/i2c-dev.h>
+-
+-
+ // fd for /dev/mem
+ static int fd = -1;
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/munmap.patch b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/munmap.patch
new file mode 100644
index 000000000..a9c4b95cf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/munmap.patch
@@ -0,0 +1,22 @@
+Index: pxaregs-1.14/pxaregs.c
+===================================================================
+--- pxaregs-1.14.orig/pxaregs.c
++++ pxaregs-1.14/pxaregs.c
+@@ -1794,7 +1794,7 @@ static int getmem(u32 addr)
+ regaddr = map + (addr & MAP_MASK);
+
+ val = *(u32*) regaddr;
+- munmap(0,MAP_SIZE);
++ munmap(map,MAP_SIZE);
+
+ return val;
+ }
+@@ -1829,7 +1829,7 @@ static void putmem(u32 addr, u32 val)
+ regaddr = map + (addr & MAP_MASK);
+
+ *(u32*) regaddr = val;
+- munmap(0,MAP_SIZE);
++ munmap(map,MAP_SIZE);
+ }
+
+ static u32 lastaddr = 0;
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/pxaregs.c b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/pxaregs.c
new file mode 100644
index 000000000..062e758d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/pxaregs.c
@@ -0,0 +1,1975 @@
+/*
+ * pxaregs - tool to display and modify PXA250's registers at runtime
+ *
+ * (c) Copyright 2002 by M&N Logistik-Lösungen Online GmbH
+ * set under the GPLv2
+ *
+ * $Id: pxaregs.c,v 1.14 2003/11/12 13:14:43 schurig Exp $
+ *
+ * Please send patches to h.schurig, working at mn-logistik.de
+ * - added fix from Bernhard Nemec
+ * - i2c registers from Stefan Eletzhofer
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#include <linux/i2c.h>
+#include <linux/i2c-dev.h>
+
+
+// fd for /dev/mem
+static int fd = -1;
+
+typedef unsigned int u32;
+
+struct reg_info {
+ char *name;
+ u32 addr;
+ int shift;
+ u32 mask;
+ char type;
+ char *desc;
+};
+
+
+static struct reg_info regs[] = {
+{ "IBMR", 0x40301680, 0, 0xffffffff, 'x', "I2C Bus Monitor Register" },
+{ "IBMR_SDAS", 0x40301680, 0, 0x00000001, 'x', "SDA Status" },
+{ "IBMR_SCLS", 0x40301680, 1, 0x00000001, 'x', "SDA Status" },
+
+{ "IDBR", 0x40301688, 0, 0xffffffff, 'x', "I2C Data Buffer Register" },
+{ "IDBR_IDB", 0x40301688, 0, 0x000000ff, 'x', "I2C Data Buffer" },
+
+{ "ICR", 0x40301690, 0, 0xffffffff, 'x', "I2C Control Register" },
+{ "ICR_START", 0x40301690, 0, 1, 'x', " start bit " },
+{ "ICR_STOP", 0x40301690, 1, 1, 'x', " stop bit " },
+{ "ICR_ACKNAK",0x40301690, 2, 1, 'x', " send ACK(0) or NAK(1)" },
+{ "ICR_TB", 0x40301690, 3, 1, 'x', " transfer byte bit " },
+{ "ICR_MA", 0x40301690, 4, 1, 'x', " master abort " },
+{ "ICR_SCLE", 0x40301690, 5, 1, 'x', " master clock enable " },
+{ "ICR_IUE", 0x40301690, 6, 1, 'x', " unit enable " },
+{ "ICR_GCD", 0x40301690, 7, 1, 'x', " general call disable " },
+{ "ICR_ITEIE", 0x40301690, 8, 1, 'x', " enable tx interrupts " },
+{ "ICR_IRFIE", 0x40301690, 9, 1, 'x', " enable rx interrupts " },
+{ "ICR_BEIE", 0x40301690, 10, 1, 'x', " enable bus error ints " },
+{ "ICR_SSDIE", 0x40301690, 11, 1, 'x', " slave STOP detected int enable " },
+{ "ICR_ALDIE", 0x40301690, 12, 1, 'x', " enable arbitration interrupt " },
+{ "ICR_SADIE", 0x40301690, 13, 1, 'x', " slave address detected int enable " },
+{ "ICR_UR", 0x40301690, 14, 1, 'x', " unit reset " },
+{ "ICR_FM", 0x40301690, 15, 1, 'x', " fast mode " },
+
+{ "ISR", 0x40301698, 0, 0xffffffff, 'x', "I2C Status Register" },
+{ "ISR_RWM", 0x40301698, 0, 1, 'x', " read/write mode " },
+{ "ISR_ACKNAK",0x40301698, 1, 1, 'x', " ack/nak status " },
+{ "ISR_UB", 0x40301698, 2, 1, 'x', " unit busy " },
+{ "ISR_IBB", 0x40301698, 3, 1, 'x', " bus busy " },
+{ "ISR_SSD", 0x40301698, 4, 1, 'x', " slave stop detected " },
+{ "ISR_ALD", 0x40301698, 5, 1, 'x', " arbitration loss detected " },
+{ "ISR_ITE", 0x40301698, 6, 1, 'x', " tx buffer empty " },
+{ "ISR_IRF", 0x40301698, 7, 1, 'x', " rx buffer full " },
+{ "ISR_GCAD", 0x40301698, 8, 1, 'x', " general call address detected " },
+{ "ISR_SAD", 0x40301698, 9, 1, 'x', " slave address detected " },
+{ "ISR_BED", 0x40301698, 10, 1, 'x', " bus error no ACK/NAK " },
+
+{ "ISAR", 0x403016A0, 0, 0xffffffff, 'x', "I2C Slave Address Register" },
+{ "ISAR_SA", 0x403016A0, 0, 0x0000007f, 'x', "I2C Slave Address" },
+
+{ "PMCR", 0x40F00000, 0, 0xffffffff, 'x', "Power Manager Control Register (3-23)" },
+{ "PMCR_IDAE", 0x40F00000, 0, 0x00000001, 'd', "PM imprecise data abort abort signal" },
+
+{ "PSSR", 0x40F00004, 0, 0xffffffff, 'x', "Power Manager Sleep Status Register (3-29)" },
+{ "PSSR_SSS", 0x40F00004, 0, 0x00000001, 'd', "PM chip was in sleep by setting sleep mode bit" },
+{ "PSSR_BFS", 0x40F00004, 1, 0x00000001, 'd', "PM nBATT_FAULT has been asserted" },
+{ "PSSR_VFS", 0x40F00004, 2, 0x00000001, 'd', "PM nVDD_FAULT was asserted while in Run or Idle" },
+{ "PSSR_PH", 0x40F00004, 4, 0x00000001, 'd', "PM GPIO pins are held in their sleep state" },
+{ "PSSR_RDH", 0x40F00004, 5, 0x00000001, 'd', "PM receivers of all input GPIO are disabled" },
+
+{ "PSPR", 0x40F00008, 0, 0xffffffff, 'x', "Power Manager Scratch Pad Register (3-30)" },
+
+{ "PWER", 0x40F0000C, 0, 0xffffffff, 'x', "Power Manager Wake-Up Enable Register (3-25)" },
+{ "PWER_WE0", 0x40F0000C, 0, 0x00000001, 'd', "PM wake up due to GPIO 0 edge detect enabled" },
+{ "PWER_WE1", 0x40F0000C, 1, 0x00000001, 'd', "PM wake up due to GPIO 1 edge detect enabled" },
+{ "PWER_WE2", 0x40F0000C, 2, 0x00000001, 'd', "PM wake up due to GPIO 2 edge detect enabled" },
+{ "PWER_WE3", 0x40F0000C, 3, 0x00000001, 'd', "PM wake up due to GPIO 3 edge detect enabled" },
+{ "PWER_WE4", 0x40F0000C, 4, 0x00000001, 'd', "PM wake up due to GPIO 4 edge detect enabled" },
+{ "PWER_WE5", 0x40F0000C, 5, 0x00000001, 'd', "PM wake up due to GPIO 5 edge detect enabled" },
+{ "PWER_WE6", 0x40F0000C, 6, 0x00000001, 'd', "PM wake up due to GPIO 6 edge detect enabled" },
+{ "PWER_WE7", 0x40F0000C, 7, 0x00000001, 'd', "PM wake up due to GPIO 7 edge detect enabled" },
+{ "PWER_WE8", 0x40F0000C, 8, 0x00000001, 'd', "PM wake up due to GPIO 8 edge detect enabled" },
+{ "PWER_WE9", 0x40F0000C, 9, 0x00000001, 'd', "PM wake up due to GPIO 9 edge detect enabled" },
+{ "PWER_WE10", 0x40F0000C, 10, 0x00000001, 'd', "PM wake up due to GPIO10 edge detect enabled" },
+{ "PWER_WE11", 0x40F0000C, 11, 0x00000001, 'd', "PM wake up due to GPIO11 edge detect enabled" },
+{ "PWER_WE12", 0x40F0000C, 12, 0x00000001, 'd', "PM wake up due to GPIO12 edge detect enabled" },
+{ "PWER_WE13", 0x40F0000C, 13, 0x00000001, 'd', "PM wake up due to GPIO13 edge detect enabled" },
+{ "PWER_WE14", 0x40F0000C, 14, 0x00000001, 'd', "PM wake up due to GPIO14 edge detect enabled" },
+{ "PWER_WE15", 0x40F0000C, 15, 0x00000001, 'd', "PM wake up due to GPIO15 edge detect enabled" },
+{ "PWER_WERTC",0x40F0000C, 31, 0x00000001, 'd', "PM wake up due to RTC alarm enabled" },
+
+{ "PRER", 0x40F00010, 0, 0xffffffff, 'x', "Power Manager Rising Edge Detect Enable Register (3-26)" },
+{ "PRER_RE0", 0x40F00010, 0, 0x00000001, 'd', "PM wake up due to GPIO 0 rising edge detect enabled" },
+{ "PRER_RE1", 0x40F00010, 1, 0x00000001, 'd', "PM wake up due to GPIO 1 rising edge detect enabled" },
+{ "PRER_RE2", 0x40F00010, 2, 0x00000001, 'd', "PM wake up due to GPIO 2 rising edge detect enabled" },
+{ "PRER_RE3", 0x40F00010, 3, 0x00000001, 'd', "PM wake up due to GPIO 3 rising edge detect enabled" },
+{ "PRER_RE4", 0x40F00010, 4, 0x00000001, 'd', "PM wake up due to GPIO 4 rising edge detect enabled" },
+{ "PRER_RE5", 0x40F00010, 5, 0x00000001, 'd', "PM wake up due to GPIO 5 rising edge detect enabled" },
+{ "PRER_RE6", 0x40F00010, 6, 0x00000001, 'd', "PM wake up due to GPIO 6 rising edge detect enabled" },
+{ "PRER_RE7", 0x40F00010, 7, 0x00000001, 'd', "PM wake up due to GPIO 7 rising edge detect enabled" },
+{ "PRER_RE8", 0x40F00010, 8, 0x00000001, 'd', "PM wake up due to GPIO 8 rising edge detect enabled" },
+{ "PRER_RE9", 0x40F00010, 9, 0x00000001, 'd', "PM wake up due to GPIO 9 rising edge detect enabled" },
+{ "PRER_RE10", 0x40F00010, 10, 0x00000001, 'd', "PM wake up due to GPIO10 rising edge detect enabled" },
+{ "PRER_RE11", 0x40F00010, 11, 0x00000001, 'd', "PM wake up due to GPIO11 rising edge detect enabled" },
+{ "PRER_RE12", 0x40F00010, 12, 0x00000001, 'd', "PM wake up due to GPIO12 rising edge detect enabled" },
+{ "PRER_RE13", 0x40F00010, 13, 0x00000001, 'd', "PM wake up due to GPIO13 rising edge detect enabled" },
+{ "PRER_RE14", 0x40F00010, 14, 0x00000001, 'd', "PM wake up due to GPIO14 rising edge detect enabled" },
+{ "PRER_RE15", 0x40F00010, 15, 0x00000001, 'd', "PM wake up due to GPIO15 rising edge detect enabled" },
+
+{ "PFER", 0x40F00014, 0, 0xffffffff, 'x', "Power Manager Falling Detect Enable Register (3-27)" },
+{ "PFER_FE0", 0x40F00014, 0, 0x00000001, 'd', "PM wake up due to GPIO 0 falling edge detect enabled" },
+{ "PFER_FE1", 0x40F00014, 1, 0x00000001, 'd', "PM wake up due to GPIO 1 falling edge detect enabled" },
+{ "PFER_FE2", 0x40F00014, 2, 0x00000001, 'd', "PM wake up due to GPIO 2 falling edge detect enabled" },
+{ "PFER_FE3", 0x40F00014, 3, 0x00000001, 'd', "PM wake up due to GPIO 3 falling edge detect enabled" },
+{ "PFER_FE4", 0x40F00014, 4, 0x00000001, 'd', "PM wake up due to GPIO 4 falling edge detect enabled" },
+{ "PFER_FE5", 0x40F00014, 5, 0x00000001, 'd', "PM wake up due to GPIO 5 falling edge detect enabled" },
+{ "PFER_FE6", 0x40F00014, 6, 0x00000001, 'd', "PM wake up due to GPIO 6 falling edge detect enabled" },
+{ "PFER_FE7", 0x40F00014, 7, 0x00000001, 'd', "PM wake up due to GPIO 7 falling edge detect enabled" },
+{ "PFER_FE8", 0x40F00014, 8, 0x00000001, 'd', "PM wake up due to GPIO 8 falling edge detect enabled" },
+{ "PFER_FE9", 0x40F00014, 9, 0x00000001, 'd', "PM wake up due to GPIO 9 falling edge detect enabled" },
+{ "PFER_FE10", 0x40F00014, 10, 0x00000001, 'd', "PM wake up due to GPIO10 falling edge detect enabled" },
+{ "PFER_FE11", 0x40F00014, 11, 0x00000001, 'd', "PM wake up due to GPIO11 falling edge detect enabled" },
+{ "PFER_FE12", 0x40F00014, 12, 0x00000001, 'd', "PM wake up due to GPIO12 falling edge detect enabled" },
+{ "PFER_FE13", 0x40F00014, 13, 0x00000001, 'd', "PM wake up due to GPIO13 falling edge detect enabled" },
+{ "PFER_FE14", 0x40F00014, 14, 0x00000001, 'd', "PM wake up due to GPIO14 falling edge detect enabled" },
+{ "PFER_FE15", 0x40F00014, 15, 0x00000001, 'd', "PM wake up due to GPIO15 falling edge detect enabled" },
+
+{ "PEDR", 0x40F00018, 0, 0xffffffff, 'x', "Power Manager Edge Detect Status Register (3-28)" },
+{ "PEDR_ED0", 0x40F00018, 0, 0x00000001, 'd', "PM wake up due to edge on GPIO 0 detected" },
+{ "PEDR_ED1", 0x40F00018, 1, 0x00000001, 'd', "PM wake up due to edge on GPIO 1 detected" },
+{ "PEDR_ED2", 0x40F00018, 2, 0x00000001, 'd', "PM wake up due to edge on GPIO 2 detected" },
+{ "PEDR_ED3", 0x40F00018, 3, 0x00000001, 'd', "PM wake up due to edge on GPIO 3 detected" },
+{ "PEDR_ED4", 0x40F00018, 4, 0x00000001, 'd', "PM wake up due to edge on GPIO 4 detected" },
+{ "PEDR_ED5", 0x40F00018, 5, 0x00000001, 'd', "PM wake up due to edge on GPIO 5 detected" },
+{ "PEDR_ED6", 0x40F00018, 6, 0x00000001, 'd', "PM wake up due to edge on GPIO 6 detected" },
+{ "PEDR_ED7", 0x40F00018, 7, 0x00000001, 'd', "PM wake up due to edge on GPIO 7 detected" },
+{ "PEDR_ED8", 0x40F00018, 8, 0x00000001, 'd', "PM wake up due to edge on GPIO 8 detected" },
+{ "PEDR_ED9", 0x40F00018, 9, 0x00000001, 'd', "PM wake up due to edge on GPIO 9 detected" },
+{ "PEDR_ED10", 0x40F00018, 10, 0x00000001, 'd', "PM wake up due to edge on GPIO10 detected" },
+{ "PEDR_ED11", 0x40F00018, 11, 0x00000001, 'd', "PM wake up due to edge on GPIO11 detected" },
+{ "PEDR_ED12", 0x40F00018, 12, 0x00000001, 'd', "PM wake up due to edge on GPIO12 detected" },
+{ "PEDR_ED13", 0x40F00018, 13, 0x00000001, 'd', "PM wake up due to edge on GPIO13 detected" },
+{ "PEDR_ED14", 0x40F00018, 14, 0x00000001, 'd', "PM wake up due to edge on GPIO14 detected" },
+{ "PEDR_ED15", 0x40F00018, 15, 0x00000001, 'd', "PM wake up due to edge on GPIO15 detected" },
+
+{ "PCFR", 0x40F0001C, 0, 0xffffffff, 'x', "Power Manager General Configuration Register (3-24)" },
+{ "PCFR_OPDE", 0x40F0001C, 0, 0x00000001, 'd', "PM stop 3.6864 MHz oscillator during sleep" },
+{ "PCFR_FP", 0x40F0001C, 1, 0x00000001, 'd', "PM PCMCIA signals float during sleep" },
+{ "PCFR_FS", 0x40F0001C, 2, 0x00000001, 'd', "PM static chip select signals float during sleep" },
+
+{ "PGSR0", 0x40F00020, 0, 0xffffffff, 'x', "Power Manager GPIO Sleep State Register 0 (3-32)" },
+{ "PGSR_SS0", 0x40F00020, 0, 0x00000001, 'd', "PM GPIO pin 0 is driven to 1 during sleep" },
+{ "PGSR_SS1", 0x40F00020, 1, 0x00000001, 'd', "PM GPIO pin 1 is driven to 1 during sleep" },
+{ "PGSR_SS2", 0x40F00020, 2, 0x00000001, 'd', "PM GPIO pin 2 is driven to 1 during sleep" },
+{ "PGSR_SS3", 0x40F00020, 3, 0x00000001, 'd', "PM GPIO pin 3 is driven to 1 during sleep" },
+{ "PGSR_SS4", 0x40F00020, 4, 0x00000001, 'd', "PM GPIO pin 4 is driven to 1 during sleep" },
+{ "PGSR_SS5", 0x40F00020, 5, 0x00000001, 'd', "PM GPIO pin 5 is driven to 1 during sleep" },
+{ "PGSR_SS6", 0x40F00020, 6, 0x00000001, 'd', "PM GPIO pin 6 is driven to 1 during sleep" },
+{ "PGSR_SS7", 0x40F00020, 7, 0x00000001, 'd', "PM GPIO pin 7 is driven to 1 during sleep" },
+{ "PGSR_SS8", 0x40F00020, 8, 0x00000001, 'd', "PM GPIO pin 8 is driven to 1 during sleep" },
+{ "PGSR_SS9", 0x40F00020, 9, 0x00000001, 'd', "PM GPIO pin 9 is driven to 1 during sleep" },
+{ "PGSR_SS10", 0x40F00020, 10, 0x00000001, 'd', "PM GPIO pin 10 is driven to 1 during sleep" },
+{ "PGSR_SS11", 0x40F00020, 11, 0x00000001, 'd', "PM GPIO pin 11 is driven to 1 during sleep" },
+{ "PGSR_SS12", 0x40F00020, 12, 0x00000001, 'd', "PM GPIO pin 12 is driven to 1 during sleep" },
+{ "PGSR_SS13", 0x40F00020, 13, 0x00000001, 'd', "PM GPIO pin 13 is driven to 1 during sleep" },
+{ "PGSR_SS14", 0x40F00020, 14, 0x00000001, 'd', "PM GPIO pin 14 is driven to 1 during sleep" },
+{ "PGSR_SS15", 0x40F00020, 15, 0x00000001, 'd', "PM GPIO pin 15 is driven to 1 during sleep" },
+{ "PGSR_SS16", 0x40F00020, 16, 0x00000001, 'd', "PM GPIO pin 16 is driven to 1 during sleep" },
+{ "PGSR_SS17", 0x40F00020, 17, 0x00000001, 'd', "PM GPIO pin 17 is driven to 1 during sleep" },
+{ "PGSR_SS18", 0x40F00020, 18, 0x00000001, 'd', "PM GPIO pin 18 is driven to 1 during sleep" },
+{ "PGSR_SS19", 0x40F00020, 19, 0x00000001, 'd', "PM GPIO pin 19 is driven to 1 during sleep" },
+{ "PGSR_SS20", 0x40F00020, 20, 0x00000001, 'd', "PM GPIO pin 20 is driven to 1 during sleep" },
+{ "PGSR_SS21", 0x40F00020, 21, 0x00000001, 'd', "PM GPIO pin 21 is driven to 1 during sleep" },
+{ "PGSR_SS22", 0x40F00020, 22, 0x00000001, 'd', "PM GPIO pin 22 is driven to 1 during sleep" },
+{ "PGSR_SS23", 0x40F00020, 23, 0x00000001, 'd', "PM GPIO pin 23 is driven to 1 during sleep" },
+{ "PGSR_SS24", 0x40F00020, 24, 0x00000001, 'd', "PM GPIO pin 24 is driven to 1 during sleep" },
+{ "PGSR_SS25", 0x40F00020, 25, 0x00000001, 'd', "PM GPIO pin 25 is driven to 1 during sleep" },
+{ "PGSR_SS26", 0x40F00020, 26, 0x00000001, 'd', "PM GPIO pin 26 is driven to 1 during sleep" },
+{ "PGSR_SS27", 0x40F00020, 27, 0x00000001, 'd', "PM GPIO pin 27 is driven to 1 during sleep" },
+{ "PGSR_SS28", 0x40F00020, 28, 0x00000001, 'd', "PM GPIO pin 28 is driven to 1 during sleep" },
+{ "PGSR_SS29", 0x40F00020, 29, 0x00000001, 'd', "PM GPIO pin 29 is driven to 1 during sleep" },
+{ "PGSR_SS30", 0x40F00020, 30, 0x00000001, 'd', "PM GPIO pin 30 is driven to 1 during sleep" },
+{ "PGSR_SS31", 0x40F00020, 31, 0x00000001, 'd', "PM GPIO pin 31 is driven to 1 during sleep" },
+
+{ "PGSR1", 0x40F00024, 0, 0xffffffff, 'x', "Power Manager GPIO Sleep State Register 1 (3-32)" },
+{ "PGSR_SS32", 0x40F00024, 0, 0x00000001, 'd', "PM GPIO pin 32 is driven to 1 during sleep" },
+{ "PGSR_SS33", 0x40F00024, 1, 0x00000001, 'd', "PM GPIO pin 33 is driven to 1 during sleep" },
+{ "PGSR_SS34", 0x40F00024, 2, 0x00000001, 'd', "PM GPIO pin 34 is driven to 1 during sleep" },
+{ "PGSR_SS35", 0x40F00024, 3, 0x00000001, 'd', "PM GPIO pin 35 is driven to 1 during sleep" },
+{ "PGSR_SS36", 0x40F00024, 4, 0x00000001, 'd', "PM GPIO pin 36 is driven to 1 during sleep" },
+{ "PGSR_SS37", 0x40F00024, 5, 0x00000001, 'd', "PM GPIO pin 37 is driven to 1 during sleep" },
+{ "PGSR_SS38", 0x40F00024, 6, 0x00000001, 'd', "PM GPIO pin 38 is driven to 1 during sleep" },
+{ "PGSR_SS39", 0x40F00024, 7, 0x00000001, 'd', "PM GPIO pin 39 is driven to 1 during sleep" },
+{ "PGSR_SS40", 0x40F00024, 8, 0x00000001, 'd', "PM GPIO pin 40 is driven to 1 during sleep" },
+{ "PGSR_SS41", 0x40F00024, 9, 0x00000001, 'd', "PM GPIO pin 41 is driven to 1 during sleep" },
+{ "PGSR_SS42", 0x40F00024, 10, 0x00000001, 'd', "PM GPIO pin 42 is driven to 1 during sleep" },
+{ "PGSR_SS43", 0x40F00024, 11, 0x00000001, 'd', "PM GPIO pin 43 is driven to 1 during sleep" },
+{ "PGSR_SS44", 0x40F00024, 12, 0x00000001, 'd', "PM GPIO pin 44 is driven to 1 during sleep" },
+{ "PGSR_SS45", 0x40F00024, 13, 0x00000001, 'd', "PM GPIO pin 45 is driven to 1 during sleep" },
+{ "PGSR_SS46", 0x40F00024, 14, 0x00000001, 'd', "PM GPIO pin 46 is driven to 1 during sleep" },
+{ "PGSR_SS47", 0x40F00024, 15, 0x00000001, 'd', "PM GPIO pin 47 is driven to 1 during sleep" },
+{ "PGSR_SS48", 0x40F00024, 16, 0x00000001, 'd', "PM GPIO pin 48 is driven to 1 during sleep" },
+{ "PGSR_SS49", 0x40F00024, 17, 0x00000001, 'd', "PM GPIO pin 49 is driven to 1 during sleep" },
+{ "PGSR_SS50", 0x40F00024, 18, 0x00000001, 'd', "PM GPIO pin 50 is driven to 1 during sleep" },
+{ "PGSR_SS51", 0x40F00024, 19, 0x00000001, 'd', "PM GPIO pin 51 is driven to 1 during sleep" },
+{ "PGSR_SS52", 0x40F00024, 20, 0x00000001, 'd', "PM GPIO pin 52 is driven to 1 during sleep" },
+{ "PGSR_SS53", 0x40F00024, 21, 0x00000001, 'd', "PM GPIO pin 53 is driven to 1 during sleep" },
+{ "PGSR_SS54", 0x40F00024, 22, 0x00000001, 'd', "PM GPIO pin 54 is driven to 1 during sleep" },
+{ "PGSR_SS55", 0x40F00024, 23, 0x00000001, 'd', "PM GPIO pin 55 is driven to 1 during sleep" },
+{ "PGSR_SS56", 0x40F00024, 24, 0x00000001, 'd', "PM GPIO pin 56 is driven to 1 during sleep" },
+{ "PGSR_SS57", 0x40F00024, 25, 0x00000001, 'd', "PM GPIO pin 57 is driven to 1 during sleep" },
+{ "PGSR_SS58", 0x40F00024, 26, 0x00000001, 'd', "PM GPIO pin 58 is driven to 1 during sleep" },
+{ "PGSR_SS59", 0x40F00024, 27, 0x00000001, 'd', "PM GPIO pin 59 is driven to 1 during sleep" },
+{ "PGSR_SS60", 0x40F00024, 28, 0x00000001, 'd', "PM GPIO pin 60 is driven to 1 during sleep" },
+{ "PGSR_SS61", 0x40F00024, 29, 0x00000001, 'd', "PM GPIO pin 61 is driven to 1 during sleep" },
+{ "PGSR_SS62", 0x40F00024, 30, 0x00000001, 'd', "PM GPIO pin 62 is driven to 1 during sleep" },
+{ "PGSR_SS63", 0x40F00024, 31, 0x00000001, 'd', "PM GPIO pin 63 is driven to 1 during sleep" },
+
+{ "PGSR2", 0x40F00028, 0, 0xffffffff, 'x', "Power Manager GPIO Sleep State Register 2 (3-33)" },
+{ "PGSR_SS64", 0x40F00028, 0, 0x00000001, 'd', "PM GPIO pin 64 is driven to 1 during sleep" },
+{ "PGSR_SS65", 0x40F00028, 1, 0x00000001, 'd', "PM GPIO pin 65 is driven to 1 during sleep" },
+{ "PGSR_SS66", 0x40F00028, 2, 0x00000001, 'd', "PM GPIO pin 66 is driven to 1 during sleep" },
+{ "PGSR_SS67", 0x40F00028, 3, 0x00000001, 'd', "PM GPIO pin 67 is driven to 1 during sleep" },
+{ "PGSR_SS68", 0x40F00028, 4, 0x00000001, 'd', "PM GPIO pin 68 is driven to 1 during sleep" },
+{ "PGSR_SS69", 0x40F00028, 5, 0x00000001, 'd', "PM GPIO pin 69 is driven to 1 during sleep" },
+{ "PGSR_SS70", 0x40F00028, 6, 0x00000001, 'd', "PM GPIO pin 70 is driven to 1 during sleep" },
+{ "PGSR_SS71", 0x40F00028, 7, 0x00000001, 'd', "PM GPIO pin 71 is driven to 1 during sleep" },
+{ "PGSR_SS72", 0x40F00028, 8, 0x00000001, 'd', "PM GPIO pin 72 is driven to 1 during sleep" },
+{ "PGSR_SS73", 0x40F00028, 9, 0x00000001, 'd', "PM GPIO pin 73 is driven to 1 during sleep" },
+{ "PGSR_SS74", 0x40F00028, 10, 0x00000001, 'd', "PM GPIO pin 74 is driven to 1 during sleep" },
+{ "PGSR_SS75", 0x40F00028, 11, 0x00000001, 'd', "PM GPIO pin 75 is driven to 1 during sleep" },
+{ "PGSR_SS76", 0x40F00028, 12, 0x00000001, 'd', "PM GPIO pin 76 is driven to 1 during sleep" },
+{ "PGSR_SS77", 0x40F00028, 13, 0x00000001, 'd', "PM GPIO pin 77 is driven to 1 during sleep" },
+{ "PGSR_SS78", 0x40F00028, 14, 0x00000001, 'd', "PM GPIO pin 78 is driven to 1 during sleep" },
+{ "PGSR_SS79", 0x40F00028, 15, 0x00000001, 'd', "PM GPIO pin 79 is driven to 1 during sleep" },
+{ "PGSR_SS80", 0x40F00028, 16, 0x00000001, 'd', "PM GPIO pin 80 is driven to 1 during sleep" },
+
+{ "RCSR", 0x40F00030, 0, 0xffffffff, 'x', "Power Manager Reset Controller Status Register (3-34)" },
+{ "RCSR_HWR", 0x40F00030, 0, 0x00000001, 'd', "PM hardware reset occurred" },
+{ "RCSR_WDR", 0x40F00030, 1, 0x00000001, 'd', "PM watchdog reset occurred" },
+{ "RCSR_SMR", 0x40F00030, 2, 0x00000001, 'd', "PM sleep mode occurred" },
+{ "RCSR_GFR", 0x40F00030, 3, 0x00000001, 'd', "PM GPIO reset occurred" },
+
+// PXA255
+{ "PMFW", 0x40F00034, 0, 0xffffffff, 'x', "Power Manager Fast Sleep Wakeup Register (3-31)" },
+{ "PMFW_FWAKE",0x40F00034, 1, 0x00000001, 'x', "Fast Wakeup Enable" },
+
+{ "CCCR", 0x41300000, 0, 0xffffffff, 'x', "Core Clock Configuration Register (3-35)" },
+{ "CCCR_L", 0x41300000, 0, 0x0000001f, 'x', "CM crystal freq to memory freq multiplier" },
+{ "CCCR_M", 0x41300000, 5, 0x00000003, 'x', "CM memory freq to run mode freq multiplier" },
+{ "CCCR_N", 0x41300000, 7, 0x00000007, 'x', "CM run mode freq to turbo freq multiplier" },
+
+{ "CKEN", 0x41300004, 0, 0xffffffff, 'x', "Clock Enable Register (3-36)" },
+{ "CKEN_0", 0x41300004, 0, 0x00000001, 'd', "CM PWM0 clock enabled" },
+{ "CKEN_1", 0x41300004, 1, 0x00000001, 'd', "CM PWM1 clock enabled" },
+{ "CKEN_2", 0x41300004, 2, 0x00000001, 'd', "CM AC97 clock enabled" },
+{ "CKEN_3", 0x41300004, 3, 0x00000001, 'd', "CM SSP clock enabled" },
+{ "CKEN_5", 0x41300004, 5, 0x00000001, 'd', "CM STUART clock enabled" },
+{ "CKEN_6", 0x41300004, 6, 0x00000001, 'd', "CM FFUART clock enabled" },
+{ "CKEN_7", 0x41300004, 7, 0x00000001, 'd', "CM BTUART clock enabled" },
+{ "CKEN_8", 0x41300004, 8, 0x00000001, 'd', "CM I2S clock enabled" },
+{ "CKEN_11", 0x41300004, 11, 0x00000001, 'd', "CM USB clock enabled" },
+{ "CKEN_12", 0x41300004, 12, 0x00000001, 'd', "CM MMC clock enabled" },
+{ "CKEN_13", 0x41300004, 13, 0x00000001, 'd', "CM FIPC clock enabled" },
+{ "CKEN_14", 0x41300004, 14, 0x00000001, 'd', "CM I2C clock enabled" },
+{ "CKEN_16", 0x41300004, 16, 0x00000001, 'd', "CM LCD clock enabled" },
+
+{ "OSCC", 0x41300008, 0, 0xffffffff, 'x', "Oscillator Configuration Register (3-38)" },
+{ "OSCC_OOK", 0x41300008, 0, 0x00000001, 'd', "CM 32.768 kHz oscillator enabled and stabilized" },
+{ "OSCC_OON", 0x41300008, 1, 0x00000001, 'd', "CM 32.768 kHz oscillator enabled" },
+
+// TODO: CP14-Registers (3-37)
+
+{ "GPLR0", 0x40E00000, 0, 0xffffffff, 'x', "GPIO Pin Level Register 0 (4-7)" },
+#if defined(CONFIG_ARCH_RAMSES)
+{ "GPLR0_0", 0x40E00000, 0, 0x00000001, 'd', "GPIO 0 (nc) level" },
+{ "GPLR0_1", 0x40E00000, 1, 0x00000001, 'd', "GPIO 1 (nPFI) level" },
+{ "GPLR0_2", 0x40E00000, 2, 0x00000001, 'd', "GPIO 2 (BAT_DATA) level" },
+{ "GPLR0_3", 0x40E00000, 3, 0x00000001, 'd', "GPIO 3 (IRQ_KEY) level" },
+{ "GPLR0_4", 0x40E00000, 4, 0x00000001, 'd', "GPIO 4 (IRQ_ETH) level" },
+{ "GPLR0_5", 0x40E00000, 5, 0x00000001, 'd', "GPIO 5 (nc) level" },
+{ "GPLR0_6", 0x40E00000, 6, 0x00000001, 'd', "GPIO 6 (MMC_CLK) level" },
+{ "GPLR0_7", 0x40E00000, 7, 0x00000001, 'd', "GPIO 7 (IRQ_GSM) level" },
+{ "GPLR0_8", 0x40E00000, 8, 0x00000001, 'd', "GPIO 8 (nPCC_S1_CD) level" },
+{ "GPLR0_9", 0x40E00000, 9, 0x00000001, 'd', "GPIO 9 (MMC_CD) level" },
+{ "GPLR0_10", 0x40E00000, 10, 0x00000001, 'd', "GPIO 10 (IRQ_RTC) level" },
+{ "GPLR0_11", 0x40E00000, 11, 0x00000001, 'd', "GPIO 11 (nc 3M6) level" },
+{ "GPLR0_12", 0x40E00000, 12, 0x00000001, 'd', "GPIO 12 (nc) level" },
+{ "GPLR0_13", 0x40E00000, 13, 0x00000001, 'd', "GPIO 13 (IRQ_DOCK) level" },
+{ "GPLR0_14", 0x40E00000, 14, 0x00000001, 'd', "GPIO 14 (nc) level" },
+{ "GPLR0_15", 0x40E00000, 15, 0x00000001, 'd', "GPIO 15 (nCS1) level" },
+{ "GPLR0_16", 0x40E00000, 16, 0x00000001, 'd', "GPIO 16 (PWM0) level" },
+{ "GPLR0_17", 0x40E00000, 17, 0x00000001, 'd', "GPIO 17 (PWM1) level" },
+{ "GPLR0_18", 0x40E00000, 18, 0x00000001, 'd', "GPIO 18 (RDY) level" },
+{ "GPLR0_19", 0x40E00000, 19, 0x00000001, 'd', "GPIO 19 (nc nPCC_S0_IRQ) level" },
+{ "GPLR0_20", 0x40E00000, 20, 0x00000001, 'd', "GPIO 20 (nc) level" },
+{ "GPLR0_21", 0x40E00000, 21, 0x00000001, 'd', "GPIO 21 (AC97_IRQ) level" },
+{ "GPLR0_22", 0x40E00000, 22, 0x00000001, 'd', "GPIO 22 (nPCC_S1_IRQ) level" },
+{ "GPLR0_23", 0x40E00000, 23, 0x00000001, 'd', "GPIO 23 (UART_INTA) level" },
+{ "GPLR0_24", 0x40E00000, 24, 0x00000001, 'd', "GPIO 24 (UART_INTB) level" },
+{ "GPLR0_25", 0x40E00000, 25, 0x00000001, 'd', "GPIO 25 (UART_INTC) level" },
+{ "GPLR0_26", 0x40E00000, 26, 0x00000001, 'd', "GPIO 26 (UART_INTD) level" },
+{ "GPLR0_27", 0x40E00000, 27, 0x00000001, 'd', "GPIO 27 (nc CPLD_FREE) level" },
+{ "GPLR0_28", 0x40E00000, 28, 0x00000001, 'd', "GPIO 28 (AUD_BITCLK) level" },
+{ "GPLR0_29", 0x40E00000, 29, 0x00000001, 'd', "GPIO 29 (AUD_SDIN0) level" },
+{ "GPLR0_30", 0x40E00000, 30, 0x00000001, 'd', "GPIO 30 (AUD_SDOUT) level" },
+{ "GPLR0_31", 0x40E00000, 31, 0x00000001, 'd', "GPIO 31 (AUD_SYNC) level" },
+#else
+{ "GPLR0_0", 0x40E00000, 0, 0x00000001, 'd', "GPIO 0 level" },
+{ "GPLR0_1", 0x40E00000, 1, 0x00000001, 'd', "GPIO 1 level" },
+{ "GPLR0_2", 0x40E00000, 2, 0x00000001, 'd', "GPIO 2 level" },
+{ "GPLR0_3", 0x40E00000, 3, 0x00000001, 'd', "GPIO 3 level" },
+{ "GPLR0_4", 0x40E00000, 4, 0x00000001, 'd', "GPIO 4 level" },
+{ "GPLR0_5", 0x40E00000, 5, 0x00000001, 'd', "GPIO 5 level" },
+{ "GPLR0_6", 0x40E00000, 6, 0x00000001, 'd', "GPIO 6 level" },
+{ "GPLR0_7", 0x40E00000, 7, 0x00000001, 'd', "GPIO 7 level" },
+{ "GPLR0_8", 0x40E00000, 8, 0x00000001, 'd', "GPIO 8 level" },
+{ "GPLR0_9", 0x40E00000, 9, 0x00000001, 'd', "GPIO 9 level" },
+{ "GPLR0_10", 0x40E00000, 10, 0x00000001, 'd', "GPIO 10 level" },
+{ "GPLR0_11", 0x40E00000, 11, 0x00000001, 'd', "GPIO 11 level" },
+{ "GPLR0_12", 0x40E00000, 12, 0x00000001, 'd', "GPIO 12 level" },
+{ "GPLR0_13", 0x40E00000, 13, 0x00000001, 'd', "GPIO 13 level" },
+{ "GPLR0_14", 0x40E00000, 14, 0x00000001, 'd', "GPIO 14 level" },
+{ "GPLR0_15", 0x40E00000, 15, 0x00000001, 'd', "GPIO 15 level" },
+{ "GPLR0_16", 0x40E00000, 16, 0x00000001, 'd', "GPIO 16 level" },
+{ "GPLR0_17", 0x40E00000, 17, 0x00000001, 'd', "GPIO 17 level" },
+{ "GPLR0_18", 0x40E00000, 18, 0x00000001, 'd', "GPIO 18 level" },
+{ "GPLR0_19", 0x40E00000, 19, 0x00000001, 'd', "GPIO 19 level" },
+{ "GPLR0_20", 0x40E00000, 20, 0x00000001, 'd', "GPIO 20 level" },
+{ "GPLR0_21", 0x40E00000, 21, 0x00000001, 'd', "GPIO 21 level" },
+{ "GPLR0_22", 0x40E00000, 22, 0x00000001, 'd', "GPIO 22 level" },
+{ "GPLR0_23", 0x40E00000, 23, 0x00000001, 'd', "GPIO 23 level" },
+{ "GPLR0_24", 0x40E00000, 24, 0x00000001, 'd', "GPIO 24 level" },
+{ "GPLR0_25", 0x40E00000, 25, 0x00000001, 'd', "GPIO 25 level" },
+{ "GPLR0_26", 0x40E00000, 26, 0x00000001, 'd', "GPIO 26 level" },
+{ "GPLR0_27", 0x40E00000, 27, 0x00000001, 'd', "GPIO 27 level" },
+{ "GPLR0_28", 0x40E00000, 28, 0x00000001, 'd', "GPIO 28 level" },
+{ "GPLR0_29", 0x40E00000, 29, 0x00000001, 'd', "GPIO 29 level" },
+{ "GPLR0_30", 0x40E00000, 30, 0x00000001, 'd', "GPIO 30 level" },
+{ "GPLR0_31", 0x40E00000, 31, 0x00000001, 'd', "GPIO 31 level" },
+#endif
+
+{ "GPLR1", 0x40E00004, 0, 0xffffffff, 'x', "GPIO Level Register 1 (4-8)" },
+#if defined(CONFIG_ARCH_RAMSES)
+{ "GPLR1_32", 0x40E00004, 0, 0x00000001, 'd', "GPIO 32 (AUD_SDIN1) level" },
+{ "GPLR1_33", 0x40E00004, 1, 0x00000001, 'd', "GPIO 33 (nCS5) level" },
+{ "GPLR1_34", 0x40E00004, 2, 0x00000001, 'd', "GPIO 34 (FF_RXD) level" },
+{ "GPLR1_35", 0x40E00004, 3, 0x00000001, 'd', "GPIO 35 (FF_CTS) level" },
+{ "GPLR1_36", 0x40E00004, 4, 0x00000001, 'd', "GPIO 36 (FF_DCD) level" },
+{ "GPLR1_37", 0x40E00004, 5, 0x00000001, 'd', "GPIO 37 (FF_DSR) level" },
+{ "GPLR1_38", 0x40E00004, 6, 0x00000001, 'd', "GPIO 38 (FF_RI) level" },
+{ "GPLR1_39", 0x40E00004, 7, 0x00000001, 'd', "GPIO 39 (FF_TXD) level" },
+{ "GPLR1_40", 0x40E00004, 8, 0x00000001, 'd', "GPIO 40 (FF_DTR) level" },
+{ "GPLR1_41", 0x40E00004, 9, 0x00000001, 'd', "GPIO 41 (FF_RTS) level" },
+{ "GPLR1_42", 0x40E00004, 10, 0x00000001, 'd', "GPIO 42 (BT_RXD) level" },
+{ "GPLR1_43", 0x40E00004, 11, 0x00000001, 'd', "GPIO 43 (BT_TXD) level" },
+{ "GPLR1_44", 0x40E00004, 12, 0x00000001, 'd', "GPIO 44 (BT_CTS) level" },
+{ "GPLR1_45", 0x40E00004, 13, 0x00000001, 'd', "GPIO 45 (BT_RTS) level" },
+{ "GPLR1_46", 0x40E00004, 14, 0x00000001, 'd', "GPIO 46 (IR_RXD) level" },
+{ "GPLR1_47", 0x40E00004, 15, 0x00000001, 'd', "GPIO 47 (IR_TXD) level" },
+{ "GPLR1_48", 0x40E00004, 16, 0x00000001, 'd', "GPIO 48 (nPOE) level" },
+{ "GPLR1_49", 0x40E00004, 17, 0x00000001, 'd', "GPIO 49 (nPWE) level" },
+{ "GPLR1_50", 0x40E00004, 18, 0x00000001, 'd', "GPIO 50 (nPIOR) level" },
+{ "GPLR1_51", 0x40E00004, 19, 0x00000001, 'd', "GPIO 51 (nPIOW) level" },
+{ "GPLR1_52", 0x40E00004, 20, 0x00000001, 'd', "GPIO 52 (nPCE1) level" },
+{ "GPLR1_53", 0x40E00004, 21, 0x00000001, 'd', "GPIO 53 (nPCE2) level" },
+{ "GPLR1_54", 0x40E00004, 22, 0x00000001, 'd', "GPIO 54 (nPKTSEL) level" },
+{ "GPLR1_55", 0x40E00004, 23, 0x00000001, 'd', "GPIO 55 (nPREG) level" },
+{ "GPLR1_56", 0x40E00004, 24, 0x00000001, 'd', "GPIO 56 (nPWAIT) level" },
+{ "GPLR1_57", 0x40E00004, 25, 0x00000001, 'd', "GPIO 57 (nIOIS16) level" },
+{ "GPLR1_58", 0x40E00004, 26, 0x00000001, 'd', "GPIO 58 (LDD0) level" },
+{ "GPLR1_59", 0x40E00004, 27, 0x00000001, 'd', "GPIO 59 (LDD1) level" },
+{ "GPLR1_60", 0x40E00004, 28, 0x00000001, 'd', "GPIO 60 (LDD2) level" },
+{ "GPLR1_61", 0x40E00004, 29, 0x00000001, 'd', "GPIO 61 (LDD3) level" },
+{ "GPLR1_62", 0x40E00004, 30, 0x00000001, 'd', "GPIO 62 (LDD4) level" },
+{ "GPLR1_63", 0x40E00004, 31, 0x00000001, 'd', "GPIO 63 (LDD5) level" },
+#else
+{ "GPLR1_32", 0x40E00004, 0, 0x00000001, 'd', "GPIO 32 level" },
+{ "GPLR1_33", 0x40E00004, 1, 0x00000001, 'd', "GPIO 33 level" },
+{ "GPLR1_34", 0x40E00004, 2, 0x00000001, 'd', "GPIO 34 level" },
+{ "GPLR1_35", 0x40E00004, 3, 0x00000001, 'd', "GPIO 35 level" },
+{ "GPLR1_36", 0x40E00004, 4, 0x00000001, 'd', "GPIO 36 level" },
+{ "GPLR1_37", 0x40E00004, 5, 0x00000001, 'd', "GPIO 37 level" },
+{ "GPLR1_38", 0x40E00004, 6, 0x00000001, 'd', "GPIO 38 level" },
+{ "GPLR1_39", 0x40E00004, 7, 0x00000001, 'd', "GPIO 39 level" },
+{ "GPLR1_40", 0x40E00004, 8, 0x00000001, 'd', "GPIO 40 level" },
+{ "GPLR1_41", 0x40E00004, 9, 0x00000001, 'd', "GPIO 41 level" },
+{ "GPLR1_42", 0x40E00004, 10, 0x00000001, 'd', "GPIO 42 level" },
+{ "GPLR1_43", 0x40E00004, 11, 0x00000001, 'd', "GPIO 43 level" },
+{ "GPLR1_44", 0x40E00004, 12, 0x00000001, 'd', "GPIO 44 level" },
+{ "GPLR1_45", 0x40E00004, 13, 0x00000001, 'd', "GPIO 45 level" },
+{ "GPLR1_46", 0x40E00004, 14, 0x00000001, 'd', "GPIO 46 level" },
+{ "GPLR1_47", 0x40E00004, 15, 0x00000001, 'd', "GPIO 47 level" },
+{ "GPLR1_48", 0x40E00004, 16, 0x00000001, 'd', "GPIO 48 level" },
+{ "GPLR1_49", 0x40E00004, 17, 0x00000001, 'd', "GPIO 49 level" },
+{ "GPLR1_50", 0x40E00004, 18, 0x00000001, 'd', "GPIO 50 level" },
+{ "GPLR1_51", 0x40E00004, 19, 0x00000001, 'd', "GPIO 51 level" },
+{ "GPLR1_52", 0x40E00004, 20, 0x00000001, 'd', "GPIO 52 level" },
+{ "GPLR1_53", 0x40E00004, 21, 0x00000001, 'd', "GPIO 53 level" },
+{ "GPLR1_54", 0x40E00004, 22, 0x00000001, 'd', "GPIO 54 level" },
+{ "GPLR1_55", 0x40E00004, 23, 0x00000001, 'd', "GPIO 55 level" },
+{ "GPLR1_56", 0x40E00004, 24, 0x00000001, 'd', "GPIO 56 level" },
+{ "GPLR1_57", 0x40E00004, 25, 0x00000001, 'd', "GPIO 57 level" },
+{ "GPLR1_58", 0x40E00004, 26, 0x00000001, 'd', "GPIO 58 level" },
+{ "GPLR1_59", 0x40E00004, 27, 0x00000001, 'd', "GPIO 59 level" },
+{ "GPLR1_60", 0x40E00004, 28, 0x00000001, 'd', "GPIO 60 level" },
+{ "GPLR1_61", 0x40E00004, 29, 0x00000001, 'd', "GPIO 61 level" },
+{ "GPLR1_62", 0x40E00004, 30, 0x00000001, 'd', "GPIO 62 level" },
+{ "GPLR1_63", 0x40E00004, 31, 0x00000001, 'd', "GPIO 63 level" },
+#endif
+
+{ "GPLR2", 0x40E00008, 0, 0xffffffff, 'x', "GPIO Level Register 2 (4-8)" },
+#if defined(CONFIG_ARCH_RAMSES)
+{ "GPLR2_64", 0x40E00008, 0, 0x00000001, 'd', "GPIO 64 (LDD6) level" },
+{ "GPLR2_65", 0x40E00008, 1, 0x00000001, 'd', "GPIO 65 (LDD7) level" },
+{ "GPLR2_66", 0x40E00008, 2, 0x00000001, 'd', "GPIO 66 (nc) level" },
+{ "GPLR2_67", 0x40E00008, 3, 0x00000001, 'd', "GPIO 67 (nc) level" },
+{ "GPLR2_68", 0x40E00008, 4, 0x00000001, 'd', "GPIO 68 (nc) level" },
+{ "GPLR2_69", 0x40E00008, 5, 0x00000001, 'd', "GPIO 69 (nc) level" },
+{ "GPLR2_70", 0x40E00008, 6, 0x00000001, 'd', "GPIO 70 (nc) level" },
+{ "GPLR2_71", 0x40E00008, 7, 0x00000001, 'd', "GPIO 71 (nc) level" },
+{ "GPLR2_72", 0x40E00008, 8, 0x00000001, 'd', "GPIO 72 (nc) level" },
+{ "GPLR2_73", 0x40E00008, 9, 0x00000001, 'd', "GPIO 73 (nc) level" },
+{ "GPLR2_74", 0x40E00008, 10, 0x00000001, 'd', "GPIO 74 (FCLK) level" },
+{ "GPLR2_75", 0x40E00008, 11, 0x00000001, 'd', "GPIO 75 (LCLK) level" },
+{ "GPLR2_76", 0x40E00008, 12, 0x00000001, 'd', "GPIO 76 (PCLK) level" },
+{ "GPLR2_77", 0x40E00008, 13, 0x00000001, 'd', "GPIO 77 (BIAS) level" },
+{ "GPLR2_78", 0x40E00008, 14, 0x00000001, 'd', "GPIO 78 (nCS2) level" },
+{ "GPLR2_79", 0x40E00008, 15, 0x00000001, 'd', "GPIO 79 (nCS3) level" },
+{ "GPLR2_80", 0x40E00008, 16, 0x00000001, 'd', "GPIO 80 (nCS4) level" },
+{ "GPLR2_81", 0x40E00008, 17, 0x00000001, 'd', "GPIO 81 (nc) level" },
+{ "GPLR2_82", 0x40E00008, 18, 0x00000001, 'd', "GPIO 82 (nc) level" },
+{ "GPLR2_83", 0x40E00008, 19, 0x00000001, 'd', "GPIO 83 (nc) level" },
+{ "GPLR2_84", 0x40E00008, 20, 0x00000001, 'd', "GPIO 84 (nc) level" },
+#else
+{ "GPLR2_64", 0x40E00008, 0, 0x00000001, 'd', "GPIO 64 level" },
+{ "GPLR2_65", 0x40E00008, 1, 0x00000001, 'd', "GPIO 65 level" },
+{ "GPLR2_66", 0x40E00008, 2, 0x00000001, 'd', "GPIO 66 level" },
+{ "GPLR2_67", 0x40E00008, 3, 0x00000001, 'd', "GPIO 67 level" },
+{ "GPLR2_68", 0x40E00008, 4, 0x00000001, 'd', "GPIO 68 level" },
+{ "GPLR2_69", 0x40E00008, 5, 0x00000001, 'd', "GPIO 69 level" },
+{ "GPLR2_70", 0x40E00008, 6, 0x00000001, 'd', "GPIO 70 level" },
+{ "GPLR2_71", 0x40E00008, 7, 0x00000001, 'd', "GPIO 71 level" },
+{ "GPLR2_72", 0x40E00008, 8, 0x00000001, 'd', "GPIO 72 level" },
+{ "GPLR2_73", 0x40E00008, 9, 0x00000001, 'd', "GPIO 73 level" },
+{ "GPLR2_74", 0x40E00008, 10, 0x00000001, 'd', "GPIO 74 level" },
+{ "GPLR2_75", 0x40E00008, 11, 0x00000001, 'd', "GPIO 75 level" },
+{ "GPLR2_76", 0x40E00008, 12, 0x00000001, 'd', "GPIO 76 level" },
+{ "GPLR2_77", 0x40E00008, 13, 0x00000001, 'd', "GPIO 77 level" },
+{ "GPLR2_78", 0x40E00008, 14, 0x00000001, 'd', "GPIO 78 level" },
+{ "GPLR2_79", 0x40E00008, 15, 0x00000001, 'd', "GPIO 79 level" },
+{ "GPLR2_80", 0x40E00008, 16, 0x00000001, 'd', "GPIO 80 level" },
+{ "GPLR2_81", 0x40E00008, 17, 0x00000001, 'd', "GPIO 81 level" },
+{ "GPLR2_82", 0x40E00008, 18, 0x00000001, 'd', "GPIO 82 level" },
+{ "GPLR2_83", 0x40E00008, 19, 0x00000001, 'd', "GPIO 83 level" },
+{ "GPLR2_84", 0x40E00008, 20, 0x00000001, 'd', "GPIO 84 level" },
+#endif
+
+{ "GPDR0", 0x40E0000C, 0, 0xffffffff, 'x', "GPIO Direction Register 0 (4-9)" },
+{ "GPDR0_0", 0x40E0000C, 0, 0x00000001, 'd', "GPIO 0 i/o direction (1=output)" },
+{ "GPDR0_1", 0x40E0000C, 1, 0x00000001, 'd', "GPIO 1 i/o direction (1=output)" },
+{ "GPDR0_2", 0x40E0000C, 2, 0x00000001, 'd', "GPIO 2 i/o direction (1=output)" },
+{ "GPDR0_3", 0x40E0000C, 3, 0x00000001, 'd', "GPIO 3 i/o direction (1=output)" },
+{ "GPDR0_4", 0x40E0000C, 4, 0x00000001, 'd', "GPIO 4 i/o direction (1=output)" },
+{ "GPDR0_5", 0x40E0000C, 5, 0x00000001, 'd', "GPIO 5 i/o direction (1=output)" },
+{ "GPDR0_6", 0x40E0000C, 6, 0x00000001, 'd', "GPIO 6 i/o direction (1=output)" },
+{ "GPDR0_7", 0x40E0000C, 7, 0x00000001, 'd', "GPIO 7 i/o direction (1=output)" },
+{ "GPDR0_8", 0x40E0000C, 8, 0x00000001, 'd', "GPIO 8 i/o direction (1=output)" },
+{ "GPDR0_9", 0x40E0000C, 9, 0x00000001, 'd', "GPIO 9 i/o direction (1=output)" },
+{ "GPDR0_10", 0x40E0000C, 10, 0x00000001, 'd', "GPIO 10 i/o direction (1=output)" },
+{ "GPDR0_11", 0x40E0000C, 11, 0x00000001, 'd', "GPIO 11 i/o direction (1=output)" },
+{ "GPDR0_12", 0x40E0000C, 12, 0x00000001, 'd', "GPIO 12 i/o direction (1=output)" },
+{ "GPDR0_13", 0x40E0000C, 13, 0x00000001, 'd', "GPIO 13 i/o direction (1=output)" },
+{ "GPDR0_14", 0x40E0000C, 14, 0x00000001, 'd', "GPIO 14 i/o direction (1=output)" },
+{ "GPDR0_15", 0x40E0000C, 15, 0x00000001, 'd', "GPIO 15 i/o direction (1=output)" },
+{ "GPDR0_16", 0x40E0000C, 16, 0x00000001, 'd', "GPIO 16 i/o direction (1=output)" },
+{ "GPDR0_17", 0x40E0000C, 17, 0x00000001, 'd', "GPIO 17 i/o direction (1=output)" },
+{ "GPDR0_18", 0x40E0000C, 18, 0x00000001, 'd', "GPIO 18 i/o direction (1=output)" },
+{ "GPDR0_19", 0x40E0000C, 19, 0x00000001, 'd', "GPIO 19 i/o direction (1=output)" },
+{ "GPDR0_20", 0x40E0000C, 20, 0x00000001, 'd', "GPIO 20 i/o direction (1=output)" },
+{ "GPDR0_21", 0x40E0000C, 21, 0x00000001, 'd', "GPIO 21 i/o direction (1=output)" },
+{ "GPDR0_22", 0x40E0000C, 22, 0x00000001, 'd', "GPIO 22 i/o direction (1=output)" },
+{ "GPDR0_23", 0x40E0000C, 23, 0x00000001, 'd', "GPIO 23 i/o direction (1=output)" },
+{ "GPDR0_24", 0x40E0000C, 24, 0x00000001, 'd', "GPIO 24 i/o direction (1=output)" },
+{ "GPDR0_25", 0x40E0000C, 25, 0x00000001, 'd', "GPIO 25 i/o direction (1=output)" },
+{ "GPDR0_26", 0x40E0000C, 26, 0x00000001, 'd', "GPIO 26 i/o direction (1=output)" },
+{ "GPDR0_27", 0x40E0000C, 27, 0x00000001, 'd', "GPIO 27 i/o direction (1=output)" },
+{ "GPDR0_28", 0x40E0000C, 28, 0x00000001, 'd', "GPIO 28 i/o direction (1=output)" },
+{ "GPDR0_29", 0x40E0000C, 29, 0x00000001, 'd', "GPIO 29 i/o direction (1=output)" },
+{ "GPDR0_30", 0x40E0000C, 30, 0x00000001, 'd', "GPIO 30 i/o direction (1=output)" },
+{ "GPDR0_31", 0x40E0000C, 31, 0x00000001, 'd', "GPIO 31 i/o direction (1=output)" },
+
+{ "GPDR1", 0x40E00010, 0, 0xffffffff, 'x', "GPIO Direction Register 1 (4-9)" },
+{ "GPDR1_32", 0x40E00010, 0, 0x00000001, 'd', "GPIO 32 i/o direction (1=output)" },
+{ "GPDR1_33", 0x40E00010, 1, 0x00000001, 'd', "GPIO 33 i/o direction (1=output)" },
+{ "GPDR1_34", 0x40E00010, 2, 0x00000001, 'd', "GPIO 34 i/o direction (1=output)" },
+{ "GPDR1_35", 0x40E00010, 3, 0x00000001, 'd', "GPIO 35 i/o direction (1=output)" },
+{ "GPDR1_36", 0x40E00010, 4, 0x00000001, 'd', "GPIO 36 i/o direction (1=output)" },
+{ "GPDR1_37", 0x40E00010, 5, 0x00000001, 'd', "GPIO 37 i/o direction (1=output)" },
+{ "GPDR1_38", 0x40E00010, 6, 0x00000001, 'd', "GPIO 38 i/o direction (1=output)" },
+{ "GPDR1_39", 0x40E00010, 7, 0x00000001, 'd', "GPIO 39 i/o direction (1=output)" },
+{ "GPDR1_40", 0x40E00010, 8, 0x00000001, 'd', "GPIO 40 i/o direction (1=output)" },
+{ "GPDR1_41", 0x40E00010, 9, 0x00000001, 'd', "GPIO 41 i/o direction (1=output)" },
+{ "GPDR1_42", 0x40E00010, 10, 0x00000001, 'd', "GPIO 42 i/o direction (1=output)" },
+{ "GPDR1_43", 0x40E00010, 11, 0x00000001, 'd', "GPIO 43 i/o direction (1=output)" },
+{ "GPDR1_44", 0x40E00010, 12, 0x00000001, 'd', "GPIO 44 i/o direction (1=output)" },
+{ "GPDR1_45", 0x40E00010, 13, 0x00000001, 'd', "GPIO 45 i/o direction (1=output)" },
+{ "GPDR1_46", 0x40E00010, 14, 0x00000001, 'd', "GPIO 46 i/o direction (1=output)" },
+{ "GPDR1_47", 0x40E00010, 15, 0x00000001, 'd', "GPIO 47 i/o direction (1=output)" },
+{ "GPDR1_48", 0x40E00010, 16, 0x00000001, 'd', "GPIO 48 i/o direction (1=output)" },
+{ "GPDR1_49", 0x40E00010, 17, 0x00000001, 'd', "GPIO 49 i/o direction (1=output)" },
+{ "GPDR1_50", 0x40E00010, 18, 0x00000001, 'd', "GPIO 50 i/o direction (1=output)" },
+{ "GPDR1_51", 0x40E00010, 19, 0x00000001, 'd', "GPIO 51 i/o direction (1=output)" },
+{ "GPDR1_52", 0x40E00010, 20, 0x00000001, 'd', "GPIO 52 i/o direction (1=output)" },
+{ "GPDR1_53", 0x40E00010, 21, 0x00000001, 'd', "GPIO 53 i/o direction (1=output)" },
+{ "GPDR1_54", 0x40E00010, 22, 0x00000001, 'd', "GPIO 54 i/o direction (1=output)" },
+{ "GPDR1_55", 0x40E00010, 23, 0x00000001, 'd', "GPIO 55 i/o direction (1=output)" },
+{ "GPDR1_56", 0x40E00010, 24, 0x00000001, 'd', "GPIO 56 i/o direction (1=output)" },
+{ "GPDR1_57", 0x40E00010, 25, 0x00000001, 'd', "GPIO 57 i/o direction (1=output)" },
+{ "GPDR1_58", 0x40E00010, 26, 0x00000001, 'd', "GPIO 58 i/o direction (1=output)" },
+{ "GPDR1_59", 0x40E00010, 27, 0x00000001, 'd', "GPIO 59 i/o direction (1=output)" },
+{ "GPDR1_60", 0x40E00010, 28, 0x00000001, 'd', "GPIO 60 i/o direction (1=output)" },
+{ "GPDR1_61", 0x40E00010, 29, 0x00000001, 'd', "GPIO 61 i/o direction (1=output)" },
+{ "GPDR1_62", 0x40E00010, 30, 0x00000001, 'd', "GPIO 62 i/o direction (1=output)" },
+{ "GPDR1_63", 0x40E00010, 31, 0x00000001, 'd', "GPIO 63 i/o direction (1=output)" },
+
+{ "GPDR2", 0x40E00014, 0, 0xffffffff, 'x', "GPIO Direction Register 2 (4-9)" },
+{ "GPDR2_64", 0x40E00014, 0, 0x00000001, 'd', "GPIO 64 i/o direction (1=output)" },
+{ "GPDR2_65", 0x40E00014, 1, 0x00000001, 'd', "GPIO 65 i/o direction (1=output)" },
+{ "GPDR2_66", 0x40E00014, 2, 0x00000001, 'd', "GPIO 66 i/o direction (1=output)" },
+{ "GPDR2_67", 0x40E00014, 3, 0x00000001, 'd', "GPIO 67 i/o direction (1=output)" },
+{ "GPDR2_68", 0x40E00014, 4, 0x00000001, 'd', "GPIO 68 i/o direction (1=output)" },
+{ "GPDR2_69", 0x40E00014, 5, 0x00000001, 'd', "GPIO 69 i/o direction (1=output)" },
+{ "GPDR2_70", 0x40E00014, 6, 0x00000001, 'd', "GPIO 70 i/o direction (1=output)" },
+{ "GPDR2_71", 0x40E00014, 7, 0x00000001, 'd', "GPIO 71 i/o direction (1=output)" },
+{ "GPDR2_72", 0x40E00014, 8, 0x00000001, 'd', "GPIO 72 i/o direction (1=output)" },
+{ "GPDR2_73", 0x40E00014, 9, 0x00000001, 'd', "GPIO 73 i/o direction (1=output)" },
+{ "GPDR2_74", 0x40E00014, 10, 0x00000001, 'd', "GPIO 74 i/o direction (1=output)" },
+{ "GPDR2_75", 0x40E00014, 11, 0x00000001, 'd', "GPIO 75 i/o direction (1=output)" },
+{ "GPDR2_76", 0x40E00014, 12, 0x00000001, 'd', "GPIO 76 i/o direction (1=output)" },
+{ "GPDR2_77", 0x40E00014, 13, 0x00000001, 'd', "GPIO 77 i/o direction (1=output)" },
+{ "GPDR2_78", 0x40E00014, 14, 0x00000001, 'd', "GPIO 78 i/o direction (1=output)" },
+{ "GPDR2_79", 0x40E00014, 15, 0x00000001, 'd', "GPIO 79 i/o direction (1=output)" },
+{ "GPDR2_80", 0x40E00014, 16, 0x00000001, 'd', "GPIO 80 i/o direction (1=output)" },
+{ "GPDR2_81", 0x40E00014, 17, 0x00000001, 'd', "GPIO 81 i/o direction (1=output)" },
+{ "GPDR2_82", 0x40E00014, 18, 0x00000001, 'd', "GPIO 82 i/o direction (1=output)" },
+{ "GPDR2_83", 0x40E00014, 19, 0x00000001, 'd', "GPIO 83 i/o direction (1=output)" },
+{ "GPDR2_84", 0x40E00014, 20, 0x00000001, 'd', "GPIO 84 i/o direction (1=output)" },
+
+{ "GPSR0", 0x40E00018, 0, 0xffffffff, 'x', "GPIO Set Register 0 (4-10)" },
+{ "GPSR0_0", 0x40E00018, 0, 0x00000001, 'd', "GPIO 0 set" },
+{ "GPSR0_1", 0x40E00018, 1, 0x00000001, 'd', "GPIO 1 set" },
+{ "GPSR0_2", 0x40E00018, 2, 0x00000001, 'd', "GPIO 2 set" },
+{ "GPSR0_3", 0x40E00018, 3, 0x00000001, 'd', "GPIO 3 set" },
+{ "GPSR0_4", 0x40E00018, 4, 0x00000001, 'd', "GPIO 4 set" },
+{ "GPSR0_5", 0x40E00018, 5, 0x00000001, 'd', "GPIO 5 set" },
+{ "GPSR0_6", 0x40E00018, 6, 0x00000001, 'd', "GPIO 6 set" },
+{ "GPSR0_7", 0x40E00018, 7, 0x00000001, 'd', "GPIO 7 set" },
+{ "GPSR0_8", 0x40E00018, 8, 0x00000001, 'd', "GPIO 8 set" },
+{ "GPSR0_9", 0x40E00018, 9, 0x00000001, 'd', "GPIO 9 set" },
+{ "GPSR0_10", 0x40E00018, 10, 0x00000001, 'd', "GPIO 10 set" },
+{ "GPSR0_11", 0x40E00018, 11, 0x00000001, 'd', "GPIO 11 set" },
+{ "GPSR0_12", 0x40E00018, 12, 0x00000001, 'd', "GPIO 12 set" },
+{ "GPSR0_13", 0x40E00018, 13, 0x00000001, 'd', "GPIO 13 set" },
+{ "GPSR0_14", 0x40E00018, 14, 0x00000001, 'd', "GPIO 14 set" },
+{ "GPSR0_15", 0x40E00018, 15, 0x00000001, 'd', "GPIO 15 set" },
+{ "GPSR0_16", 0x40E00018, 16, 0x00000001, 'd', "GPIO 16 set" },
+{ "GPSR0_17", 0x40E00018, 17, 0x00000001, 'd', "GPIO 17 set" },
+{ "GPSR0_18", 0x40E00018, 18, 0x00000001, 'd', "GPIO 18 set" },
+{ "GPSR0_19", 0x40E00018, 19, 0x00000001, 'd', "GPIO 19 set" },
+{ "GPSR0_20", 0x40E00018, 20, 0x00000001, 'd', "GPIO 20 set" },
+{ "GPSR0_21", 0x40E00018, 21, 0x00000001, 'd', "GPIO 21 set" },
+{ "GPSR0_22", 0x40E00018, 22, 0x00000001, 'd', "GPIO 22 set" },
+{ "GPSR0_23", 0x40E00018, 23, 0x00000001, 'd', "GPIO 23 set" },
+{ "GPSR0_24", 0x40E00018, 24, 0x00000001, 'd', "GPIO 24 set" },
+{ "GPSR0_25", 0x40E00018, 25, 0x00000001, 'd', "GPIO 25 set" },
+{ "GPSR0_26", 0x40E00018, 26, 0x00000001, 'd', "GPIO 26 set" },
+{ "GPSR0_27", 0x40E00018, 27, 0x00000001, 'd', "GPIO 27 set" },
+{ "GPSR0_28", 0x40E00018, 28, 0x00000001, 'd', "GPIO 28 set" },
+{ "GPSR0_29", 0x40E00018, 29, 0x00000001, 'd', "GPIO 29 set" },
+{ "GPSR0_30", 0x40E00018, 30, 0x00000001, 'd', "GPIO 30 set" },
+{ "GPSR0_31", 0x40E00018, 31, 0x00000001, 'd', "GPIO 31 set" },
+
+{ "GPSR1", 0x40E0001C, 0, 0xffffffff, 'x', "GPIO Set Register 1 (4-10)" },
+{ "GPSR1_32", 0x40E0001C, 0, 0x00000001, 'd', "GPIO 32 set" },
+{ "GPSR1_33", 0x40E0001C, 1, 0x00000001, 'd', "GPIO 33 set" },
+{ "GPSR1_34", 0x40E0001C, 2, 0x00000001, 'd', "GPIO 34 set" },
+{ "GPSR1_35", 0x40E0001C, 3, 0x00000001, 'd', "GPIO 35 set" },
+{ "GPSR1_36", 0x40E0001C, 4, 0x00000001, 'd', "GPIO 36 set" },
+{ "GPSR1_37", 0x40E0001C, 5, 0x00000001, 'd', "GPIO 37 set" },
+{ "GPSR1_38", 0x40E0001C, 6, 0x00000001, 'd', "GPIO 38 set" },
+{ "GPSR1_39", 0x40E0001C, 7, 0x00000001, 'd', "GPIO 39 set" },
+{ "GPSR1_40", 0x40E0001C, 8, 0x00000001, 'd', "GPIO 40 set" },
+{ "GPSR1_41", 0x40E0001C, 9, 0x00000001, 'd', "GPIO 41 set" },
+{ "GPSR1_42", 0x40E0001C, 10, 0x00000001, 'd', "GPIO 42 set" },
+{ "GPSR1_43", 0x40E0001C, 11, 0x00000001, 'd', "GPIO 43 set" },
+{ "GPSR1_44", 0x40E0001C, 12, 0x00000001, 'd', "GPIO 44 set" },
+{ "GPSR1_45", 0x40E0001C, 13, 0x00000001, 'd', "GPIO 45 set" },
+{ "GPSR1_46", 0x40E0001C, 14, 0x00000001, 'd', "GPIO 46 set" },
+{ "GPSR1_47", 0x40E0001C, 15, 0x00000001, 'd', "GPIO 47 set" },
+{ "GPSR1_48", 0x40E0001C, 16, 0x00000001, 'd', "GPIO 48 set" },
+{ "GPSR1_49", 0x40E0001C, 17, 0x00000001, 'd', "GPIO 49 set" },
+{ "GPSR1_50", 0x40E0001C, 18, 0x00000001, 'd', "GPIO 50 set" },
+{ "GPSR1_51", 0x40E0001C, 19, 0x00000001, 'd', "GPIO 51 set" },
+{ "GPSR1_52", 0x40E0001C, 20, 0x00000001, 'd', "GPIO 52 set" },
+{ "GPSR1_53", 0x40E0001C, 21, 0x00000001, 'd', "GPIO 53 set" },
+{ "GPSR1_54", 0x40E0001C, 22, 0x00000001, 'd', "GPIO 54 set" },
+{ "GPSR1_55", 0x40E0001C, 23, 0x00000001, 'd', "GPIO 55 set" },
+{ "GPSR1_56", 0x40E0001C, 24, 0x00000001, 'd', "GPIO 56 set" },
+{ "GPSR1_57", 0x40E0001C, 25, 0x00000001, 'd', "GPIO 57 set" },
+{ "GPSR1_58", 0x40E0001C, 26, 0x00000001, 'd', "GPIO 58 set" },
+{ "GPSR1_59", 0x40E0001C, 27, 0x00000001, 'd', "GPIO 59 set" },
+{ "GPSR1_60", 0x40E0001C, 28, 0x00000001, 'd', "GPIO 60 set" },
+{ "GPSR1_61", 0x40E0001C, 29, 0x00000001, 'd', "GPIO 61 set" },
+{ "GPSR1_62", 0x40E0001C, 30, 0x00000001, 'd', "GPIO 62 set" },
+{ "GPSR1_63", 0x40E0001C, 31, 0x00000001, 'd', "GPIO 63 set" },
+
+{ "GPSR2", 0x40E00020, 0, 0xffffffff, 'x', "GPIO Set Register 2 (4-11)" },
+{ "GPSR2_64", 0x40E00020, 0, 0x00000001, 'd', "GPIO 64 set" },
+{ "GPSR2_65", 0x40E00020, 1, 0x00000001, 'd', "GPIO 65 set" },
+{ "GPSR2_66", 0x40E00020, 2, 0x00000001, 'd', "GPIO 66 set" },
+{ "GPSR2_67", 0x40E00020, 3, 0x00000001, 'd', "GPIO 67 set" },
+{ "GPSR2_68", 0x40E00020, 4, 0x00000001, 'd', "GPIO 68 set" },
+{ "GPSR2_69", 0x40E00020, 5, 0x00000001, 'd', "GPIO 69 set" },
+{ "GPSR2_70", 0x40E00020, 6, 0x00000001, 'd', "GPIO 70 set" },
+{ "GPSR2_71", 0x40E00020, 7, 0x00000001, 'd', "GPIO 71 set" },
+{ "GPSR2_72", 0x40E00020, 8, 0x00000001, 'd', "GPIO 72 set" },
+{ "GPSR2_73", 0x40E00020, 9, 0x00000001, 'd', "GPIO 73 set" },
+{ "GPSR2_74", 0x40E00020, 10, 0x00000001, 'd', "GPIO 74 set" },
+{ "GPSR2_75", 0x40E00020, 11, 0x00000001, 'd', "GPIO 75 set" },
+{ "GPSR2_76", 0x40E00020, 12, 0x00000001, 'd', "GPIO 76 set" },
+{ "GPSR2_77", 0x40E00020, 13, 0x00000001, 'd', "GPIO 77 set" },
+{ "GPSR2_78", 0x40E00020, 14, 0x00000001, 'd', "GPIO 78 set" },
+{ "GPSR2_79", 0x40E00020, 15, 0x00000001, 'd', "GPIO 79 set" },
+{ "GPSR2_80", 0x40E00020, 16, 0x00000001, 'd', "GPIO 80 set" },
+{ "GPSR2_81", 0x40E00020, 17, 0x00000001, 'd', "GPIO 81 set" },
+{ "GPSR2_82", 0x40E00020, 18, 0x00000001, 'd', "GPIO 82 set" },
+{ "GPSR2_83", 0x40E00020, 19, 0x00000001, 'd', "GPIO 83 set" },
+{ "GPSR2_84", 0x40E00020, 20, 0x00000001, 'd', "GPIO 84 set" },
+
+{ "GPCR0", 0x40E00024, 0, 0xffffffff, 'x', "GPIO Clear Register 0 (4-11)" },
+{ "GPCR0_0", 0x40E00024, 0, 0x00000001, 'd', "GPIO 0 clear" },
+{ "GPCR0_1", 0x40E00024, 1, 0x00000001, 'd', "GPIO 1 clear" },
+{ "GPCR0_2", 0x40E00024, 2, 0x00000001, 'd', "GPIO 2 clear" },
+{ "GPCR0_3", 0x40E00024, 3, 0x00000001, 'd', "GPIO 3 clear" },
+{ "GPCR0_4", 0x40E00024, 4, 0x00000001, 'd', "GPIO 4 clear" },
+{ "GPCR0_5", 0x40E00024, 5, 0x00000001, 'd', "GPIO 5 clear" },
+{ "GPCR0_6", 0x40E00024, 6, 0x00000001, 'd', "GPIO 6 clear" },
+{ "GPCR0_7", 0x40E00024, 7, 0x00000001, 'd', "GPIO 7 clear" },
+{ "GPCR0_8", 0x40E00024, 8, 0x00000001, 'd', "GPIO 8 clear" },
+{ "GPCR0_9", 0x40E00024, 9, 0x00000001, 'd', "GPIO 9 clear" },
+{ "GPCR0_10", 0x40E00024, 10, 0x00000001, 'd', "GPIO 10 clear" },
+{ "GPCR0_11", 0x40E00024, 11, 0x00000001, 'd', "GPIO 11 clear" },
+{ "GPCR0_12", 0x40E00024, 12, 0x00000001, 'd', "GPIO 12 clear" },
+{ "GPCR0_13", 0x40E00024, 13, 0x00000001, 'd', "GPIO 13 clear" },
+{ "GPCR0_14", 0x40E00024, 14, 0x00000001, 'd', "GPIO 14 clear" },
+{ "GPCR0_15", 0x40E00024, 15, 0x00000001, 'd', "GPIO 15 clear" },
+{ "GPCR0_16", 0x40E00024, 16, 0x00000001, 'd', "GPIO 16 clear" },
+{ "GPCR0_17", 0x40E00024, 17, 0x00000001, 'd', "GPIO 17 clear" },
+{ "GPCR0_18", 0x40E00024, 18, 0x00000001, 'd', "GPIO 18 clear" },
+{ "GPCR0_19", 0x40E00024, 19, 0x00000001, 'd', "GPIO 19 clear" },
+{ "GPCR0_20", 0x40E00024, 20, 0x00000001, 'd', "GPIO 20 clear" },
+{ "GPCR0_21", 0x40E00024, 21, 0x00000001, 'd', "GPIO 21 clear" },
+{ "GPCR0_22", 0x40E00024, 22, 0x00000001, 'd', "GPIO 22 clear" },
+{ "GPCR0_23", 0x40E00024, 23, 0x00000001, 'd', "GPIO 23 clear" },
+{ "GPCR0_24", 0x40E00024, 24, 0x00000001, 'd', "GPIO 24 clear" },
+{ "GPCR0_25", 0x40E00024, 25, 0x00000001, 'd', "GPIO 25 clear" },
+{ "GPCR0_26", 0x40E00024, 26, 0x00000001, 'd', "GPIO 26 clear" },
+{ "GPCR0_27", 0x40E00024, 27, 0x00000001, 'd', "GPIO 27 clear" },
+{ "GPCR0_28", 0x40E00024, 28, 0x00000001, 'd', "GPIO 28 clear" },
+{ "GPCR0_29", 0x40E00024, 29, 0x00000001, 'd', "GPIO 29 clear" },
+{ "GPCR0_30", 0x40E00024, 30, 0x00000001, 'd', "GPIO 30 clear" },
+{ "GPCR0_31", 0x40E00024, 31, 0x00000001, 'd', "GPIO 31 clear" },
+
+{ "GPCR1", 0x40E00028, 0, 0xffffffff, 'x', "GPIO Clear Register 1 (4-11)" },
+{ "GPCR1_32", 0x40E00028, 0, 0x00000001, 'd', "GPIO 32 clear" },
+{ "GPCR1_33", 0x40E00028, 1, 0x00000001, 'd', "GPIO 33 clear" },
+{ "GPCR1_34", 0x40E00028, 2, 0x00000001, 'd', "GPIO 34 clear" },
+{ "GPCR1_35", 0x40E00028, 3, 0x00000001, 'd', "GPIO 35 clear" },
+{ "GPCR1_36", 0x40E00028, 4, 0x00000001, 'd', "GPIO 36 clear" },
+{ "GPCR1_37", 0x40E00028, 5, 0x00000001, 'd', "GPIO 37 clear" },
+{ "GPCR1_38", 0x40E00028, 6, 0x00000001, 'd', "GPIO 38 clear" },
+{ "GPCR1_39", 0x40E00028, 7, 0x00000001, 'd', "GPIO 39 clear" },
+{ "GPCR1_40", 0x40E00028, 8, 0x00000001, 'd', "GPIO 40 clear" },
+{ "GPCR1_41", 0x40E00028, 9, 0x00000001, 'd', "GPIO 41 clear" },
+{ "GPCR1_42", 0x40E00028, 10, 0x00000001, 'd', "GPIO 42 clear" },
+{ "GPCR1_43", 0x40E00028, 11, 0x00000001, 'd', "GPIO 43 clear" },
+{ "GPCR1_44", 0x40E00028, 12, 0x00000001, 'd', "GPIO 44 clear" },
+{ "GPCR1_45", 0x40E00028, 13, 0x00000001, 'd', "GPIO 45 clear" },
+{ "GPCR1_46", 0x40E00028, 14, 0x00000001, 'd', "GPIO 46 clear" },
+{ "GPCR1_47", 0x40E00028, 15, 0x00000001, 'd', "GPIO 47 clear" },
+{ "GPCR1_48", 0x40E00028, 16, 0x00000001, 'd', "GPIO 48 clear" },
+{ "GPCR1_49", 0x40E00028, 17, 0x00000001, 'd', "GPIO 49 clear" },
+{ "GPCR1_50", 0x40E00028, 18, 0x00000001, 'd', "GPIO 50 clear" },
+{ "GPCR1_51", 0x40E00028, 19, 0x00000001, 'd', "GPIO 51 clear" },
+{ "GPCR1_52", 0x40E00028, 20, 0x00000001, 'd', "GPIO 52 clear" },
+{ "GPCR1_53", 0x40E00028, 21, 0x00000001, 'd', "GPIO 53 clear" },
+{ "GPCR1_54", 0x40E00028, 22, 0x00000001, 'd', "GPIO 54 clear" },
+{ "GPCR1_55", 0x40E00028, 23, 0x00000001, 'd', "GPIO 55 clear" },
+{ "GPCR1_56", 0x40E00028, 24, 0x00000001, 'd', "GPIO 56 clear" },
+{ "GPCR1_57", 0x40E00028, 25, 0x00000001, 'd', "GPIO 57 clear" },
+{ "GPCR1_58", 0x40E00028, 26, 0x00000001, 'd', "GPIO 58 clear" },
+{ "GPCR1_59", 0x40E00028, 27, 0x00000001, 'd', "GPIO 59 clear" },
+{ "GPCR1_60", 0x40E00028, 28, 0x00000001, 'd', "GPIO 60 clear" },
+{ "GPCR1_61", 0x40E00028, 29, 0x00000001, 'd', "GPIO 61 clear" },
+{ "GPCR1_62", 0x40E00028, 30, 0x00000001, 'd', "GPIO 62 clear" },
+{ "GPCR1_63", 0x40E00028, 31, 0x00000001, 'd', "GPIO 63 clear" },
+
+{ "GPCR2", 0x40E0002C, 0, 0xffffffff, 'x', "GPIO Clear Register 2 (4-12)" },
+{ "GPCR2_64", 0x40E0002C, 0, 0x00000001, 'd', "GPIO 64 clear" },
+{ "GPCR2_65", 0x40E0002C, 1, 0x00000001, 'd', "GPIO 65 clear" },
+{ "GPCR2_66", 0x40E0002C, 2, 0x00000001, 'd', "GPIO 66 clear" },
+{ "GPCR2_67", 0x40E0002C, 3, 0x00000001, 'd', "GPIO 67 clear" },
+{ "GPCR2_68", 0x40E0002C, 4, 0x00000001, 'd', "GPIO 68 clear" },
+{ "GPCR2_69", 0x40E0002C, 5, 0x00000001, 'd', "GPIO 69 clear" },
+{ "GPCR2_70", 0x40E0002C, 6, 0x00000001, 'd', "GPIO 70 clear" },
+{ "GPCR2_71", 0x40E0002C, 7, 0x00000001, 'd', "GPIO 71 clear" },
+{ "GPCR2_72", 0x40E0002C, 8, 0x00000001, 'd', "GPIO 72 clear" },
+{ "GPCR2_73", 0x40E0002C, 9, 0x00000001, 'd', "GPIO 73 clear" },
+{ "GPCR2_74", 0x40E0002C, 10, 0x00000001, 'd', "GPIO 74 clear" },
+{ "GPCR2_75", 0x40E0002C, 11, 0x00000001, 'd', "GPIO 75 clear" },
+{ "GPCR2_76", 0x40E0002C, 12, 0x00000001, 'd', "GPIO 76 clear" },
+{ "GPCR2_77", 0x40E0002C, 13, 0x00000001, 'd', "GPIO 77 clear" },
+{ "GPCR2_78", 0x40E0002C, 14, 0x00000001, 'd', "GPIO 78 clear" },
+{ "GPCR2_79", 0x40E0002C, 15, 0x00000001, 'd', "GPIO 79 clear" },
+{ "GPCR2_80", 0x40E0002C, 16, 0x00000001, 'd', "GPIO 80 clear" },
+{ "GPCR2_81", 0x40E0002C, 17, 0x00000001, 'd', "GPIO 81 clear" },
+{ "GPCR2_82", 0x40E0002C, 18, 0x00000001, 'd', "GPIO 82 clear" },
+{ "GPCR2_83", 0x40E0002C, 19, 0x00000001, 'd', "GPIO 83 clear" },
+{ "GPCR2_84", 0x40E0002C, 20, 0x00000001, 'd', "GPIO 84 clear" },
+
+{ "GRER0", 0x40E00030, 0, 0xffffffff, 'x', "GPIO Raising Edge Detect Enable Register 0 (4-13)" },
+{ "GRER0_0", 0x40E00030, 0, 0x00000001, 'd', "GPIO 0 raising edge detect enabled" },
+{ "GRER0_1", 0x40E00030, 1, 0x00000001, 'd', "GPIO 1 raising edge detect enabled" },
+{ "GRER0_2", 0x40E00030, 2, 0x00000001, 'd', "GPIO 2 raising edge detect enabled" },
+{ "GRER0_3", 0x40E00030, 3, 0x00000001, 'd', "GPIO 3 raising edge detect enabled" },
+{ "GRER0_4", 0x40E00030, 4, 0x00000001, 'd', "GPIO 4 raising edge detect enabled" },
+{ "GRER0_5", 0x40E00030, 5, 0x00000001, 'd', "GPIO 5 raising edge detect enabled" },
+{ "GRER0_6", 0x40E00030, 6, 0x00000001, 'd', "GPIO 6 raising edge detect enabled" },
+{ "GRER0_7", 0x40E00030, 7, 0x00000001, 'd', "GPIO 7 raising edge detect enabled" },
+{ "GRER0_8", 0x40E00030, 8, 0x00000001, 'd', "GPIO 8 raising edge detect enabled" },
+{ "GRER0_9", 0x40E00030, 9, 0x00000001, 'd', "GPIO 9 raising edge detect enabled" },
+{ "GRER0_10", 0x40E00030, 10, 0x00000001, 'd', "GPIO 10 raising edge detect enabled" },
+{ "GRER0_11", 0x40E00030, 11, 0x00000001, 'd', "GPIO 11 raising edge detect enabled" },
+{ "GRER0_12", 0x40E00030, 12, 0x00000001, 'd', "GPIO 12 raising edge detect enabled" },
+{ "GRER0_13", 0x40E00030, 13, 0x00000001, 'd', "GPIO 13 raising edge detect enabled" },
+{ "GRER0_14", 0x40E00030, 14, 0x00000001, 'd', "GPIO 14 raising edge detect enabled" },
+{ "GRER0_15", 0x40E00030, 15, 0x00000001, 'd', "GPIO 15 raising edge detect enabled" },
+{ "GRER0_16", 0x40E00030, 16, 0x00000001, 'd', "GPIO 16 raising edge detect enabled" },
+{ "GRER0_17", 0x40E00030, 17, 0x00000001, 'd', "GPIO 17 raising edge detect enabled" },
+{ "GRER0_18", 0x40E00030, 18, 0x00000001, 'd', "GPIO 18 raising edge detect enabled" },
+{ "GRER0_19", 0x40E00030, 19, 0x00000001, 'd', "GPIO 19 raising edge detect enabled" },
+{ "GRER0_20", 0x40E00030, 20, 0x00000001, 'd', "GPIO 20 raising edge detect enabled" },
+{ "GRER0_21", 0x40E00030, 21, 0x00000001, 'd', "GPIO 21 raising edge detect enabled" },
+{ "GRER0_22", 0x40E00030, 22, 0x00000001, 'd', "GPIO 22 raising edge detect enabled" },
+{ "GRER0_23", 0x40E00030, 23, 0x00000001, 'd', "GPIO 23 raising edge detect enabled" },
+{ "GRER0_24", 0x40E00030, 24, 0x00000001, 'd', "GPIO 24 raising edge detect enabled" },
+{ "GRER0_25", 0x40E00030, 25, 0x00000001, 'd', "GPIO 25 raising edge detect enabled" },
+{ "GRER0_26", 0x40E00030, 26, 0x00000001, 'd', "GPIO 26 raising edge detect enabled" },
+{ "GRER0_27", 0x40E00030, 27, 0x00000001, 'd', "GPIO 27 raising edge detect enabled" },
+{ "GRER0_28", 0x40E00030, 28, 0x00000001, 'd', "GPIO 28 raising edge detect enabled" },
+{ "GRER0_29", 0x40E00030, 29, 0x00000001, 'd', "GPIO 29 raising edge detect enabled" },
+{ "GRER0_30", 0x40E00030, 30, 0x00000001, 'd', "GPIO 30 raising edge detect enabled" },
+{ "GRER0_31", 0x40E00030, 31, 0x00000001, 'd', "GPIO 31 raising edge detect enabled" },
+
+{ "GRER1", 0x40E00034, 0, 0xffffffff, 'x', "GPIO Raising Edge Detect Enable Register 1 (4-13)" },
+{ "GRER1_32", 0x40E00034, 0, 0x00000001, 'd', "GPIO 32 raising edge detect enabled" },
+{ "GRER1_33", 0x40E00034, 1, 0x00000001, 'd', "GPIO 33 raising edge detect enabled" },
+{ "GRER1_34", 0x40E00034, 2, 0x00000001, 'd', "GPIO 34 raising edge detect enabled" },
+{ "GRER1_35", 0x40E00034, 3, 0x00000001, 'd', "GPIO 35 raising edge detect enabled" },
+{ "GRER1_36", 0x40E00034, 4, 0x00000001, 'd', "GPIO 36 raising edge detect enabled" },
+{ "GRER1_37", 0x40E00034, 5, 0x00000001, 'd', "GPIO 37 raising edge detect enabled" },
+{ "GRER1_38", 0x40E00034, 6, 0x00000001, 'd', "GPIO 38 raising edge detect enabled" },
+{ "GRER1_39", 0x40E00034, 7, 0x00000001, 'd', "GPIO 39 raising edge detect enabled" },
+{ "GRER1_40", 0x40E00034, 8, 0x00000001, 'd', "GPIO 40 raising edge detect enabled" },
+{ "GRER1_41", 0x40E00034, 9, 0x00000001, 'd', "GPIO 41 raising edge detect enabled" },
+{ "GRER1_42", 0x40E00034, 10, 0x00000001, 'd', "GPIO 42 raising edge detect enabled" },
+{ "GRER1_43", 0x40E00034, 11, 0x00000001, 'd', "GPIO 43 raising edge detect enabled" },
+{ "GRER1_44", 0x40E00034, 12, 0x00000001, 'd', "GPIO 44 raising edge detect enabled" },
+{ "GRER1_45", 0x40E00034, 13, 0x00000001, 'd', "GPIO 45 raising edge detect enabled" },
+{ "GRER1_46", 0x40E00034, 14, 0x00000001, 'd', "GPIO 46 raising edge detect enabled" },
+{ "GRER1_47", 0x40E00034, 15, 0x00000001, 'd', "GPIO 47 raising edge detect enabled" },
+{ "GRER1_48", 0x40E00034, 16, 0x00000001, 'd', "GPIO 48 raising edge detect enabled" },
+{ "GRER1_49", 0x40E00034, 17, 0x00000001, 'd', "GPIO 49 raising edge detect enabled" },
+{ "GRER1_50", 0x40E00034, 18, 0x00000001, 'd', "GPIO 50 raising edge detect enabled" },
+{ "GRER1_51", 0x40E00034, 19, 0x00000001, 'd', "GPIO 51 raising edge detect enabled" },
+{ "GRER1_52", 0x40E00034, 20, 0x00000001, 'd', "GPIO 52 raising edge detect enabled" },
+{ "GRER1_53", 0x40E00034, 21, 0x00000001, 'd', "GPIO 53 raising edge detect enabled" },
+{ "GRER1_54", 0x40E00034, 22, 0x00000001, 'd', "GPIO 54 raising edge detect enabled" },
+{ "GRER1_55", 0x40E00034, 23, 0x00000001, 'd', "GPIO 55 raising edge detect enabled" },
+{ "GRER1_56", 0x40E00034, 24, 0x00000001, 'd', "GPIO 56 raising edge detect enabled" },
+{ "GRER1_57", 0x40E00034, 25, 0x00000001, 'd', "GPIO 57 raising edge detect enabled" },
+{ "GRER1_58", 0x40E00034, 26, 0x00000001, 'd', "GPIO 58 raising edge detect enabled" },
+{ "GRER1_59", 0x40E00034, 27, 0x00000001, 'd', "GPIO 59 raising edge detect enabled" },
+{ "GRER1_60", 0x40E00034, 28, 0x00000001, 'd', "GPIO 60 raising edge detect enabled" },
+{ "GRER1_61", 0x40E00034, 29, 0x00000001, 'd', "GPIO 61 raising edge detect enabled" },
+{ "GRER1_62", 0x40E00034, 30, 0x00000001, 'd', "GPIO 62 raising edge detect enabled" },
+{ "GRER1_63", 0x40E00034, 31, 0x00000001, 'd', "GPIO 63 raising edge detect enabled" },
+
+{ "GRER2", 0x40E00038, 0, 0xffffffff, 'x', "GPIO Raising Edge Detect Enable Register 2 (4-13)" },
+{ "GRER2_64", 0x40E00038, 0, 0x00000001, 'd', "GPIO 64 raising edge detect enabled" },
+{ "GRER2_65", 0x40E00038, 1, 0x00000001, 'd', "GPIO 65 raising edge detect enabled" },
+{ "GRER2_66", 0x40E00038, 2, 0x00000001, 'd', "GPIO 66 raising edge detect enabled" },
+{ "GRER2_67", 0x40E00038, 3, 0x00000001, 'd', "GPIO 67 raising edge detect enabled" },
+{ "GRER2_68", 0x40E00038, 4, 0x00000001, 'd', "GPIO 68 raising edge detect enabled" },
+{ "GRER2_69", 0x40E00038, 5, 0x00000001, 'd', "GPIO 69 raising edge detect enabled" },
+{ "GRER2_70", 0x40E00038, 6, 0x00000001, 'd', "GPIO 70 raising edge detect enabled" },
+{ "GRER2_71", 0x40E00038, 7, 0x00000001, 'd', "GPIO 71 raising edge detect enabled" },
+{ "GRER2_72", 0x40E00038, 8, 0x00000001, 'd', "GPIO 72 raising edge detect enabled" },
+{ "GRER2_73", 0x40E00038, 9, 0x00000001, 'd', "GPIO 73 raising edge detect enabled" },
+{ "GRER2_74", 0x40E00038, 10, 0x00000001, 'd', "GPIO 74 raising edge detect enabled" },
+{ "GRER2_75", 0x40E00038, 11, 0x00000001, 'd', "GPIO 75 raising edge detect enabled" },
+{ "GRER2_76", 0x40E00038, 12, 0x00000001, 'd', "GPIO 76 raising edge detect enabled" },
+{ "GRER2_77", 0x40E00038, 13, 0x00000001, 'd', "GPIO 77 raising edge detect enabled" },
+{ "GRER2_78", 0x40E00038, 14, 0x00000001, 'd', "GPIO 78 raising edge detect enabled" },
+{ "GRER2_79", 0x40E00038, 15, 0x00000001, 'd', "GPIO 79 raising edge detect enabled" },
+{ "GRER2_80", 0x40E00038, 16, 0x00000001, 'd', "GPIO 80 raising edge detect enabled" },
+{ "GRER2_81", 0x40E00038, 17, 0x00000001, 'd', "GPIO 81 raising edge detect enabled" },
+{ "GRER2_82", 0x40E00038, 18, 0x00000001, 'd', "GPIO 82 raising edge detect enabled" },
+{ "GRER2_83", 0x40E00038, 19, 0x00000001, 'd', "GPIO 83 raising edge detect enabled" },
+{ "GRER2_84", 0x40E00038, 20, 0x00000001, 'd', "GPIO 84 raising edge detect enabled" },
+
+{ "GFER0", 0x40E0003C, 0, 0xffffffff, 'x', "GPIO Falling Edge Detect Enable Register 0 (4-14)" },
+{ "GFER0_0", 0x40E0003C, 0, 0x00000001, 'd', "GPIO 0 falling edge detect enabled" },
+{ "GFER0_1", 0x40E0003C, 1, 0x00000001, 'd', "GPIO 1 falling edge detect enabled" },
+{ "GFER0_2", 0x40E0003C, 2, 0x00000001, 'd', "GPIO 2 falling edge detect enabled" },
+{ "GFER0_3", 0x40E0003C, 3, 0x00000001, 'd', "GPIO 3 falling edge detect enabled" },
+{ "GFER0_4", 0x40E0003C, 4, 0x00000001, 'd', "GPIO 4 falling edge detect enabled" },
+{ "GFER0_5", 0x40E0003C, 5, 0x00000001, 'd', "GPIO 5 falling edge detect enabled" },
+{ "GFER0_6", 0x40E0003C, 6, 0x00000001, 'd', "GPIO 6 falling edge detect enabled" },
+{ "GFER0_7", 0x40E0003C, 7, 0x00000001, 'd', "GPIO 7 falling edge detect enabled" },
+{ "GFER0_8", 0x40E0003C, 8, 0x00000001, 'd', "GPIO 8 falling edge detect enabled" },
+{ "GFER0_9", 0x40E0003C, 9, 0x00000001, 'd', "GPIO 9 falling edge detect enabled" },
+{ "GFER0_10", 0x40E0003C, 10, 0x00000001, 'd', "GPIO 10 falling edge detect enabled" },
+{ "GFER0_11", 0x40E0003C, 11, 0x00000001, 'd', "GPIO 11 falling edge detect enabled" },
+{ "GFER0_12", 0x40E0003C, 12, 0x00000001, 'd', "GPIO 12 falling edge detect enabled" },
+{ "GFER0_13", 0x40E0003C, 13, 0x00000001, 'd', "GPIO 13 falling edge detect enabled" },
+{ "GFER0_14", 0x40E0003C, 14, 0x00000001, 'd', "GPIO 14 falling edge detect enabled" },
+{ "GFER0_15", 0x40E0003C, 15, 0x00000001, 'd', "GPIO 15 falling edge detect enabled" },
+{ "GFER0_16", 0x40E0003C, 16, 0x00000001, 'd', "GPIO 16 falling edge detect enabled" },
+{ "GFER0_17", 0x40E0003C, 17, 0x00000001, 'd', "GPIO 17 falling edge detect enabled" },
+{ "GFER0_18", 0x40E0003C, 18, 0x00000001, 'd', "GPIO 18 falling edge detect enabled" },
+{ "GFER0_19", 0x40E0003C, 19, 0x00000001, 'd', "GPIO 19 falling edge detect enabled" },
+{ "GFER0_20", 0x40E0003C, 20, 0x00000001, 'd', "GPIO 20 falling edge detect enabled" },
+{ "GFER0_21", 0x40E0003C, 21, 0x00000001, 'd', "GPIO 21 falling edge detect enabled" },
+{ "GFER0_22", 0x40E0003C, 22, 0x00000001, 'd', "GPIO 22 falling edge detect enabled" },
+{ "GFER0_23", 0x40E0003C, 23, 0x00000001, 'd', "GPIO 23 falling edge detect enabled" },
+{ "GFER0_24", 0x40E0003C, 24, 0x00000001, 'd', "GPIO 24 falling edge detect enabled" },
+{ "GFER0_25", 0x40E0003C, 25, 0x00000001, 'd', "GPIO 25 falling edge detect enabled" },
+{ "GFER0_26", 0x40E0003C, 26, 0x00000001, 'd', "GPIO 26 falling edge detect enabled" },
+{ "GFER0_27", 0x40E0003C, 27, 0x00000001, 'd', "GPIO 27 falling edge detect enabled" },
+{ "GFER0_28", 0x40E0003C, 28, 0x00000001, 'd', "GPIO 28 falling edge detect enabled" },
+{ "GFER0_29", 0x40E0003C, 29, 0x00000001, 'd', "GPIO 29 falling edge detect enabled" },
+{ "GFER0_30", 0x40E0003C, 30, 0x00000001, 'd', "GPIO 30 falling edge detect enabled" },
+{ "GFER0_31", 0x40E0003C, 31, 0x00000001, 'd', "GPIO 31 falling edge detect enabled" },
+
+{ "GFER1", 0x40E00040, 0, 0xffffffff, 'x', "GPIO Falling Edge Detect Enable Register 1 (4-14)" },
+{ "GFER1_32", 0x40E00040, 0, 0x00000001, 'd', "GPIO 32 falling edge detect enabled" },
+{ "GFER1_33", 0x40E00040, 1, 0x00000001, 'd', "GPIO 33 falling edge detect enabled" },
+{ "GFER1_34", 0x40E00040, 2, 0x00000001, 'd', "GPIO 34 falling edge detect enabled" },
+{ "GFER1_35", 0x40E00040, 3, 0x00000001, 'd', "GPIO 35 falling edge detect enabled" },
+{ "GFER1_36", 0x40E00040, 4, 0x00000001, 'd', "GPIO 36 falling edge detect enabled" },
+{ "GFER1_37", 0x40E00040, 5, 0x00000001, 'd', "GPIO 37 falling edge detect enabled" },
+{ "GFER1_38", 0x40E00040, 6, 0x00000001, 'd', "GPIO 38 falling edge detect enabled" },
+{ "GFER1_39", 0x40E00040, 7, 0x00000001, 'd', "GPIO 39 falling edge detect enabled" },
+{ "GFER1_40", 0x40E00040, 8, 0x00000001, 'd', "GPIO 40 falling edge detect enabled" },
+{ "GFER1_41", 0x40E00040, 9, 0x00000001, 'd', "GPIO 41 falling edge detect enabled" },
+{ "GFER1_42", 0x40E00040, 10, 0x00000001, 'd', "GPIO 42 falling edge detect enabled" },
+{ "GFER1_43", 0x40E00040, 11, 0x00000001, 'd', "GPIO 43 falling edge detect enabled" },
+{ "GFER1_44", 0x40E00040, 12, 0x00000001, 'd', "GPIO 44 falling edge detect enabled" },
+{ "GFER1_45", 0x40E00040, 13, 0x00000001, 'd', "GPIO 45 falling edge detect enabled" },
+{ "GFER1_46", 0x40E00040, 14, 0x00000001, 'd', "GPIO 46 falling edge detect enabled" },
+{ "GFER1_47", 0x40E00040, 15, 0x00000001, 'd', "GPIO 47 falling edge detect enabled" },
+{ "GFER1_48", 0x40E00040, 16, 0x00000001, 'd', "GPIO 48 falling edge detect enabled" },
+{ "GFER1_49", 0x40E00040, 17, 0x00000001, 'd', "GPIO 49 falling edge detect enabled" },
+{ "GFER1_50", 0x40E00040, 18, 0x00000001, 'd', "GPIO 50 falling edge detect enabled" },
+{ "GFER1_51", 0x40E00040, 19, 0x00000001, 'd', "GPIO 51 falling edge detect enabled" },
+{ "GFER1_52", 0x40E00040, 20, 0x00000001, 'd', "GPIO 52 falling edge detect enabled" },
+{ "GFER1_53", 0x40E00040, 21, 0x00000001, 'd', "GPIO 53 falling edge detect enabled" },
+{ "GFER1_54", 0x40E00040, 22, 0x00000001, 'd', "GPIO 54 falling edge detect enabled" },
+{ "GFER1_55", 0x40E00040, 23, 0x00000001, 'd', "GPIO 55 falling edge detect enabled" },
+{ "GFER1_56", 0x40E00040, 24, 0x00000001, 'd', "GPIO 56 falling edge detect enabled" },
+{ "GFER1_57", 0x40E00040, 25, 0x00000001, 'd', "GPIO 57 falling edge detect enabled" },
+{ "GFER1_58", 0x40E00040, 26, 0x00000001, 'd', "GPIO 58 falling edge detect enabled" },
+{ "GFER1_59", 0x40E00040, 27, 0x00000001, 'd', "GPIO 59 falling edge detect enabled" },
+{ "GFER1_60", 0x40E00040, 28, 0x00000001, 'd', "GPIO 60 falling edge detect enabled" },
+{ "GFER1_61", 0x40E00040, 29, 0x00000001, 'd', "GPIO 61 falling edge detect enabled" },
+{ "GFER1_62", 0x40E00040, 30, 0x00000001, 'd', "GPIO 62 falling edge detect enabled" },
+{ "GFER1_63", 0x40E00040, 31, 0x00000001, 'd', "GPIO 63 falling edge detect enabled" },
+
+{ "GFER2", 0x40E00044, 0, 0xffffffff, 'x', "GPIO Falling Edge Detect Enable Register 2 (4-14)" },
+{ "GFER2_64", 0x40E00044, 0, 0x00000001, 'd', "GPIO 64 falling edge detect enabled" },
+{ "GFER2_65", 0x40E00044, 1, 0x00000001, 'd', "GPIO 65 falling edge detect enabled" },
+{ "GFER2_66", 0x40E00044, 2, 0x00000001, 'd', "GPIO 66 falling edge detect enabled" },
+{ "GFER2_67", 0x40E00044, 3, 0x00000001, 'd', "GPIO 67 falling edge detect enabled" },
+{ "GFER2_68", 0x40E00044, 4, 0x00000001, 'd', "GPIO 68 falling edge detect enabled" },
+{ "GFER2_69", 0x40E00044, 5, 0x00000001, 'd', "GPIO 69 falling edge detect enabled" },
+{ "GFER2_70", 0x40E00044, 6, 0x00000001, 'd', "GPIO 70 falling edge detect enabled" },
+{ "GFER2_71", 0x40E00044, 7, 0x00000001, 'd', "GPIO 71 falling edge detect enabled" },
+{ "GFER2_72", 0x40E00044, 8, 0x00000001, 'd', "GPIO 72 falling edge detect enabled" },
+{ "GFER2_73", 0x40E00044, 9, 0x00000001, 'd', "GPIO 73 falling edge detect enabled" },
+{ "GFER2_74", 0x40E00044, 10, 0x00000001, 'd', "GPIO 74 falling edge detect enabled" },
+{ "GFER2_75", 0x40E00044, 11, 0x00000001, 'd', "GPIO 75 falling edge detect enabled" },
+{ "GFER2_76", 0x40E00044, 12, 0x00000001, 'd', "GPIO 76 falling edge detect enabled" },
+{ "GFER2_77", 0x40E00044, 13, 0x00000001, 'd', "GPIO 77 falling edge detect enabled" },
+{ "GFER2_78", 0x40E00044, 14, 0x00000001, 'd', "GPIO 78 falling edge detect enabled" },
+{ "GFER2_79", 0x40E00044, 15, 0x00000001, 'd', "GPIO 79 falling edge detect enabled" },
+{ "GFER2_80", 0x40E00044, 16, 0x00000001, 'd', "GPIO 80 falling edge detect enabled" },
+{ "GFER2_81", 0x40E00044, 17, 0x00000001, 'd', "GPIO 81 falling edge detect enabled" },
+{ "GFER2_82", 0x40E00044, 18, 0x00000001, 'd', "GPIO 82 falling edge detect enabled" },
+{ "GFER2_83", 0x40E00044, 19, 0x00000001, 'd', "GPIO 83 falling edge detect enabled" },
+{ "GFER2_84", 0x40E00044, 20, 0x00000001, 'd', "GPIO 84 falling edge detect enabled" },
+
+{ "GEDR0", 0x40E00048, 0, 0xffffffff, 'x', "GPIO Edge Detect Register 0 (4-15)" },
+{ "GEDR0_0", 0x40E00048, 0, 0x00000001, 'd', "GPIO 0 edge detected" },
+{ "GEDR0_1", 0x40E00048, 1, 0x00000001, 'd', "GPIO 1 edge detected" },
+{ "GEDR0_2", 0x40E00048, 2, 0x00000001, 'd', "GPIO 2 edge detected" },
+{ "GEDR0_3", 0x40E00048, 3, 0x00000001, 'd', "GPIO 3 edge detected" },
+{ "GEDR0_4", 0x40E00048, 4, 0x00000001, 'd', "GPIO 4 edge detected" },
+{ "GEDR0_5", 0x40E00048, 5, 0x00000001, 'd', "GPIO 5 edge detected" },
+{ "GEDR0_6", 0x40E00048, 6, 0x00000001, 'd', "GPIO 6 edge detected" },
+{ "GEDR0_7", 0x40E00048, 7, 0x00000001, 'd', "GPIO 7 edge detected" },
+{ "GEDR0_8", 0x40E00048, 8, 0x00000001, 'd', "GPIO 8 edge detected" },
+{ "GEDR0_9", 0x40E00048, 9, 0x00000001, 'd', "GPIO 9 edge detected" },
+{ "GEDR0_10", 0x40E00048, 10, 0x00000001, 'd', "GPIO 10 edge detected" },
+{ "GEDR0_11", 0x40E00048, 11, 0x00000001, 'd', "GPIO 11 edge detected" },
+{ "GEDR0_12", 0x40E00048, 12, 0x00000001, 'd', "GPIO 12 edge detected" },
+{ "GEDR0_13", 0x40E00048, 13, 0x00000001, 'd', "GPIO 13 edge detected" },
+{ "GEDR0_14", 0x40E00048, 14, 0x00000001, 'd', "GPIO 14 edge detected" },
+{ "GEDR0_15", 0x40E00048, 15, 0x00000001, 'd', "GPIO 15 edge detected" },
+{ "GEDR0_16", 0x40E00048, 16, 0x00000001, 'd', "GPIO 16 edge detected" },
+{ "GEDR0_17", 0x40E00048, 17, 0x00000001, 'd', "GPIO 17 edge detected" },
+{ "GEDR0_18", 0x40E00048, 18, 0x00000001, 'd', "GPIO 18 edge detected" },
+{ "GEDR0_19", 0x40E00048, 19, 0x00000001, 'd', "GPIO 19 edge detected" },
+{ "GEDR0_20", 0x40E00048, 20, 0x00000001, 'd', "GPIO 20 edge detected" },
+{ "GEDR0_21", 0x40E00048, 21, 0x00000001, 'd', "GPIO 21 edge detected" },
+{ "GEDR0_22", 0x40E00048, 22, 0x00000001, 'd', "GPIO 22 edge detected" },
+{ "GEDR0_23", 0x40E00048, 23, 0x00000001, 'd', "GPIO 23 edge detected" },
+{ "GEDR0_24", 0x40E00048, 24, 0x00000001, 'd', "GPIO 24 edge detected" },
+{ "GEDR0_25", 0x40E00048, 25, 0x00000001, 'd', "GPIO 25 edge detected" },
+{ "GEDR0_26", 0x40E00048, 26, 0x00000001, 'd', "GPIO 26 edge detected" },
+{ "GEDR0_27", 0x40E00048, 27, 0x00000001, 'd', "GPIO 27 edge detected" },
+{ "GEDR0_28", 0x40E00048, 28, 0x00000001, 'd', "GPIO 28 edge detected" },
+{ "GEDR0_29", 0x40E00048, 29, 0x00000001, 'd', "GPIO 29 edge detected" },
+{ "GEDR0_30", 0x40E00048, 30, 0x00000001, 'd', "GPIO 30 edge detected" },
+{ "GEDR0_31", 0x40E00048, 31, 0x00000001, 'd', "GPIO 31 edge detected" },
+
+{ "GEDR1", 0x40E0004C, 0, 0xffffffff, 'x', "GPIO Edge Detect Register 1 (4-16)" },
+{ "GEDR1_32", 0x40E0004C, 0, 0x00000001, 'd', "GPIO 32 edge detected" },
+{ "GEDR1_33", 0x40E0004C, 1, 0x00000001, 'd', "GPIO 33 edge detected" },
+{ "GEDR1_34", 0x40E0004C, 2, 0x00000001, 'd', "GPIO 34 edge detected" },
+{ "GEDR1_35", 0x40E0004C, 3, 0x00000001, 'd', "GPIO 35 edge detected" },
+{ "GEDR1_36", 0x40E0004C, 4, 0x00000001, 'd', "GPIO 36 edge detected" },
+{ "GEDR1_37", 0x40E0004C, 5, 0x00000001, 'd', "GPIO 37 edge detected" },
+{ "GEDR1_38", 0x40E0004C, 6, 0x00000001, 'd', "GPIO 38 edge detected" },
+{ "GEDR1_39", 0x40E0004C, 7, 0x00000001, 'd', "GPIO 39 edge detected" },
+{ "GEDR1_40", 0x40E0004C, 8, 0x00000001, 'd', "GPIO 40 edge detected" },
+{ "GEDR1_41", 0x40E0004C, 9, 0x00000001, 'd', "GPIO 41 edge detected" },
+{ "GEDR1_42", 0x40E0004C, 10, 0x00000001, 'd', "GPIO 42 edge detected" },
+{ "GEDR1_43", 0x40E0004C, 11, 0x00000001, 'd', "GPIO 43 edge detected" },
+{ "GEDR1_44", 0x40E0004C, 12, 0x00000001, 'd', "GPIO 44 edge detected" },
+{ "GEDR1_45", 0x40E0004C, 13, 0x00000001, 'd', "GPIO 45 edge detected" },
+{ "GEDR1_46", 0x40E0004C, 14, 0x00000001, 'd', "GPIO 46 edge detected" },
+{ "GEDR1_47", 0x40E0004C, 15, 0x00000001, 'd', "GPIO 47 edge detected" },
+{ "GEDR1_48", 0x40E0004C, 16, 0x00000001, 'd', "GPIO 48 edge detected" },
+{ "GEDR1_49", 0x40E0004C, 17, 0x00000001, 'd', "GPIO 49 edge detected" },
+{ "GEDR1_50", 0x40E0004C, 18, 0x00000001, 'd', "GPIO 50 edge detected" },
+{ "GEDR1_51", 0x40E0004C, 19, 0x00000001, 'd', "GPIO 51 edge detected" },
+{ "GEDR1_52", 0x40E0004C, 20, 0x00000001, 'd', "GPIO 52 edge detected" },
+{ "GEDR1_53", 0x40E0004C, 21, 0x00000001, 'd', "GPIO 53 edge detected" },
+{ "GEDR1_54", 0x40E0004C, 22, 0x00000001, 'd', "GPIO 54 edge detected" },
+{ "GEDR1_55", 0x40E0004C, 23, 0x00000001, 'd', "GPIO 55 edge detected" },
+{ "GEDR1_56", 0x40E0004C, 24, 0x00000001, 'd', "GPIO 56 edge detected" },
+{ "GEDR1_57", 0x40E0004C, 25, 0x00000001, 'd', "GPIO 57 edge detected" },
+{ "GEDR1_58", 0x40E0004C, 26, 0x00000001, 'd', "GPIO 58 edge detected" },
+{ "GEDR1_59", 0x40E0004C, 27, 0x00000001, 'd', "GPIO 59 edge detected" },
+{ "GEDR1_60", 0x40E0004C, 28, 0x00000001, 'd', "GPIO 60 edge detected" },
+{ "GEDR1_61", 0x40E0004C, 29, 0x00000001, 'd', "GPIO 61 edge detected" },
+{ "GEDR1_62", 0x40E0004C, 30, 0x00000001, 'd', "GPIO 62 edge detected" },
+{ "GEDR1_63", 0x40E0004C, 31, 0x00000001, 'd', "GPIO 63 edge detected" },
+
+{ "GEDR2", 0x40E00050, 0, 0xffffffff, 'x', "GPIO Edge Detect Register 2 (4-16)" },
+{ "GEDR2_64", 0x40E00050, 0, 0x00000001, 'd', "GPIO 64 edge detected" },
+{ "GEDR2_65", 0x40E00050, 1, 0x00000001, 'd', "GPIO 65 edge detected" },
+{ "GEDR2_66", 0x40E00050, 2, 0x00000001, 'd', "GPIO 66 edge detected" },
+{ "GEDR2_67", 0x40E00050, 3, 0x00000001, 'd', "GPIO 67 edge detected" },
+{ "GEDR2_68", 0x40E00050, 4, 0x00000001, 'd', "GPIO 68 edge detected" },
+{ "GEDR2_69", 0x40E00050, 5, 0x00000001, 'd', "GPIO 69 edge detected" },
+{ "GEDR2_70", 0x40E00050, 6, 0x00000001, 'd', "GPIO 70 edge detected" },
+{ "GEDR2_71", 0x40E00050, 7, 0x00000001, 'd', "GPIO 71 edge detected" },
+{ "GEDR2_72", 0x40E00050, 8, 0x00000001, 'd', "GPIO 72 edge detected" },
+{ "GEDR2_73", 0x40E00050, 9, 0x00000001, 'd', "GPIO 73 edge detected" },
+{ "GEDR2_74", 0x40E00050, 10, 0x00000001, 'd', "GPIO 74 edge detected" },
+{ "GEDR2_75", 0x40E00050, 11, 0x00000001, 'd', "GPIO 75 edge detected" },
+{ "GEDR2_76", 0x40E00050, 12, 0x00000001, 'd', "GPIO 76 edge detected" },
+{ "GEDR2_77", 0x40E00050, 13, 0x00000001, 'd', "GPIO 77 edge detected" },
+{ "GEDR2_78", 0x40E00050, 14, 0x00000001, 'd', "GPIO 78 edge detected" },
+{ "GEDR2_79", 0x40E00050, 15, 0x00000001, 'd', "GPIO 79 edge detected" },
+{ "GEDR2_80", 0x40E00050, 16, 0x00000001, 'd', "GPIO 80 edge detected" },
+{ "GEDR2_81", 0x40E00050, 17, 0x00000001, 'd', "GPIO 81 edge detected" },
+{ "GEDR2_82", 0x40E00050, 18, 0x00000001, 'd', "GPIO 82 edge detected" },
+{ "GEDR2_83", 0x40E00050, 19, 0x00000001, 'd', "GPIO 83 edge detected" },
+{ "GEDR2_84", 0x40E00050, 20, 0x00000001, 'd', "GPIO 84 edge detected" },
+
+{ "GAFR0L", 0x40E00054, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 0 Lower (4-17)" },
+{ "GAFR0L_0", 0x40E00054, 0, 0x00000003, 'x', "GPIO 0 alternate function select" },
+{ "GAFR0L_1", 0x40E00054, 2, 0x00000003, 'x', "GPIO 1 alternate function select" },
+{ "GAFR0L_2", 0x40E00054, 4, 0x00000003, 'x', "GPIO 2 alternate function select" },
+{ "GAFR0L_3", 0x40E00054, 6, 0x00000003, 'x', "GPIO 3 alternate function select" },
+{ "GAFR0L_4", 0x40E00054, 8, 0x00000003, 'x', "GPIO 4 alternate function select" },
+{ "GAFR0L_5", 0x40E00054, 10, 0x00000003, 'x', "GPIO 5 alternate function select" },
+{ "GAFR0L_6", 0x40E00054, 12, 0x00000003, 'x', "GPIO 6 alternate function select" },
+{ "GAFR0L_7", 0x40E00054, 14, 0x00000003, 'x', "GPIO 7 alternate function select" },
+{ "GAFR0L_8", 0x40E00054, 16, 0x00000003, 'x', "GPIO 8 alternate function select" },
+{ "GAFR0L_9", 0x40E00054, 18, 0x00000003, 'x', "GPIO 9 alternate function select" },
+{ "GAFR0L_10", 0x40E00054, 20, 0x00000003, 'x', "GPIO 10 alternate function select" },
+{ "GAFR0L_11", 0x40E00054, 22, 0x00000003, 'x', "GPIO 11 alternate function select" },
+{ "GAFR0L_12", 0x40E00054, 24, 0x00000003, 'x', "GPIO 12 alternate function select" },
+{ "GAFR0L_13", 0x40E00054, 26, 0x00000003, 'x', "GPIO 13 alternate function select" },
+{ "GAFR0L_14", 0x40E00054, 28, 0x00000003, 'x', "GPIO 14 alternate function select" },
+{ "GAFR0L_15", 0x40E00054, 30, 0x00000003, 'x', "GPIO 15 alternate function select" },
+
+{ "GAFR0U", 0x40E00058, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 0 Upper (4-18)" },
+{ "GAFR0U_16", 0x40E00058, 0, 0x00000003, 'x', "GPIO 16 alternate function select" },
+{ "GAFR0U_17", 0x40E00058, 2, 0x00000003, 'x', "GPIO 17 alternate function select" },
+{ "GAFR0U_18", 0x40E00058, 4, 0x00000003, 'x', "GPIO 18 alternate function select" },
+{ "GAFR0U_19", 0x40E00058, 6, 0x00000003, 'x', "GPIO 19 alternate function select" },
+{ "GAFR0U_20", 0x40E00058, 8, 0x00000003, 'x', "GPIO 20 alternate function select" },
+{ "GAFR0U_21", 0x40E00058, 10, 0x00000003, 'x', "GPIO 21 alternate function select" },
+{ "GAFR0U_22", 0x40E00058, 12, 0x00000003, 'x', "GPIO 22 alternate function select" },
+{ "GAFR0U_23", 0x40E00058, 14, 0x00000003, 'x', "GPIO 23 alternate function select" },
+{ "GAFR0U_24", 0x40E00058, 16, 0x00000003, 'x', "GPIO 24 alternate function select" },
+{ "GAFR0U_25", 0x40E00058, 18, 0x00000003, 'x', "GPIO 25 alternate function select" },
+{ "GAFR0U_26", 0x40E00058, 20, 0x00000003, 'x', "GPIO 26 alternate function select" },
+{ "GAFR0U_27", 0x40E00058, 22, 0x00000003, 'x', "GPIO 27 alternate function select" },
+{ "GAFR0U_28", 0x40E00058, 24, 0x00000003, 'x', "GPIO 28 alternate function select" },
+{ "GAFR0U_29", 0x40E00058, 26, 0x00000003, 'x', "GPIO 29 alternate function select" },
+{ "GAFR0U_30", 0x40E00058, 28, 0x00000003, 'x', "GPIO 30 alternate function select" },
+{ "GAFR0U_31", 0x40E00058, 30, 0x00000003, 'x', "GPIO 31 alternate function select" },
+
+{ "GAFR1L", 0x40E0005C, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 1 Lower (4-18)" },
+{ "GAFR1L_32", 0x40E0005C, 0, 0x00000003, 'x', "GPIO 32 alternate function select" },
+{ "GAFR1L_33", 0x40E0005C, 2, 0x00000003, 'x', "GPIO 33 alternate function select" },
+{ "GAFR1L_34", 0x40E0005C, 4, 0x00000003, 'x', "GPIO 34 alternate function select" },
+{ "GAFR1L_35", 0x40E0005C, 6, 0x00000003, 'x', "GPIO 35 alternate function select" },
+{ "GAFR1L_36", 0x40E0005C, 8, 0x00000003, 'x', "GPIO 36 alternate function select" },
+{ "GAFR1L_37", 0x40E0005C, 10, 0x00000003, 'x', "GPIO 37 alternate function select" },
+{ "GAFR1L_38", 0x40E0005C, 12, 0x00000003, 'x', "GPIO 38 alternate function select" },
+{ "GAFR1L_39", 0x40E0005C, 14, 0x00000003, 'x', "GPIO 39 alternate function select" },
+{ "GAFR1L_40", 0x40E0005C, 16, 0x00000003, 'x', "GPIO 40 alternate function select" },
+{ "GAFR1L_41", 0x40E0005C, 18, 0x00000003, 'x', "GPIO 41 alternate function select" },
+{ "GAFR1L_42", 0x40E0005C, 20, 0x00000003, 'x', "GPIO 42 alternate function select" },
+{ "GAFR1L_43", 0x40E0005C, 22, 0x00000003, 'x', "GPIO 43 alternate function select" },
+{ "GAFR1L_44", 0x40E0005C, 24, 0x00000003, 'x', "GPIO 44 alternate function select" },
+{ "GAFR1L_45", 0x40E0005C, 26, 0x00000003, 'x', "GPIO 45 alternate function select" },
+{ "GAFR1L_46", 0x40E0005C, 28, 0x00000003, 'x', "GPIO 46 alternate function select" },
+{ "GAFR1L_47", 0x40E0005C, 30, 0x00000003, 'x', "GPIO 47 alternate function select" },
+
+{ "GAFR1U", 0x40E00060, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 1 Upper (4-19)" },
+{ "GAFR1U_48", 0x40E00060, 0, 0x00000003, 'x', "GPIO 48 alternate function select" },
+{ "GAFR1U_49", 0x40E00060, 2, 0x00000003, 'x', "GPIO 49 alternate function select" },
+{ "GAFR1U_50", 0x40E00060, 4, 0x00000003, 'x', "GPIO 50 alternate function select" },
+{ "GAFR1U_51", 0x40E00060, 6, 0x00000003, 'x', "GPIO 51 alternate function select" },
+{ "GAFR1U_52", 0x40E00060, 8, 0x00000003, 'x', "GPIO 52 alternate function select" },
+{ "GAFR1U_53", 0x40E00060, 10, 0x00000003, 'x', "GPIO 53 alternate function select" },
+{ "GAFR1U_54", 0x40E00060, 12, 0x00000003, 'x', "GPIO 54 alternate function select" },
+{ "GAFR1U_55", 0x40E00060, 14, 0x00000003, 'x', "GPIO 55 alternate function select" },
+{ "GAFR1U_56", 0x40E00060, 16, 0x00000003, 'x', "GPIO 56 alternate function select" },
+{ "GAFR1U_57", 0x40E00060, 18, 0x00000003, 'x', "GPIO 57 alternate function select" },
+{ "GAFR1U_58", 0x40E00060, 20, 0x00000003, 'x', "GPIO 58 alternate function select" },
+{ "GAFR1U_59", 0x40E00060, 22, 0x00000003, 'x', "GPIO 59 alternate function select" },
+{ "GAFR1U_60", 0x40E00060, 24, 0x00000003, 'x', "GPIO 60 alternate function select" },
+{ "GAFR1U_61", 0x40E00060, 26, 0x00000003, 'x', "GPIO 61 alternate function select" },
+{ "GAFR1U_62", 0x40E00060, 28, 0x00000003, 'x', "GPIO 62 alternate function select" },
+{ "GAFR1U_63", 0x40E00060, 30, 0x00000003, 'x', "GPIO 63 alternate function select" },
+
+{ "GAFR2L", 0x40E00064, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 2 Lower (4-19)" },
+{ "GAFR2L_64", 0x40E00064, 0, 0x00000003, 'x', "GPIO 64 alternate function select" },
+{ "GAFR2L_65", 0x40E00064, 2, 0x00000003, 'x', "GPIO 65 alternate function select" },
+{ "GAFR2L_66", 0x40E00064, 4, 0x00000003, 'x', "GPIO 66 alternate function select" },
+{ "GAFR2L_67", 0x40E00064, 6, 0x00000003, 'x', "GPIO 67 alternate function select" },
+{ "GAFR2L_68", 0x40E00064, 8, 0x00000003, 'x', "GPIO 68 alternate function select" },
+{ "GAFR2L_69", 0x40E00064, 10, 0x00000003, 'x', "GPIO 69 alternate function select" },
+{ "GAFR2L_70", 0x40E00064, 12, 0x00000003, 'x', "GPIO 70 alternate function select" },
+{ "GAFR2L_71", 0x40E00064, 14, 0x00000003, 'x', "GPIO 71 alternate function select" },
+{ "GAFR2L_72", 0x40E00064, 16, 0x00000003, 'x', "GPIO 72 alternate function select" },
+{ "GAFR2L_73", 0x40E00064, 18, 0x00000003, 'x', "GPIO 73 alternate function select" },
+{ "GAFR2L_74", 0x40E00064, 20, 0x00000003, 'x', "GPIO 74 alternate function select" },
+{ "GAFR2L_75", 0x40E00064, 22, 0x00000003, 'x', "GPIO 75 alternate function select" },
+{ "GAFR2L_76", 0x40E00064, 24, 0x00000003, 'x', "GPIO 76 alternate function select" },
+{ "GAFR2L_77", 0x40E00064, 26, 0x00000003, 'x', "GPIO 77 alternate function select" },
+{ "GAFR2L_78", 0x40E00064, 28, 0x00000003, 'x', "GPIO 78 alternate function select" },
+{ "GAFR2L_79", 0x40E00064, 30, 0x00000003, 'x', "GPIO 79 alternate function select" },
+
+{ "GAFR2U", 0x40E00068, 0, 0xffffffff, 'x', "GPIO Alternate Function Register 2 Upper (4-19)" },
+{ "GAFR2U_80", 0x40E00068, 0, 0x00000003, 'x', "GPIO 80 alternate function select" },
+{ "GAFR2U_81", 0x40E00068, 2, 0x00000003, 'x', "GPIO 81 alternate function select" },
+{ "GAFR2U_82", 0x40E00068, 4, 0x00000003, 'x', "GPIO 82 alternate function select" },
+{ "GAFR2U_83", 0x40E00068, 6, 0x00000003, 'x', "GPIO 83 alternate function select" },
+{ "GAFR2U_84", 0x40E00068, 8, 0x00000003, 'x', "GPIO 84 alternate function select" },
+
+{ "ICMR", 0x40D00004, 0, 0xffffffff, 'x', "Interrupt Controller Mask Register (4-22)" },
+{ "ICMR_IM7", 0x40D00004, 7, 0x00000001, 'x', "Pending IRQ 7 (HWUART) unmasked?" },
+{ "ICMR_IM8", 0x40D00004, 8, 0x00000001, 'x', "Pending IRQ 8 (GPIO0) unmasked" },
+{ "ICMR_IM9", 0x40D00004, 9, 0x00000001, 'x', "Pending IRQ 9 (GPIO1) unmasked" },
+{ "ICMR_IM10", 0x40D00004, 10, 0x00000001, 'x', "Pending IRQ 10 (GPIO2_80) unmasked" },
+{ "ICMR_IM11", 0x40D00004, 11, 0x00000001, 'x', "Pending IRQ 11 (USB) unmasked" },
+{ "ICMR_IM12", 0x40D00004, 12, 0x00000001, 'x', "Pending IRQ 12 (PMU) unmasked" },
+{ "ICMR_IM13", 0x40D00004, 13, 0x00000001, 'x', "Pending IRQ 13 (I2S) unmasked" },
+{ "ICMR_IM14", 0x40D00004, 14, 0x00000001, 'x', "Pending IRQ 14 (AC97) unmasked" },
+{ "ICMR_IM17", 0x40D00004, 17, 0x00000001, 'x', "Pending IRQ 17 (LCD) unmasked" },
+{ "ICMR_IM18", 0x40D00004, 18, 0x00000001, 'x', "Pending IRQ 18 (I2C) unmasked" },
+{ "ICMR_IM19", 0x40D00004, 19, 0x00000001, 'x', "Pending IRQ 19 (ICP) unmasked" },
+{ "ICMR_IM20", 0x40D00004, 20, 0x00000001, 'x', "Pending IRQ 20 (STUART) unmasked" },
+{ "ICMR_IM21", 0x40D00004, 21, 0x00000001, 'x', "Pending IRQ 21 (BTUART) unmasked" },
+{ "ICMR_IM22", 0x40D00004, 22, 0x00000001, 'x', "Pending IRQ 22 (FFUART) unmasked" },
+{ "ICMR_IM23", 0x40D00004, 23, 0x00000001, 'x', "Pending IRQ 23 (MMC) unmasked" },
+{ "ICMR_IM24", 0x40D00004, 24, 0x00000001, 'x', "Pending IRQ 24 (SSP) unmasked" },
+{ "ICMR_IM25", 0x40D00004, 25, 0x00000001, 'x', "Pending IRQ 25 (DMA) unmasked" },
+{ "ICMR_IM26", 0x40D00004, 26, 0x00000001, 'x', "Pending IRQ 26 (OSMR0) unmasked" },
+{ "ICMR_IM27", 0x40D00004, 27, 0x00000001, 'x', "Pending IRQ 27 (OSMR1) unmasked" },
+{ "ICMR_IM28", 0x40D00004, 28, 0x00000001, 'x', "Pending IRQ 28 (OSMR2) unmasked" },
+{ "ICMR_IM29", 0x40D00004, 29, 0x00000001, 'x', "Pending IRQ 29 (OSMR3) unmasked" },
+{ "ICMR_IM30", 0x40D00004, 30, 0x00000001, 'x', "Pending IRQ 30 (RTCCLK) unmasked" },
+{ "ICMR_IM31", 0x40D00004, 31, 0x00000001, 'x', "Pending IRQ 31 (RTCALM) unmasked" },
+
+{ "ICLR", 0x40D00008, 0, 0xffffffff, 'x', "Interrupt Controller Level Register (4-23)" },
+{ "ICLR_IL7", 0x40D00008, 7, 0x00000001, 'x', "IRQ 8 (HWUART) generates FIQ?" },
+{ "ICLR_IL8", 0x40D00008, 8, 0x00000001, 'x', "IRQ 8 (GPIO0) generates FIQ" },
+{ "ICLR_IL9", 0x40D00008, 9, 0x00000001, 'x', "IRQ 9 (GPIO1) generates FIQ" },
+{ "ICLR_IL10", 0x40D00008, 10, 0x00000001, 'x', "IRQ 10 (GPIO2_80) generates FIQ" },
+{ "ICLR_IL11", 0x40D00008, 11, 0x00000001, 'x', "IRQ 11 (USB) generates FIQ" },
+{ "ICLR_IL12", 0x40D00008, 12, 0x00000001, 'x', "IRQ 12 (PMU) generates FIQ" },
+{ "ICLR_IL13", 0x40D00008, 13, 0x00000001, 'x', "IRQ 13 (I2S) generates FIQ" },
+{ "ICLR_IL14", 0x40D00008, 14, 0x00000001, 'x', "IRQ 14 (AC97) generates FIQ" },
+{ "ICLR_IL17", 0x40D00008, 17, 0x00000001, 'x', "IRQ 17 (LCD) generates FIQ" },
+{ "ICLR_IL18", 0x40D00008, 18, 0x00000001, 'x', "IRQ 18 (I2C) generates FIQ" },
+{ "ICLR_IL19", 0x40D00008, 19, 0x00000001, 'x', "IRQ 19 (ICP) generates FIQ" },
+{ "ICLR_IL20", 0x40D00008, 20, 0x00000001, 'x', "IRQ 10 (STUART) generates FIQ" },
+{ "ICLR_IL21", 0x40D00008, 21, 0x00000001, 'x', "IRQ 21 (BTUART) generates FIQ" },
+{ "ICLR_IL22", 0x40D00008, 22, 0x00000001, 'x', "IRQ 22 (FFUART) generates FIQ" },
+{ "ICLR_IL23", 0x40D00008, 23, 0x00000001, 'x', "IRQ 23 (MMC) generates FIQ" },
+{ "ICLR_IL24", 0x40D00008, 24, 0x00000001, 'x', "IRQ 24 (SSP) generates FIQ" },
+{ "ICLR_IL25", 0x40D00008, 25, 0x00000001, 'x', "IRQ 25 (DMA) generates FIQ" },
+{ "ICLR_IL26", 0x40D00008, 26, 0x00000001, 'x', "IRQ 26 (OSMR0) generates FIQ" },
+{ "ICLR_IL27", 0x40D00008, 27, 0x00000001, 'x', "IRQ 27 (OSMR1) generates FIQ" },
+{ "ICLR_IL28", 0x40D00008, 28, 0x00000001, 'x', "IRQ 28 (OSMR2) generates FIQ" },
+{ "ICLR_IL29", 0x40D00008, 29, 0x00000001, 'x', "IRQ 29 (OSMR3) generates FIQ" },
+{ "ICLR_IL30", 0x40D00008, 30, 0x00000001, 'x', "IRQ 30 (RTCCLK) generates FIQ" },
+{ "ICLR_IL31", 0x40D00008, 31, 0x00000001, 'x', "IRQ 31 (RTCALM) generates FIQ" },
+
+{ "ICCR", 0x40D00014, 0, 0xffffffff, 'x', "Interrupt Controller Control Register (4-23)" },
+{ "ICCR_DIM", 0x40D00014, 8, 0x00000001, 'x', "ONLY enabled and unmasked IRQ bring CPU from idle to run" },
+
+{ "ICIP", 0x40D00000, 0, 0xffffffff, 'x', "Interrupt Controller IRQ Pending Register (4-24)" },
+
+{ "ICFP", 0x40D0000C, 0, 0xffffffff, 'x', "Interrupt Controller FIQ Pending Register (4-24)" },
+
+{ "ICPR", 0x40D00010, 0, 0xffffffff, 'x', "Interrupt Controller Pending Register (4-25)" },
+{ "ICPR_IS7", 0x40D00010, 7, 0x00000001, 'x', "IRQ 7 (HWUART) pending" },
+{ "ICPR_IS8", 0x40D00010, 8, 0x00000001, 'x', "IRQ 8 (GPIO0) pending" },
+{ "ICPR_IS9", 0x40D00010, 9, 0x00000001, 'x', "IRQ 9 (GPIO1) pending" },
+{ "ICPR_IS10", 0x40D00010, 10, 0x00000001, 'x', "IRQ 10 (GPIO2_80) pending" },
+{ "ICPR_IS11", 0x40D00010, 11, 0x00000001, 'x', "IRQ 11 (USB) pending" },
+{ "ICPR_IS12", 0x40D00010, 12, 0x00000001, 'x', "IRQ 12 (PMU) pending" },
+{ "ICPR_IS13", 0x40D00010, 13, 0x00000001, 'x', "IRQ 13 (I2S) pending" },
+{ "ICPR_IS14", 0x40D00010, 14, 0x00000001, 'x', "IRQ 14 (AC97) pending" },
+{ "ICPR_IS17", 0x40D00010, 17, 0x00000001, 'x', "IRQ 17 (LCD) pending" },
+{ "ICPR_IS18", 0x40D00010, 18, 0x00000001, 'x', "IRQ 18 (I2C) pending" },
+{ "ICPR_IS19", 0x40D00010, 19, 0x00000001, 'x', "IRQ 19 (ICP) pending" },
+{ "ICPR_IS20", 0x40D00010, 20, 0x00000001, 'x', "IRQ 10 (STUART) pending" },
+{ "ICPR_IS21", 0x40D00010, 21, 0x00000001, 'x', "IRQ 21 (BTUART) pending" },
+{ "ICPR_IS22", 0x40D00010, 22, 0x00000001, 'x', "IRQ 22 (FFUART) pending" },
+{ "ICPR_IS23", 0x40D00010, 23, 0x00000001, 'x', "IRQ 23 (MMC) pending" },
+{ "ICPR_IS24", 0x40D00010, 24, 0x00000001, 'x', "IRQ 24 (SSP) pending" },
+{ "ICPR_IS25", 0x40D00010, 25, 0x00000001, 'x', "IRQ 25 (DMA) pending" },
+{ "ICPR_IS26", 0x40D00010, 26, 0x00000001, 'x', "IRQ 26 (OSMR0) pending" },
+{ "ICPR_IS27", 0x40D00010, 27, 0x00000001, 'x', "IRQ 27 (OSMR1) pending" },
+{ "ICPR_IS28", 0x40D00010, 28, 0x00000001, 'x', "IRQ 28 (OSMR2) pending" },
+{ "ICPR_IS29", 0x40D00010, 29, 0x00000001, 'x', "IRQ 29 (OSMR3) pending" },
+{ "ICPR_IS30", 0x40D00010, 30, 0x00000001, 'x', "IRQ 30 (RTCCLK) pending" },
+{ "ICPR_IS31", 0x40D00010, 31, 0x00000001, 'x', "IRQ 31 (RTCALM) pending" },
+
+{ "RTTR", 0x4090000C, 0, 0xffffffff, 'x', "RTC Trim Register (4-30)" },
+{ "RTTR_CK_DIV", 0x4090000C, 0, 0x0000ffff, 'x', "RTC Clock Divider Count" },
+{ "RTTR_DEL", 0x4090000C, 16, 0x000003ff, 'x', "RTC Trim delete Count" },
+{ "RTTR_LCK", 0x4090000C, 31, 0x00000001, 'x', "RTC Locking for RTTR" },
+
+{ "RTAR", 0x40900010, 0, 0xffffffff, 'x', "RTC Alarm Register (4-30)" },
+{ "RTAR_RTMV", 0x40900010, 0, 0xffffffff, 'x', "RTC Target Match Value" },
+
+{ "RCNR", 0x40900000, 0, 0xffffffff, 'x', "RTC Counter Register (4-31)" },
+{ "RCNR_RCV", 0x40900000, 0, 0xffffffff, 'x', "RTC Count Value" },
+
+{ "RTSR", 0x40900008, 0, 0xffffffff, 'x', "RTC Status Register (4-32)" },
+{ "RTSR_AL", 0x40900008, 0, 0x00000001, 'x', "RTC Alarm Interrupt detected" },
+{ "RTSR_HZ", 0x40900008, 1, 0x00000001, 'x', "RTC Hz Interrupt detected" },
+{ "RTSR_ALE", 0x40900008, 2, 0x00000001, 'x', "RTC Alarm Interrupt Enable" },
+{ "RTSR_HZE", 0x40900008, 3, 0x00000001, 'x', "RTC Hz Interrupt Enable" },
+
+{ "OSMR0", 0x40A00000, 0, 0xffffffff, 'x', "OS Timer Match Register 0 (4-36)" },
+{ "OSMR1", 0x40A00004, 0, 0xffffffff, 'x', "OS Timer Match Register 1 (4-36)" },
+{ "OSMR2", 0x40A00008, 0, 0xffffffff, 'x', "OS Timer Match Register 2 (4-36)" },
+{ "OSMR3", 0x40A0000C, 0, 0xffffffff, 'x', "OS Timer Match Register 3 (4-36)" },
+
+{ "OIER", 0x40A0001C, 0, 0xffffffff, 'x', "OS Timer Interrupt Enable Register (4-36)" },
+{ "OIER_E0", 0x40A0001C, 0, 0x00000001, 'x', "OS Interrupt for OSMR0 enabled" },
+{ "OIER_E1", 0x40A0001C, 1, 0x00000001, 'x', "OS Interrupt for OSMR1 enabled" },
+{ "OIER_E2", 0x40A0001C, 2, 0x00000001, 'x', "OS Interrupt for OSMR2 enabled" },
+{ "OIER_E3", 0x40A0001C, 3, 0x00000001, 'x', "OS Interrupt for OSMR3 enabled" },
+
+{ "OWER", 0x40A00018, 0, 0xffffffff, 'x', "OS Timer Watchdog Match Enable Register (4-37)" },
+{ "OWER_WME", 0x40A00018, 0, 0x00000001, 'x', "OSMR3 match causes a reset" },
+
+{ "OSCR", 0x40A00010, 0, 0xffffffff, 'x', "OS Timer Count Register (4-37)" },
+{ "OSCR_OSCV", 0x40A00010, 0, 0xffffffff, 'x', "OS Timer Count Value" },
+
+{ "OSSR", 0x40A00014, 0, 0xffffffff, 'x', "OS Timer Status Register (4-38)" },
+{ "OSSR_M0", 0x40A00014, 0, 0x00000001, 'x', "OS OSMR0 matched OSCR0" },
+{ "OSSR_M1", 0x40A00014, 1, 0x00000001, 'x', "OS OSMR1 matched OSCR1" },
+{ "OSSR_M2", 0x40A00014, 2, 0x00000001, 'x', "OS OSMR2 matched OSCR2" },
+{ "OSSR_M3", 0x40A00014, 3, 0x00000001, 'x', "OS OSMR3 matched OSCR3" },
+
+{ "PWMCTL0", 0x40B00000, 0, 0xffffffff, 'x', "PWM Control Register 0 (4-41)" },
+{ "PWMCTL0_PRESCALE", 0x40B00000, 0, 0x0000003f, 'd', "PWM0 Prescale Divisor" },
+{ "PWMCTL0_SD", 0x40B00000, 5, 0x00000001, 'x', "PWM0 abrupt shutdown" },
+
+{ "PWMDUTY0", 0x40B00004, 0, 0xffffffff, 'x', "PWM Duty Cycle Register 0 (4-42)" },
+{ "PWMDUTY0_DCYCLE", 0x40B00004, 0, 0x000003ff, 'd', "PWM0 Duty Cycle" },
+{ "PWMDUTY0_FDCYCLE", 0x40B00004, 10, 0x00000001, 'x', "PWM_OUT0 is set high and does not toggle" },
+
+{ "PWMPERVAL0", 0x40B00008, 0, 0xffffffff, 'x', "PWM Period Control Register 0 (4-43)" },
+{ "PWMPERVAL0_PV", 0x40B00008, 0, 0x000003ff, 'd', "PWM0 Period Cycle Length" },
+
+{ "PWMCTL1", 0x40C00000, 0, 0xffffffff, 'x', "PWM Control Register 1 (4-41)" },
+{ "PWMCTL1_PRESCALE", 0x40C00000, 0, 0x0000003f, 'd', "PWM1 Prescale Divisor" },
+{ "PWMCTL1_SD", 0x40C00000, 5, 0x00000001, 'x', "PWM1 abrupt shutdown" },
+
+{ "PWMDUTY1", 0x40C00004, 0, 0xffffffff, 'x', "PWM Duty Cycle Register 1 (4-42)" },
+{ "PWMDUTY1_DCYCLE", 0x40C00004, 0, 0x000003ff, 'd', "PWM1 Duty Cycle" },
+{ "PWMDUTY1_FDCYCLE", 0x40C00004, 10, 0x00000001, 'x', "PWM_OUT1 is set high and does not toggle" },
+
+{ "PWMPERVAL1", 0x40C00008, 0, 0xffffffff, 'x', "PWM Period Control Register 1 (4-43)" },
+{ "PWMPERVAL1_PV", 0x40C00008, 0, 0x000003ff, 'd', "PWM1 Period Cycle Length" },
+
+
+{ "LCCR0", 0x44000000, 0, 0xffffffff, 'x', "LCD Controller Control Register 0 (7-23)" },
+{ "LCCR0_ENB", 0x44000000, 0, 0x00000001, 'd', "LCD controller enable" },
+{ "LCCR0_CMS", 0x44000000, 1, 0x00000001, 'd', "LCD monochrome operation enable" },
+{ "LCCR0_SDS", 0x44000000, 2, 0x00000001, 'd', "LCD dual panel display enable" },
+{ "LCCR0_LDM", 0x44000000, 3, 0x00000001, 'd', "LCD disable done IRQ disable" },
+{ "LCCR0_SFM", 0x44000000, 4, 0x00000001, 'd', "LCD start of frame IRQ disable" },
+{ "LCCR0_IUM", 0x44000000, 5, 0x00000001, 'd', "LCD fifo underrun error IRQ disable" },
+{ "LCCR0_EFM", 0x44000000, 6, 0x00000001, 'd', "LCD end of frame IRQ disable" },
+{ "LCCR0_PAS", 0x44000000, 7, 0x00000001, 'd', "LCD active display enable" },
+{ "LCCR0_DPD", 0x44000000, 9, 0x00000001, 'd', "LCD send 8 pixel on L_DD[7:0] at each clock" },
+{ "LCCR0_DIS", 0x44000000, 10, 0x00000001, 'd', "LCD controller disable" },
+{ "LCCR0_QDM", 0x44000000, 11, 0x00000001, 'd', "LCD quick disable IRQ disable" },
+{ "LCCR0_PDD", 0x44000000, 12, 0x000000FF, 'd', "LCD palette DMA request delay" },
+{ "LCCR0_BM", 0x44000000, 20, 0x00000001, 'd', "LCD branch start IRQ disable" },
+{ "LCCR0_OUM", 0x44000000, 21, 0x00000001, 'd', "LCD fifo underrun IRQ disable" },
+
+{ "LCCR1", 0x44000004, 0, 0xffffffff, 'x', "LCD Controller Control Register 1 (7-26)" },
+{ "LCCR1_PPL", 0x44000004, 0, 0x000003ff, 'd', "LCD pixels per line (+1)" },
+{ "LCCR1_HSW", 0x44000004, 10, 0x0000003f, 'd', "LCD horizontal sync pulse width (+1)" },
+{ "LCCR1_ELW", 0x44000004, 16, 0x000000ff, 'd', "LCD end of line pixel clock wait count (+1)" },
+{ "LCCR1_BLW", 0x44000004, 24, 0x000000ff, 'd', "LCD beginning of line pixel clock wait count (+1)" },
+
+{ "LCCR2", 0x44000008, 0, 0xffffffff, 'x', "LCD Controller Control Register 2 (7-28)" },
+{ "LCCR2_LPP", 0x44000008, 0, 0x000003ff, 'd', "LCD lines per panel (+1)" },
+{ "LCCR2_VSW", 0x44000008, 10, 0x0000003f, 'd', "LCD vertical sync pulse width (+1)" },
+{ "LCCR2_EFW", 0x44000008, 16, 0x000000ff, 'd', "LCD end of frame line clock wait count (+1)" },
+{ "LCCR2_BFW", 0x44000008, 24, 0x000000ff, 'd', "LCD beginning of frame line clock wait count (+1)" },
+
+{ "LCCR3", 0x4400000C, 0, 0xffffffff, 'x', "LCD Controller Control Register 3 (7-31)" },
+{ "LCCR3_PCD", 0x4400000C, 0, 0x000000ff, 'd', "LCD pixel clock divisor (+1)" },
+{ "LCCR3_ACB", 0x4400000C, 8, 0x000000ff, 'd', "LCD AC bias pin frequency (+1)" },
+{ "LCCR3_API", 0x4400000C, 16, 0x0000000f, 'd', "LCD AC bias pin transitions per interrupt" },
+{ "LCCR3_VSP", 0x4400000C, 20, 0x00000001, 'd', "LCD L_FCLK vertical sync polarity active low" },
+{ "LCCR3_HSP", 0x4400000C, 21, 0x00000001, 'd', "LCD L_LCLK horizontal sync polarity active low" },
+{ "LCCR3_PCP", 0x4400000C, 22, 0x00000001, 'd', "LCD data sampled on falling edge of L_PCLK" },
+{ "LCCR3_OEP", 0x4400000C, 23, 0x00000001, 'd', "LCD L_BIAS output enable active low" },
+{ "LCCR3_BPP", 0x4400000C, 24, 0x00000007, '<', "LCD bits per pixel" },
+{ "LCCR3_DPC", 0x4400000C, 27, 0x00000007, 'd', "LCD double pixel clock rate at L_PCLK" },
+
+
+{ "FBR0", 0x44000020, 0, 0xffffffff, 'x', "FBR0" },
+{ "FBR1", 0x44000020, 0, 0xffffffff, 'x', "FBR1" },
+{ "LCSR", 0x44000038, 0, 0xffffffff, 'x', "LCD Controller Status Register (7-40)" },
+{ "LIIDR", 0x4400003C, 0, 0xffffffff, 'x', "LCD Controller Interrupt ID Register (7-41)" },
+// TODO
+
+{ "TRGBBR", 0x44000040, 0, 0xffffffff, 'x', "TMED RBG Seed Register (7-42)" },
+{ "TRGBBR_TRS",0x44000040, 0, 0x000000ff, 'x', "Red Seed" },
+{ "TRGBBR_TGS",0x44000040, 8, 0x000000ff, 'x', "Green Seed" },
+{ "TRGBBR_TBS",0x44000040, 16, 0x000000ff, 'x', "Blue Seed" },
+
+{ "TCR", 0x44000044, 0, 0xffffffff, 'x', "TMED Control Register (7-44)" },
+{ "TCR_COAM", 0x44000044, 0, 0x00000001, 'x', "Color Offset Adjuster Matrix" },
+{ "TCR_FNAM", 0x44000044, 1, 0x00000001, 'x', "Frame Number Adjuster Matrix" },
+{ "TCR_COAE", 0x44000044, 2, 0x00000001, 'x', "Color Offset Adjuster Enable" },
+{ "TCR_FNAME", 0x44000044, 3, 0x00000001, 'x', "Frame Number Adjuster Enable" },
+{ "TCR_TVBS", 0x44000044, 4, 0x0000000f, 'd', "Vertical Beat Suppression" },
+{ "TCR_THBS", 0x44000044, 8, 0x0000000f, 'd', "Horizontal Beat Suppression" },
+{ "TCR_TED", 0x44000044, 14, 0x00000001, 'x', "Energy Distribution Matrix Select" },
+
+{ "FDADR0", 0x44000200, 0, 0xffffffff, 'x', "FDADR0" },
+{ "FSADR0", 0x44000204, 0, 0xffffffff, 'x', "FSADR0" },
+{ "FIDR0", 0x44000208, 0, 0xffffffff, 'x', "FODR0" },
+{ "LDCMD0", 0x4400020C, 0, 0xffffffff, 'x', "LDCMD0" },
+{ "FDADR1", 0x44000210, 0, 0xffffffff, 'x', "FDADR1" },
+{ "FSADR1", 0x44000214, 0, 0xffffffff, 'x', "FSADR1" },
+{ "FIDR1", 0x44000218, 0, 0xffffffff, 'x', "FIDR1" },
+{ "LDCMD1", 0x4400021C, 0, 0xffffffff, 'x', "LDCMD1" },
+// TODO
+
+
+
+
+{ "MDCNFG", 0x48000000, 0, 0xffffffff, 'x', "SDRAM Configuration Register (6-9)" },
+{ "MDCNFG_DE0", 0x48000000, 0, 0x00000001, 'd', "SDRAM enable for partition 0" },
+{ "MDCNFG_DE1", 0x48000000, 1, 0x00000001, 'd', "SDRAM enable for partition 1" },
+{ "MDCNFG_DWID0", 0x48000000, 2, 0x00000001, 'd', "SDRAM data width (0=32, 1=16)" },
+{ "MDCNFG_DCAC0", 0x48000000, 3, 0x00000003, 'd', "Column address bits for partition pair 0/1" },
+{ "MDCNFG_DRAC0", 0x48000000, 5, 0x00000003, 'd', "Row address bits for partition pair 0/1" },
+{ "MDCNFG_DNB0", 0x48000000, 7, 0x00000001, 'd', "Banks in partition pair 0/1 (0=2, 1=4)" },
+{ "MDCNFG_DTC0", 0x48000000, 8, 0x00000003, 'd', "Timing Category for partition pair 0/1" },
+{ "MDCNFG_DADDR0", 0x48000000,10, 0x00000001, 'd', "Use alternate addressing for partition pair 0/1" },
+{ "MDCNFG_DLATCH0", 0x48000000,11, 0x00000001, 'd', "Return data latching scheme for partition pair 0/1" },
+{ "MDCNFG_DSA11110",0x48000000,12, 0x00000001, 'd', "use SA1111 address muxing for partition pair 0/1" },
+{ "MDCNFG_DE2", 0x48000000,16, 0x00000001, 'd', "SDRAM enable for partition 2" },
+{ "MDCNFG_DE3", 0x48000000,17, 0x00000001, 'd', "SDRAM enable for partition 3" },
+{ "MDCNFG_DWID2", 0x48000000,18, 0x00000001, 'd', "SDRAM data width (0=32, 1=16)" },
+{ "MDCNFG_DCAC2", 0x48000000,19, 0x00000003, 'd', "Column address bits for partition pair 2/3" },
+{ "MDCNFG_DRAC2", 0x48000000,21, 0x00000003, 'd', "Row address bits for partition pair 2/3" },
+{ "MDCNFG_DNB2", 0x48000000,23, 0x00000001, 'd', "Banks in partition pair 2/3 (0=2, 1=4)" },
+{ "MDCNFG_DTC2", 0x48000000,24, 0x00000003, 'd', "Timing Category for partition pair 2/3" },
+{ "MDCNFG_DADDR2", 0x48000000,26, 0x00000001, 'd', "Use alternate addressing for partition pair 2/3" },
+{ "MDCNFG_DLATCH2", 0x48000000,27, 0x00000001, 'd', "Return data latching scheme for partition pair 2/3" },
+{ "MDCNFG_DSA11112",0x48000000,28, 0x00000001, 'd', "use SA1111 address muxing for partition pair 2/3" },
+
+{ "MDREFR", 0x48000004, 0, 0xffffffff, 'x', "SDRAM Refresh Configuration Register (6-15)" },
+{ "MDREFR_DRI", 0x48000004, 0, 0x00000fff, 'x', "SDRAM Refresh intervall, all paritions" },
+{ "MDREFR_E0PIN", 0x48000004,12, 0x00000001, 'x', "SDRAM Clock Enable Pin 0 Level" },
+{ "MDREFR_K0RUN", 0x48000004,13, 0x00000001, 'x', "SDRAM Clock Run Pin 0" },
+{ "MDREFR_K0DB2", 0x48000004,14, 0x00000001, 'x', "SDRAM Clock Pin 0 Divide/2" },
+{ "MDREFR_E1PIN", 0x48000004,15, 0x00000001, 'x', "SDRAM Clock Enable Pin 1 Level" },
+{ "MDREFR_K1RUN", 0x48000004,16, 0x00000001, 'x', "SDRAM Clock Run Pin 1" },
+{ "MDREFR_K1DB2", 0x48000004,17, 0x00000001, 'x', "SDRAM Clock Pin 1 Divide/2" },
+{ "MDREFR_K2RUN", 0x48000004,18, 0x00000001, 'x', "SDRAM Clock Run Pin 2" },
+{ "MDREFR_K2DB2", 0x48000004,19, 0x00000001, 'x', "SDRAM Clock Pin 2 Divide/2" },
+{ "MDREFR_APD", 0x48000004,20, 0x00000001, 'x', "SDRAM Auto Power Down enable" },
+{ "MDREFR_SLFRSH", 0x48000004,22, 0x00000001, 'x', "SDRAM Self-Refresh" },
+{ "MDREFR_K0FREE", 0x48000004,23, 0x00000001, 'x', "SDRAM Free Running Control for SDCLK0" },
+{ "MDREFR_K1FREE", 0x48000004,24, 0x00000001, 'x', "SDRAM Free Running Control for SDCLK1" },
+{ "MDREFR_K2FREE", 0x48000004,25, 0x00000001, 'x', "SDRAM Free Running Control for SDCLK2" },
+
+{ "MSC0", 0x48000008, 0, 0xffffffff, 'x', "Asynchronous Static Memory Control Register 0 (6-45)" },
+{ "MSC0_RT0", 0x48000008, 0, 0x00000007, 'd', "nCS[0] ROM Type" },
+{ "MSC0_RBW0", 0x48000008, 3, 0x00000001, 'd', "nCS[0] ROM Bus Width (1=16bit)" },
+{ "MSC0_RDF0", 0x48000008, 4, 0x0000000f, 'd', "nCS[0] ROM Delay First Access" },
+{ "MSC0_RDN0", 0x48000008, 8, 0x0000000f, 'd', "nCS[0] ROM Delay Next Access" },
+{ "MSC0_RRR0", 0x48000008,12, 0x00000007, 'd', "nCS[0] ROM/SRAM Recovery Time" },
+{ "MSC0_RBUFF0", 0x48000008,15, 0x00000001, 'd', "nCS[0] Return Buffer Behavior (1=streaming)" },
+{ "MSC0_RT1", 0x48000008,16, 0x00000007, 'd', "nCS[1] ROM Type" },
+{ "MSC0_RBW1", 0x48000008,19, 0x00000001, 'd', "nCS[1] ROM Bus Width (1=16bit)" },
+{ "MSC0_RDF1", 0x48000008,20, 0x0000000f, 'd', "nCS[1] ROM Delay First Access" },
+{ "MSC0_RDN1", 0x48000008,24, 0x0000000f, 'd', "nCS[1] ROM Delay Next Access" },
+{ "MSC0_RRR1", 0x48000008,28, 0x00000007, 'd', "nCS[1] ROM/SRAM Recovery Time" },
+{ "MSC0_RBUFF1", 0x48000008,31, 0x00000001, 'd', "nCS[1] Return Buffer Behavior (1=streaming)" },
+
+{ "MSC1", 0x4800000C, 0, 0xffffffff, 'x', "Asynchronous Static Memory Control Register 1 (6-45)" },
+{ "MSC1_RT2", 0x4800000C, 0, 0x00000007, 'd', "nCS[2] ROM Type" },
+{ "MSC1_RBW2", 0x4800000C, 3, 0x00000001, 'd', "nCS[2] ROM Bus Width (1=16bit)" },
+{ "MSC1_RDF2", 0x4800000C, 4, 0x0000000f, 'd', "nCS[2] ROM Delay First Access" },
+{ "MSC1_RDN2", 0x4800000C, 8, 0x0000000f, 'd', "nCS[2] ROM Delay Next Access" },
+{ "MSC1_RRR2", 0x4800000C,12, 0x00000007, 'd', "nCS[2] ROM/SRAM Recovery Time" },
+{ "MSC1_RBUFF2", 0x4800000C,15, 0x00000001, 'd', "nCS[2] Return Buffer Behavior (1=streaming)" },
+{ "MSC1_RT3", 0x4800000C,16, 0x00000007, 'd', "nCS[3] ROM Type" },
+{ "MSC1_RBW3", 0x4800000C,19, 0x00000001, 'd', "nCS[3] ROM Bus Width (1=16bit)" },
+{ "MSC1_RDF3", 0x4800000C,20, 0x0000000f, 'd', "nCS[3] ROM Delay First Access" },
+{ "MSC1_RDN3", 0x4800000C,24, 0x0000000f, 'd', "nCS[3] ROM Delay Next Access" },
+{ "MSC1_RRR3", 0x4800000C,28, 0x00000007, 'd', "nCS[3] ROM/SRAM Recovery Time" },
+{ "MSC1_RBUFF3", 0x4800000C,31, 0x00000001, 'd', "nCS[3] Return Buffer Behavior (1=streaming)" },
+
+{ "MSC2", 0x48000010, 0, 0xffffffff, 'x', "Asynchronous Static Memory Control Register 2 (6-45)" },
+{ "MSC2_RT4", 0x48000010, 0, 0x00000007, 'd', "nCS[4] ROM Type" },
+{ "MSC2_RBW4", 0x48000010, 3, 0x00000001, 'd', "nCS[4] ROM Bus Width (1=16bit)" },
+{ "MSC2_RDF4", 0x48000010, 4, 0x0000000f, 'd', "nCS[4] ROM Delay First Access" },
+{ "MSC2_RDN4", 0x48000010, 8, 0x0000000f, 'd', "nCS[4] ROM Delay Next Access" },
+{ "MSC2_RRR4", 0x48000010,12, 0x00000007, 'd', "nCS[4] ROM/SRAM Recovery Time" },
+{ "MSC2_RBUFF4", 0x48000010,15, 0x00000001, 'd', "nCS[4] Return Buffer Behavior (1=streaming)" },
+{ "MSC2_RT5", 0x48000010,16, 0x00000007, 'd', "nCS[5] ROM Type" },
+{ "MSC2_RBW5", 0x48000010,19, 0x00000001, 'd', "nCS[5] ROM Bus Width (1=16bit)" },
+{ "MSC2_RDF5", 0x48000010,20, 0x0000000f, 'd', "nCS[5] ROM Delay First Access" },
+{ "MSC2_RDN5", 0x48000010,24, 0x0000000f, 'd', "nCS[5] ROM Delay Next Access" },
+{ "MSC2_RRR5", 0x48000010,28, 0x00000007, 'd', "nCS[5] ROM/SRAM Recovery Time" },
+{ "MSC2_RBUFF5", 0x48000010,31, 0x00000001, 'd', "nCS[5] Return Buffer Behavior (1=streaming)" },
+
+{ "MECR", 0x48000014, 0, 0xffffffff, 'x', "Expansion Memory Configuration Register (6-61)" },
+{ "MECR_NOS", 0x48000014, 0, 0x00000001, 'x', "Number of Sockets (1=2 Sockets)" },
+{ "MECR_CIT", 0x48000014, 1, 0x00000001, 'x', "Card inserted" },
+
+{ "SXCNFG", 0x4800001C, 0, 0xffffffff, 'x', "Synchronous Static Memory Configuration Register (6-33)" },
+{ "SXCNFG_SXEN0", 0x4800001C, 0, 0x00000001, 'x', "Partition 0 enabled as SX memory" },
+{ "SXCNFG_SXEN1", 0x4800001C, 1, 0x00000001, 'x', "Partition 1 enabled as SX memory" },
+{ "SXCNFG_SXCL0", 0x4800001C, 2, 0x00000007, 'x', "Partition 0/1 CAS Latency" },
+{ "SXCNFG_SXRL0", 0x4800001C, 5, 0x00000007, 'x', "Partition 0/1 RAS Latency" },
+{ "SXCNFG_SXRA0", 0x4800001C, 8, 0x00000003, 'x', "Partition 0/1 row address bit count" },
+{ "SXCNFG_SXCA0", 0x4800001C,10, 0x00000003, 'x', "Partition 0/1 column address bit count" },
+{ "SXCNFG_SXTP0", 0x4800001C,12, 0x00000003, 'x', "Partition 0/1 memory type" },
+{ "SXCNFG_SXLATCH0",0x4800001C,14, 0x00000001, 'x', "Partition 0/1 return data with return clock" },
+{ "SXCNFG_SXEN2", 0x4800001C,16, 0x00000001, 'x', "Partition 2 enabled as SX memory" },
+{ "SXCNFG_SXEN3", 0x4800001C,17, 0x00000001, 'x', "Partition 3 enabled as SX memory" },
+{ "SXCNFG_SXCL2", 0x4800001C,18, 0x00000007, 'x', "Partition 2/3 CAS Latency" },
+{ "SXCNFG_SXRL2", 0x4800001C,21, 0x00000007, 'x', "Partition 2/3 RAS Latency" },
+{ "SXCNFG_SXRA2", 0x4800001C,24, 0x00000003, 'x', "Partition 2/3 row address bit count" },
+{ "SXCNFG_SXCA2", 0x4800001C,26, 0x00000003, 'x', "Partition 2/3 column address bit count" },
+{ "SXCNFG_SXTP2", 0x4800001C,28, 0x00000003, 'x', "Partition 2/3 memory type" },
+{ "SXCNFG_SXLATCH2",0x4800001C,30, 0x00000001, 'x', "Partition 2/3 return data with return clock" },
+
+{ "SXMRS", 0x48000024, 0, 0xffffffff, 'x', "MRS value to be written to SX Memory (6-38)" },
+
+{ "MCMEM0", 0x48000028, 0, 0xffffffff, 'x', "MEM Control for PCMCIA Socket 0 (6-58)" },
+{ "MCMEM0_SET", 0x48000028, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCMEM0_ASST", 0x48000028, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCMEM0_HOLD", 0x48000028,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MCMEM1", 0x4800002C, 0, 0xffffffff, 'x', "MEM Control for PCMCIA Socket 1 (6-58)" },
+{ "MCMEM1_SET", 0x4800002C, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCMEM1_ASST", 0x4800002C, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCMEM1_HOLD", 0x4800002C,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MCATT0", 0x48000030, 0, 0xffffffff, 'x', "ATT Control for PCMCIA Socket 0 (6-59)" },
+{ "MCATT0_SET", 0x48000030, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCATT0_ASST", 0x48000030, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCATT0_HOLD", 0x48000030,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MCATT1", 0x48000034, 0, 0xffffffff, 'x', "ATT Control for PCMCIA Socket 1 (6-59)" },
+{ "MCATT1_SET", 0x48000034, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCATT1_ASST", 0x48000034, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCATT1_HOLD", 0x48000034,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MCIO0", 0x48000038, 0, 0xffffffff, 'x', "I/O Control for PCMCIA Socket 0 (6-59)" },
+{ "MCIO0_SET", 0x48000038, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCIO0_ASST", 0x48000038, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCIO0_HOLD", 0x48000038,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MCIO1", 0x4800003C, 0, 0xffffffff, 'x', "I/O Control for PCMCIA Socket 1 (6-59)" },
+{ "MCIO1_SET", 0x4800003C, 0, 0x0000007f, 'd', "Address set time" },
+{ "MCIO1_ASST", 0x4800003C, 7, 0x0000001f, 'd', "Command assertion time" },
+{ "MCIO1_HOLD", 0x4800003C,14, 0x0000003f, 'd', "Address hold time" },
+
+{ "MDMRS", 0x48000040, 0, 0xffffffff, 'x', "SDRAM Mode Register Set Configuration Register (6-12)" },
+{ "MDMRS_MDBL0", 0x48000040, 0, 0x00000007, 'x', "SDRAM Partition 0/1 burst length" },
+{ "MDMRS_MDADD0", 0x48000040, 3, 0x00000001, 'x', "SDRAM Partition 0/1 burst type" },
+{ "MDMRS_MDCL0", 0x48000040, 4, 0x00000007, 'x', "SDRAM Partition 0/1 CAS latency" },
+{ "MDMRS_MDMRS0", 0x48000040, 7, 0x000000ff, 'x', "MRS value to be written to SDRAM Partition 0/1" },
+{ "MDMRS_MDBL2", 0x48000040,16, 0x00000007, 'x', "SDRAM Partition 2/3 burst length" },
+{ "MDMRS_MDADD2", 0x48000040,19, 0x00000001, 'x', "SDRAM Partition 2/3 burst type" },
+{ "MDMRS_MDCL2", 0x48000040,20, 0x00000007, 'x', "SDRAM Partition 2/3 CAS latency" },
+{ "MDMRS_MDMRS2", 0x48000040,23, 0x000000ff, 'x', "MRS value to be written to SDRAM Partition 2/3" },
+
+{ "BOOTDEF", 0x48000044, 0, 0xffffffff, 'x', "Boot Time Defaults (6-73)" },
+{ "BOOTDEF_BOOTSEL",0x48000044, 0, 0x00000007, 'x', "Boot Configuration at BOOT_SEL pins" },
+{ "BOOTDEF_PKGTYPE",0x48000044, 3, 0x00000001, 'x', "Processor type, 1 for PXA250" },
+
+{ "MDMRSLP", 0x48000058, 0, 0xffffffff, 'x', "Low-Power SDRAM Mode Register Set Configuration Register (6-14)" },
+// TODO
+
+
+
+{ "MMC_STRPCL", 0x41100000, 0, 0xffffffff, 'x', "MMC Start/Stop Clock (15-23)" },
+
+{ "MMC_STAT", 0x41100004, 0, 0xffffffff, 'x', "MMC Status Register (15-24)" },
+{ "MMC_STAT_READ_TIME_OUT", 0x41100004, 0, 0x00000001, 'x', "Read Time Out" },
+{ "MMC_STAT_TIME_OUT_RESP", 0x41100004, 1, 0x00000001, 'x', "Time Out Response" },
+{ "MMC_STAT_CRC_WRITE_ERROR", 0x41100004, 2, 0x00000001, 'x', "CRC Write Error" },
+{ "MMC_STAT_CRC_READ_ERR", 0x41100004, 3, 0x00000001, 'x', "CRC Read Error" },
+{ "MMC_STAT_SPI_READ_ERR_TKN", 0x41100004, 4, 0x00000001, 'x', "SPI Read Error Token" },
+{ "MMC_STAT_RES_CRC_ERR", 0x41100004, 5, 0x00000001, 'x', "Response CRC Error" },
+{ "MMC_STAT_XMIT_FIFO_EMPTY", 0x41100004, 6, 0x00000001, 'x', "Transmit FIFO Empty" },
+{ "MMC_STAT_RECV_FIFO_EMPTY", 0x41100004, 7, 0x00000001, 'x', "Receive FIFO Empty" },
+{ "MMC_STAT_CLK_EN", 0x41100004, 8, 0x00000001, 'x', "Clock Enabled" },
+{ "MMC_STAT_DATA_TRAN_DONE", 0x41100004,11, 0x00000001, 'x', "Data Transmission Done" },
+{ "MMC_STAT_PRG_DONE", 0x41100004,12, 0x00000001, 'x', "Program Done" },
+{ "MMC_STAT_END_CMD_RES", 0x41100004,13, 0x00000001, 'x', "End Command Response" },
+
+{ "MMC_CLKRT", 0x41100008, 0, 0xffffffff, 'x', "MMC Clock Read Timeout Register (15-26)" },
+{ "MMC_CLK_RATE", 0x41100008, 0, 0x00000007, 'x', "Read Time Out bitmask" },
+
+{ "MMC_SPI", 0x4110000c, 0, 0xffffffff, 'x', "MMC SPI mode (15-27)" },
+{ "MMC_SPI_EN", 0x4110000c, 0, 0x00000001, 'x', "SPI mode enabled" },
+{ "MMC_SPI_CRC_ON", 0x4110000c, 1, 0x00000001, 'x', "CRC generation enabled" },
+{ "MMC_SPI_CS_EN", 0x4110000c, 2, 0x00000001, 'x', "SPI chip select enabled" },
+{ "MMC_SPI_CS_ADDRESS", 0x4110000c, 3, 0x00000001, 'x', "CS0 enabled" },
+
+{ "MMC_CMDAT", 0x41100010, 0, 0xffffffff, 'x', "MMC Command Data (15-28)" },
+{ "MMC_CMDAT_RF", 0x41100010, 0, 0x00000003, 'x', "response format" },
+{ "MMC_CMDAT_DATA_EN", 0x41100010, 2, 0x00000001, 'x', "current cmd includes data transfer" },
+{ "MMC_CMDAT_WRITE", 0x41100010, 3, 0x00000001, 'x', "data transfer is a write" },
+{ "MMC_CMDAT_STREAM", 0x41100010, 4, 0x00000001, 'x', "data transfer is in stream mode" },
+{ "MMC_CMDAT_BUSY", 0x41100010, 5, 0x00000001, 'x', "busy signal is expected after data transfer" },
+{ "MMC_CMDAT_INIT", 0x41100010, 6, 0x00000001, 'x', "precede cmd with 80 clocks" },
+{ "MMC_CMDAT_DMA_EN", 0x41100010, 7, 0x00000001, 'x', "enable DMA mode" },
+
+{ "MMC_RESTO", 0x41100014, 0, 0xffffffff, 'x', "MMC Response Time Out (15-29)" },
+{ "MMC_RESTO_TO", 0x41100014, 0, 0x0000007f, 'd', "clocks before a response time out" },
+
+{ "MMC_RDTO", 0x41100018, 0, 0xffffffff, 'x', "MMC Read Time Out (15-29)" },
+{ "MMC_RDTO_TO", 0x41100018, 0, 0x0000ffff, 'd', "time until read time out" },
+
+{ "MMC_BLKLEN", 0x4110001C, 0, 0xffffffff, 'x', "MMC Block Len Register (15-30)" },
+{ "MMC_BLKLEN_LEN", 0x4110001C, 0, 0x000003ff, 'd', "Number of bytes in the block" },
+
+{ "MMC_NOB", 0x41100020, 0, 0xffffffff, 'x', "MMC Block Number Register (15-30)" },
+{ "MMC_NOB_N", 0x41100020, 0, 0x0000ffff, 'd', "number of blocks" },
+
+{ "MMC_PRTBUF", 0x41100024, 0, 0xffffffff, 'x', "MMC Partial Buffer Register (15-31)" },
+{ "MMC_PRTBUF_FULL", 0x41100024, 0, 0x00000001, 'x', "Buffer is partially full" },
+
+{ "MMC_IMASK", 0x41100028, 0, 0xffffffff, 'x', "MMC Interrupt Mask Register (15-31)" },
+{ "MMC_IMASK_DATATRAN", 0x41100028, 0, 0x00000001, 'x', "Data Transfer Done masked" },
+{ "MMC_IMASK_PRGDONE", 0x41100028, 1, 0x00000001, 'x', "Programming Done masked" },
+{ "MMC_IMASK_ENDCMD", 0x41100028, 2, 0x00000001, 'x', "End Command Response masked" },
+{ "MMC_IMASK_STOPCMD", 0x41100028, 3, 0x00000001, 'x', "Ready for Stop Transaction Command masked" },
+{ "MMC_IMASK_CLOCKOFF", 0x41100028, 4, 0x00000001, 'x', "Clock Is Off masked" },
+{ "MMC_IMASK_RXFIFO", 0x41100028, 5, 0x00000001, 'x', "Receive FIFO Read Request masked" },
+{ "MMC_IMASK_TXFIFO", 0x41100028, 6, 0x00000001, 'x', "Transmit FIFO Write Request masked" },
+
+{ "MMC_IREG", 0x4110002c, 0, 0xffffffff, 'x', "MMC Interrupt Register (15-33)" },
+{ "MMC_IREG_DATATRAN", 0x4110002c, 0, 0x00000001, 'x', "Data Transfer Done or Read TimeOut occured" },
+{ "MMC_IREG_PRGDONE", 0x4110002c, 1, 0x00000001, 'x', "Card has finished programming" },
+{ "MMC_IREG_ENDCMD", 0x4110002c, 2, 0x00000001, 'x', "MMC has received response or Response TimeOut" },
+{ "MMC_IREG_STOPCMD", 0x4110002c, 3, 0x00000001, 'x', "MMC is ready for the Stop Transaction Command" },
+{ "MMC_IREG_CLOCKOFF", 0x4110002c, 4, 0x00000001, 'x', "MMC clock has been turned off" },
+{ "MMC_IREG_RXFIFO", 0x4110002c, 5, 0x00000001, 'x', "Request for data read from receive FIFO" },
+{ "MMC_IREG_TXFIFO", 0x4110002c, 6, 0x00000001, 'x', "Request to data write to transmit FIFO" },
+
+{ "MMC_CMD", 0x41100030, 0, 0xffffffff, 'x', "MMC Command Register (15-34)" },
+{ "MMC_CMD_INDEX", 0x41100030, 0, 0x0000003f, 'x', "command index" },
+
+{ "MMC_ARGH", 0x41100034, 0, 0xffffffff, 'x', "MMC Higher Argument Register (15-36)" },
+{ "MMC_ARGH_ARG", 0x41100034, 0, 0x0000ffff, 'x', "upper 16 bits of command argument" },
+
+{ "MMC_ARGL", 0x41100038, 0, 0xffffffff, 'x', "MMC Lower Argument Register (15-36)" },
+{ "MMC_ARGL_ARG", 0x41100038, 0, 0x0000ffff, 'x', "upper 16 bits of command argument" },
+
+
+#if defined(CONFIG_ARCH_PXA_IDP) || defined(CONFIG_ARCH_RAMSES)
+// CS5+0x03C00000 CPLD 0x14000000
+// CS1 Alt-Flash 0x04000000
+// CS0 Flash 0x00000000
+
+{ "CPLD_PWR", 0x17C00004, 0, 0x000000ff, 'x', "CPLD_PERIPH_PWR" },
+{ "CPLD_PWR_CORE", 0x17C00004, 0, 0x00000001, 'd', "Variable core enable - latch value in first" },
+#ifdef CONFIG_ARCH_PXA_IDP
+{ "CPLD_PWR_MQ", 0x17C00004, 2, 0x00000001, 'd', "MQ1132 power switch" },
+#else
+{ "CPLD_PWR_SL811HS", 0x17C00004, 2, 0x00000001, 'd', "SL811HS power switch" },
+#endif
+{ "CPLD_PWR_PER", 0x17C00004, 3, 0x00000001, 'd', "peripheral power enable" },
+{ "CPLD_PWR_RST", 0x17C00004, 4, 0x00000001, 'd', "peripheral reset" },
+
+{ "CPLD_LED", 0x17C00008, 0, 0x000000ff, 'x', "CPLD_LED_CONTROL" },
+{ "CPLD_LED_CIR", 0x17C00008, 0, 0x00000001, 'd', "CIR" },
+{ "CPLD_LED_HB", 0x17C00008, 5, 0x00000001, 'd', "red LED (0=on)" },
+{ "CPLD_LED_BUSY", 0x17C00008, 6, 0x00000001, 'd', "green LED (0=on)" },
+{ "CPLD_LED_FLASH", 0x17C00008, 7, 0x00000001, 'd', "red LED flash enable" },
+
+{ "CPLD_KBD_COL_HIGH", 0x17C0000C, 0, 0x000000ff, 'x', "CPLD" },
+
+{ "CPLD_KBD_COL_LOW", 0x17C00010, 0, 0x000000ff, 'x', "CPLD" },
+
+{ "CPLD_PCCARD_EN", 0x17C00014, 0, 0x000000ff, 'x', "CPLD PC-Card Enable" },
+{ "CPLD_PCC0_ENABLE", 0x17C00014, 0, 0x00000001, 'd', "PC-Card 0 enable" },
+{ "CPLD_PCC1_ENABLE", 0x17C00014, 1, 0x00000001, 'd', "PC-Card 1 enable" },
+{ "CPLD_PCC0_RESET", 0x17C00014, 6, 0x00000001, 'd', "PC-Card 0 reset" },
+{ "CPLD_PCC1_RESET", 0x17C00014, 7, 0x00000001, 'd', "PC-Card 1 reset" },
+
+/*
+{ "CPLD_GPIOH_DIR", 0x17C00018, 0, 0xffffffff, 'x', "CPLD" },
+{ "CPLD_GPIOH_VALUE", 0x17C0001C, 0, 0xffffffff, 'x', "CPLD" },
+{ "CPLD_GPIOL_DIR", 0x17C00020, 0, 0xffffffff, 'x', "CPLD" },
+{ "CPLD_GPIOL_VALUE", 0x17C00024, 0, 0xffffffff, 'x', "CPLD" },
+
+ WHEN "00110" =>
+ data(7) <= l3_data_out; -- L3 IIS control bus - direction of data bit
+ data(6) <= '0';
+ data(5) <= '0';
+ data(4) <= '0';
+ data(3) <= '0';
+ data(2) <= '0';
+ data(1) <= gpslow_out(1); -- direction of pld_gpio_09
+ data(0) <= gpslow_out(0); -- direction of pld_gpio_08
+
+ WHEN "00111" => -- gpio on async bus
+ data(7) <= l3_data_io; -- L3 IIS control bus - always reads pin
+ data(6) <= l3_clk; -- L3 IIS control bus - read back clock
+ data(5) <= l3_mode; -- L3 IIS control bus - read back mode
+ data(4) <= '0';
+ data(3) <= '0';
+ data(2) <= '0';
+ data(1) <= gpslow_io(1); -- gpio on async bus
+ data(0) <= gpslow_io(0); -- gpio on async bus
+
+ WHEN "01000" =>
+ data <= gp_out; -- direction of pld_gpio_07 through 00
+
+ WHEN "01001" => -- gpio on high speed bus
+ data <= gp_io;
+*/
+
+{ "CPLD_PCCARD_PWR", 0x17C00028, 0, 0x000000ff, 'x', "CPLD PC-Card Power" },
+{ "CPLD_PCC0_PWR0", 0x17C00028, 0, 0x00000001, 'd', "PC-Card 0 Pwr 0" },
+{ "CPLD_PCC0_PWR1", 0x17C00028, 1, 0x00000001, 'd', "PC-Card 0 Pwr 1" },
+{ "CPLD_PCC0_PWR2", 0x17C00028, 2, 0x00000001, 'd', "PC-Card 0 Pwr 2" },
+{ "CPLD_PCC0_PWR3", 0x17C00028, 3, 0x00000001, 'd', "PC-Card 0 Pwr 3" },
+{ "CPLD_PCC1_PWR0", 0x17C00028, 4, 0x00000001, 'd', "PC-Card 1 Pwr 0" },
+{ "CPLD_PCC1_PWR1", 0x17C00028, 5, 0x00000001, 'd', "PC-Card 1 Pwr 1" },
+{ "CPLD_PCC1_PWR2", 0x17C00028, 6, 0x00000001, 'd', "PC-Card 1 Pwr 2" },
+{ "CPLD_PCC1_PWR3", 0x17C00028, 7, 0x00000001, 'd', "PC-Card 1 Pwr 3" },
+
+{ "CPLD_MISC", 0x17C0002C, 0, 0x000000ff, 'x', "CPLD_MISC_CTRL" },
+{ "CPLD_MISC_SER1EN", 0x17C0002C, 0, 0x00000001, 'd', "RS-232 on FF UART enable" },
+{ "CPLD_MISC_SER2EN", 0x17C0002C, 1, 0x00000001, 'd', "RS-232 on BT UART enable" },
+{ "CPLD_MISC_SER3EN", 0x17C0002C, 2, 0x00000001, 'd', "RS-232 on ST UART enable" },
+{ "CPLD_MISC_IRDAFIR", 0x17C0002C, 3, 0x00000001, 'd', "IrDA FIR enable" },
+{ "CPLD_MISC_IRDAMD0", 0x17C0002C, 4, 0x00000001, 'd', "IrDA mode 0" },
+{ "CPLD_MISC_IRDAMD1", 0x17C0002C, 5, 0x00000001, 'd', "IrDA mode 1" },
+#ifdef CONFIG_ARCH_PXA_IDP
+{ "CPLD_MISC_I2SPWR", 0x17C0002C, 7, 0x00000001, 'd', "UDA1341 power switch" },
+#endif
+
+{ "CPLD_LCD", 0x17C00030, 0, 0x000000ff, 'x', "CPLD LCD Control", },
+#ifdef CONFIG_ARCH_PXA_IDP
+{ "CPLD_LCD_PWR", 0x17C00030, 0, 0x00000001, 'd', "LCD Power" },
+{ "CPLD_LCD_BACKLIGHT", 0x17C00030, 1, 0x00000001, 'd', "LCD Backlight" },
+{ "CPLD_LCD_VLCD", 0x17C00030, 2, 0x00000001, 'd', "LCD VLCD" },
+#else
+{ "CPLD_LCD_VCC", 0x17C00030, 0, 0x00000001, 'd', "LCD VCC" },
+{ "CPLD_LCD_DISPOFF", 0x17C00030, 2, 0x00000001, 'd', "LCD nDISPOFF" },
+#endif
+
+{ "CPLD_FLASH", 0x17C00034, 0, 0x000000ff, 'x', "CPLD Flash Control" },
+{ "CPLD_FLASH_WE", 0x17C00034, 0, 0x00000001, 'd', "CPLD StrataFlash Write Enable" },
+#ifdef CONFIG_ARCH_PXA_IDP
+{ "CPLD_FLASH_MWE", 0x17C00034, 1, 0x00000001, 'd', "CPLD MPlus Write Enable" },
+{ "CPLD_FLASH_MOE", 0x17C00034, 2, 0x00000001, 'd', "CPLD MPlus Output Enable" },
+
+{ "CPLD_CS", 0x17C00038, 0, 0x000000ff, 'x', "CPLD Chip Select Register" },
+{ "CPLD_CS_CS0EN", 0x17C00038, 0, 0x00000001, 'd', "CPLD Chip Select 0 Enable" },
+{ "CPLD_CS_CS1EN", 0x17C00038, 1, 0x00000001, 'd', "CPLD Chip Select 1 Enable" },
+{ "CPLD_CS_CS2EN", 0x17C00038, 2, 0x00000001, 'd', "CPLD Chip Select 2 Enable" },
+{ "CPLD_CS_CS3EN", 0x17C00038, 3, 0x00000001, 'd', "CPLD Chip Select 3 Enable" },
+{ "CPLD_CS_CS4EN", 0x17C00038, 4, 0x00000001, 'd', "CPLD Chip Select 4 Enable" },
+//{ "CPLD_CS_CS5EN", 0x17C00038, 4, 0x00000001, 'd', "CPLD Chip Select 5 Enable" },
+#endif
+
+{ "CPLD_KB_ROW", 0x17C00050, 0, 0x000000ff, 'x', "CPLD" },
+
+{ "CPLD_PCCARD0_STATUS", 0x17C00054, 0, 0x000000ff, 'x', "CPLD PC-Card 0 Status" },
+{ "CPLD_PCC0_VS1", 0x17C00054, 0, 0x00000001, 'd', "PC-Card 0 VS1" },
+{ "CPLD_PCC0_VS2", 0x17C00054, 1, 0x00000001, 'd', "PC-Card 0 VS2" },
+{ "CPLD_PCC0_BVD1", 0x17C00054, 2, 0x00000001, 'd', "PC-Card 0 BVD1" },
+{ "CPLD_PCC0_BVD2", 0x17C00054, 3, 0x00000001, 'd', "PC-Card 0 BVD2" },
+{ "CPLD_PCC0_INPACK", 0x17C00054, 4, 0x00000001, 'd', "PC-Card 0 INPACK" },
+{ "CPLD_PCC0_IRQ", 0x17C00054, 5, 0x00000001, 'd', "PC-Card 0 IRQ" },
+{ "CPLD_PCC0_STRESET", 0x17C00054, 6, 0x00000001, 'd', "PC-Card 0 RESET" },
+{ "CPLD_PCC0_WRPROT", 0x17C00054, 7, 0x00000001, 'd', "PC-Card 0 WRPROT" },
+
+{ "CPLD_PCCARD1_STATUS", 0x17C00058, 0, 0x000000ff, 'x', "CPLD PC-Card 1 Status" },
+{ "CPLD_PCC1_VS1", 0x17C00058, 0, 0x00000001, 'd', "PC-Card 1 VS1" },
+{ "CPLD_PCC1_VS2", 0x17C00058, 1, 0x00000001, 'd', "PC-Card 1 VS2" },
+{ "CPLD_PCC1_BVD1", 0x17C00058, 2, 0x00000001, 'd', "PC-Card 1 BVD1" },
+{ "CPLD_PCC1_BVD2", 0x17C00058, 3, 0x00000001, 'd', "PC-Card 1 BVD2" },
+{ "CPLD_PCC1_INPACK", 0x17C00058, 4, 0x00000001, 'd', "PC-Card 1 INPACK" },
+{ "CPLD_PCC1_IRQ", 0x17C00058, 5, 0x00000001, 'd', "PC-Card 1 IRQ" },
+{ "CPLD_PCC1_STRESET", 0x17C00058, 6, 0x00000001, 'd', "PC-Card 1 RESET" },
+{ "CPLD_PCC1_WRPROT", 0x17C00058, 7, 0x00000001, 'd', "PC-Card 1 WRPROT" },
+
+{ "CPLD_MISC_STATUS", 0x17C0005C, 0, 0x000000ff, 'x', "CPLD Misc Status" },
+{ "CPLD_MISC_USB_D_CON", 0x17C0005C, 0, 0x00000001, 'd', "Charge status" },
+{ "CPLD_MISC_WALL_IN", 0x17C0005C, 1, 0x00000001, 'd', "Charge status" },
+{ "CPLD_MISC_CHG_STS", 0x17C0005C, 2, 0x00000001, 'd', "Charge status" },
+{ "CPLD_MISC_MMC_WPROT", 0x17C0005C, 7, 0x00000001, 'd', "MMC write protect" },
+
+{ "CPLD_VER_YEAR", 0x17C00060, 0, 0x000000ff, 'x', "CPLD Year" },
+{ "CPLD_VER_MONTH", 0x17C00064, 0, 0x000000ff, 'x', "CPLD Month" },
+{ "CPLD_VER_DAY", 0x17C00068, 0, 0x000000ff, 'x', "CPLD Day" },
+{ "CPLD_VER_REV", 0x17C0006C, 0, 0x000000ff, 'x', "CPLD Revision" },
+
+{ "CPLD_VSTAT", 0x17C0007C, 0, 0x000000ff, 'x', "CPLD Voltage Status" },
+#ifdef CONFIG_ARCH_PXA_IDP
+{ "CPLD_BSTAT_V3GOOD", 0x17C0007C, 0, 0x00000001, 'x', "v3good" },
+#endif
+{ "CPLD_BSTAT_BWE", 0x17C0007C, 1, 0x00000001, 'x', "bwe" },
+
+#endif
+
+#if defined(CONFIG_ARCH_RAMSES)
+{ "UARTA_RHR", 0x0C002E00, 0, 0xffffffff, 'x', "UART A RHR/THR" },
+{ "UARTA_IER", 0x0C002E04, 0, 0xffffffff, 'x', "UART A IER" },
+{ "UARTA_FCR", 0x0C002E08, 0, 0xffffffff, 'x', "UART A FCR/IIR" },
+{ "UARTA_LCR", 0x0C002E0C, 0, 0xffffffff, 'x', "UART A LCR" },
+{ "UARTA_MCR", 0x0C002E10, 0, 0xffffffff, 'x', "UART A MCR" },
+{ "UARTA_LSR", 0x0C002E14, 0, 0xffffffff, 'x', "UART A LSR" },
+{ "UARTA_MSR", 0x0C002E18, 0, 0xffffffff, 'x', "UART A MSR" },
+{ "UARTA_SPR", 0x0C002E1C, 0, 0xffffffff, 'x', "UART A SPR" },
+
+{ "UARTB_RHR", 0x0C002D00, 0, 0xffffffff, 'x', "UART B RHR/THR" },
+{ "UARTB_IER", 0x0C002D04, 0, 0xffffffff, 'x', "UART B IER" },
+{ "UARTB_FCR", 0x0C002D08, 0, 0xffffffff, 'x', "UART B FCR/IIR" },
+{ "UARTB_LCR", 0x0C002D0C, 0, 0xffffffff, 'x', "UART B LCR" },
+{ "UARTB_MCR", 0x0C002D10, 0, 0xffffffff, 'x', "UART B MCR" },
+{ "UARTB_LSR", 0x0C002D14, 0, 0xffffffff, 'x', "UART B LSR" },
+{ "UARTB_MSR", 0x0C002D18, 0, 0xffffffff, 'x', "UART B MSR" },
+{ "UARTB_SPR", 0x0C002D1C, 0, 0xffffffff, 'x', "UART B SPR" },
+
+{ "UARTD_RHR", 0x0C002B00, 0, 0xffffffff, 'x', "UART C RHR/THR" },
+{ "UARTD_IER", 0x0C002B04, 0, 0xffffffff, 'x', "UART C IER" },
+{ "UARTD_FCR", 0x0C002B08, 0, 0xffffffff, 'x', "UART C FCR/IIR" },
+{ "UARTD_LCR", 0x0C002B0C, 0, 0xffffffff, 'x', "UART C LCR" },
+{ "UARTD_MCR", 0x0C002B10, 0, 0xffffffff, 'x', "UART C MCR" },
+{ "UARTD_LSR", 0x0C002B14, 0, 0xffffffff, 'x', "UART C LSR" },
+{ "UARTD_MSR", 0x0C002B18, 0, 0xffffffff, 'x', "UART C MSR" },
+{ "UARTD_SPR", 0x0C002B1C, 0, 0xffffffff, 'x', "UART C SPR" },
+
+{ "UARTD_RHR", 0x0C002700, 0, 0xffffffff, 'x', "UART D RHR/THR" },
+{ "UARTD_IER", 0x0C002704, 0, 0xffffffff, 'x', "UART D IER" },
+{ "UARTD_FCR", 0x0C002708, 0, 0xffffffff, 'x', "UART D FCR/IIR" },
+{ "UARTD_LCR", 0x0C00270C, 0, 0xffffffff, 'x', "UART D LCR" },
+{ "UARTD_MCR", 0x0C002710, 0, 0xffffffff, 'x', "UART D MCR" },
+{ "UARTD_LSR", 0x0C002714, 0, 0xffffffff, 'x', "UART D LSR" },
+{ "UARTD_MSR", 0x0C002718, 0, 0xffffffff, 'x', "UART D MSR" },
+{ "UARTD_SPR", 0x0C00271C, 0, 0xffffffff, 'x', "UART D SPR" },
+
+#endif
+
+};
+
+
+
+#define MAP_SIZE 4096
+#define MAP_MASK ( MAP_SIZE - 1 )
+
+static int getmem(u32 addr)
+{
+ void *map, *regaddr;
+ u32 val;
+
+ //printf("getmem(0x%08x)\n", addr);
+
+ if (fd == -1) {
+ fd = open("/dev/mem", O_RDWR | O_SYNC);
+ if (fd<0) {
+ perror("open(\"/dev/mem\")");
+ exit(1);
+ }
+ }
+
+ map = mmap(0,
+ MAP_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ fd,
+ addr & ~MAP_MASK
+ );
+ if (map == (void*)-1 ) {
+ perror("mmap()");
+ exit(1);
+ }
+
+ regaddr = map + (addr & MAP_MASK);
+
+ val = *(u32*) regaddr;
+ munmap(0,MAP_SIZE);
+
+ return val;
+}
+
+static void putmem(u32 addr, u32 val)
+{
+ void *map, *regaddr;
+ static int fd = -1;
+
+ //printf("putmem(0x%08x, 0x%08x)\n", addr, val);
+
+ if (fd == -1) {
+ fd = open("/dev/mem", O_RDWR | O_SYNC);
+ if (fd<0) {
+ perror("open(\"/dev/mem\")");
+ exit(1);
+ }
+ }
+
+ map = mmap(0,
+ MAP_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ fd,
+ addr & ~MAP_MASK
+ );
+ if (map == (void*)-1 ) {
+ perror("mmap()");
+ exit(1);
+ }
+
+ regaddr = map + (addr & MAP_MASK);
+
+ *(u32*) regaddr = val;
+ munmap(0,MAP_SIZE);
+}
+
+static u32 lastaddr = 0;
+static u32 newaddr = 1;
+static u32 data = 0;
+static u32 shiftdata;
+
+
+static void dumpentry(int i)
+{
+ int j;
+
+ if (regs[i].addr != lastaddr) newaddr = 1;
+ if (newaddr) {
+ newaddr = 0;
+ lastaddr = regs[i].addr;
+ data = getmem(lastaddr);
+ printf("\n%s\n", regs[i].desc);
+ printf("%-24s 0x%08x ", regs[i].name, data);
+ shiftdata = data;
+ for (j=32; j>0; j--) {
+ printf("%c", shiftdata & 0x80000000 ? '1' : '0');
+ shiftdata = shiftdata << 1;
+ if (j==9 || j==17 || j==25) printf(" ");
+ }
+
+ printf("\n");
+ }
+
+ if (regs[i].shift != 0 || regs[i].mask != 0xffffffff) {
+ shiftdata = (data >> regs[i].shift) & regs[i].mask;
+ printf("%-25s ", regs[i].name);
+ switch (regs[i].type) {
+ case 'x': printf("%8x", shiftdata);
+ break;
+ case '<': printf("%8u", 1 << shiftdata);
+ break;
+ default:
+ printf("%8u", shiftdata);
+ }
+ printf(" %s\n", regs[i].desc);
+ }
+}
+
+
+static void dumpall(void)
+{
+ int i;
+ int n=sizeof(regs)/sizeof(struct reg_info);
+
+ for (i=0; i<n; i++) {
+ dumpentry(i);
+ }
+}
+
+
+static void dumpmatching(char *name)
+{
+ int i;
+ int n=sizeof(regs)/sizeof(struct reg_info);
+
+
+ for (i=0; i<n; i++) {
+ if (strstr(regs[i].name, name))
+ dumpentry(i);
+ }
+}
+
+
+static void setreg(char *name, u32 val)
+{
+ int i;
+ u32 mem;
+ int found=0;
+ int count=0;
+ int n=sizeof(regs)/sizeof(struct reg_info);
+
+
+ for (i=0; i<n; i++) {
+ if (strcmp(regs[i].name, name)==0) {
+ found = i;
+ //printf("Matched %s with %s, count=%d\n", regs[i].name, name, count);
+ count++;
+ }
+ }
+ if (count!=1) {
+ printf("No or more than one matching register found\n");
+ exit(1);
+ }
+
+ mem = getmem(regs[found].addr);
+ //printf("Old contents: 0x%08x\n", mem);
+ mem &= ~(regs[found].mask << regs[found].shift);
+ //printf("Unmasked contents: 0x%08x\n", mem);
+ val &= regs[found].mask;
+ //printf("mask: 0x%08x\n", regs[found].mask);
+ //printf("masked val: 0x%08x\n", val);
+ mem |= val << regs[found].shift;
+ //printf("Embedded value: 0x%08x\n", mem);
+ putmem(regs[found].addr, mem);
+}
+
+
+int main(int argc, char *argv[])
+{
+ char *p;
+ u32 val;
+
+ if (argc == 1) {
+ dumpall();
+ return 0;
+ }
+
+ // Uppercase first argument
+ if (argc >= 2) {
+ p = argv[1];
+ while (*p) {
+ *p = toupper(*p);
+ p++;
+ }
+ }
+
+ if (argc == 2) {
+ dumpmatching(argv[1]);
+ return 0;
+ }
+
+ if (argc == 3) {
+ sscanf(argv[2],"%i",&val);
+ setreg(argv[1], val);
+ return 0;
+ }
+
+ printf("Usage: %s - to dump all known registers\n"
+ " %s <name> - to dump named register\n"
+ " %s <name> <value> - to set named register\n",
+ argv[0], argv[0], argv[0]);
+ return 1;
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/serial.patch b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/serial.patch
new file mode 100644
index 000000000..06853851d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/serial.patch
@@ -0,0 +1,14 @@
+Index: pxaregs-1.14/pxaregs.c
+===================================================================
+--- pxaregs-1.14.orig/pxaregs.c
++++ pxaregs-1.14/pxaregs.c
+@@ -78,6 +78,9 @@ static struct reg_info regs[] = {
+ { "ISAR", 0x403016A0, 0, 0xffffffff, 'x', "I2C Slave Address Register" },
+ { "ISAR_SA", 0x403016A0, 0, 0x0000007f, 'x', "I2C Slave Address" },
+
++{ "HW_MCR", 0x41600010, 0, 0xffffffff, 'x', "HWUART Modem Control Register" },
++{ "HW_MSR", 0x41600018, 0, 0xffffffff, 'x', "HWUART Modem Status Register" },
++
+ { "PMCR", 0x40F00000, 0, 0xffffffff, 'x', "Power Manager Control Register (3-23)" },
+ { "PMCR_IDAE", 0x40F00000, 0, 0x00000001, 'd', "PM imprecise data abort abort signal" },
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/usb.patch b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/usb.patch
new file mode 100644
index 000000000..59f21fe3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs-1.14/usb.patch
@@ -0,0 +1,17 @@
+Index: pxaregs-1.14/pxaregs.c
+===================================================================
+--- pxaregs-1.14.orig/pxaregs.c
++++ pxaregs-1.14/pxaregs.c
+@@ -78,6 +78,12 @@ static struct reg_info regs[] = {
+ { "ISAR", 0x403016A0, 0, 0xffffffff, 'x', "I2C Slave Address Register" },
+ { "ISAR_SA", 0x403016A0, 0, 0x0000007f, 'x', "I2C Slave Address" },
+
++{ "UP2OCR", 0x40600020, 0, 0xffffffff, 'x', "USB Port 2 Output Control Register" },
++{ "UP2OCR_SEOS", 0x40600020, 24, 7, 'x', "USB Port 2 Single-Ended Output Select" },
++{ "UP2OCR_HXOE", 0x40600020, 17, 1, 'x', "USB Port 2 Tranceiver OE" },
++{ "UP2OCR_HXS", 0x40600020, 16, 1, 'x', "USB Port 2 Tranceiver Output Select" },
++{ "UP2OCR_IDON", 0x40600020, 10, 1, 'x', "OTG ID Read Enable" },
++
+ { "HW_MCR", 0x41600010, 0, 0xffffffff, 'x', "HWUART Modem Control Register" },
+ { "HW_MSR", 0x41600018, 0, 0xffffffff, 'x', "HWUART Modem Status Register" },
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs_1.14.bb b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs_1.14.bb
new file mode 100644
index 000000000..30c41fffb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pxaregs/pxaregs_1.14.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Tool to display and modify PXA registers at runtime"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://pxaregs.c;endline=12;md5=668d061b7637acc68cb8071c9be372e6"
+AUTHOR = "Holger Schurig <hs4233@mail.mn-solutions.de>"
+HOMEPAGE = "http://www.mn-logistik.de/unsupported/pxa250/"
+
+SRC_URI = "file://pxaregs.c \
+ file://i2c.patch \
+ file://munmap.patch \
+ file://serial.patch \
+ file://usb.patch "
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} pxaregs.c -o pxaregs ${CFLAGS} ${LDFLAGS}
+}
+
+do_install() {
+ install -d ${D}${sbindir}/
+ install -m 0755 pxaregs ${D}${sbindir}/
+}
+
+SRC_URI[md5sum] = "a43baa88842cd5926dbffb6fb87624f6"
+SRC_URI[sha256sum] = "f339b91cd8ab348052c36b36d20033e4bffc3666bc836ff72d5704f025e1c057"
diff --git a/meta-openembedded/meta-oe/recipes-support/raptor2/files/0001-configure.ac-do-additional-checks-on-libxml2-also-wh.patch b/meta-openembedded/meta-oe/recipes-support/raptor2/files/0001-configure.ac-do-additional-checks-on-libxml2-also-wh.patch
new file mode 100644
index 000000000..7faeb130a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/raptor2/files/0001-configure.ac-do-additional-checks-on-libxml2-also-wh.patch
@@ -0,0 +1,34 @@
+From 3f97aac5a1f43ef57b02fb9ccdcadd41a6b69fa9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 27 Oct 2015 10:21:24 +0100
+Subject: [PATCH] configure.ac: do additional checks on libxml2 also when
+ detected by pkg-config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Applied [1]
+
+[1] https://github.com/dajobe/raptor/pull/33
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 10ff870..35fa08e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -601,7 +601,7 @@ have_libxml=0
+ need_libxml=0
+
+ oCPPFLAGS="$CPPFLAGS"
+-if test "X$XML_CONFIG" != X; then
++if test "X$libxml_source" != X; then
+ CPPFLAGS="$LIBXML_CFLAGS $CPPFLAGS"
+ LIBS="$LIBS $LIBXML_LIBS"
+ AC_CHECK_FUNC(xmlCreatePushParserCtxt, have_xmlCreatePushParserCtxt=yes, have_xmlCreatePushParserCtxt=no)
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/raptor2/raptor2_2.0.15.bb b/meta-openembedded/meta-oe/recipes-support/raptor2/raptor2_2.0.15.bb
new file mode 100644
index 000000000..dd00c14f7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/raptor2/raptor2_2.0.15.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Library for parsing and serializing RDF syntaxes"
+LICENSE = "GPLv2 | LGPLv2.1 | Apache-2.0"
+LIC_FILES_CHKSUM = " \
+ file://LICENSE.txt;md5=b840e5ae3aeb897f45b473341348cd9c \
+ file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://LICENSE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57 \
+"
+
+DEPENDS = "libxml2 libxslt curl yajl"
+
+SRC_URI = " \
+ http://download.librdf.org/source/${BPN}-${PV}.tar.gz \
+ file://0001-configure.ac-do-additional-checks-on-libxml2-also-wh.patch \
+"
+SRC_URI[md5sum] = "a39f6c07ddb20d7dd2ff1f95fa21e2cd"
+SRC_URI[sha256sum] = "ada7f0ba54787b33485d090d3d2680533520cd4426d2f7fb4782dd4a6a1480ed"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " \
+ --without-xml2-config \
+ --without-curl-config \
+ --without-xslt-config \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/rdfind/files/reproducible_build.patch b/meta-openembedded/meta-oe/recipes-support/rdfind/files/reproducible_build.patch
new file mode 100644
index 000000000..36728a788
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/rdfind/files/reproducible_build.patch
@@ -0,0 +1,46 @@
+Description: sort the filelist when it is complete to get reproducible behaviour
+Author: Reiner Herrmann <reiner@reiner-h.de>
+Bug-Debian: https://bugs.debian.org/795790
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+
+Index: rdfind-1.3.4/Fileinfo.hh
+===================================================================
+--- rdfind-1.3.4.orig/Fileinfo.hh
++++ rdfind-1.3.4/Fileinfo.hh
+@@ -189,6 +189,10 @@ public:
+ static bool compareondepth(const Fileinfo &a, const Fileinfo &b)
+ {return (a.depth() < b.depth());}
+
++ //returns true if a has lower filename than b)
++ static bool compareonfilename(const Fileinfo &a, const Fileinfo &b)
++ {return (a.name().compare(b.name()) < 0);}
++
+ //fills with bytes from the file. if lasttype is supplied,
+ //it is used to see if the file needs to be read again - useful if
+ //file is shorter than the length of the bytes field.
+@@ -235,6 +239,10 @@ public:
+ static bool equaldepth(const Fileinfo &a, const Fileinfo &b)
+ {return (a.depth()==b.depth());}
+
++ //returns true if filenames are equal
++ static bool equalfilename(const Fileinfo &a, const Fileinfo &b)
++ {return (a.name()==b.name());}
++
+ //returns true if file is a regular file. call readfileinfo first!
+ bool isRegularFile() {return m_info.is_file;}
+
+Index: rdfind-1.3.4/rdfind.cc
+===================================================================
+--- rdfind-1.3.4.orig/rdfind.cc
++++ rdfind-1.3.4/rdfind.cc
+@@ -349,6 +349,7 @@ int main(int narg, char *argv[])
+ cout<<dryruntext<<"Now have "<<filelist1.size()<<" files in total."<<endl;
+
+
++ gswd.sortlist(&Fileinfo::compareonfilename,&Fileinfo::equalfilename);
+
+ //mark files with a unique number
+ gswd.markitems();
diff --git a/meta-openembedded/meta-oe/recipes-support/rdfind/rdfind_1.3.4.bb b/meta-openembedded/meta-oe/recipes-support/rdfind/rdfind_1.3.4.bb
new file mode 100644
index 000000000..4d984ee05
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/rdfind/rdfind_1.3.4.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Rdfind is a program that finds duplicate files"
+HOMEPAGE = "https://rdfind.pauldreik.se/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
+
+DEPENDS = "nettle"
+
+SRC_URI = "https://rdfind.pauldreik.se/${BP}.tar.gz \
+ file://reproducible_build.patch \
+"
+
+SRC_URI[md5sum] = "97c0cb35933588413583c61d3b5f9adf"
+SRC_URI[sha256sum] = "a5f0b3f72093d927b93898c993479b35682cccb47f7393fb72bd4803212fcc7d"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch
new file mode 100644
index 000000000..440800235
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch
@@ -0,0 +1,28 @@
+From eb7590cc2cdd5c35403af4567d8524e017010f1c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sat, 11 May 2013 07:58:17 +0200
+Subject: [PATCH] configure: remove check for x86.h, we don't build get-edid
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-status: Inappropriate [OE specific]
+---
+ configure.in | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index ac85a21..f53e904 100644
+--- a/configure.in
++++ b/configure.in
+@@ -8,8 +8,6 @@ dnl Checks for programs
+
+ AC_PROG_CC
+
+-AC_CHECK_HEADER([libx86.h], [], [AC_MSG_ERROR([libx86.h not found])])
+-
+ dnl Simple, huh?
+
+ AC_OUTPUT([Makefile])
+--
+1.8.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb
new file mode 100644
index 000000000..b002906fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "read-edid elucidates various very useful informations from a conforming PnP monitor"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d0bf70fa1ef81fe4741ec0e6231dadfd"
+
+SRC_URI = "http://polypux.org/projects/read-edid/read-edid-${PV}.tar.gz \
+ file://0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch"
+
+SRC_URI[md5sum] = "586e7fa1167773b27f4e505edc93274b"
+SRC_URI[sha256sum] = "246ec14ec509e09ac26fe6862b120481b2cc881e2f142ba40886d6eec15e77e8"
+
+inherit autotools
+
+do_compile() {
+ oe_runmake parse-edid
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 parse-edid ${D}${bindir}
+}
+
+PACKAGES =+ "parse-edid"
+FILES_parse-edid = "${bindir}/parse-edid"
diff --git a/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot/configure-fix-cmd_rsync.patch b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot/configure-fix-cmd_rsync.patch
new file mode 100644
index 000000000..6466df4e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot/configure-fix-cmd_rsync.patch
@@ -0,0 +1,44 @@
+From 26ad431e19788898fb4ed19ff91392e8b20f1bab Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Thu, 16 Oct 2014 04:06:55 -0400
+Subject: [PATCH] fix cmd_rsync
+
+Don't break configure if rsync is not installed on host.
+
+rsync is a runtime dependency and this change is only used for
+generating rsnapshot.conf.default. It allows cmd_rsync to use
+default path if options --without-rsync is specfied.
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.ac | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bc9df9e..2a33d29 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,7 +55,7 @@ AC_ARG_WITH(rsync,
+ AC_MSG_ERROR(rsync not found)
+ fi
+ else
+- AC_MSG_ERROR(rsync is required)
++ RSYNC=no
+ fi
+ ]
+ )
+@@ -67,7 +67,8 @@ if test "$RSYNC" = ""; then
+ fi
+ dnl bail out if we can't find it
+ if test "$RSYNC" = "no"; then
+- AC_MSG_ERROR(rsync is required)
++ RSYNC=${bindir}/rsync
++ AC_SUBST(CMD_RSYNC, "cmd_rsync $RSYNC")
+ fi
+
+
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb
new file mode 100644
index 000000000..aefe3627e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb
@@ -0,0 +1,53 @@
+SUMMARY = "A filesystem snapshot utility based on rsync"
+HOMEPAGE = "http://www.rsnapshot.org"
+BUGTRACKER = "https://sourceforge.net/projects/rsnapshot/"
+SECTION = "console/network"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a"
+
+RDEPENDS_${PN} = "rsync \
+ perl \
+ perl-module-dirhandle \
+ perl-module-cwd \
+ perl-module-getopt-std \
+ perl-module-file-path \
+ perl-module-file-stat \
+ perl-module-posix \
+ perl-module-fcntl \
+ perl-module-io-file \
+ perl-module-constant \
+ perl-module-overloading \
+ "
+
+SRCREV = "27209563f924a22f510698ea225f53ea52f07cb4"
+PV = "1.4.2+git${SRCPV}"
+
+SRC_URI = "git://github.com/DrHyde/${BPN};branch=master;protocol=git \
+ file://configure-fix-cmd_rsync.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+# Fix rsnapshot.conf.default:
+# don't inject the host path into target configs.
+EXTRA_OECONF += "--without-cp \
+ --without-rm \
+ --without-du \
+ --without-ssh \
+ --without-logger \
+ --without-rsync \
+ ac_cv_path_PERL=${bindir}/perl \
+ ac_cv_path_MOUNT=${base_bindir}/mount \
+ ac_cv_path_UMOUNT=${base_bindir}/umount \
+ "
+
+# Create 't/include.ac' before starting the autoreconf to fix configure
+# error: configure.ac:302: file 't/include.ac' does not exist
+do_configure_prepend(){
+ saved_dir=`pwd`
+ cd ${S}; ./autogen.sh
+ cd ${saved_dir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb
new file mode 100644
index 000000000..255754d5d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A user-space tool to show and modify the state of GPIOs on the S3c24xx platform"
+SECTION = "console/utils"
+AUTHOR = "Werner Almesberger <werner@openmoko.org>"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://gpio.c;endline=12;md5=cfb91c686857b2e60852b4925d90a3e1"
+SRCREV = "4949"
+PV = "1.0+svnr${SRCPV}"
+PR = "r2"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;protocol=http"
+S = "${WORKDIR}/gpio"
+
+CLEANBROKEN = "1"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -o ${PN} gpio.c
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${PN} ${D}${sbindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb
new file mode 100644
index 000000000..976a4f15e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A user-space tool to show and modify the state of GPIOs on the S3c64xx platform"
+SECTION = "console/utils"
+AUTHOR = "Werner Almesberger <werner@openmoko.org>"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://gpio-s3c6410.c;endline=12;md5=060cda1be945ad9194593f11d56d55c7"
+SRCREV = "4949"
+PV = "1.0+svnr${SRCPV}"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;protocol=http"
+S = "${WORKDIR}/gpio"
+
+CLEANBROKEN = "1"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -o ${PN} gpio-s3c6410.c
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${PN} ${D}${sbindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb
new file mode 100644
index 000000000..2d5935dd3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb
@@ -0,0 +1,32 @@
+SUMMARY = "JTAG utility to interface w/ a S3C2410 device"
+SECTION = "devel"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://parport.c;endline=19;md5=b5681091b0fd8c5f7068835c441bf0c8"
+SRCREV = "4268"
+PV = "0.1+svnr${SRCPV}"
+PR = "r1"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=sjf2410-linux;protocol=http"
+S = "${WORKDIR}/sjf2410-linux"
+
+inherit native deploy
+do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_TOOLS}"
+
+CFLAGS += "-DLINUX_PPDEV"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 0755 sjf2410 ${D}/${bindir}
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_TOOLS}
+ install -m 0755 sjf2410 ${DEPLOY_DIR_TOOLS}/sjf2410-${PV}
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-openembedded/meta-oe/recipes-support/satyr/files/0001-do-not-support-python2.patch b/meta-openembedded/meta-oe/recipes-support/satyr/files/0001-do-not-support-python2.patch
new file mode 100644
index 000000000..9e95a3f9d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/satyr/files/0001-do-not-support-python2.patch
@@ -0,0 +1,84 @@
+From 206f334d62da17093e784094c9d9e80c853f704f Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 12 May 2017 03:03:46 -0400
+Subject: [PATCH] do not support python2
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 16 ----------------
+ python/Makefile.am | 24 ------------------------
+ 2 files changed, 40 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 200a7cc..8431c51 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -22,22 +22,6 @@ AM_MISSING_PROG([AUTOM4TE], [autom4te])
+ # Needed by tests/atlocal.in.
+ AC_SUBST([O0CFLAGS], [`echo $CFLAGS | sed 's/-O[[0-9]] *//'`])
+
+-AM_PATH_PYTHON
+-AM_CONDITIONAL([HAVE_PYTHON], test -n "$PYTHON")
+-[if test -z "$PYTHON"; then]
+- [echo "The python interpreter was not found in the search path. The Python language bindings"]
+- [echo "will not be built. If you want to build the Python language bindings, please ensure"]
+- [echo "that python is installed and its directory is included in the search path."]
+- [echo "Then run configure again before attempting to build Satyr."]
+-[fi]
+-
+-# Just PKG_CHECK_MODULES([PYTHON], [python]) works only with python2.7+
+-# Below, if python is not found, we set up for python2.6 w/o checking:
+-PKG_CHECK_MODULES([PYTHON], [python2],,[
+- PYTHON_LIBS='-L/usr/lib64 -lpython2.6'
+- PYTHON_CFLAGS='-I/usr/include/python2.6'
+-])
+-
+ AC_ARG_ENABLE([python-manpage],
+ [AS_HELP_STRING([--disable-python-manpage],
+ [Disable python bindings manpage build])],
+diff --git a/python/Makefile.am b/python/Makefile.am
+index 36fc2e9..0b73f66 100644
+--- a/python/Makefile.am
++++ b/python/Makefile.am
+@@ -1,12 +1,5 @@
+ SUBDIRS = . doc
+
+-py2satyrdir = $(pyexecdir)/satyr
+-
+-py2satyr_PYTHON = \
+- __init__.py
+-
+-py2satyr_LTLIBRARIES = _satyr.la
+-
+ PYEXTFILES = \
+ py_cluster.h \
+ py_cluster.c \
+@@ -75,23 +68,6 @@ PYEXTLDFLAGS = \
+ -module \
+ -avoid-version
+
+-_satyr_la_SOURCES = $(PYEXTFILES)
+-_satyr_la_CPPFLAGS = \
+- $(PYEXTCPPFLAGS) \
+- $(PYTHON_CFLAGS)
+-_satyr_la_LDFLAGS = \
+- $(PYEXTLDFLAGS) \
+- -export-symbols-regex init_satyr
+-
+-# Depending on the configure option, we either link libsatyr.so dynamically (as
+-# is usual), or directly include its object files (by including the
+-# convenience library).
+-if ENABLE_STATIC_PYTHON_MODULE
+-_satyr_la_LIBADD = ../lib/libsatyr_conv.la
+-else
+-_satyr_la_LIBADD = ../lib/libsatyr.la
+-endif
+-
+ if WITH_PYTHON3
+ py3satyrdir = $(py3execdir)/satyr
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/satyr/files/0002-fix-compile-failure-against-musl-C-library.patch b/meta-openembedded/meta-oe/recipes-support/satyr/files/0002-fix-compile-failure-against-musl-C-library.patch
new file mode 100644
index 000000000..5827eb4d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/satyr/files/0002-fix-compile-failure-against-musl-C-library.patch
@@ -0,0 +1,28 @@
+From 23f827ea94284656972652f61f2c6aad96092cc8 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 23:00:29 -0400
+Subject: [PATCH] fix compile failure against musl C library
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ lib/rpm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rpm.c b/lib/rpm.c
+index 920e145..58140bf 100644
+--- a/lib/rpm.c
++++ b/lib/rpm.c
+@@ -188,7 +188,7 @@ sr_rpm_package_sort(struct sr_rpm_package *packages)
+ }
+
+ /* Sort the array. */
+- qsort(array, count, sizeof(struct sr_rpm_package*), (comparison_fn_t)cmp_nevra_qsort_wrapper);
++ qsort(array, count, sizeof(struct sr_rpm_package*), cmp_nevra_qsort_wrapper);
+
+ /* Create a linked list from the sorted array. */
+ for (size_t loop = 0; loop < count; ++loop)
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.23.bb b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.23.bb
new file mode 100644
index 000000000..f795c3717
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.23.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "Satyr is a collection of low-level algorithms for program \
+failure processing, analysis, and reporting supporting kernel space, user \
+space, Python, and Java programs"
+
+HOMEPAGE = "https://github.com/abrt/satyr"
+LICENSE = "GPLv2"
+
+inherit autotools-brokensep python3native pkgconfig
+
+SRC_URI = "git://github.com/abrt/satyr.git \
+ file://0001-do-not-support-python2.patch \
+ file://0002-fix-compile-failure-against-musl-C-library.patch \
+"
+SRCREV = "4742fd4857c446b96f712d52e2e4cd0b6cfe7398"
+S = "${WORKDIR}/git"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS += " \
+ gdb \
+"
+
+PACKAGES += "python3-${PN}"
+FILES_python3-${PN} = "${PYTHON_SITEPACKAGES_DIR}/${BPN}"
+
+PACKAGECONFIG ??= "python3 rpm"
+PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
+PACKAGECONFIG[pythonmanpage] = "--enable-python-manpage, --disable-python-manpage"
+PACKAGECONFIG[rpm] = "--with-rpm, --without-rpm, rpm"
+
+do_configure_prepend() {
+ ${S}/gen-version
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch b/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch
new file mode 100644
index 000000000..3fd85d9e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch
@@ -0,0 +1,31 @@
+From 15f0722bc5481cca5ba92adceab8c769112e4ea6 Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Mon, 24 Oct 2016 07:28:13 +0000
+Subject: [PATCH] sdparm: make sysroot work
+
+Upstream-Status: Pending
+
+Add = before the included dir to make sysroot work
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 61dd9f8..42c911f 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -41,7 +41,7 @@ sglib_SOURCES = ../lib/sg_lib.c \
+ ../lib/sg_pt_common.c
+
+ if HAVE_SGUTILS
+-INCLUDES = -I/scsi
++INCLUDES = -I=@includedir@/scsi
+ sdparm_LDADD = @GETOPT_O_FILES@ @os_libs@ @SGUTILS_LIBS@
+ sdparm_DEPENDENCIES = @GETOPT_O_FILES@
+ else
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb b/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb
new file mode 100644
index 000000000..3299a77aa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb
@@ -0,0 +1,24 @@
+SUMMARY = "fetch and change SCSI mode pages"
+DESCRIPTION = "The sdparm utility accesses and optionally modifies \
+SCSI devices' mode page and inquiry data."
+HOMEPAGE = "http://sg.danny.cz/sg/sdparm.html"
+SECTION = "console/utils"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ecab6c36b7ba82c675581dd0afde36f7 \
+ file://lib/BSD_LICENSE;md5=1d52f4a66f1e0ed96776bf354ab7a2ed"
+DEPENDS="sg3-utils"
+SRC_URI = "http://sg.danny.cz/sg/p/${BPN}-${PV}.tgz \
+ file://make-sysroot-work.patch \
+ "
+MIRRORS += "http://sg.danny.cz/sg/p https://fossies.org/linux/misc"
+
+PACKAGES =+ "${PN}-scripts"
+RDEPENDS_${PN}-scripts += "bash ${PN}"
+
+SRC_URI[md5sum] = "bdae64375376ce8fe4bf9521c1db858f"
+SRC_URI[sha256sum] = "1ea1ed1bb1ee2aef62392618fa42da9ed027d5e655f174525c39235778292ab3"
+
+inherit autotools
+
+# Put the bash scripts to ${PN}-scripts
+FILES_${PN}-scripts = "${bindir}/sas_disk_blink ${bindir}/scsi_ch_swp"
diff --git a/meta-openembedded/meta-oe/recipes-support/serial-utils/pty-forward-native.bb b/meta-openembedded/meta-oe/recipes-support/serial-utils/pty-forward-native.bb
new file mode 100644
index 000000000..7f59b3eca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/serial-utils/pty-forward-native.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Receive a forwarded serial from serial-forward and provide a PTY"
+AUTHOR = "Holger 'Zecke' Freyther"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07"
+SECTION = "console/network"
+SRCREV = "00dbec2636ae0385ad028587e20e446272ff97ec"
+PV = "1.1+gitr${SRCPV}"
+
+SRC_URI = "git://github.com/freesmartphone/cornucopia.git;protocol=https"
+S = "${WORKDIR}/git/tools/serial_forward"
+
+inherit autotools native
+
+do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 ${B}/src/pty_forward ${DEPLOY_DIR_IMAGE}/pty-forward
+}
+
+addtask deploy before do_package after do_install
diff --git a/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward/0001-serial_forward-Disable-default-static-linking.patch b/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward/0001-serial_forward-Disable-default-static-linking.patch
new file mode 100644
index 000000000..7dcc67d11
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward/0001-serial_forward-Disable-default-static-linking.patch
@@ -0,0 +1,29 @@
+From a0d815ad9918aba977aed9275b3bf3d750a1709b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 19:24:40 -0700
+Subject: [PATCH] serial_forward: Disable default static linking
+
+This does not work with ssp turned on with hardening flags on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/serial_forward/src/Makefile.am | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/tools/serial_forward/src/Makefile.am b/tools/serial_forward/src/Makefile.am
+index 3f598286..bcac9bc9 100644
+--- a/tools/serial_forward/src/Makefile.am
++++ b/tools/serial_forward/src/Makefile.am
+@@ -20,9 +20,6 @@ serial_forward_SOURCES = \
+ cy8mrln.h \
+ $(NULL)
+
+-serial_forward_LDFLAGS = \
+- -all-static
+-
+ pty_forward_SOURCES = \
+ pty_forward.c \
+ $(NULL)
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward_git.bb b/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward_git.bb
new file mode 100644
index 000000000..0ef829856
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/serial-utils/serial-forward_git.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Forward a serial using TCP/IP"
+AUTHOR = "Holger 'Zecke' Freyther'"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07"
+SECTION = "console/devel"
+SRCREV = "07c6fdede0870edc37a8d51d033b6e7e29aa7c91"
+PV = "1.1+gitr${SRCPV}"
+
+SRC_URI = "git://github.com/freesmartphone/cornucopia.git \
+ file://0001-serial_forward-Disable-default-static-linking.patch;striplevel=3 \
+ "
+S = "${WORKDIR}/git/tools/serial_forward"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb
new file mode 100644
index 000000000..c7de05740
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Utilities for working with generic SCSI devices"
+
+DESCRIPTION = "This package contains low level utilities for devices that use the SCSI command set"
+
+HOMEPAGE = "http://sg.danny.cz/sg/sg3_utils.html"
+SECTION = "console/admin"
+
+LICENSE = "GPLv2+ & BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f90da7fc52172599dbf082d7620f18ca"
+
+SRC_URI = "http://sg.danny.cz/sg/p/sg3_utils-${PV}.tgz"
+MIRRORS += "http://sg.danny.cz/sg/p https://fossies.org/linux/misc"
+
+SRC_URI[md5sum] = "28080de5bf2222f8b55a29093bec8aea"
+SRC_URI[sha256sum] = "1dcb7a0309bd0ba3d4a83acb526973b80106ee26cd9f7398186cd3f0633c9ef3"
+
+inherit autotools-brokensep
+
+S = "${WORKDIR}/sg3_utils-${PV}"
+
+RDEPENDS_${PN} += "bash"
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-Fix-build-with-clang.patch b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-Fix-build-with-clang.patch
new file mode 100644
index 000000000..7b627c16d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-Fix-build-with-clang.patch
@@ -0,0 +1,29 @@
+From fa8371d348f6a8b0799b2e6c38247dd1399d85e3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 8 Apr 2017 08:49:48 -0700
+Subject: [PATCH] Fix build with clang
+
+ATTRIBUTE_FORMAT_ARG macro gets computed to be empty with clang
+whereas it does support format attribute, we hard code it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/shar-opts.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shar-opts.h b/src/shar-opts.h
+index a287046..172676f 100644
+--- a/src/shar-opts.h
++++ b/src/shar-opts.h
+@@ -377,7 +377,7 @@ extern tOptions sharOptions;
+ # define ATTRIBUTE_FORMAT_ARG(_a)
+ # endif
+
+-static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1);
++static inline char* aoGetsText(char const* pz) __attribute__ ((format_arg(1)));
+ static inline char* aoGetsText(char const* pz) {
+ if (pz == NULL) return NULL;
+ return (char*)gettext(pz);
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
new file mode 100644
index 000000000..812fee955
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
@@ -0,0 +1,21 @@
+SUMMARY = "This is the set of GNU shar utilities."
+HOMEPAGE = "http://www.gnu.org/software/sharutils/"
+SECTION = "console/utils"
+LICENSE="GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit gettext autotools
+
+SRC_URI = "ftp://ftp.gnu.org/gnu/${BPN}/${BP}.tar.gz \
+ file://0001-Fix-build-with-clang.patch \
+"
+SRC_URI[md5sum] = "32a51b23e25ad5e6af4b89f228be1800"
+SRC_URI[sha256sum] = "ee336e68549664e7a19b117adf02edfdeac6307f22e5ba78baca457116914637"
+
+do_install_append() {
+ if [ -e ${D}${libdir}/charset.alias ]
+ then
+ rm -rf ${D}${libdir}/charset.alias
+ rmdir --ignore-fail-on-non-empty ${D}${libdir}
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb b/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb
new file mode 100644
index 000000000..519020f3b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Report application memory usage in a meaningful way"
+DESCRIPTION = "smem is a tool that can give numerous reports on memory usage on Linux \
+systems. Unlike existing tools, smem can report proportional set size (PSS), \
+which is a more meaningful representation of the amount of memory used by \
+libraries and applications in a virtual memory system."
+HOMEPAGE = "http://www.selenic.com/smem/"
+SECTION = "Applications/System"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://www.selenic.com/${BPN}/download/${BP}.tar.gz"
+SRC_URI[md5sum] = "fe79435c3930389bfdb560255c802162"
+SRC_URI[sha256sum] = "2ea9f878f4cf3c276774c3f7e2a41977a1f2d64f98d2dcb6a15f1f3d84df61ec"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} smemcap.c -o smemcap
+}
+
+do_install() {
+ install -d ${D}/${bindir}/
+ install -d ${D}/${mandir}/man8
+ install -m 0755 ${S}/smem ${D}${bindir}/
+ install -m 0755 ${S}/smemcap ${D}${bindir}/
+ install -m 0644 ${S}/smem.8 ${D}/${mandir}/man8/
+}
+RDEPENDS_${PN} += "python-textutils python-compression python-shell python-codecs"
diff --git a/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb b/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb
new file mode 100644
index 000000000..3f6cdc63d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "This package contains some simple command line tools to help using Linux spidev devices"
+HOMEPAGE = "https://github.com/cpb-/spi-tools"
+AUTHOR = "Christophe BLAESS"
+LICENSE="GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c16666ae6c159876a0ba63099614381"
+
+PR = "r0"
+
+BPV = "0.8.1"
+PV = "${BPV}"
+SRCREV = "318bcae5249722873bf58b27afdd20473c7047cc"
+
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://github.com/cpb-/spi-tools.git;protocol=git"
+
+
+inherit autotools
+
diff --git a/meta-openembedded/meta-oe/recipes-support/srecord/files/add-option-to-remove-docs.patch b/meta-openembedded/meta-oe/recipes-support/srecord/files/add-option-to-remove-docs.patch
new file mode 100644
index 000000000..9b2bd9979
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/srecord/files/add-option-to-remove-docs.patch
@@ -0,0 +1,57 @@
+Add option to build this utility without a documentation.
+
+For full documentation building are necessary utilities like
+groff and ps2pdf. Full documentation can takes a lot of space.
+So it can be disabled by overloading makefile variable WITHOUT_DOC.
+
+Upstream-Status: Inappropriate [Other]
+Workaround specific to our build system.
+
+Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
+
+diff --git a/Makefile.in b/Makefile.in
+index 9bdd8f1..a2b5494 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -141,6 +141,14 @@ GROFF = @GROFF@
+ #
+ SOELIM = @SOELIM@
+
++# Option to build this utility without building and installing the documentation.
++WITHOUT_DOC ?= 0
++ifeq ($(WITHOUT_DOC),0)
++ BUILD_DOC = all-doc
++ INST_DOC = install-doc
++ CLR_DOC = clean-doc
++endif
++
+ # ---------------------------------------------------------
+ # You should not need to change anything below this line.
+
+@@ -4090,7 +4098,7 @@ bin/test_url_decode: $(test_url_decode_obj) .bin srecord/libsrecord.la
+ $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ \
+ $(test_url_decode_obj) srecord/libsrecord.la $(LDFLAGS) $(LIBS)
+
+-all: all-bin all-doc
++all: all-bin $(BUILD_DOC)
+
+ all-bin: bin/srec_cat bin/srec_cmp bin/srec_info bin/test_arglex_ambiguous \
+ bin/test_crc16 bin/test_fletcher16 bin/test_gecos \
+@@ -4156,7 +4164,7 @@ test_files = t0001a t0002a t0003a t0004a t0005a t0006a t0007a t0008a t0009a \
+ sure: $(test_files)
+ @echo Passed All Tests
+
+-clean: clean-bin clean-doc clean-misc clean-obj
++clean: clean-bin $(CLR_DOC) clean-misc clean-obj
+
+ clean-bin:
+ rm -f bin/srec_cat bin/srec_cmp bin/srec_info bin/test_arglex_ambiguous
+@@ -4443,7 +4451,7 @@ distclean-directories:
+ rm -rf test/fletcher16/.libs test/gecos/.libs test/hyphen/.libs
+ rm -rf test/url_decode/.libs
+
+-install: install-bin install-doc install-include install-libdir install-man
++install: install-bin $(INST_DOC) install-include install-libdir install-man
+
+ install-bin: $(bindir)/srec_cat $(bindir)/srec_cmp $(bindir)/srec_info
+
diff --git a/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb b/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb
new file mode 100644
index 000000000..fe1af476f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb
@@ -0,0 +1,23 @@
+SUMMARY = "A collection of powerful tools for manipulating EPROM load files."
+SECTION = "devel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8dfcbf2f0a144b97f0931b6394debea7"
+
+SRC_URI = " \
+ http://srecord.sourceforge.net/srecord-${PV}.tar.gz \
+ file://add-option-to-remove-docs.patch \
+"
+
+SRC_URI[md5sum] = "4de4a7497472d7972645c2af91313769"
+SRC_URI[sha256sum] = "49a4418733c508c03ad79a29e95acec9a2fbc4c7306131d2a8f5ef32012e67e2"
+
+DEPENDS = "libtool-native boost groff-native"
+
+inherit autotools-brokensep
+
+EXTRA_OECONF = "--without-gcrypt LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool"
+
+# Set variable WITHOUT_DOC=0 to enable documentation generation
+EXTRA_OEMAKE = "WITHOUT_DOC=1"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch
new file mode 100644
index 000000000..ef6ae00e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch
@@ -0,0 +1,872 @@
+From 3100e23c50e38bff0c2ec77bc30049c113c29414 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 20:44:31 -0700
+Subject: [PATCH 1/6] Use pragma once unconditionally
+
+in OE we do not worry about supporting
+gcc 3.4 anyway
+
+Upstream-Status: Inappropriate[Bumps required gcc to be > 3.4]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/efi/efi.h | 2 --
+ lib/engine/ahci.h | 2 --
+ lib/engine/ahci_cdrom.h | 2 --
+ lib/engine/ahci_disk.h | 2 --
+ lib/engine/ahci_multiplier.h | 2 --
+ lib/engine/ahci_multiplier_phy.h | 2 --
+ lib/engine/ahci_multiplier_port.h | 2 --
+ lib/engine/ahci_phy.h | 2 --
+ lib/engine/ahci_port.h | 2 --
+ lib/engine/ahci_raid_info.h | 2 --
+ lib/engine/ahci_tape.h | 2 --
+ lib/engine/array.h | 2 --
+ lib/engine/block_device.h | 2 --
+ lib/engine/cache.h | 2 --
+ lib/engine/container.h | 2 --
+ lib/engine/context_manager.h | 2 --
+ lib/engine/controller.h | 2 --
+ lib/engine/enclosure.h | 2 --
+ lib/engine/end_device.h | 2 --
+ lib/engine/event.h | 2 --
+ lib/engine/event_manager.h | 2 --
+ lib/engine/exception.h | 2 --
+ lib/engine/filesystem.h | 2 --
+ lib/engine/isci.h | 2 --
+ lib/engine/isci_cdrom.h | 2 --
+ lib/engine/isci_disk.h | 2 --
+ lib/engine/isci_expander.h | 2 --
+ lib/engine/isci_expander_phy.h | 2 --
+ lib/engine/isci_expander_port.h | 2 --
+ lib/engine/isci_phy.h | 2 --
+ lib/engine/isci_port.h | 2 --
+ lib/engine/isci_raid_info.h | 2 --
+ lib/engine/isci_tape.h | 2 --
+ lib/engine/list.h | 2 --
+ lib/engine/mdadm_config.h | 2 --
+ lib/engine/multimedia_device.h | 2 --
+ lib/engine/nondisk_device.h | 2 --
+ lib/engine/object.h | 2 --
+ lib/engine/pci_header.h | 2 --
+ lib/engine/phy.h | 2 --
+ lib/engine/port.h | 2 --
+ lib/engine/raid_device.h | 2 --
+ lib/engine/raid_info.h | 2 --
+ lib/engine/remote_port.h | 2 --
+ lib/engine/routing_device.h | 2 --
+ lib/engine/session.h | 2 --
+ lib/engine/session_manager.h | 2 --
+ lib/engine/storage_device.h | 2 --
+ lib/engine/stream_device.h | 2 --
+ lib/engine/string.h | 2 --
+ lib/engine/unique_id_manager.h | 2 --
+ lib/engine/utils.h | 2 --
+ lib/engine/volume.h | 2 --
+ lib/log/log.h | 2 --
+ lib/mpb/machine_bytes.h | 2 --
+ lib/mpb/mpb.h | 2 --
+ lib/orom/orom.h | 2 --
+ 57 files changed, 114 deletions(-)
+
+diff --git a/lib/efi/efi.h b/lib/efi/efi.h
+index 9e7e41b..804e567 100644
+--- a/lib/efi/efi.h
++++ b/lib/efi/efi.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __EFI_H__INCLUDED__
+ #define __EFI_H__INCLUDED__
+diff --git a/lib/engine/ahci.h b/lib/engine/ahci.h
+index e883d1a..80a9699 100644
+--- a/lib/engine/ahci.h
++++ b/lib/engine/ahci.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_H__INCLUDED__
+ #define __AHCI_H__INCLUDED__
+diff --git a/lib/engine/ahci_cdrom.h b/lib/engine/ahci_cdrom.h
+index 442f301..d8ca042 100644
+--- a/lib/engine/ahci_cdrom.h
++++ b/lib/engine/ahci_cdrom.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_CDROM_H__INCLUDED__
+ #define __AHCI_CDROM_H__INCLUDED__
+diff --git a/lib/engine/ahci_disk.h b/lib/engine/ahci_disk.h
+index 7892a53..1bad9ad 100644
+--- a/lib/engine/ahci_disk.h
++++ b/lib/engine/ahci_disk.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_DISK_H__INCLUDED__
+ #define __AHCI_DISK_H__INCLUDED__
+diff --git a/lib/engine/ahci_multiplier.h b/lib/engine/ahci_multiplier.h
+index d63e9bc..1029af2 100644
+--- a/lib/engine/ahci_multiplier.h
++++ b/lib/engine/ahci_multiplier.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_MULTIPLIER_H__INCLUDED__
+ #define __AHCI_MULTIPLIER_H__INCLUDED__
+diff --git a/lib/engine/ahci_multiplier_phy.h b/lib/engine/ahci_multiplier_phy.h
+index 58ecebc..2132c23 100644
+--- a/lib/engine/ahci_multiplier_phy.h
++++ b/lib/engine/ahci_multiplier_phy.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_MULTIPLIER_PHY_H__INCLUDED__
+ #define __AHCI_MULTIPLIER_PHY_H__INCLUDED__
+diff --git a/lib/engine/ahci_multiplier_port.h b/lib/engine/ahci_multiplier_port.h
+index 5ff4cf7..2402473 100644
+--- a/lib/engine/ahci_multiplier_port.h
++++ b/lib/engine/ahci_multiplier_port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_MULTIPLIER_PORT_H__INCLUDED__
+ #define __AHCI_MULTIPLIER_PORT_H__INCLUDED__
+diff --git a/lib/engine/ahci_phy.h b/lib/engine/ahci_phy.h
+index e2254e7..a44dae0 100644
+--- a/lib/engine/ahci_phy.h
++++ b/lib/engine/ahci_phy.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_PHY_H__INCLUDED__
+ #define __AHCI_PHY_H__INCLUDED__
+diff --git a/lib/engine/ahci_port.h b/lib/engine/ahci_port.h
+index f9e3308..03c109b 100644
+--- a/lib/engine/ahci_port.h
++++ b/lib/engine/ahci_port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_PORT_H__INCLUDED__
+ #define __AHCI_PORT_H__INCLUDED__
+diff --git a/lib/engine/ahci_raid_info.h b/lib/engine/ahci_raid_info.h
+index e1c81ae..c70e63e 100644
+--- a/lib/engine/ahci_raid_info.h
++++ b/lib/engine/ahci_raid_info.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_RAID_INFO_H__INCLUDED__
+ #define __AHCI_RAID_INFO_H__INCLUDED__
+diff --git a/lib/engine/ahci_tape.h b/lib/engine/ahci_tape.h
+index cdd9f13..a91fd2c 100644
+--- a/lib/engine/ahci_tape.h
++++ b/lib/engine/ahci_tape.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __AHCI_TAPE_H__INCLUDED__
+ #define __AHCI_TAPE_H__INCLUDED__
+diff --git a/lib/engine/array.h b/lib/engine/array.h
+index 36fb4a4..0986ce3 100644
+--- a/lib/engine/array.h
++++ b/lib/engine/array.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ARRAY_H__INCLUDED__
+ #define __ARRAY_H__INCLUDED__
+diff --git a/lib/engine/block_device.h b/lib/engine/block_device.h
+index 4503914..45dd3db 100644
+--- a/lib/engine/block_device.h
++++ b/lib/engine/block_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __BLOCK_DEVICE_H__INCLUDED__
+ #define __BLOCK_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/cache.h b/lib/engine/cache.h
+index 72cf521..72da20b 100644
+--- a/lib/engine/cache.h
++++ b/lib/engine/cache.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3,4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __CACHE_H__INCLUDED__
+ #define __CACHE_H__INCLUDED__
+diff --git a/lib/engine/container.h b/lib/engine/container.h
+index 53867b0..c71180c 100644
+--- a/lib/engine/container.h
++++ b/lib/engine/container.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3,4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __CONTAINER_H__INCLUDED__
+ #define __CONTAINER_H__INCLUDED__
+diff --git a/lib/engine/context_manager.h b/lib/engine/context_manager.h
+index fe9c256..6b4a2e7 100644
+--- a/lib/engine/context_manager.h
++++ b/lib/engine/context_manager.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3,4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __CONTEXT_H__INCLUDED__
+ #define __CONTEXT_H__INCLUDED__
+diff --git a/lib/engine/controller.h b/lib/engine/controller.h
+index a2f188a..6bd078f 100644
+--- a/lib/engine/controller.h
++++ b/lib/engine/controller.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __CONTROLLER_H__INCLUDED__
+ #define __CONTROLLER_H__INCLUDED__
+diff --git a/lib/engine/enclosure.h b/lib/engine/enclosure.h
+index 3faef0c..f4b13cc 100644
+--- a/lib/engine/enclosure.h
++++ b/lib/engine/enclosure.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ENCLOSURE_H__INCLUDED__
+ #define __ENCLOSURE_H__INCLUDED__
+diff --git a/lib/engine/end_device.h b/lib/engine/end_device.h
+index f147e41..269b236 100644
+--- a/lib/engine/end_device.h
++++ b/lib/engine/end_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __END_DEVICE_H__INCLUDED__
+ #define __END_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/event.h b/lib/engine/event.h
+index cf9bb4f..11a4926 100644
+--- a/lib/engine/event.h
++++ b/lib/engine/event.h
+@@ -12,9 +12,7 @@ Redistribution and use in source and binary forms, with or without modification,
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __EVENT_H__INCLUDED__
+ #define __EVENT_H__INCLUDED__
+diff --git a/lib/engine/event_manager.h b/lib/engine/event_manager.h
+index 65007b9..a7a8fc3 100644
+--- a/lib/engine/event_manager.h
++++ b/lib/engine/event_manager.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __EVENT_MANAGER_H__INCLUDED__
+ #define __EVENT_MANAGER_H__INCLUDED__
+diff --git a/lib/engine/exception.h b/lib/engine/exception.h
+index 171e45d..183ebb5 100644
+--- a/lib/engine/exception.h
++++ b/lib/engine/exception.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __EXCEPTION_H__INCLUDED__
+ #define __EXCEPTION_H__INCLUDED__
+diff --git a/lib/engine/filesystem.h b/lib/engine/filesystem.h
+index 9c2ce39..b49df07 100644
+--- a/lib/engine/filesystem.h
++++ b/lib/engine/filesystem.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __FILESYSTEM_H__INCLUDED__
+ #define __FILESYSTEM_H__INCLUDED__
+diff --git a/lib/engine/isci.h b/lib/engine/isci.h
+index ea35cd4..0fa602a 100644
+--- a/lib/engine/isci.h
++++ b/lib/engine/isci.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_H__INCLUDED__
+ #define __ISCI_H__INCLUDED__
+diff --git a/lib/engine/isci_cdrom.h b/lib/engine/isci_cdrom.h
+index 87b7e7b..25637f9 100644
+--- a/lib/engine/isci_cdrom.h
++++ b/lib/engine/isci_cdrom.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_CDROM_H__INCLUDED__
+ #define __ISCI_CDROM_H__INCLUDED__
+diff --git a/lib/engine/isci_disk.h b/lib/engine/isci_disk.h
+index 596c3cf..8dd0dae 100644
+--- a/lib/engine/isci_disk.h
++++ b/lib/engine/isci_disk.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_DISK_H__INCLUDED__
+ #define __ISCI_DISK_H__INCLUDED__
+diff --git a/lib/engine/isci_expander.h b/lib/engine/isci_expander.h
+index ca7c2f1..7dc1920 100644
+--- a/lib/engine/isci_expander.h
++++ b/lib/engine/isci_expander.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_EXPANDER_H__INCLUDED__
+ #define __ISCI_EXPANDER_H__INCLUDED__
+diff --git a/lib/engine/isci_expander_phy.h b/lib/engine/isci_expander_phy.h
+index c9cd770..d3d2832 100644
+--- a/lib/engine/isci_expander_phy.h
++++ b/lib/engine/isci_expander_phy.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_EXPANDER_PHY_H__INCLUDED__
+ #define __ISCI_EXPANDER_PHY_H__INCLUDED__
+diff --git a/lib/engine/isci_expander_port.h b/lib/engine/isci_expander_port.h
+index e65a124..4fc9310 100644
+--- a/lib/engine/isci_expander_port.h
++++ b/lib/engine/isci_expander_port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_EXPANDER_PORT_H__INCLUDED__
+ #define __ISCI_EXPANDER_PORT_H__INCLUDED__
+diff --git a/lib/engine/isci_phy.h b/lib/engine/isci_phy.h
+index 767a5b2..105c697 100644
+--- a/lib/engine/isci_phy.h
++++ b/lib/engine/isci_phy.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_PHY_H__INCLUDED__
+ #define __ISCI_PHY_H__INCLUDED__
+diff --git a/lib/engine/isci_port.h b/lib/engine/isci_port.h
+index b80be7f..5ccc151 100644
+--- a/lib/engine/isci_port.h
++++ b/lib/engine/isci_port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_PORT_H__INCLUDED__
+ #define __ISCI_PORT_H__INCLUDED__
+diff --git a/lib/engine/isci_raid_info.h b/lib/engine/isci_raid_info.h
+index 1df6477..b0b046a 100644
+--- a/lib/engine/isci_raid_info.h
++++ b/lib/engine/isci_raid_info.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_RAID_INFO_H__INCLUDED__
+ #define __ISCI_RAID_INFO_H__INCLUDED__
+diff --git a/lib/engine/isci_tape.h b/lib/engine/isci_tape.h
+index 985f767..a2cef2d 100644
+--- a/lib/engine/isci_tape.h
++++ b/lib/engine/isci_tape.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ISCI_TAPE_H__INCLUDED__
+ #define __ISCI_TAPE_H__INCLUDED__
+diff --git a/lib/engine/list.h b/lib/engine/list.h
+index 9a7c3c3..6395830 100644
+--- a/lib/engine/list.h
++++ b/lib/engine/list.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __LIST_H__INCLUDED__
+ #define __LIST_H__INCLUDED__
+diff --git a/lib/engine/mdadm_config.h b/lib/engine/mdadm_config.h
+index c94020f..e415b4f 100644
+--- a/lib/engine/mdadm_config.h
++++ b/lib/engine/mdadm_config.h
+@@ -11,9 +11,7 @@ Redistribution and use in source and binary forms, with or without modification,
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __MDADM_CONFIG_H__INCLUDED__
+ #define __MDADM_CONFIG_H__INCLUDED__
+diff --git a/lib/engine/multimedia_device.h b/lib/engine/multimedia_device.h
+index 533370e..694e2a5 100644
+--- a/lib/engine/multimedia_device.h
++++ b/lib/engine/multimedia_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __MULTIMEDIA_DEVICE_H__INCLUDED__
+ #define __MULTIMEDIA_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/nondisk_device.h b/lib/engine/nondisk_device.h
+index 70ebb32..0f00e52 100644
+--- a/lib/engine/nondisk_device.h
++++ b/lib/engine/nondisk_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __CHARACTER_DEVICE_H__INCLUDED__
+ #define __CHARACTER_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/object.h b/lib/engine/object.h
+index b52d3d3..345d58c 100644
+--- a/lib/engine/object.h
++++ b/lib/engine/object.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __OBJECT_H__INCLUDED__
+ #define __OBJECT_H__INCLUDED__
+diff --git a/lib/engine/pci_header.h b/lib/engine/pci_header.h
+index 376f296..c5129a0 100644
+--- a/lib/engine/pci_header.h
++++ b/lib/engine/pci_header.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __PCI_HEADER_H__INCLUDED__
+ #define __PCI_HEADER_H__INCLUDED__
+diff --git a/lib/engine/phy.h b/lib/engine/phy.h
+index f5730a0..c59f7c8 100644
+--- a/lib/engine/phy.h
++++ b/lib/engine/phy.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __PHY_H__INCLUDED__
+ #define __PHY_H__INCLUDED__
+diff --git a/lib/engine/port.h b/lib/engine/port.h
+index 2f33876..cc48c7c 100644
+--- a/lib/engine/port.h
++++ b/lib/engine/port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3,4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __PORT_H__INCLUDED__
+ #define __PORT_H__INCLUDED__
+diff --git a/lib/engine/raid_device.h b/lib/engine/raid_device.h
+index 998e80c..2174162 100644
+--- a/lib/engine/raid_device.h
++++ b/lib/engine/raid_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __RAID_DEVICE_H__INCLUDED__
+ #define __RAID_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/raid_info.h b/lib/engine/raid_info.h
+index 174698a..302be9b 100644
+--- a/lib/engine/raid_info.h
++++ b/lib/engine/raid_info.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __RAID_INFO_H__INCLUDED__
+ #define __RAID_INFO_H__INCLUDED__
+diff --git a/lib/engine/remote_port.h b/lib/engine/remote_port.h
+index c086656..4ddfee3 100644
+--- a/lib/engine/remote_port.h
++++ b/lib/engine/remote_port.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __REMOTE_PORT_H__INCLUDED__
+ #define __REMOTE_PORT_H__INCLUDED__
+diff --git a/lib/engine/routing_device.h b/lib/engine/routing_device.h
+index 5f857a6..284621e 100644
+--- a/lib/engine/routing_device.h
++++ b/lib/engine/routing_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ROUTING_DEVICE_H__INCLUDED__
+ #define __ROUTING_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/session.h b/lib/engine/session.h
+index a901d1c..3200da1 100644
+--- a/lib/engine/session.h
++++ b/lib/engine/session.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __SESSION_H__INCLUDED__
+ #define __SESSION_H__INCLUDED__
+diff --git a/lib/engine/session_manager.h b/lib/engine/session_manager.h
+index 7177064..87e16c3 100644
+--- a/lib/engine/session_manager.h
++++ b/lib/engine/session_manager.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __SESSION_MANAGER_H__INCLUDED__
+ #define __SESSION_MANAGER_H__INCLUDED__
+diff --git a/lib/engine/storage_device.h b/lib/engine/storage_device.h
+index ddeb66f..20bdab2 100644
+--- a/lib/engine/storage_device.h
++++ b/lib/engine/storage_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __STORAGE_DEVICE_H__INCLUDED__
+ #define __STORAGE_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/stream_device.h b/lib/engine/stream_device.h
+index 9bc111a..b29bd68 100644
+--- a/lib/engine/stream_device.h
++++ b/lib/engine/stream_device.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __STREAM_DEVICE_H__INCLUDED__
+ #define __STREAM_DEVICE_H__INCLUDED__
+diff --git a/lib/engine/string.h b/lib/engine/string.h
+index 3007dc7..6f348c9 100644
+--- a/lib/engine/string.h
++++ b/lib/engine/string.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __STRING_H__INCLUDED__
+ #define __STRING_H__INCLUDED__
+diff --git a/lib/engine/unique_id_manager.h b/lib/engine/unique_id_manager.h
+index fe79eac..4a13627 100644
+--- a/lib/engine/unique_id_manager.h
++++ b/lib/engine/unique_id_manager.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __UNIQUE_ID_MANAGER_H__INCLUDED__
+ #define __UNIQUE_ID_MANAGER_H__INCLUDED__
+diff --git a/lib/engine/utils.h b/lib/engine/utils.h
+index 86c20cf..5525303 100644
+--- a/lib/engine/utils.h
++++ b/lib/engine/utils.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __UTILS_H__INCLUDED__
+ #define __UTILS_H__INCLUDED__
+diff --git a/lib/engine/volume.h b/lib/engine/volume.h
+index 9a63cbf..3347b31 100644
+--- a/lib/engine/volume.h
++++ b/lib/engine/volume.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ // Forward declarations
+ class Array;
+diff --git a/lib/log/log.h b/lib/log/log.h
+index c0bd63e..8b5f171 100644
+--- a/lib/log/log.h
++++ b/lib/log/log.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __LOG_H__INCLUDED__
+ #define __LOG_H__INCLUDED__
+diff --git a/lib/mpb/machine_bytes.h b/lib/mpb/machine_bytes.h
+index 7fbb0e9..800b120 100644
+--- a/lib/mpb/machine_bytes.h
++++ b/lib/mpb/machine_bytes.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __ENDIAN_H__INCLUDED__
+ #define __ENDIAN_H__INCLUDED__
+diff --git a/lib/mpb/mpb.h b/lib/mpb/mpb.h
+index 01782af..c42cdfb 100644
+--- a/lib/mpb/mpb.h
++++ b/lib/mpb/mpb.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __MPB_H__INCLUDED__
+ #define __MPB_H__INCLUDED__
+diff --git a/lib/orom/orom.h b/lib/orom/orom.h
+index f76e3ee..e10311d 100644
+--- a/lib/orom/orom.h
++++ b/lib/orom/orom.h
+@@ -15,9 +15,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
+
+
+-#if __GNUC_PREREQ(3, 4)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
+
+ #ifndef __OROM_H__INCLUDED__
+ #define __OROM_H__INCLUDED__
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch
new file mode 100644
index 000000000..27df9b5de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch
@@ -0,0 +1,39 @@
+From ea9ecf4bf305f9509d5822b3823658a40162f43c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 19:08:21 -0700
+Subject: [PATCH] ssieventmonitor: ordered comparison between pointers and
+ zero, actually with NULL
+
+Comparing which is large or small between a pointer and NULL
+however, looks completely illogical. Ordered comparison of
+two valid pointers is legit, but no pointer will be smaller
+than NULL , so comparing if a pointer is larger than NULL
+simply means if the pointer is not NULL.
+
+Fixes errors found with clang e.g.
+
+| ssieventmonitor.cpp:339:53: error: ordered comparison between pointer and zero ('char *' and 'int')
+| if (fgets(nextline, sizeof(nextline) - 1, mdstat) < 0) {
+| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/ssieventmonitor.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
+index f04b8f0..7a00122 100644
+--- a/tools/ssieventmonitor.cpp
++++ b/tools/ssieventmonitor.cpp
+@@ -336,7 +336,7 @@ static int _read_mdstat(int fd)
+ if (!strncmp(line, "md", 2)) {
+ if (strstr(line, INACTIVE_STR)) { /* possibly container */
+ char nextline[1024];
+- if (fgets(nextline, sizeof(nextline) - 1, mdstat) < 0) {
++ if (fgets(nextline, sizeof(nextline) - 1, mdstat) != (char *) NULL) {
+ fclose(mdstat);
+ return 1;
+ }
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch
new file mode 100644
index 000000000..351301cdc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch
@@ -0,0 +1,123 @@
+From 1338ee4e69c465f8f381ec3bfe5058080236edba Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:08:35 -0700
+Subject: [PATCH 2/6] Convert macros into functions
+
+This helps in fixing the security format warnings
+add -fno-builtin-log
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/Makefile.am | 3 ++-
+ lib/log/Makefile.am | 2 ++
+ lib/log/log.h | 34 +++++++++++++++++++++-------------
+ src/Makefile.am | 3 ++-
+ 4 files changed, 27 insertions(+), 15 deletions(-)
+
+Index: ssiapi.1.0.1/lib/engine/Makefile.am
+===================================================================
+--- ssiapi.1.0.1.orig/lib/engine/Makefile.am
++++ ssiapi.1.0.1/lib/engine/Makefile.am
+@@ -113,4 +113,5 @@ libengine_la_SOURCES = \
+ libengine_la_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+- -I$(top_srcdir)/lib
++ -I$(top_srcdir)/lib \
++ -fno-builtin-log
+Index: ssiapi.1.0.1/lib/log/Makefile.am
+===================================================================
+--- ssiapi.1.0.1.orig/lib/log/Makefile.am
++++ ssiapi.1.0.1/lib/log/Makefile.am
+@@ -5,3 +5,5 @@ noinst_LTLIBRARIES = liblog.la
+ liblog_la_SOURCES = \
+ log.c \
+ log.h
++
++liblog_la_CPPFLAGS = -fno-builtin-log
+Index: ssiapi.1.0.1/lib/log/log.h
+===================================================================
+--- ssiapi.1.0.1.orig/lib/log/log.h
++++ ssiapi.1.0.1/lib/log/log.h
+@@ -23,7 +23,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIG
+ #if defined(__cplusplus)
+ extern "C" {
+ #endif /* __cplusplus */
+-
++#include <stdarg.h>
+ /* */
+ enum log_level {
+ LOG_FIRST = 0,
+@@ -37,26 +37,34 @@ enum log_level {
+ };
+
+ /* */
+-#define log(__level, __format, ...) \
+- do { if (log_get_level() >= (enum log_level)(__level)) \
+- __log(__level, __format, ## __VA_ARGS__); \
+- } while (0)
+-
+-#define dlog(__format, ...) \
+- log(LOG_DEBUG, __format, ## __VA_ARGS__);
++void __log(enum log_level level, const char *format, ...)
++ __attribute__((format(printf, 2, 3)));
+
+ /* */
+-void log_init(enum log_level level, const char *path);
++enum log_level log_get_level(void);
+
+ /* */
+-void log_fini(void);
+-
++static inline void log(enum log_level __level, const char* __format, ...) {
++ va_list ap;
++ va_start(ap, __format);
++ do {
++ if (log_get_level() >= (enum log_level)(__level))
++ __log(__level, __format, ap);
++ } while (0);
++ va_end(ap);
++}
++
++static inline void dlog(const char* __format, ...) {
++ va_list ap;
++ va_start(ap, __format);
++ log(LOG_DEBUG, __format, ap);
++ va_end(ap);
++}
+ /* */
+-void __log(enum log_level level, const char *format, ...)
+- __attribute__((format(printf, 2, 3)));
++void log_init(enum log_level level, const char *path);
+
+ /* */
+-enum log_level log_get_level(void);
++void log_fini(void);
+
+ /* */
+ void log_set_level(enum log_level level);
+Index: ssiapi.1.0.1/src/Makefile.am
+===================================================================
+--- ssiapi.1.0.1.orig/src/Makefile.am
++++ ssiapi.1.0.1/src/Makefile.am
+@@ -7,7 +7,8 @@ lib_LTLIBRARIES = libssi.la
+ libssi_la_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+- -I$(top_srcdir)/lib
++ -I$(top_srcdir)/lib \
++ -fno-builtin-log
+
+ libssi_la_LDFLAGS = \
+ $(SGUTILS_LDFLAGS) \
+Index: ssiapi.1.0.1/lib/efi/Makefile.am
+===================================================================
+--- ssiapi.1.0.1.orig/lib/efi/Makefile.am
++++ ssiapi.1.0.1/lib/efi/Makefile.am
+@@ -5,3 +5,4 @@ noinst_LTLIBRARIES = libefi.la
+ libefi_la_SOURCES = \
+ efi.cpp \
+ efi.h
++libefi_la_CPPFLAGS = -fno-builtin-log
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch
new file mode 100644
index 000000000..98cd40c84
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch
@@ -0,0 +1,33 @@
+From 781288d6307002cce70ddafb6efb200b7f60294d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:12:43 -0700
+Subject: [PATCH 3/6] Replace canonicalize_file_name with realpath() API
+
+Fixed build on musl where canonicalize_file_name is not implemented
+
+filesystem.cpp:46:15: error: 'canonicalize_file_name' was not declared in this scope
+ char *p = canonicalize_file_name(path);
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/filesystem.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/engine/filesystem.cpp b/lib/engine/filesystem.cpp
+index b99257e..6064837 100644
+--- a/lib/engine/filesystem.cpp
++++ b/lib/engine/filesystem.cpp
+@@ -43,7 +43,7 @@ void CanonicalPath::__canonicalize_path_name(const char *path)
+ if (path == 0) {
+ throw E_NULL_POINTER;
+ }
+- char *p = canonicalize_file_name(path);
++ char *p = realpath(path, NULL);
+ assign(p);
+ if (p) {
+ free(p);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch
new file mode 100644
index 000000000..7dce0da40
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch
@@ -0,0 +1,54 @@
+From 04e8b99d8195a0e39982ecd27802421610633724 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:18:31 -0700
+Subject: [PATCH 4/6] engine: Fix indentation and missing semi-colon
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/mdadm_config.cpp | 5 +++--
+ lib/engine/unique_id_manager.cpp | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/lib/engine/mdadm_config.cpp b/lib/engine/mdadm_config.cpp
+index 1914ddc..e40c2c7 100644
+--- a/lib/engine/mdadm_config.cpp
++++ b/lib/engine/mdadm_config.cpp
+@@ -118,9 +118,10 @@ void check_configuration()
+ attr >> config;
+ configOk = correct_config(config);
+ } catch (Exception ex) {
+- if (ex != E_NOT_FOUND)
++ if (ex != E_NOT_FOUND) {
+ dlog("Warning: mdadm config file cannot be read, new one will be written");
+ backup = false;
++ }
+ }
+
+ if (configOk && monitor_running()) {
+@@ -134,7 +135,7 @@ void check_configuration()
+ dlog("Warning: failed to update mdadm.conf");
+ }
+ if (restart_monitor() == 0)
+- dlog("Monitor restarted successfully")
++ dlog("Monitor restarted successfully");
+ else
+ dlog("Error starting Monitor");
+ }
+diff --git a/lib/engine/unique_id_manager.cpp b/lib/engine/unique_id_manager.cpp
+index 99c153c..87d6ddc 100644
+--- a/lib/engine/unique_id_manager.cpp
++++ b/lib/engine/unique_id_manager.cpp
+@@ -185,7 +185,7 @@ void UniqueIdManager::refresh()
+ keyFile >> keyList;
+ keyList += "\n";
+ } catch (...) {
+- dlog("ssi.keys file missing")
++ dlog("ssi.keys file missing");
+ /* no file? that's ok */
+ }
+ /* process the list to update IdCaches */
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch
new file mode 100644
index 000000000..6f4dbf18e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch
@@ -0,0 +1,40 @@
+From a2e3a2e332c406ea3c56a8d74b61978107df68e6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:23:08 -0700
+Subject: [PATCH 5/6] engine: Define SENTINEL
+
+Fix warnings with gcc7
+test.cpp:12: warning: missing sentinel in function call
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/utils.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/engine/utils.cpp b/lib/engine/utils.cpp
+index 44579a1..8812a8c 100644
+--- a/lib/engine/utils.cpp
++++ b/lib/engine/utils.cpp
+@@ -35,7 +35,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ #include "filesystem.h"
+ #include "utils.h"
+ #include "log/log.h"
+-
++#define SENTINEL (const char *)0
+ /**
+ * @brief capture shell output as binary data
+ *
+@@ -139,7 +139,7 @@ int shell(const String &s)
+ * Before switching into new executable close all non standard
+ * file handlers.*/
+ close_parent_fds();
+- execl("/bin/sh", "sh", "-c", cmd.get(), NULL);
++ execl("/bin/sh", "sh", "-c", cmd.get(), SENTINEL);
+ /* If we're here then execl failed*/
+ exit(-1);
+ break;
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch
new file mode 100644
index 000000000..a7b70e3f4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch
@@ -0,0 +1,40 @@
+From df1d56d6b6a6b15d0137619eb8a4b623de6c9633 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:28:59 -0700
+Subject: [PATCH 6/6] tools: Add missing includes and use realpath() instead of
+ canonicalize_file_name
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/ssieventmonitor.cpp | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
+index 0553386..f04b8f0 100644
+--- a/tools/ssieventmonitor.cpp
++++ b/tools/ssieventmonitor.cpp
+@@ -18,7 +18,9 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <errno.h>
+-#include <sys/fcntl.h>
++#include <limits.h>
++#include <fcntl.h>
++#include <libgen.h>
+ #include <sys/select.h>
+ #include <sys/wait.h>
+ #include <sys/inotify.h>
+@@ -99,7 +101,7 @@ static int _exec_ssimsg(void)
+ int status;
+ switch (pid) {
+ case 0: {
+- cp = canonicalize_file_name("/proc/self/exe");
++ cp = realpath("/proc/self/exe", NULL);
+ if (cp) {
+ strcpy(buffer, cp);
+ free(cp);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch
new file mode 100644
index 000000000..d45be590c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch
@@ -0,0 +1,21 @@
+Do not override flags thereby respect the flags coming from environment,
+e.g. we need some optimization level turned on when security flags are enabled
+without this change, the build would fail
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: ssiapi.1.0.1/configure.ac
+===================================================================
+--- ssiapi.1.0.1.orig/configure.ac
++++ ssiapi.1.0.1/configure.ac
+@@ -15,11 +15,6 @@ AC_SUBST(VERSION)
+ AM_INIT_AUTOMAKE(ssi, ${VERSION})
+ AM_CONFIG_HEADER(config.h)
+
+-dnl Set the language we use
+-CPPFLAGS="-g3 -gdwarf-2 -Wall -Werror -D_GNU_SOURCE"
+-CFLAGS="-std=gnu99"
+-CXXFLAGS="-std=gnu++98"
+-
+ dnl Automake 1.11 - silent build rules
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
diff --git a/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb
new file mode 100644
index 000000000..5eb4696b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Intel RSTe with Linux OS SSI API Library"
+
+DESCRIPTION = "Intel Rapid Storage Technology enterprise with Linux OS* Standard Storage Interface API Library. \
+The library allows user to manage storage devices including creating and managing Raid arrays on systems with Intel chipset."
+
+HOMEPAGE = "http://irstessi.sourceforge.net/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0413ff365e0bd733c4869a6797551c6f"
+
+DEPENDS += "sg3-utils"
+
+SRC_URI = "http://sourceforge.net/projects/irstessi/files/${BPN}.${PV}.tgz \
+ file://0001-Use-pragma-once-unconditionally.patch \
+ file://0002-Convert-macros-into-functions.patch \
+ file://0003-Replace-canonicalize_file_name-with-realpath-API.patch \
+ file://0004-engine-Fix-indentation-and-missing-semi-colon.patch \
+ file://0005-engine-Define-SENTINEL.patch \
+ file://0006-tools-Add-missing-includes-and-use-realpath-instead-.patch \
+ file://configure-cflags.patch \
+ file://0001-ssieventmonitor-ordered-comparison-between-pointers-.patch \
+ "
+SRC_URI[md5sum] = "02f16d7cbd30d28034093212906591f5"
+SRC_URI[sha256sum] = "e10d283b0f211afb8ebd0bde87c097769613d30a052cdf164753e35e803264c7"
+
+S ="${WORKDIR}/${BPN}.${PV}"
+
+inherit autotools-brokensep
+CXXFLAGS="-std=gnu++98 -D_GNU_SOURCE"
+
+do_configure_prepend(){
+ ./autogen.sh
+}
+
+RDEPENDS_${PN} += "mdadm"
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch
new file mode 100644
index 000000000..e988efded
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch
@@ -0,0 +1,39 @@
+From 685645a20e39cf2ab7db8d1f5e3666a4228abca8 Mon Sep 17 00:00:00 2001
+From: Ioan-Adrian Ratiu <adrian.ratiu@ni.com>
+Date: Wed, 8 Jul 2015 09:44:57 +0300
+Subject: [PATCH 1/1] dpkg start-stop-daemon: Accept SIG prefixed signal names
+
+---
+ utils/start-stop-daemon.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/utils/start-stop-daemon.c b/utils/start-stop-daemon.c
+index 6aebe9b..e805082 100644
+--- a/utils/start-stop-daemon.c
++++ b/utils/start-stop-daemon.c
+@@ -18,6 +18,9 @@
+ * and Andreas Schuldei <andreas@schuldei.org>
+ *
+ * Changes by Ian Jackson: added --retry (and associated rearrangements).
++ *
++ * Changes by Haris Okanovic <haris.okanovic@ni.com> to support 'SIG'
++ * prefixed signal names placed in public domain as well.
+ */
+
+ #include <config.h>
+@@ -661,6 +664,12 @@ parse_signal(const char *sig_str, int *sig_num)
+ if (parse_unsigned(sig_str, 10, sig_num) == 0)
+ return 0;
+
++ /* Skip over optional "SIG" prefix */
++ if (strncmp(sig_str, "SIG", 3) == 0) {
++ warning("Using deprecated signal name %s. Drop the 'SIG' prefix.\n", sig_str);
++ sig_str += 3;
++ }
++
+ for (i = 0; i < array_count(siglist); i++) {
+ if (strcmp(sig_str, siglist[i].name) == 0) {
+ *sig_num = siglist[i].signal;
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb
new file mode 100644
index 000000000..cc2727b75
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Debian's start-stop-daemon utility extracted from the dpkg \
+package"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://utils/start-stop-daemon.c;endline=21;md5=8fbd0497a7d0b01e99820bffcb58e9ad"
+# start-stop-daemon is usually shipped by dpkg
+DEPENDS = "ncurses"
+RCONFLICTS_${PN} = "dpkg"
+
+SRC_URI = " \
+ ${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz \
+ file://0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch \
+"
+
+SRC_URI[md5sum] = "e48fcfdb2162e77d72c2a83432d537ca"
+SRC_URI[sha256sum] = "07019d38ae98fb107c79dbb3690cfadff877f153b8c4970e3a30d2e59aa66baa"
+
+inherit autotools gettext pkgconfig
+
+S = "${WORKDIR}/dpkg-${PV}"
+
+EXTRA_OECONF = " \
+ --without-bz2 \
+ --without-selinux \
+"
+
+do_install_append () {
+ # remove everything that is not related to start-stop-daemon, since there
+ # is no explicit rule for only installing ssd
+ find ${D} -type f -not -name "*start-stop-daemon*" -exec rm {} \;
+ find ${D} -depth -type d -empty -exec rmdir {} \;
+
+ # support for buggy init.d scripts that refer to an alternative
+ # explicit path to start-stop-daemon
+ if [ "${base_sbindir}" != "${sbindir}" ]; then
+ mkdir -p ${D}${base_sbindir}
+ ln -sf ${sbindir}/start-stop-daemon ${D}${base_sbindir}/start-stop-daemon
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/synergy/synergy_git.bb b/meta-openembedded/meta-oe/recipes-support/synergy/synergy_git.bb
new file mode 100644
index 000000000..68f0387ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/synergy/synergy_git.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Synergy - control multiple computers with one keyboard and mouse"
+HOMEPAGE = "http://synergy-project.org"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2ba51ca68e055566aade24662f9eb41"
+LICENSE = "GPL-2.0-with-OpenSSL-exception"
+SECTION = "x11/utils"
+
+DEPENDS = "virtual/libx11 libxtst libxinerama curl openssl"
+do_unpack_extra[depends] = "unzip-native:do_populate_sysroot"
+
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "git://github.com/symless/synergy.git;protocol=http"
+
+# Version 1.8.8-stable
+SRCREV ?= "c30301e23424db1125664da17deb8c3aa6aec52d"
+PV = "1.8.8+${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake distro_features_check
+
+do_unpack_extra() {
+ cd ${S}/ext
+ for file in *.zip; do
+ fname="${file##*/}"
+ unzip $file -d ${fname%.*}
+ done
+}
+addtask unpack_extra after do_unpack before do_patch
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/bin/synergy* ${D}/usr/bin/
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/Fix-the-memory-leak-problem-when-HAVE_ENVIRON-defined.patch b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/Fix-the-memory-leak-problem-when-HAVE_ENVIRON-defined.patch
new file mode 100644
index 000000000..5d481f232
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/Fix-the-memory-leak-problem-when-HAVE_ENVIRON-defined.patch
@@ -0,0 +1,29 @@
+Fix the memory leak problem when HAVE_ENVIRON is defined
+
+Upstream-Status: Pending
+
+Signed-off-by: Xufeng Zhang <xufeng.zhang@windriver.com>
+---
+Index: syslog-ng-3.8.1/lib/gprocess.c
+===================================================================
+--- syslog-ng-3.8.1.orig/lib/gprocess.c
++++ syslog-ng-3.8.1/lib/gprocess.c
+@@ -1432,6 +1432,18 @@ g_process_startup_ok(void)
+ void
+ g_process_finish(void)
+ {
++#ifdef HAVE_ENVIRON
++ int i = 0;
++
++ while (environ[i]) {
++ g_free(environ[i]);
++ ++i;
++ }
++ if (environ)
++ g_free(environ);
++ if (process_opts.argv_orig)
++ free(process_opts.argv_orig);
++#endif
+ g_process_remove_pidfile();
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/configure.ac-add-option-enable-thread-tls-to-manage-.patch b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/configure.ac-add-option-enable-thread-tls-to-manage-.patch
new file mode 100644
index 000000000..c172e4e74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/configure.ac-add-option-enable-thread-tls-to-manage-.patch
@@ -0,0 +1,47 @@
+configure.ac: add option --enable-thread-tls to manage thread ssl support
+
+Add option --enable-thread-tls to manage the including of thread
+local storage, so we could explicitly disable it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+Index: syslog-ng-3.8.1/configure.ac
+===================================================================
+--- syslog-ng-3.8.1.orig/configure.ac
++++ syslog-ng-3.8.1/configure.ac
+@@ -147,6 +147,9 @@ AC_ARG_ENABLE(gprof,
+ AC_ARG_ENABLE(memtrace,
+ [ --enable-memtrace Enable alternative leak debugging code.])
+
++AC_ARG_ENABLE(thread-tls,
++ [ --enable-thread-tls Enable Thread Transport Layer Security support.],,enable_thread_tls="no")
++
+ AC_ARG_ENABLE(dynamic-linking,
+ [ --enable-dynamic-linking Link everything dynamically.],,enable_dynamic_linking="auto")
+
+@@ -486,12 +489,14 @@ dnl ************************************
+ dnl Is the __thread keyword available?
+ dnl ***************************************************************************
+
+-AC_LINK_IFELSE([AC_LANG_PROGRAM(
+-[[#include <pthread.h>
+-__thread int a;
+-]],
+-[a=0;])],
+-[ac_cv_have_tls=yes; AC_DEFINE_UNQUOTED(HAVE_THREAD_KEYWORD, 1, "Whether Transport Layer Security is supported by the system")])
++if test "x$enable_thread_tls" != "xno"; then
++ AC_LINK_IFELSE([AC_LANG_PROGRAM(
++ [[#include <pthread.h>
++ __thread int a;
++ ]],
++ [a=0;])],
++ [ac_cv_have_tls=yes; AC_DEFINE_UNQUOTED(HAVE_THREAD_KEYWORD, 1, "Whether Transport Layer Security is supported by the system")])
++fi
+
+ dnl ***************************************************************************
+ dnl How to do static linking?
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-config-libnet.patch b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-config-libnet.patch
new file mode 100644
index 000000000..553f4a517
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-config-libnet.patch
@@ -0,0 +1,63 @@
+Subject: [PATCH] add libnet enable option
+
+Upstream-Status: Pending
+
+This would avoid a implicit auto-detecting result.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac | 27 +++++++++++++++++----------
+ 1 files changed, 17 insertions(+), 10 deletions(-)
+
+Index: syslog-ng-3.8.1/configure.ac
+===================================================================
+--- syslog-ng-3.8.1.orig/configure.ac
++++ syslog-ng-3.8.1/configure.ac
+@@ -104,6 +104,9 @@ AC_CONFIG_HEADERS(config.h)
+ dnl ***************************************************************************
+ dnl Arguments
+
++AC_ARG_ENABLE(libnet,
++ [ --enable-libnet Enable libnet support.],, enable_libnet="no")
++
+ AC_ARG_WITH(libnet,
+ [ --with-libnet=path use path to libnet-config script],
+ ,
+@@ -893,22 +896,26 @@ dnl ************************************
+ dnl libnet headers/libraries
+ dnl ***************************************************************************
+ AC_MSG_CHECKING(for LIBNET)
+-if test "x$with_libnet" = "x"; then
+- LIBNET_CONFIG="`which libnet-config`"
+-else
+- LIBNET_CONFIG="$with_libnet/libnet-config"
+-fi
++if test "x$enable_libnet" = xyes; then
++ if test "x$with_libnet" = "x"; then
++ LIBNET_CONFIG="`which libnet-config`"
++ else
++ LIBNET_CONFIG="$with_libnet/libnet-config"
++ fi
++
++ if test -n "$LIBNET_CONFIG" -a -x "$LIBNET_CONFIG"; then
++ LIBNET_CFLAGS="`$LIBNET_CONFIG --defines`"
++ LIBNET_LIBS="`$LIBNET_CONFIG --libs`"
++ AC_MSG_RESULT(yes)
++ else
++ AC_MSG_ERROR([Could not find libnet, and libnet support was explicitly enabled.])
++ fi
+
+-if test -n "$LIBNET_CONFIG" -a -x "$LIBNET_CONFIG"; then
+- LIBNET_CFLAGS="`$LIBNET_CONFIG --defines`"
+- LIBNET_LIBS="`$LIBNET_CONFIG --libs`"
+- AC_MSG_RESULT(yes)
+ else
+ LIBNET_LIBS=
+ AC_MSG_RESULT(no)
+ fi
+
+-
+ if test "x$enable_spoof_source" = "xauto"; then
+ AC_MSG_CHECKING(whether to enable spoof source support)
+ if test "x$LIBNET_LIBS" != "x"; then
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-invalid-ownership.patch b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-invalid-ownership.patch
new file mode 100644
index 000000000..54ecce57e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/fix-invalid-ownership.patch
@@ -0,0 +1,25 @@
+syslog-ng: fix wrong ownership issue
+
+Upstream-Status: Pending
+
+The ownership of build user is preserved for some target files, fixed it by
+adding --no-same-owner option to tar when extracting files.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+---
+ scl/Makefile.am | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+Index: syslog-ng-3.8.1/scl/Makefile.am
+===================================================================
+--- syslog-ng-3.8.1.orig/scl/Makefile.am
++++ syslog-ng-3.8.1/scl/Makefile.am
+@@ -27,7 +27,7 @@ scl-install-data-local:
+ fi; \
+ done
+ $(mkinstalldirs) $(DESTDIR)/$(scldir)
+- (cd $(srcdir)/scl; tar cf - $(SCL_SUBDIRS)) | (cd $(DESTDIR)/$(scldir) && tar xf -)
++ (cd $(srcdir)/scl; tar cf - $(SCL_SUBDIRS)) | (cd $(DESTDIR)/$(scldir) && tar xf - --no-same-owner)
+ chmod -R u+rwX $(DESTDIR)/$(scldir)
+
+ scl-uninstall-local:
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/initscript b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/initscript
new file mode 100644
index 000000000..910030f41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/initscript
@@ -0,0 +1,62 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/syslog-ng and type
+# > update-rc.d syslog-ng defaults 5
+#
+
+# Source function library
+. /etc/init.d/functions
+
+syslog_ng=/usr/sbin/syslog-ng
+test -x "$syslog_ng" || exit 0
+
+PIDFILE=/var/run/syslog-ng/syslog-ng.pid
+
+create_xconsole() {
+ test -e /dev/xconsole || mknod -m 640 /dev/xconsole p
+ test -x /sbin/restorecon && /sbin/restorecon /dev/xconsole
+}
+
+RETVAL=0
+
+case "$1" in
+ start)
+ [ "${VERBOSE}" != "no" ] && echo -n "Starting syslog-ng:"
+ create_xconsole
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $syslog_ng
+ [ "${VERBOSE}" != "no" ] && echo "."
+ ;;
+ stop)
+ [ "${VERBOSE}" != "no" ] && echo -n "Stopping syslog-ng:"
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE
+ [ "${VERBOSE}" != "no" ] && echo "."
+ ;;
+ reload|force-reload)
+ start-stop-daemon --stop --quiet --signal 1 --exec $syslog_ng
+ ;;
+ restart)
+ echo "Stopping syslog-ng:"
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE
+ echo -n "Waiting for syslog-ng to die off"
+ for i in 1 2 3 ;
+ do
+ sleep 1
+ echo -n "."
+ done
+ echo ""
+ echo -n "Starting syslog-ng:"
+ create_xconsole
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $syslog_ng
+ echo "."
+ ;;
+ status)
+ status $syslog_ng
+ RETVAL=$?
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|reload|restart|force-reload|status}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf
new file mode 100644
index 000000000..0c6f54355
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf
@@ -0,0 +1,155 @@
+@version: 3.8
+#
+# Syslog-ng configuration file, compatible with default Debian syslogd
+# installation. Originally written by anonymous (I can't find his name)
+# Revised, and rewrited by me (SZALAY Attila <sasa@debian.org>)
+
+# First, set some global options.
+options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
+ owner("root"); group("adm"); perm(0640); stats_freq(0);
+ bad_hostname("^gconfd$");
+};
+
+########################
+# Sources
+########################
+# This is the default behavior of sysklogd package
+# Logs may come from unix stream, but not from another machine.
+#
+source s_src { unix-dgram("/dev/log"); internal();
+ file("/proc/kmsg" program_override("kernel"));
+};
+
+# If you wish to get logs from remote machine you should uncomment
+# this and comment the above source line.
+#
+#source s_net { tcp(ip(127.0.0.1) port(1000) authentication(required) encrypt(allow)); };
+
+########################
+# Destinations
+########################
+# First some standard logfile
+#
+destination d_auth { file("/var/log/auth.log"); };
+destination d_cron { file("/var/log/cron.log"); };
+destination d_daemon { file("/var/log/daemon.log"); };
+destination d_kern { file("/var/log/kern.log"); };
+destination d_lpr { file("/var/log/lpr.log"); };
+destination d_mail { file("/var/log/mail.log"); };
+destination d_syslog { file("/var/log/syslog"); };
+destination d_user { file("/var/log/user.log"); };
+destination d_uucp { file("/var/log/uucp.log"); };
+
+# This files are the log come from the mail subsystem.
+#
+destination d_mailinfo { file("/var/log/mail/mail.info"); };
+destination d_mailwarn { file("/var/log/mail/mail.warn"); };
+destination d_mailerr { file("/var/log/mail/mail.err"); };
+
+# Logging for INN news system
+#
+destination d_newscrit { file("/var/log/news/news.crit"); };
+destination d_newserr { file("/var/log/news/news.err"); };
+destination d_newsnotice { file("/var/log/news/news.notice"); };
+
+# Some 'catch-all' logfiles.
+#
+destination d_debug { file("/var/log/debug"); };
+destination d_error { file("/var/log/error"); };
+destination d_messages { file("/var/log/messages"); };
+
+# The root's console.
+#
+destination d_console { usertty("root"); };
+
+# Virtual console.
+#
+destination d_console_all { file("/dev/tty10"); };
+
+# The named pipe /dev/xconsole is for the nsole' utility. To use it,
+# you must invoke nsole' with the -file' option:
+#
+# $ xconsole -file /dev/xconsole [...]
+#
+destination d_xconsole { pipe("/dev/xconsole"); };
+
+# Send the messages to an other host
+#
+#destination d_net { tcp("127.0.0.1" port(1000) authentication(on) encrypt(on) log_fifo_size(1000)); };
+
+# Debian only
+destination d_ppp { file("/var/log/ppp.log"); };
+
+########################
+# Filters
+########################
+# Here's come the filter options. With this rules, we can set which
+# message go where.
+
+filter f_dbg { level(debug); };
+filter f_info { level(info); };
+filter f_notice { level(notice); };
+filter f_warn { level(warn); };
+filter f_err { level(err); };
+filter f_crit { level(crit .. emerg); };
+
+filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); };
+filter f_error { level(err .. emerg) ; };
+filter f_messages { level(info,notice,warn) and
+ not facility(auth,authpriv,cron,daemon,mail,news); };
+
+filter f_auth { facility(auth, authpriv) and not filter(f_debug); };
+filter f_cron { facility(cron) and not filter(f_debug); };
+filter f_daemon { facility(daemon) and not filter(f_debug); };
+filter f_kern { facility(kern) and not filter(f_debug); };
+filter f_lpr { facility(lpr) and not filter(f_debug); };
+filter f_local { facility(local0, local1, local3, local4, local5,
+ local6, local7) and not filter(f_debug); };
+filter f_mail { facility(mail) and not filter(f_debug); };
+filter f_news { facility(news) and not filter(f_debug); };
+filter f_syslog3 { not facility(auth, authpriv, mail) and not filter(f_debug); };
+filter f_user { facility(user) and not filter(f_debug); };
+filter f_uucp { facility(uucp) and not filter(f_debug); };
+
+filter f_cnews { level(notice, err, crit) and facility(news); };
+filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };
+
+filter f_ppp { facility(local2) and not filter(f_debug); };
+filter f_console { level(warn .. emerg); };
+
+########################
+# Log paths
+########################
+log { source(s_src); filter(f_auth); destination(d_auth); };
+log { source(s_src); filter(f_cron); destination(d_cron); };
+log { source(s_src); filter(f_daemon); destination(d_daemon); };
+log { source(s_src); filter(f_kern); destination(d_kern); };
+log { source(s_src); filter(f_lpr); destination(d_lpr); };
+log { source(s_src); filter(f_syslog3); destination(d_syslog); };
+log { source(s_src); filter(f_user); destination(d_user); };
+log { source(s_src); filter(f_uucp); destination(d_uucp); };
+
+log { source(s_src); filter(f_mail); destination(d_mail); };
+#log { source(s_src); filter(f_mail); filter(f_info); destination(d_mailinfo); };
+#log { source(s_src); filter(f_mail); filter(f_warn); destination(d_mailwarn); };
+#log { source(s_src); filter(f_mail); filter(f_err); destination(d_mailerr); };
+
+log { source(s_src); filter(f_news); filter(f_crit); destination(d_newscrit); };
+log { source(s_src); filter(f_news); filter(f_err); destination(d_newserr); };
+log { source(s_src); filter(f_news); filter(f_notice); destination(d_newsnotice); };
+#log { source(s_src); filter(f_cnews); destination(d_console_all); };
+#log { source(s_src); filter(f_cother); destination(d_console_all); };
+
+#log { source(s_src); filter(f_ppp); destination(d_ppp); };
+
+log { source(s_src); filter(f_debug); destination(d_debug); };
+log { source(s_src); filter(f_error); destination(d_error); };
+log { source(s_src); filter(f_messages); destination(d_messages); };
+
+log { source(s_src); filter(f_console); destination(d_console_all);
+ destination(d_xconsole); };
+log { source(s_src); filter(f_crit); destination(d_console); };
+
+# All messages send to a remote site
+#
+#log { source(s_src); destination(d_net); };
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch
new file mode 100644
index 000000000..6b30c20c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch
@@ -0,0 +1,31 @@
+From 0be9c08dd3f825e92fa02d4a08d8aff743109e61 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Wed, 17 Jun 2015 14:46:30 +0900
+Subject: [PATCH] syslog-ng.service: the syslog-ng service can not start
+ successfully,so modify it.
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ contrib/systemd/syslog-ng.service | 5 ++---
+ 1 file changed, 2 insertion(+), 3 deletions(-)
+
+diff --git a/contrib/systemd/syslog-ng.service b/contrib/systemd/syslog-ng.service
+index fc16f8d..8e09deb 100644
+--- a/contrib/systemd/syslog-ng.service
++++ b/contrib/systemd/syslog-ng.service
+@@ -4,8 +4,8 @@ Description=System Logger Daemon
+
+ [Service]
+ Type=notify
+-ExecStart=/usr/sbin/syslog-ng -F $SYSLOGNG_OPTS
+-ExecReload=/bin/kill -HUP $MAINPID
++ExecStart=@SBINDIR@/syslog-ng -F $SYSLOGNG_OPTS -p @LOCALSTATEDIR@/run/syslogd.pid
++ExecReload=@BASEBINDIR@/kill -HUP $MAINPID
+ EnvironmentFile=-/etc/default/syslog-ng
+ EnvironmentFile=-/etc/sysconfig/syslog-ng
+ StandardOutput=journal
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/volatiles.03_syslog-ng b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/volatiles.03_syslog-ng
new file mode 100644
index 000000000..3c4a50d54
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/volatiles.03_syslog-ng
@@ -0,0 +1 @@
+d root root 0755 /var/run/syslog-ng none
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
new file mode 100644
index 000000000..771cdb196
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
@@ -0,0 +1,114 @@
+SUMMARY = "Alternative system logger daemon"
+DESCRIPTION = "syslog-ng, as the name shows, is a syslogd replacement, \
+but with new functionality for the new generation. The original syslogd \
+allows messages only to be sorted based on priority/facility pairs; \
+syslog-ng adds the possibility to filter based on message contents using \
+regular expressions. The new configuration scheme is intuitive and powerful. \
+Forwarding logs over TCP and remembering all forwarding hops makes it \
+ideal for firewalled environments. \
+"
+HOMEPAGE = "http://www.balabit.com/network-security/syslog-ng/opensource-logging-system"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=24c0c5cb2c83d9f2ab725481e4df5240"
+
+# util-linux added to get libuuid
+DEPENDS = "libpcre flex eventlog glib-2.0 openssl util-linux"
+
+SRC_URI = "https://github.com/balabit/syslog-ng/releases/download/${BP}/${BP}.tar.gz \
+ file://syslog-ng.conf \
+ file://initscript \
+ file://volatiles.03_syslog-ng \
+ file://configure.ac-add-option-enable-thread-tls-to-manage-.patch \
+"
+
+inherit autotools gettext systemd pkgconfig update-rc.d
+
+EXTRA_OECONF = " \
+ --enable-dynamic-linking \
+ --disable-sub-streams \
+ --disable-pacct \
+ --localstatedir=${localstatedir}/lib/${BPN} \
+ --sysconfdir=${sysconfdir}/${BPN} \
+ --with-module-dir=${libdir}/${BPN} \
+ --with-sysroot=${STAGING_DIR_HOST} \
+ --without-mongoc --disable-mongodb \
+ --with-librabbitmq-client=no \
+ --disable-python \
+ --disable-java --disable-java-modules \
+ --with-pidfile-dir=${localstatedir}/run/${BPN} \
+ ${CONFIG_TLS} \
+"
+
+CONFIG_TLS = "--enable-thread-tls"
+CONFIG_TLS_arm = "${@oe.utils.conditional( "DEBUG_BUILD", "1", " --disable-thread-tls", " --enable-thread-tls", d )}"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd', d)} \
+"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,,"
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_unitdir}/system/,--disable-systemd --without-systemdsystemunitdir,systemd,"
+PACKAGECONFIG[linux-caps] = "--enable-linux-caps,--disable-linux-caps,libcap,"
+PACKAGECONFIG[dbi] = "--enable-sql,--disable-sql,libdbi,"
+PACKAGECONFIG[libnet] = "--enable-libnet --with-libnet=${STAGING_BINDIR_CROSS},--disable-libnet,libnet,"
+PACKAGECONFIG[http] = "--enable-http,--disable-http,curl,"
+PACKAGECONFIG[smtp] = "--enable-smtp --with-libesmtp=${STAGING_LIBDIR},--disable-smtp,libesmtp,"
+PACKAGECONFIG[json] = "--enable-json,--disable-json,json-c,"
+PACKAGECONFIG[tcp-wrapper] = "--enable-tcp-wrapper,--disable-tcp-wrapper,tcp-wrappers,"
+PACKAGECONFIG[geoip] = "--enable-geoip,--disable-geoip,geoip,"
+PACKAGECONFIG[native] = "--enable-native,--disable-native,,"
+
+do_configure_prepend() {
+ olddir=$(pwd)
+ cd ${AUTOTOOLS_SCRIPT_PATH}
+
+ ACLOCAL="$ACLOCAL" autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} -I ${S}/m4 ${ACLOCALEXTRAPATH} || die "extra autoreconf execution failed."
+
+ cd $olddir
+}
+
+do_install_prepend() {
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${S}/contrib/systemd/*.service
+ sed -i -e 's,@LOCALSTATEDIR@,${localstatedir},g' ${S}/contrib/systemd/*.service
+ sed -i -e 's,@BASEBINDIR@,${base_bindir},g' ${S}/contrib/systemd/*.service
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/${BPN}
+ install ${WORKDIR}/syslog-ng.conf ${D}${sysconfdir}/${BPN}/${BPN}.conf
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/initscript ${D}/${sysconfdir}/init.d/syslog
+ install -d ${D}/${sysconfdir}/default/volatiles/
+ install -m 755 ${WORKDIR}/volatiles.03_syslog-ng ${D}/${sysconfdir}/default/volatiles/03_syslog-ng
+ install -d ${D}/${localstatedir}/lib/${BPN}
+ # Remove /var/run as it is created on startup
+ rm -rf ${D}${localstatedir}/run
+}
+
+FILES_${PN} += "${datadir}/include/scl/ ${datadir}/xsd ${datadir}/tools"
+RDEPENDS_${PN} += "gawk"
+
+# This overcomes the syslog-ng rdepends on syslog-ng-dev QA Error
+PACKAGES =+ "${PN}-libs ${PN}-libs-dev ${PN}-libs-dbg"
+FILES_${PN}-libs = "${libdir}/${BPN}/*.so ${libdir}/libsyslog-ng-*.so*"
+FILES_${PN}-libs-dev = "${libdir}/${BPN}/lib*.la"
+FILES_${PN}-libs-dbg = "${libdir}/${BPN}/.debug"
+FILES_${PN}-staticdev += "${libdir}/${BPN}/libtest/*.a"
+INSANE_SKIP_${PN}-libs = "dev-so"
+RDEPENDS_${PN} += "${PN}-libs"
+
+CONFFILES_${PN} = "${sysconfdir}/${BPN}.conf ${sysconfdir}/scl.conf"
+
+# syslog initscript is handled explicitly because order of
+# update-rc.d and update-alternatives is important
+RDEPENDS_${PN} += " ${@oe.utils.conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "update-rc.d", d)}"
+
+RCONFLICTS_${PN} = "busybox-syslog sysklogd rsyslog"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "${BPN}.service"
+
+INITSCRIPT_NAME = "syslog"
+INITSCRIPT_PARAMS = "start 20 2 3 4 5 . stop 90 0 1 6 ."
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.8.1.bb b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.8.1.bb
new file mode 100644
index 000000000..91a0e4699
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.8.1.bb
@@ -0,0 +1,11 @@
+require syslog-ng.inc
+
+SRC_URI += " \
+ file://fix-config-libnet.patch \
+ file://fix-invalid-ownership.patch \
+ file://Fix-the-memory-leak-problem-when-HAVE_ENVIRON-defined.patch \
+ file://syslog-ng.service-the-syslog-ng-service.patch \
+"
+
+SRC_URI[md5sum] = "acf14563cf5ce435db8db35486ce66af"
+SRC_URI[sha256sum] = "84b081f6e5f98cbc52052e342bcfdc5de5fe0ebe9f5ec32fe9eaec5759224cc5"
diff --git a/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb b/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb
new file mode 100644
index 000000000..26b4412f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "a graphical user interface that allows the user to \
+change the default keyboard of the system"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+SRC_URI = "https://fedorahosted.org/releases/s/y/${BPN}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "c267db0ee7a2131ba418399dc17f9e72"
+SRC_URI[sha256sum] = "218c883e4e2bfcc82bfe07e785707b5c2ece28df772f2155fd044b9bb1614284"
+
+inherit python-dir gettext
+DEPENDS += "intltool-native gettext-native"
+
+EXTRA_OEMAKE = " \
+ PYTHON='${STAGING_BINDIR_NATIVE}'/python-native/python \
+ PYTHON_SITELIB=${PYTHON_SITEPACKAGES_DIR} \
+"
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+do_install_append_class-native() {
+ rm -rf ${D}/usr
+}
+
+FILES_${PN} += " \
+ ${libdir}/python${PYTHON_BASEVERSION}/* \
+ ${datadir}/* \
+"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb b/meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb
new file mode 100644
index 000000000..bad9481f7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "Parallelism library for C++ - runtime files \
+ TBB is a library that helps you leverage multi-core processor \
+ performance without having to be a threading expert. It represents a \
+ higher-level, task-based parallelism that abstracts platform details \
+ and threading mechanism for performance and scalability."
+HOMEPAGE = "http://threadingbuildingblocks.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+PRDATE = "20170412"
+BRANCH = "tbb_2017"
+SRCREV = "a2cfdfe946933cbe38bffe1d8086ae36f06691a3"
+PV = "${PRDATE}+${SRCPV}"
+SRC_URI = "git://github.com/01org/tbb;branch=${BRANCH} \
+ file://cross-compile.patch \
+ file://0001-mallinfo-is-glibc-specific-API-mark-it-so.patch \
+ file://tbb.pc \
+"
+
+S = "${WORKDIR}/git"
+
+COMPILER ?= "gcc"
+COMPILER_toolchain-clang = "clang"
+
+do_compile() {
+ oe_runmake compiler=${COMPILER} arch=${HOST_ARCH} runtime=cc4
+}
+
+do_install() {
+ install -d ${D}${includedir} ${D}${libdir}/pkgconfig
+ rm ${S}/include/tbb/index.html -f
+ cp -R --no-dereference --preserve=mode,links -v ${S}/include/tbb ${D}${includedir}
+ install -m 0755 ${B}/build/linux_*_release/lib*.so* ${D}${libdir}
+ install -m 0644 ${WORKDIR}/tbb.pc ${D}${libdir}/pkgconfig
+}
+
+# fails with thumb enabled:
+# | arm-oe-linux-gnueabi-g++ -march=armv7-a -mthumb -mthumb-interwork -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a9 -mcpu=cortex-a9 -D__ARM__ -D__LINUX_ARM_ARCH__=7 -funwind-tables -mvectorize-with-neon-quad -rdynamic --sysroot=/OE/sysroots/m14tv -c -MMD -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD -fPIC -D__TBB_BUILD=1 -Wall -Wno-parentheses -Wno-non-virtual-dtor -O2 -pipe -g -feliminate-unused-debug-types -fpermissive -fvisibility-inlines-hidden -I../../src -I../../src/rml/include -I../../include ../../src/tbb/concurrent_queue.cpp
+# | {standard input}: Assembler messages:
+# | {standard input}:250: Error: thumb conditional instruction should be in IT block -- `strexeq r2,r3,[r4]'
+# ...
+# | make[1]: *** [concurrent_queue.o] Error 1
+ARM_INSTRUCTION_SET = "arm"
+SECURITY_CFLAGS_append = " -fPIC"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0001-mallinfo-is-glibc-specific-API-mark-it-so.patch b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0001-mallinfo-is-glibc-specific-API-mark-it-so.patch
new file mode 100644
index 000000000..7e66945fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0001-mallinfo-is-glibc-specific-API-mark-it-so.patch
@@ -0,0 +1,37 @@
+From 6b2b136caa68912d77ffe26143cd3da768b9ef80 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 3 Jun 2017 08:39:37 -0700
+Subject: [PATCH] mallinfo() is glibc specific API mark it so
+
+Helps compiling with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/tbbmalloc/proxy.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
+index 5ef279d..06c4872 100644
+--- a/src/tbbmalloc/proxy.cpp
++++ b/src/tbbmalloc/proxy.cpp
+@@ -185,6 +185,7 @@ int mallopt(int /*param*/, int /*value*/) __THROW
+ return 1;
+ }
+
++#ifdef __GLIBC__
+ struct mallinfo mallinfo() __THROW
+ {
+ struct mallinfo m;
+@@ -192,6 +193,7 @@ struct mallinfo mallinfo() __THROW
+
+ return m;
+ }
++#endif
+
+ #if __ANDROID__
+ // Android doesn't have malloc_usable_size, provide it to be compatible
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch
new file mode 100644
index 000000000..d54b307ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch
@@ -0,0 +1,39 @@
+Author: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+Upstream-Status: unsuitable
+---
+ build/linux.gcc.inc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: tbb2017_20170118oss/build/linux.gcc.inc
+===================================================================
+--- tbb2017_20170118oss.orig/build/linux.gcc.inc
++++ tbb2017_20170118oss/build/linux.gcc.inc
+@@ -32,8 +32,9 @@ DYLIB_KEY = -shared
+ EXPORT_KEY = -Wl,--version-script,
+ LIBDL = -ldl
+
+-CPLUS = g++
+-CONLY = gcc
++CPLUS = $(CXX)
++CONLY = $(CC)
++CPLUS_FLAGS = $(CXXFLAGS)
+ LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+ LIBS += -lpthread -lrt
+ LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
+Index: tbb2017_20170118oss/build/linux.clang.inc
+===================================================================
+--- tbb2017_20170118oss.orig/build/linux.clang.inc
++++ tbb2017_20170118oss/build/linux.clang.inc
+@@ -31,8 +31,9 @@ DYLIB_KEY = -shared
+ EXPORT_KEY = -Wl,--version-script,
+ LIBDL = -ldl
+
+-CPLUS = clang++
+-CONLY = clang
++CPLUS = $(CXX)
++CONLY = $(CC)
++CPLUS_FLAGS = $(CXXFLAGS)
+ LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+ LIBS += -lpthread -lrt
+ LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc
new file mode 100644
index 000000000..644b64fbf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc
@@ -0,0 +1,11 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: Threading Building Blocks
+Description: Intel's parallelism library for C++
+URL: http://www.threadingbuildingblocks.org/
+Version: 3.0+r018
+Libs: -L${libdir} -ltbb
+Cflags: -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/0001-do-not-strip-pdata_tools-at-do_install.patch b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/0001-do-not-strip-pdata_tools-at-do_install.patch
new file mode 100644
index 000000000..b4cdda132
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/0001-do-not-strip-pdata_tools-at-do_install.patch
@@ -0,0 +1,33 @@
+From e8be402e20cbdfbd8192a171ac9904d9362103bf Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 31 Aug 2016 01:35:40 -0400
+Subject: [PATCH] do not strip pdata_tools at do_install
+
+It caused QA Issue:
+--------------
+|ERROR: QA Issue: File '/usr/sbin/pdata_tools' from thin-provisioning-tools
+was already stripped, this will prevent future debugging! [already-stripped]
+--------------
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 4264191..ac22042 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -189,7 +189,6 @@ distclean: clean
+ install: bin/pdata_tools
+ $(INSTALL_DIR) $(BINDIR)
+ $(INSTALL_PROGRAM) bin/pdata_tools $(BINDIR)
+- $(STRIP) $(BINDIR)/pdata_tools
+ ln -s -f pdata_tools $(BINDIR)/cache_check
+ ln -s -f pdata_tools $(BINDIR)/cache_dump
+ ln -s -f pdata_tools $(BINDIR)/cache_metadata_size
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.6.3.bb b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.6.3.bb
new file mode 100755
index 000000000..c9d6690d7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.6.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Tools of dm-thin device-mapper"
+DESCRIPTION = "A suite of tools for manipulating the metadata of the dm-thin device-mapper target."
+HOMEPAGE = "https://github.com/jthornber/thin-provisioning-tools"
+LICENSE = "GPLv3"
+SECTION = "devel"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://github.com/jthornber/thin-provisioning-tools \
+ file://0001-do-not-strip-pdata_tools-at-do_install.patch \
+"
+
+SRCREV = "49bfc12e9c7956c1ac134b24afbe1a6a602ce7d5"
+
+DEPENDS += "expat libaio boost"
+
+inherit autotools-brokensep
diff --git a/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet/remove-hard-coded-include-and-lib-paths.patch b/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet/remove-hard-coded-include-and-lib-paths.patch
new file mode 100644
index 000000000..a8ab23de7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet/remove-hard-coded-include-and-lib-paths.patch
@@ -0,0 +1,43 @@
+Upstream-Status: Inappropriate [embedded specific]
+
+There are hardcode paths in configure.in eg: /usr/include, $HOME/include etc.
+These paths will cause Makefile to search host path when doing cross-compiling.
+and bitbake will prompt this as an error. So remove them.
+
+Signed-off-by: Song.Li <Song.Li@windriver.com>
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ configure.in | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index bcfd5bc..5b24947 100644
+--- a/configure.in
++++ b/configure.in
+@@ -32,21 +32,15 @@ MYPCFILES="tokyocabinet.pc"
+
+ # Building flags
+ MYCFLAGS="-std=c99 -Wall -fPIC -fsigned-char -O2"
+-MYCPPFLAGS="-I. -I\$(INCLUDEDIR) -I$HOME/include -I/usr/local/include"
++MYCPPFLAGS="-I."
+ MYCPPFLAGS="$MYCPPFLAGS -DNDEBUG -D_GNU_SOURCE=1 -D_REENTRANT -D__EXTENSIONS__"
+-MYLDFLAGS="-L. -L\$(LIBDIR) -L$HOME/lib -L/usr/local/lib"
++MYLDFLAGS="-L."
+ MYCMDLDFLAGS=""
+ MYRUNPATH="\$(LIBDIR)"
+ MYLDLIBPATHENV="LD_LIBRARY_PATH"
+ MYPOSTCMD="true"
+
+ # Building paths
+-PATH="$PATH:$HOME/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
+-PATH="$PATH:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/xpg4/bin:/usr/xpg6/bin:/usr/ucb"
+-CPATH="$HOME/include:/usr/local/include:$CPATH"
+-LIBRARY_PATH="$HOME/lib:/usr/local/lib:$LIBRARY_PATH"
+-LD_LIBRARY_PATH="$HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH"
+-PKG_CONFIG_PATH="$HOME/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
+ export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH PKG_CONFIG_PATH
+
+
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet_1.4.48.bb b/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet_1.4.48.bb
new file mode 100644
index 000000000..9f75cf047
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tokyocabinet/tokyocabinet_1.4.48.bb
@@ -0,0 +1,27 @@
+#
+# Copyright (C) 2012 - 2016 Wind River Systems, Inc.
+#
+SUMMARY = "A modern implementation of DBM"
+
+DESCRIPTION = "Tokyo Cabinet is a library of routines for managing a database. \
+The database is a simple data file containing records, each is a pair of a key \
+and a value. Every key and value is serial bytes with variable length. \
+Both binary data and character string can be used as a key and a value. \
+There is neither concept of data tables nor data types. \
+Records are organized in hash table, B+ tree, or fixed-length array."
+
+HOMEPAGE = "http://fallabs.com/tokyocabinet/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "http://fallabs.com/tokyocabinet/${BP}.tar.gz \
+ file://remove-hard-coded-include-and-lib-paths.patch \
+"
+
+SRC_URI[md5sum] = "fd03df6965f8f56dd5b8518ca43b4f5e"
+SRC_URI[sha256sum] = "a003f47c39a91e22d76bc4fe68b9b3de0f38851b160bbb1ca07a4f6441de1f90"
+
+DEPENDS = "bzip2 zlib"
+
+inherit autotools-brokensep
diff --git a/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb b/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
new file mode 100644
index 000000000..879b67b7f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "A very small and simple terminal emulator"
+SECTION = "x11/applications"
+DEPENDS = "vte9"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://main.c;start_line=5;end_line=16;md5=9ae4bf20caf291afa94530026bd15229"
+
+# 0.2 version
+SRCREV = "8586d617aed19fc75f5ae1e07270752c1b2f9a30"
+SRC_URI = "git://github.com/OSSystems/toscoterm.git"
+
+S = "${WORKDIR}/git"
+
+inherit distro_features_check gitpkgv pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_compile() {
+ oe_runmake \
+ CC="${CC}" \
+ CFLAGS="`pkg-config --cflags vte`${CFLAGS}" \
+ LDFLAGS="`pkg-config --libs vte` ${LDFLAGS}"
+}
+
+do_install() {
+ oe_runmake PREFIX="${prefix}" DESTDIR="${D}" install
+}
+
+RDEPENDS_${PN}_append_libc-glibc = " glibc-gconv-ibm437"
diff --git a/meta-openembedded/meta-oe/recipes-support/tree/tree_1.7.0.bb b/meta-openembedded/meta-oe/recipes-support/tree/tree_1.7.0.bb
new file mode 100644
index 000000000..2e8ebdb4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tree/tree_1.7.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A recursive directory listing command"
+HOMEPAGE = "http://mama.indstate.edu/users/ice/tree/"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=393a5ca445f6965873eca0259a17f833"
+
+SRC_URI = "ftp://mama.indstate.edu/linux/${BPN}/${BP}.tgz"
+SRC_URI[md5sum] = "abe3e03e469c542d8e157cdd93f4d8a6"
+SRC_URI[sha256sum] = "6957c20e82561ac4231638996e74f4cfa4e6faabc5a2f511f0b4e3940e8f7b12"
+
+# tree's default CFLAGS for Linux
+CFLAGS += "-Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
+
+EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
+
+do_configure[noexec] = "1"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/${BPN} ${D}${bindir}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-Make-udev-rules-directory-configurable.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-Make-udev-rules-directory-configurable.patch
new file mode 100644
index 000000000..2823c54f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-Make-udev-rules-directory-configurable.patch
@@ -0,0 +1,89 @@
+From a6eab413f274376cf703a608e2866118291a6185 Mon Sep 17 00:00:00 2001
+From: Amarnath Valluri <amarnath.valluri@intel.com>
+Date: Thu, 9 Feb 2017 11:02:53 +0200
+Subject: [PATCH] Make udev rules directory configurable.
+
+udev rules directory can be configurable via undevrulesdir variable. And use
+libdir, sbindir for installing librares and binaries.
+
+Upstream-Status: Inappropriate[Embedded specific]
+
+Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
+
+---
+ configure.ac | 14 +++-----------
+ data/Makefile.am | 1 -
+ src/probers/Makefile.am | 2 +-
+ tools/Makefile.am | 2 +-
+ 4 files changed, 5 insertions(+), 14 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8c4e4c2..a143397 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -227,15 +227,8 @@ if test "x$GCC" = "xyes"; then
+ LDFLAGS="-Wl,--as-needed $LDFLAGS"
+ fi
+
+-if test "$prefix" = "/usr" -o "$prefix" = "/usr/local" ; then
+- slashlibdir=/lib
+- slashsbindir=/sbin
+-else
+- slashlibdir=$prefix/lib
+- slashsbindir=$prefix/sbin
+-fi
+-AC_SUBST(slashlibdir)
+-AC_SUBST(slashsbindir)
++udevrulesdir=/lib/udev/udev.d
++AC_SUBST(udevrulesdir)
+
+ # *************
+ # Remote Access
+@@ -299,8 +292,7 @@ echo "
+ sysconfdir: ${sysconfdir}
+ localstatedir: ${localstatedir}
+ docdir: ${docdir}
+- slashlibdir: ${slashlibdir}
+- slashsbindir: ${slashsbindir}
++ udevrulesdir: ${udevrulesdir}
+ systemdsystemunitdir: ${systemdsystemunitdir}
+
+ compiler: ${CC}
+diff --git a/data/Makefile.am b/data/Makefile.am
+index 08af5f4..9329186 100644
+--- a/data/Makefile.am
++++ b/data/Makefile.am
+@@ -34,7 +34,6 @@ $(systemdservice_DATA): $(systemdservice_in_files) Makefile
+ @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
+ endif
+
+-udevrulesdir = $(slashlibdir)/udev/rules.d
+ udevrules_DATA = 80-udisks.rules
+
+ pkgconfigdir = $(datadir)/pkgconfig
+diff --git a/src/probers/Makefile.am b/src/probers/Makefile.am
+index 01c693b..6a0361a 100644
+--- a/src/probers/Makefile.am
++++ b/src/probers/Makefile.am
+@@ -20,7 +20,7 @@ INCLUDES = \
+ # TODO: ideally move most of this to udev and/or util-linux
+ #
+
+-udevhelperdir = $(slashlibdir)/udev
++udevhelperdir = $(libdir)/udev
+ udevhelper_PROGRAMS = udisks-part-id \
+ udisks-probe-sas-expander \
+ $(NULL)
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 18325f7..0aaec11 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -54,7 +54,7 @@ udisks_LDADD = \
+ $(DBUS_GLIB_LIBS) \
+ $(POLKIT_DBUS_LIBS)
+
+-slashsbin_PROGRAMS = umount.udisks
++sbin_PROGRAMS = umount.udisks
+
+ umount_udisks_SOURCES = umount-udisks.c
+ umount_udisks_LDADD = $(DBUS_GLIB_LIBS) $(POLKIT_DBUS_LIBS)
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-fix-build-with-newer-glibc-versions.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-fix-build-with-newer-glibc-versions.patch
new file mode 100644
index 000000000..8b4f44124
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/0001-fix-build-with-newer-glibc-versions.patch
@@ -0,0 +1,27 @@
+From 054ad6a06cfac7c3d172d53cd901204079a53ec3 Mon Sep 17 00:00:00 2001
+From: Alexandre Rostovtsev <tetromino@gentoo.org>
+Date: Fri, 29 May 2015 21:09:39 -0400
+Subject: [PATCH] fix build with newer glibc versions
+
+https://bugs.freedesktop.org/show_bug.cgi?id=90778
+
+Upstream-Status: Applied [1]
+
+[1] http://cgit.freedesktop.org/udisks/commit/?h=udisks1&id=9829152b12a8924d2e091a00133ed1a3a7ba75c0
+
+---
+ src/helpers/job-drive-detach.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/helpers/job-drive-detach.c b/src/helpers/job-drive-detach.c
+index eeafcab..d122a1f 100644
+--- a/src/helpers/job-drive-detach.c
++++ b/src/helpers/job-drive-detach.c
+@@ -18,6 +18,7 @@
+ *
+ */
+
++#include <sys/stat.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <errno.h>
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks/optional-depends.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/optional-depends.patch
new file mode 100644
index 000000000..a890954fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/optional-depends.patch
@@ -0,0 +1,498 @@
+From e8b3fbfa3d6a11eee25db2dc0f31f439aaf0b65a Mon Sep 17 00:00:00 2001
+From: Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
+Date: Thu, 26 May 2011 17:30:04 -0300
+Subject: [PATCH] Allow disabling atasmart, lvm2 and devicemapper support.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=37647
+
+---
+ configure.ac | 53 +++++++++++++++++++++++++++++++++++++++----------
+ src/adapter-private.h | 1 -
+ src/adapter.c | 1 -
+ src/daemon.c | 4 ++++
+ src/device-private.c | 2 +-
+ src/device-private.h | 5 ++---
+ src/device.c | 23 +++++++++++++++++----
+ src/expander-private.h | 1 -
+ src/expander.c | 1 -
+ src/helpers/Makefile.am | 20 +++++++++++++------
+ src/helpers/partutil.c | 3 ++-
+ src/port-private.h | 1 -
+ src/probers/Makefile.am | 8 ++++++--
+ tools/udisks.c | 10 ++++++++--
+ 14 files changed, 99 insertions(+), 34 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9454423..8c4e4c2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -155,13 +155,33 @@ PKG_CHECK_MODULES(POLKIT_GOBJECT_1, [polkit-gobject-1 >= 0.97])
+ AC_SUBST(POLKIT_GOBJECT_1_CFLAGS)
+ AC_SUBST(POLKIT_GOBJECT_1_LIBS)
+
+-PKG_CHECK_MODULES(LIBPARTED, [libparted >= 1.8.8])
+-AC_SUBST(LIBPARTED_CFLAGS)
+-AC_SUBST(LIBPARTED_LIBS)
+-
+-PKG_CHECK_MODULES(DEVMAPPER, [devmapper >= 1.02])
+-AC_SUBST(DEVMAPPER_CFLAGS)
+-AC_SUBST(DEVMAPPER_LIBS)
++have_parted=no
++AC_ARG_ENABLE(parted, AS_HELP_STRING([--disable-parted], [disable disk partitioning]))
++if test "x$enable_parted" != "xno"; then
++ PKG_CHECK_MODULES(LIBPARTED, [libparted >= 1.8.8],
++ [AC_DEFINE(USE_PARTED, 1, [Define if parted should be used]) have_parted=yes],
++ have_parted=no)
++ AC_SUBST(LIBPARTED_CFLAGS)
++ AC_SUBST(LIBPARTED_LIBS)
++ if test "x$have_parted" = xno -a "x$enable_parted" = xyes; then
++ AC_MSG_ERROR([parted support requested but libraries not found])
++ fi
++fi
++AM_CONDITIONAL(HAVE_PARTED, [test "$have_parted" = "yes"])
++
++have_devmapper=no
++AC_ARG_ENABLE(devmapper, AS_HELP_STRING([--disable-devmapper], [disable device mapper support]))
++if test "x$enable_devmapper" != "xno"; then
++ PKG_CHECK_MODULES(DEVMAPPER, [devmapper >= 1.02],
++ [AC_DEFINE(HAVE_DEVMAPPER, 1, [Define if device mapper is available]) have_devmapper=yes],
++ have_devmapper=no)
++ AC_SUBST(DEVMAPPER_CFLAGS)
++ AC_SUBST(DEVMAPPER_LIBS)
++ if test "x$have_devmapper" = xno -a "x$enable_devmapper" = xyes; then
++ AC_MSG_ERROR([devmapper support requested but libraries not found])
++ fi
++fi
++AM_CONDITIONAL(HAVE_DEVMAPPER, [test "$have_devmapper" = "yes"])
+
+ have_lvm2=no
+ AC_ARG_ENABLE(lvm2, AS_HELP_STRING([--enable-lvm2], [enable LVM2 support]))
+@@ -185,9 +205,19 @@ if test "x$enable_dmmp" = "xyes"; then
+ fi
+ AM_CONDITIONAL(HAVE_DMMP, [test "$have_dmmp" = "yes"])
+
+-PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14])
+-AC_SUBST(LIBATASMART_CFLAGS)
+-AC_SUBST(LIBATASMART_LIBS)
++have_libatasmart=no
++AC_ARG_ENABLE(libatasmart, AS_HELP_STRING([--disable-libatasmart], [disable libatasmart support]))
++if test "x$enable_libatasmart" != "xno"; then
++ PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14],
++ [AC_DEFINE(HAVE_LIBATASMART, 1, [Define if libatasmart is available]) have_libatasmart=yes],
++ have_libatasmart=no)
++ AC_SUBST(LIBATASMART_CFLAGS)
++ AC_SUBST(LIBATASMART_LIBS)
++ if test "x$have_libatasmart" = xno -a "x$enable_libatasmart" = xyes; then
++ AC_MSG_ERROR([libatasmart support requested but libraries not found])
++ fi
++fi
++AM_CONDITIONAL(HAVE_LIBATASMART, [test "$have_libatasmart" = "yes"])
+
+ PKG_CHECK_MODULES(LIBUDEV, [libudev >= 143])
+ AC_SUBST(LIBUDEV_CFLAGS)
+@@ -278,9 +308,12 @@ echo "
+ cppflags: ${CPPFLAGS}
+ xsltproc: ${XSLTPROC}
+
++ Parted support: ${have_parted}
++ Device Mapper support: ${have_devmapper}
+ LVM2 support: ${have_lvm2}
+ dm-multipath: ${have_dmmp}
+ Remote Access: ${remote_access}
++ libatasmart support: ${have_libatasmart}
+
+ Maintainer mode: ${USE_MAINTAINER_MODE}
+ Profiling: ${enable_profiling}
+diff --git a/src/adapter-private.h b/src/adapter-private.h
+index 3409e21..ef584e3 100644
+--- a/src/adapter-private.h
++++ b/src/adapter-private.h
+@@ -23,7 +23,6 @@
+
+ #include <dbus/dbus-glib.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+
+ #include "types.h"
+
+diff --git a/src/adapter.c b/src/adapter.c
+index 65e05b0..45db8c8 100644
+--- a/src/adapter.c
++++ b/src/adapter.c
+@@ -30,7 +30,6 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+
+ #include "daemon.h"
+ #include "adapter.h"
+diff --git a/src/daemon.c b/src/daemon.c
+index fafcf9a..14e952f 100644
+--- a/src/daemon.c
++++ b/src/daemon.c
+@@ -1748,6 +1748,7 @@ mdstat_changed_event (GIOChannel *channel,
+ return TRUE;
+ }
+
++#ifdef HAVE_LIBATASMART
+ static gboolean
+ refresh_ata_smart_data (Daemon *daemon)
+ {
+@@ -1776,6 +1777,7 @@ refresh_ata_smart_data (Daemon *daemon)
+
+ return FALSE;
+ }
++#endif
+
+ static gboolean
+ register_disks_daemon (Daemon *daemon)
+@@ -1987,12 +1989,14 @@ daemon_new (void)
+ mount_file_clean_stale (l);
+ g_list_free (l);
+
++#ifdef HAVE_LIBATASMART
+ /* set up timer for refreshing ATA SMART data - we don't want to refresh immediately because
+ * when adding a device we also do this...
+ */
+ daemon->priv->ata_smart_refresh_timer_id = g_timeout_add_seconds (ATA_SMART_REFRESH_INTERVAL_SECONDS,
+ (GSourceFunc) refresh_ata_smart_data,
+ daemon);
++#endif
+
+ PROFILE ("daemon_new(): end");
+ return daemon;
+diff --git a/src/device-private.c b/src/device-private.c
+index 45418ce..fb1d959 100644
+--- a/src/device-private.c
++++ b/src/device-private.c
+@@ -1390,7 +1390,7 @@ device_set_drive_ata_smart_time_collected (Device *device,
+
+ void
+ device_set_drive_ata_smart_status (Device *device,
+- SkSmartOverall value)
++ guint value)
+ {
+ if (G_UNLIKELY (device->priv->drive_ata_smart_status != value))
+ {
+diff --git a/src/device-private.h b/src/device-private.h
+index 32a9bd0..8c57c13 100644
+--- a/src/device-private.h
++++ b/src/device-private.h
+@@ -23,7 +23,6 @@
+
+ #include <dbus/dbus-glib.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+
+ #include "types.h"
+
+@@ -228,7 +227,7 @@ struct DevicePrivate
+
+ gboolean drive_ata_smart_is_available;
+ guint64 drive_ata_smart_time_collected;
+- SkSmartOverall drive_ata_smart_status;
++ guint drive_ata_smart_status;
+ void *drive_ata_smart_blob;
+ gsize drive_ata_smart_blob_size;
+
+@@ -396,7 +395,7 @@ void device_set_holders_objpath (Device *device, GStrv value);
+
+ void device_set_drive_ata_smart_is_available (Device *device, gboolean value);
+ void device_set_drive_ata_smart_time_collected (Device *device, guint64 value);
+-void device_set_drive_ata_smart_status (Device *device, SkSmartOverall value);
++void device_set_drive_ata_smart_status (Device *device, guint value);
+ void device_set_drive_ata_smart_blob_steal (Device *device, gchar *blob, gsize blob_size);
+
+ G_END_DECLS
+diff --git a/src/device.c b/src/device.c
+index 2ae7f38..d73f9d6 100644
+--- a/src/device.c
++++ b/src/device.c
+@@ -50,7 +50,9 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+ #include <gudev/gudev.h>
++#ifdef HAVE_LIBATASMART
+ #include <atasmart.h>
++#endif
+
+ #include "daemon.h"
+ #include "device.h"
+@@ -664,10 +666,14 @@ get_property (GObject *object,
+ case PROP_DRIVE_ATA_SMART_STATUS:
+ {
+ const gchar *status;
+- if (device->priv->drive_ata_smart_status == (SkSmartOverall) - 1)
++#ifdef HAVE_LIBATASMART
++ if (device->priv->drive_ata_smart_status == (guint) - 1)
+ status = "";
+ else
+ status = sk_smart_overall_to_string (device->priv->drive_ata_smart_status);
++#else
++ status = "";
++#endif
+ g_value_set_string (value, status);
+ }
+ break;
+@@ -5144,6 +5150,7 @@ device_new (Daemon *daemon,
+ goto out;
+ }
+
++#ifdef HAVE_LIBATASMART
+ /* if just added, update the smart data if applicable */
+ if (device->priv->drive_ata_smart_is_available)
+ {
+@@ -5151,6 +5158,7 @@ device_new (Daemon *daemon,
+ gchar *ata_smart_refresh_data_options[] = { NULL };
+ device_drive_ata_smart_refresh_data (device, ata_smart_refresh_data_options, NULL);
+ }
++#endif
+
+ PROFILE ("device_new(native_path=%s): end", native_path);
+ out:
+@@ -9840,16 +9848,18 @@ drive_ata_smart_refresh_data_completed_cb (DBusGMethodInvocation *context,
+ const char *stdout,
+ gpointer user_data)
+ {
++#ifdef HAVE_LIBATASMART
+ gint rc;
+- SkDisk *d;
++ SkDisk *d = NULL;
++ SkSmartOverall overall;
+ gchar *blob;
+ gsize blob_size;
+ time_t time_collected;
+- SkSmartOverall overall;
++#endif
+
+ PROFILE ("drive_ata_smart_refresh_data_completed_cb(device=%s) start", device->priv->native_path);
+
+- d = NULL;
++#ifdef HAVE_LIBATASMART
+ blob = NULL;
+
+ if (job_was_cancelled || stdout == NULL)
+@@ -9953,6 +9963,11 @@ drive_ata_smart_refresh_data_completed_cb (DBusGMethodInvocation *context,
+ g_free (blob);
+ if (d != NULL)
+ sk_disk_free (d);
++
++#else
++ throw_error (context, ERROR_FAILED, "libatasmart support disabled");
++#endif
++
+ PROFILE ("drive_ata_smart_refresh_data_completed_cb(device=%s) end", device->priv->native_path);
+ }
+
+diff --git a/src/expander-private.h b/src/expander-private.h
+index ef4f440..98a8300 100644
+--- a/src/expander-private.h
++++ b/src/expander-private.h
+@@ -23,7 +23,6 @@
+
+ #include <dbus/dbus-glib.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+
+ #include "types.h"
+
+diff --git a/src/expander.c b/src/expander.c
+index 734ec0a..e799f13 100644
+--- a/src/expander.c
++++ b/src/expander.c
+@@ -34,7 +34,6 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+ #include <stdlib.h>
+
+ #include "daemon.h"
+diff --git a/src/helpers/Makefile.am b/src/helpers/Makefile.am
+index 4b863c0..d3ec4e9 100644
+--- a/src/helpers/Makefile.am
++++ b/src/helpers/Makefile.am
+@@ -19,15 +19,9 @@ INCLUDES = \
+
+ libexec_PROGRAMS = \
+ udisks-helper-mkfs \
+- udisks-helper-delete-partition \
+- udisks-helper-create-partition \
+- udisks-helper-modify-partition \
+- udisks-helper-create-partition-table \
+ udisks-helper-change-filesystem-label \
+ udisks-helper-linux-md-remove-component \
+ udisks-helper-fstab-mounter \
+- udisks-helper-ata-smart-collect \
+- udisks-helper-ata-smart-selftest \
+ udisks-helper-drive-detach \
+ udisks-helper-drive-poll \
+ udisks-helper-linux-md-check \
+@@ -48,6 +42,13 @@ udisks_helper_mkfs_SOURCES = job-shared.h job-mkfs.c
+ udisks_helper_mkfs_CPPFLAGS = $(AM_CPPFLAGS)
+ udisks_helper_mkfs_LDADD = $(GLIB_LIBS)
+
++if HAVE_PARTED
++libexec_PROGRAMS += \
++ udisks-helper-delete-partition \
++ udisks-helper-create-partition \
++ udisks-helper-modify-partition \
++ udisks-helper-create-partition-table
++
+ udisks_helper_delete_partition_SOURCES = job-shared.h job-delete-partition.c
+ udisks_helper_delete_partition_CPPFLAGS = $(AM_CPPFLAGS)
+ udisks_helper_delete_partition_LDADD = $(GLIB_LIBS) libpartutil.la
+@@ -63,11 +64,17 @@ udisks_helper_modify_partition_LDADD = $(GLIB_LIBS) libpartutil.la
+ udisks_helper_create_partition_table_SOURCES = job-shared.h job-create-partition-table.c
+ udisks_helper_create_partition_table_CPPFLAGS = $(AM_CPPFLAGS)
+ udisks_helper_create_partition_table_LDADD = $(GLIB_LIBS) libpartutil.la
++endif
+
+ udisks_helper_change_filesystem_label_SOURCES = job-shared.h job-change-filesystem-label.c
+ udisks_helper_change_filesystem_label_CPPFLAGS = $(AM_CPPFLAGS)
+ udisks_helper_change_filesystem_label_LDADD = $(GLIB_LIBS)
+
++if HAVE_LIBATASMART
++libexec_PROGRAMS += \
++ udisks-helper-ata-smart-collect \
++ udisks-helper-ata-smart-selftest
++
+ udisks_helper_ata_smart_selftest_SOURCES = job-shared.h job-ata-smart-selftest.c
+ udisks_helper_ata_smart_selftest_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS) $(GLIB_CFLAGS)
+ udisks_helper_ata_smart_selftest_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
+@@ -75,6 +82,7 @@ udisks_helper_ata_smart_selftest_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
+ udisks_helper_ata_smart_collect_SOURCES = job-ata-smart-collect.c
+ udisks_helper_ata_smart_collect_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS) $(GLIB_CFLAGS)
+ udisks_helper_ata_smart_collect_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
++endif
+
+ udisks_helper_linux_md_remove_component_SOURCES = job-shared.h job-linux-md-remove-component.c
+ udisks_helper_linux_md_remove_component_CPPFLAGS = $(AM_CPPFLAGS)
+diff --git a/src/helpers/partutil.c b/src/helpers/partutil.c
+index 72a8fe3..8893a39 100644
+--- a/src/helpers/partutil.c
++++ b/src/helpers/partutil.c
+@@ -62,7 +62,6 @@ DEBUG (const gchar *format,
+ # include <config.h>
+ #endif
+
+-#define USE_PARTED
+ #ifdef USE_PARTED
+ #include <parted/parted.h>
+ #endif
+@@ -928,6 +927,7 @@ part_table_parse_apple (int fd,
+ return p;
+ }
+
++#ifdef USE_PARTED
+ static PartitionTable *
+ part_table_load_from_disk_from_file (char *device_file)
+ {
+@@ -948,6 +948,7 @@ part_table_load_from_disk_from_file (char *device_file)
+ out:
+ return ret;
+ }
++#endif
+
+ PartitionTable *
+ part_table_load_from_disk (int fd)
+diff --git a/src/port-private.h b/src/port-private.h
+index cc48376..a91532f 100644
+--- a/src/port-private.h
++++ b/src/port-private.h
+@@ -23,7 +23,6 @@
+
+ #include <dbus/dbus-glib.h>
+ #include <gudev/gudev.h>
+-#include <atasmart.h>
+
+ #include "types.h"
+
+diff --git a/src/probers/Makefile.am b/src/probers/Makefile.am
+index 06bb566..01c693b 100644
+--- a/src/probers/Makefile.am
++++ b/src/probers/Makefile.am
+@@ -22,8 +22,6 @@ INCLUDES = \
+
+ udevhelperdir = $(slashlibdir)/udev
+ udevhelper_PROGRAMS = udisks-part-id \
+- udisks-dm-export \
+- udisks-probe-ata-smart \
+ udisks-probe-sas-expander \
+ $(NULL)
+
+@@ -35,17 +33,23 @@ udisks_part_id_SOURCES = part-id.c
+ udisks_part_id_CPPFLAGS = $(AM_CPPFLAGS) $(LIBUDEV_CFLAGS)
+ udisks_part_id_LDADD = $(GLIB_LIBS) $(LIBUDEV_LIBS) $(top_builddir)/src/helpers/libpartutil.la
+
++if HAVE_DEVMAPPER
++udevhelper_PROGRAMS += udisks-dm-export
+ udisks_dm_export_SOURCES = udisks-dm-export.c
+ udisks_dm_export_CPPFLAGS = $(AM_CPPFLAGS) $(DEVMAPPER_CFLAGS) $(GLIB_CFLAGS)
+ udisks_dm_export_LDADD = $(DEVMAPPER_LIBS) $(GLIB_LIBS)
++endif
+
+ udisks_lvm_pv_export_SOURCES = udisks-lvm-pv-export.c
+ udisks_lvm_pv_export_CPPFLAGS = $(AM_CPPFLAGS) $(DEVMAPPER_CFLAGS) $(LVM2_CFLAGS) $(GLIB_CFLAGS)
+ udisks_lvm_pv_export_LDADD = $(DEVMAPPER_LIBS) $(LVM2_LIBS) $(GLIB_LIBS)
+
++if HAVE_LIBATASMART
++udevhelper_PROGRAMS += udisks-probe-ata-smart
+ udisks_probe_ata_smart_SOURCES = udisks-probe-ata-smart.c
+ udisks_probe_ata_smart_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS)
+ udisks_probe_ata_smart_LDADD = $(LIBATASMART_LIBS)
++endif
+
+ udisks_probe_sas_expander_SOURCES = udisks-probe-sas-expander.c
+ udisks_probe_sas_expander_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS)
+diff --git a/tools/udisks.c b/tools/udisks.c
+index 97e80d7..d30159b 100644
+--- a/tools/udisks.c
++++ b/tools/udisks.c
+@@ -43,7 +43,9 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+
++#ifdef HAVE_LIBATASMART
+ #include <atasmart.h>
++#endif
+
+ #include "udisks-daemon-glue.h"
+ #include "udisks-device-glue.h"
+@@ -983,6 +985,7 @@ end_highlight (void)
+ g_print ("\x1B[0m");
+ }
+
++#ifdef HAVE_LIBATASMART
+ static const gchar *
+ ata_smart_status_to_desc (const gchar *status,
+ gboolean *out_highlight)
+@@ -1163,6 +1166,7 @@ print_ata_smart_attr (SkDisk *d,
+ g_free (threshold_str);
+ g_free (pretty);
+ }
++#endif
+
+ static void
+ do_show_info (const char *object_path)
+@@ -1445,7 +1449,7 @@ do_show_info (const char *object_path)
+ g_print (" if speed: %" G_GINT64_FORMAT " bits/s\n", props->drive_connection_speed);
+
+ /* ------------------------------------------------------------------------------------------------- */
+-
++#ifdef HAVE_LIBATASMART
+ if (!props->drive_ata_smart_is_available)
+ {
+ g_print (" ATA SMART: not available\n");
+@@ -1498,7 +1502,9 @@ do_show_info (const char *object_path)
+ }
+
+ }
+-
++#else
++ g_print (" ATA SMART: not supported\n");
++#endif
+ /* ------------------------------------------------------------------------------------------------- */
+
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks/udisks-1.0.5-fix-service-file.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/udisks-1.0.5-fix-service-file.patch
new file mode 100644
index 000000000..d4efa93dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks/udisks-1.0.5-fix-service-file.patch
@@ -0,0 +1,32 @@
+From a4f6aa5be37ae6e2194c9ded2ea8c1da330f5694 Mon Sep 17 00:00:00 2001
+From: David King <amigadave@amigadave.com>
+Date: Thu, 2 Jul 2015 13:49:22 +0100
+Subject: [PATCH] Fix systemd service file
+
+udisks-daemon is installed to $(libexecdir), not $(prefix)/lib/udisks.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1238664
+https://bugs.freedesktop.org/show_bug.cgi?id=91191
+
+Taken-From: [1]
+[1] http://pkgs.fedoraproject.org/cgit/udisks.git/tree/udisks-1.0.5-fix-service-file.patch
+
+Upstream-Status: Pending
+
+---
+ data/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/Makefile.am b/data/Makefile.am
+index 411ea0f..08af5f4 100644
+--- a/data/Makefile.am
++++ b/data/Makefile.am
+@@ -31,7 +31,7 @@ systemdservicedir = $(systemdsystemunitdir)
+ systemdservice_DATA = $(systemdservice_in_files:.service.in=.service)
+
+ $(systemdservice_DATA): $(systemdservice_in_files) Makefile
+- @sed -e "s|\@libexecdir\@|$(prefix)/lib/udisks|" $< > $@
++ @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
+ endif
+
+ udevrulesdir = $(slashlibdir)/udev/rules.d
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-data-fix-out-of-tree-build.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-data-fix-out-of-tree-build.patch
new file mode 100644
index 000000000..1cbd87751
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-data-fix-out-of-tree-build.patch
@@ -0,0 +1,35 @@
+From 7fdd4acdf6daf95c5cc74e968f4710513c8ddaea Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 23 Mar 2018 18:33:52 +0100
+Subject: [PATCH] data: fix out of tree build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| sed: can't read udisks2.service.in: No such file or directory
+
+Upstream-Status: Submitted [1]
+
+[1] https://github.com/storaged-project/udisks/pull/510
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ data/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/Makefile.am b/data/Makefile.am
+index ddf9e3d6..b38928c8 100644
+--- a/data/Makefile.am
++++ b/data/Makefile.am
+@@ -22,7 +22,7 @@ systemdservicedir = $(systemdsystemunitdir)
+ systemdservice_DATA = $(systemdservice_in_files:.service.in=.service)
+
+ $(systemdservice_DATA): udisks2.service.in Makefile
+- @sed -e "s|\@udisksdprivdir\@|$(libexecdir)/udisks2|" udisks2.service.in > udisks2.service
++ @sed -e "s|\@udisksdprivdir\@|$(libexecdir)/udisks2|" $(srcdir)/udisks2.service.in > udisks2.service
+ endif
+
+ udevrulesdir = $(udevdir)/rules.d
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/non-gnu-libc.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/non-gnu-libc.patch
new file mode 100644
index 000000000..98e6c75f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/non-gnu-libc.patch
@@ -0,0 +1,26 @@
+musl does not define __GNUC_PREREQ therefore check for C library being glibc
+if not then define the macro
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: udisks-2.1.7/udisks/udisksclient.c
+===================================================================
+--- udisks-2.1.7.orig/udisks/udisksclient.c
++++ udisks-2.1.7/udisks/udisksclient.c
+@@ -27,8 +27,15 @@
+ #include "udisksobjectinfo.h"
+
+ /* For __GNUC_PREREQ usage below */
+-#ifdef __GNUC__
++#ifdef __GLIBC__
+ # include <features.h>
++#else
++#if defined(__GNUC__)
++#define __GNUC_PREREQ(__maj, __min) \
++ (__GNUC__ > (__maj) || __GNUC__ == (__maj) && __GNUC_MINOR__ >= (__min))
++#else
++#define __GNUC_PREREQ(__maj, __min) 0
++#endif
+ #endif
+
+ /**
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.6.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.6.bb
new file mode 100644
index 000000000..4d22afd0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.6.bb
@@ -0,0 +1,49 @@
+SUMMARY = "udisks provides dbus interfaces for disks and storage devices"
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd79f6dbbffdbc8e86b086a8f0c0ef43"
+
+DEPENDS = " \
+ acl \
+ libatasmart \
+ polkit \
+ libgudev \
+ dbus-glib \
+ glib-2.0 \
+ libblockdev \
+ intltool-native \
+ gnome-common-native \
+ libxslt-native \
+"
+DEPENDS += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+RDEPENDS_${PN} = "acl"
+
+SRC_URI = " \
+ git://github.com/storaged-project/udisks.git \
+ file://0001-data-fix-out-of-tree-build.patch \
+ file://non-gnu-libc.patch \
+"
+SRCREV = "b6471f2e99f6aa1133af0de658f1fa05c748932c"
+S = "${WORKDIR}/git"
+
+CVE_PRODUCT = "udisks"
+
+inherit autotools systemd gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-man --disable-gtk-doc"
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1/ \
+ ${datadir}/polkit-1 \
+ ${datadir}/bash-completion \
+ ${libdir}/polkit-1/extensions/*.so \
+ ${nonarch_base_libdir}/udev/* \
+ ${exec_prefix}${nonarch_base_libdir}/udisks2/* \
+ ${systemd_system_unitdir} \
+"
+
+PACKAGES =+ "${PN}-libs"
+FILES_${PN}-libs = "${libdir}/lib*${SOLIBS}"
+
+SYSTEMD_SERVICE_${PN} = "${BPN}.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb
new file mode 100644
index 000000000..e33266001
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "A storage daemon that implements well-defined D-Bus interfaces that can be used to query and manipulate storage devices."
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=73d83aebe7e4b62346afde80e0e94273"
+
+DEPENDS = "libatasmart sg3-utils polkit libgudev dbus-glib glib-2.0 intltool-native \
+ dbus-glib-native \
+"
+# optional dependencies: device-mapper parted
+
+DEPENDS += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ dbus-glib-native \
+"
+
+SRC_URI = " \
+ http://hal.freedesktop.org/releases/${BPN}-${PV}.tar.gz;name=${BPN} \
+ file://optional-depends.patch \
+ file://0001-fix-build-with-newer-glibc-versions.patch \
+ file://udisks-1.0.5-fix-service-file.patch \
+ file://0001-Make-udev-rules-directory-configurable.patch \
+"
+
+SRC_URI[udisks.md5sum] = "70d48dcfe523a74cd7c7fbbc2847fcdd"
+SRC_URI[udisks.sha256sum] = "f2ec82eb0ea7e01dc299b5b29b3c18cdf861236ec43dcff66b3552b4b31c6f71"
+
+inherit autotools-brokensep systemd gtk-doc
+
+PACKAGECONFIG ??= "libdevmapper"
+PACKAGECONFIG[libdevmapper] = "--enable-devmapper,--disable-devmapper,libdevmapper"
+PACKAGECONFIG[parted] = "--enable-parted,--disable-parted,parted"
+
+EXTRA_OECONF = "--disable-man-pages --libdir=${base_libdir} --sbindir=${base_sbindir}"
+EXTRA_OEMAKE = "udevrulesdir=${nonarch_base_libdir}/udev/rules.d/"
+
+FILES_${PN} += "${libdir}/polkit-1/extensions/*.so \
+ ${datadir}/dbus-1/ \
+ ${datadir}/polkit-1 \
+ ${nonarch_base_libdir}/udev/* \
+"
+
+FILES_${PN}-dbg += "${nonarch_base_libdir}/udev/.debug"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "udisks.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-Add-support-for-aarch64.patch b/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-Add-support-for-aarch64.patch
new file mode 100644
index 000000000..391b0e68b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-Add-support-for-aarch64.patch
@@ -0,0 +1,80 @@
+From 82f44f53b9a9766c2ec816f237506beb953eb332 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Wed, 29 Oct 2014 14:18:28 +0100
+Subject: [PATCH] Add support for aarch64
+
+* include/private/gcconfig.h: Add support for aarch64.
+
+---
+ sigscheme/libgcroots/include/private/gcconfig.h | 37 +++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/sigscheme/libgcroots/include/private/gcconfig.h b/sigscheme/libgcroots/include/private/gcconfig.h
+index 4d42b03..0f13db6 100644
+--- a/sigscheme/libgcroots/include/private/gcconfig.h
++++ b/sigscheme/libgcroots/include/private/gcconfig.h
+@@ -62,6 +62,13 @@
+ # endif
+
+ /* Determine the machine type: */
++# if defined(__aarch64__)
++# define AARCH64
++# if !defined(LINUX)
++# define NOSYS
++# define mach_type_known
++# endif
++# endif
+ # if defined(__arm__) || defined(__thumb__)
+ # define ARM32
+ # if !defined(LINUX) && !defined(NETBSD)
+@@ -231,6 +238,10 @@
+ # define IA64
+ # define mach_type_known
+ # endif
++# if defined(LINUX) && defined(__aarch64__)
++# define AARCH64
++# define mach_type_known
++# endif
+ # if defined(LINUX) && defined(__arm__)
+ # define ARM32
+ # define mach_type_known
+@@ -504,6 +515,7 @@
+ /* running Amdahl UTS4 */
+ /* S390 ==> 390-like machine */
+ /* running LINUX */
++ /* AARCH64 ==> ARM AArch64 */
+ /* ARM32 ==> Intel StrongARM */
+ /* IA64 ==> Intel IPF */
+ /* (e.g. Itanium) */
+@@ -1724,6 +1736,31 @@
+ # endif
+ # endif
+
++# ifdef AARCH64
++# define CPP_WORDSZ 64
++# define MACH_TYPE "AARCH64"
++# define ALIGNMENT 8
++# ifndef HBLKSIZE
++# define HBLKSIZE 4096
++# endif
++# ifdef LINUX
++# define OS_TYPE "LINUX"
++# define LINUX_STACKBOTTOM
++# define DYNAMIC_LOADING
++ extern int __data_start[];
++# define DATASTART ((ptr_t)__data_start)
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# endif
++# ifdef NOSYS
++ /* __data_start is usually defined in the target linker script. */
++ extern int __data_start[];
++# define DATASTART ((ptr_t)__data_start)
++ extern void *__stack_base__;
++# define STACKBOTTOM ((ptr_t)__stack_base__)
++# endif
++# endif
++
+ # ifdef ARM32
+ # define CPP_WORDSZ 32
+ # define MACH_TYPE "ARM32"
diff --git a/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-fix-bug-for-cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-fix-bug-for-cross-compile.patch
new file mode 100644
index 000000000..0c8f02d6c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uim/uim/0001-fix-bug-for-cross-compile.patch
@@ -0,0 +1,26 @@
+From 08b5e51224ed95b1e76e99873b5f9f59840b0a74 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Fri, 21 Aug 2015 15:58:42 +0900
+Subject: [PATCH] fix bug for cross compile
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9be879c..9249bfd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1208,8 +1208,8 @@ AC_HELP_STRING([--with-libedit[=DIR], Enable libedit support
+ if test "x$use_libedit" != "xno"; then
+ saved_CPPFLAGS=$CPPFLAGS
+ saved_LDFLAGS=$LDFLAGS
+- CPPFLAGS="${CPPFLAGS} -I$libedit_path/include"
+- LDFLAGS="${LDFLAGS} -L$libedit_path/lib"
++ CPPFLAGS="${CPPFLAGS} "
++ LDFLAGS="${LDFLAGS} "
+ AC_CHECK_LIB(curses, tgetent, LIBEDIT_LIBS="-lcurses",
+ [AC_CHECK_LIB(ncurses, tgetent, LIBEDIT_LIBS="-lncurses",
+ AC_MSG_WARN("libedit needs libcurses or libncurses. disabled...")
diff --git a/meta-openembedded/meta-oe/recipes-support/uim/uim/uim-module-manager.patch b/meta-openembedded/meta-oe/recipes-support/uim/uim/uim-module-manager.patch
new file mode 100644
index 000000000..3078af058
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uim/uim/uim-module-manager.patch
@@ -0,0 +1,21 @@
+From d61495d3fb039842b82df44184c67eb3c1256136 Mon Sep 17 00:00:00 2001
+From: Bian Naimeng <biannm@cn.fujitsu.com>
+Date: Fri, 26 Jun 2015 12:57:48 +0900
+
+---
+ scm/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scm/Makefile.am b/scm/Makefile.am
+index 14d9393..e8a1083 100644
+--- a/scm/Makefile.am
++++ b/scm/Makefile.am
+@@ -119,7 +119,7 @@ if EXPAT
+ module_names += "yahoo-jp"
+ endif
+
+-UIM_MODULE_MANAGER = $(top_builddir)/uim/uim-module-manager
++UIM_MODULE_MANAGER = uim-module-manager
+ UIM_MODULE_MANAGER_ENV = \
+ LIBUIM_SYSTEM_SCM_FILES=$(abs_top_srcdir)/sigscheme/lib \
+ LIBUIM_SCM_FILES=$(abs_srcdir) \
diff --git a/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.6.bb b/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.6.bb
new file mode 100644
index 000000000..af28895ee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.6.bb
@@ -0,0 +1,144 @@
+DESCRIPTION = "A multilingual user input method library"
+HOMEPAGE = "http://uim.freedesktop.org/"
+LICENSE = "BSD-3-Clause & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=32463fd29aa303fb2360faeeae17256b"
+SECTION = "inputmethods"
+
+SRC_URI = "http://uim.googlecode.com/files/uim-${PV}.tar.bz2"
+
+SRC_URI_append_class-target = " file://uim-module-manager.patch \
+ file://0001-fix-bug-for-cross-compile.patch \
+ file://0001-Add-support-for-aarch64.patch \
+"
+SRC_URI[md5sum] = "ecea4c597bab1fd4ba98ea84edcece59"
+SRC_URI[sha256sum] = "7b1ea803c73f3478917166f04f67cce6e45ad7ea5ab6df99b948c17eb1cb235f"
+
+DEPENDS = "anthy fontconfig libxft libxt glib-2.0 ncurses intltool"
+DEPENDS_append_class-target = " intltool-native gtk+ gtk+3 uim-native takao-fonts"
+
+RDEPENDS_uim = "libuim0 libedit"
+RDEPENDS_uim-anthy = "takao-fonts anthy libanthy0"
+RDEPENDS_uim-anthy_append_libc-glibc = " glibc-utils glibc-gconv-euc-jp"
+
+LEAD_SONAME = "libuim.so.1"
+
+inherit distro_features_check autotools pkgconfig gettext qemu gtk-immodules-cache
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+GTKIMMODULES_PACKAGES = "uim-gtk2.0 uim-gtk3"
+
+EXTRA_OECONF += "--disable-emacs \
+ --without-scim \
+ --without-m17nlib \
+ --without-prime \
+ --without-canna \
+ --without-mana \
+ --without-eb \
+"
+
+CONFIGUREOPTS_remove_class-target = "--disable-silent-rules"
+
+#Because m4 file's find maxdepth=2, so copy the m4 files of the deep depth.
+do_configure_prepend () {
+ cp ${S}/sigscheme/m4/* ${S}/m4/
+}
+
+do_install_append() {
+ rm -rf ${D}/${datadir}/applications
+}
+
+PACKAGES =+ "uim-xim uim-utils uim-skk uim-gtk2.0 uim-gtk3 uim-fep uim-anthy uim-common libuim0 libuim-dev"
+
+FILES_${PN} = "${bindir}/uim-help \
+ ${libdir}/uim/plugin/libuim-* \
+ ${libdir}/libuim-scm* \
+ ${libdir}/libgcroots* \
+ ${libdir}/uim/plugin/libuim-* \
+"
+
+FILES_libuim0 = "${libdir}/uim/plugin/libuim-custom-enabler.* \
+ ${libdir}/libuim-custom.so.* \
+ ${datadir}/locale/ja/LC_MESSAGES/uim.mo \
+ ${datadir}/locale/fr/LC_MESSAGES/uim.mo \
+ ${datadir}/locale/ko/LC_MESSAGES/uim.mo \
+ ${libdir}/libuim.so.* \
+"
+FILES_libuim-dev = "${libdir}/libuim*.a \
+ ${libdir}/libuim*.la \
+ ${libdir}/libuim*.so \
+ ${includedir}/uim \
+ ${libdir}/pkgconfig/uim.pc \
+"
+FILES_uim-anthy = "${libdir}/uim/plugin/libuim-anthy.* \
+ ${datadir}/uim/anthy*.scm \
+"
+FILES_${PN}-dbg += "${libdir}/*/*/*/.debug ${libdir}/*/*/.debug"
+FILES_${PN}-dev += "${libdir}/uim/plugin/*.la"
+
+FILES_uim-utils = "${bindir}/uim-sh \
+ ${bindir}/uim-module-manager \
+ ${libexecdir}/uim-helper-server \
+"
+FILES_uim-xim = "${bindir}/uim-xim \
+ ${libexecdir}/uim-candwin-*gtk \
+ ${libexecdir}/uim-candwin-*gtk3 \
+ ${datadir}/man/man1/uim-xim.1 \
+ ${sysconfdir}/X11/xinit/xinput.d/uim* \
+"
+FILES_uim-common = "${datadir}/uim/pixmaps/*.png \
+ ${datadir}/uim \
+"
+FILES_uim-fep = "${bindir}/uim-fep*"
+
+FILES_uim-gtk2.0 = "${libdir}/gtk-2.0 \
+ ${bindir}/uim-toolbar-gtk \
+ ${bindir}/uim-toolbar-gtk-systray \
+ ${bindir}/uim-*-gtk \
+ ${bindir}/uim-input-pad-ja \
+ ${libdir}/uim/uim-*-gtk \
+"
+FILES_uim-gtk3 = "${libdir}/gtk-3.0 \
+ ${bindir}/uim-toolbar-gtk3 \
+ ${bindir}/uim-toolbar-gtk3-systray \
+ ${bindir}/uim-*-gtk3 \
+ ${libdir}/uim/uim-*-gtk3 \
+"
+FILES_uim-skk = "${libdir}/uim/plugin/libuim-skk.* \
+ ${datadir}/uim/skk*.scm \
+"
+
+PACKAGE_WRITE_DEPS += "qemu-native"
+pkg_postinst_uim-anthy() {
+ if test -n "$D"; then
+ ${@qemu_run_binary(d, '$D', '${bindir}/uim-module-manager')} --register anthy --path $D${datadir}/uim
+ else
+ uim-module-manager --register anthy --path ${datadir}/uim
+ fi
+}
+
+pkg_prerm_uim-anthy() {
+ if test -n "$D"; then
+ ${@qemu_run_binary(d, '$D', '${bindir}/uim-module-manager')} --path $D${datadir}/uim --unregister anthy
+ else
+ uim-module-manager --path ${datadir}/uim --unregister anthy
+ fi
+}
+
+pkg_postinst_uim-skk() {
+ if test -n "$D"; then
+ ${@qemu_run_binary(d, '$D', '${bindir}/uim-module-manager')} --register skk --path $D${datadir}/uim
+ else
+ uim-module-manager --register skk --path ${datadir}/uim
+ fi
+}
+
+pkg_postrm_uim-skk() {
+ if test -n "$D"; then
+ ${@qemu_run_binary(d, '$D', '${bindir}/uim-module-manager')} --path $D${datadir}/uim --unregister skk
+ else
+ uim-module-manager --path ${datadir}/uim --unregister skk
+ fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/unixodbc/files/do-not-use-libltdl-source-directory.patch b/meta-openembedded/meta-oe/recipes-support/unixodbc/files/do-not-use-libltdl-source-directory.patch
new file mode 100644
index 000000000..2499cff72
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/unixodbc/files/do-not-use-libltdl-source-directory.patch
@@ -0,0 +1,43 @@
+Subject: [PATCH] do not use libltdl source directory
+
+Don't use the included libltdl, use the one provided
+by our libtool instead.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Song.Li <Song.Li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ Makefile.am | 1 -
+ configure.ac | 2 --
+ 2 files changed, 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 4628401..e8989bf 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -11,7 +11,6 @@ SUBDIRS = \
+ log \
+ lst \
+ ini \
+- libltdl \
+ odbcinst \
+ DriverManager \
+ exe \
+diff --git a/configure.ac b/configure.ac
+index e4bcdaf..58aa5c5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -144,9 +144,7 @@ dnl AC_CONFIG_MACRO_DIR([libltdl/m4])
+ dnl LT_CONFIG_LTDL_DIR([libltdl])
+ dnl LTDL_INIT
+
+-LT_CONFIG_LTDL_DIR([libltdl])
+ LT_INIT([dlopen])
+-LTDL_INIT([convenience])
+
+ dnl Substitute INCLTDL and LIBLTDL in the Makefiles
+ AC_SUBST(LTDLINCL)
+--
+2.12.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb b/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb
new file mode 100644
index 000000000..62d9db843
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb
@@ -0,0 +1,27 @@
+SUMMARY = "An Open Source ODBC sub-system"
+DESCRIPTION = "unixODBC is an Open Source ODBC sub-system and an ODBC SDK \
+for Linux, Mac OSX, and UNIX."
+
+HOMEPAGE = "http://www.unixodbc.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7b37bf80a3df5a65b355433ae36d206"
+
+DEPENDS = "libtool mysql5"
+
+SRC_URI = "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-${PV}.tar.gz \
+ file://do-not-use-libltdl-source-directory.patch \
+"
+SRC_URI[md5sum] = "a8629fd2953b04b4639d0a9d8a5cf9d1"
+SRC_URI[sha256sum] = "88b637f647c052ecc3861a3baa275c3b503b193b6a49ff8c28b2568656d14d69"
+
+inherit autotools-brokensep
+
+S = "${WORKDIR}/unixODBC-${PV}"
+
+EXTRA_OEMAKE += "LIBS=-lltdl"
+
+do_configure_prepend() {
+ # old m4 files will cause libtool version don't match
+ rm -rf m4/*
+ rm -fr libltdl
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb b/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb
new file mode 100644
index 000000000..973fbe771
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "UPower is an abstraction for enumerating power devices, listening to device events and querying history and statistics. "
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0de8fbf1d97a140d1d93b9f14dcfbf08"
+
+DEPENDS = "intltool-native libusb1 libgudev glib-2.0 dbus-glib polkit"
+
+SRC_URI = "http://upower.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "236bb439d9ff1151450b3d8582399532"
+SRC_URI[sha256sum] = "24bcc2f6ab25a2533bac70b587bcb019e591293076920f5b5e04bdedc140a401"
+
+inherit autotools pkgconfig gettext gobject-introspection systemd
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[idevice] = "--with-idevice,--without-idevice,libimobiledevice libplist"
+PACKAGECONFIG[systemd] = "--with-systemdutildir=${systemd_unitdir} --with-systemdsystemunitdir=${systemd_system_unitdir}, \
+ --without-systemdutildir --without-systemdsystemunitdir,systemd"
+
+EXTRA_OECONF = " --with-backend=linux"
+
+SYSTEMD_SERVICE_${PN} = "upower.service"
+# don't start on boot by default - dbus does that on demand
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_configure_prepend() {
+ sed -i -e s:-nonet:\:g ${S}/doc/man/Makefile.am
+ sed -i -e 's: doc : :g' ${S}/Makefile.am
+}
+
+RDEPENDS_${PN} += "dbus"
+RRECOMMENDS_${PN} += "pm-utils"
+FILES_${PN} += "${datadir}/dbus-1/ \
+ ${datadir}/polkit-1/ \
+ ${base_libdir}/udev/* \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.8.4.bb b/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.8.4.bb
new file mode 100644
index 000000000..b4be853dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.8.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "RFC 3986 compliant URI parsing library"
+HOMEPAGE = "https://uriparser.github.io"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=72b0f9c74ae96eeab8cf1bf3efe08da2"
+
+SRC_URI := "${SOURCEFORGE_MIRROR}/project/uriparser/Sources/${PV}/uriparser-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-test --disable-doc"
+
+SRC_URI[md5sum] = "9aabdc3611546f553f4af372167de6d6"
+SRC_URI[sha256sum] = "ce7ccda4136974889231e8426a785e7578e66a6283009cfd13f1b24a5e657b23"
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb
new file mode 100644
index 000000000..eeed5e275
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Data files for usbmodeswitch"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit allarch
+
+DEPENDS += "tcl-native"
+
+SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
+SRC_URI[md5sum] = "0cc107cd0c4c83df0d9400c999e21dfd"
+SRC_URI[sha256sum] = "e2dcfd9d28928d8d8f03381571a23442b3c50d48d343bc40a1a07d01662738d1"
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+RDEPENDS_${PN} = "usb-modeswitch (>= 2.4.0)"
+FILES_${PN} += "${base_libdir}/udev/rules.d/ \
+ ${datadir}/usb_modeswitch"
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb
new file mode 100644
index 000000000..ac0df8bab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A mode switching tool for controlling 'flip flop' (multiple device) USB gear"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libusb1"
+
+SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
+SRC_URI[md5sum] = "38ad5c9d70e06227a00361bdc2b1e568"
+SRC_URI[sha256sum] = "31c0be280d49a99ec3dc0be3325bef320d9c04b50714ef0ce1e36a614d687633"
+
+inherit pkgconfig systemd
+
+SYSTEMD_SERVICE_${PN} = "usb_modeswitch@.service"
+
+EXTRA_OEMAKE = "TCL=${bindir}/tclsh"
+
+FILES_${PN} = "${bindir} ${sysconfdir} ${nonarch_base_libdir}/udev/usb_modeswitch ${sbindir} ${localstatedir}/lib/usb_modeswitch"
+RDEPENDS_${PN} = "tcl"
+RRECOMMENDS_${PN} = "usb-modeswitch-data"
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${S}/usb_modeswitch@.service ${D}/${systemd_unitdir}/system
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch
new file mode 100644
index 000000000..271e6a53a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch
@@ -0,0 +1,11 @@
+Index: usbpath/configure.ac
+===================================================================
+--- usbpath.orig/configure.ac 2014-07-17 20:40:26.000000000 +0000
++++ usbpath/configure.ac 2014-07-18 07:01:40.933474420 +0000
+@@ -1,5 +1,5 @@
+ AC_INIT([usbpath],[0.1])
+-AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
++AM_INIT_AUTOMAKE([foreign])
+
+ AC_PROG_CC
+ AC_PROG_RANLIB
diff --git a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb
new file mode 100644
index 000000000..6c9cd049f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Convert the physical locations of a USB device to/from its number"
+AUTHOR = "Werner Almesberger <werner@openmoko.org>"
+SECTION = "console/utils"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://usbpath.c;endline=20;md5=0aa8c7d2af9110c78a99fbf9a504dc3f"
+DEPENDS = "virtual/libusb0"
+DEPENDS_class-native = "virtual/libusb0-native"
+
+BBCLASSEXTEND = "native"
+
+SRCREV = "3172"
+PV = "0.0+svnr${SRCPV}"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/host;module=usbpath;protocol=http \
+ file://configure.patch"
+
+S = "${WORKDIR}/usbpath"
+
+inherit autotools pkgconfig
+
+RDEPENDS_${PN} += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-support/uthash/uthash/run-ptest b/meta-openembedded/meta-oe/recipes-support/uthash/uthash/run-ptest
new file mode 100755
index 000000000..14071a649
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uthash/uthash/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+cd tests
+for i in test*[0-9] ; do
+ if ./${i} | cmp -s "${i}.ans" - ; then
+ echo "PASS: ${i}"
+ else
+ echo "FAIL: ${i}"
+ fi
+done
diff --git a/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb b/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb
new file mode 100644
index 000000000..ccdd13b32
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Hash table and linked list for C structures"
+DESCRIPTION = " uthash-dev provides a hash table implementation using C preprocessor macros.\n\
+ This package also includes:\n\
+ * utlist.h provides linked list macros for C structures\n\
+ * utarray.h implements dynamic arrays using macros\n\
+ * utstring.h implements a basic dynamic string\n\
+"
+HOMEPAGE = "https://troydhanson.github.io/uthash/"
+SECTION = "base"
+LICENSE = "BSD-1-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5cc1f1e4c71f19f580458586756c02b4"
+
+SRC_URI = "\
+ https://github.com/troydhanson/${BPN}/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
+ file://run-ptest \
+"
+UPSTREAM_CHECK_URI = "https://github.com/troydhanson/${BPN}/releases"
+
+SRC_URI[md5sum] = "d08632a58674274c9cd87e2930f5696a"
+SRC_URI[sha256sum] = "34a31d51dd7a839819cecd6f46049b4ffe031d7f3147d9a042f5504fdb1348d1"
+
+inherit ptest
+
+do_compile[noexec] = "1"
+
+do_compile_ptest() {
+ oe_runmake -C tests tests_only TEST_TARGET=
+}
+
+do_install () {
+ install -dm755 ${D}${includedir}
+ install -m0644 src/*.h ${D}${includedir}
+}
+
+do_install_ptest() {
+ install -dm755 ${D}${PTEST_PATH}/tests
+ install -m0755 tests/test*[0-9] ${D}${PTEST_PATH}/tests
+ install -m0644 tests/test*[0-9].ans ${D}${PTEST_PATH}/tests
+ install -m0644 tests/test*[0-9].dat ${D}${PTEST_PATH}/tests
+}
+
+# The main package is empty and non-existent, so -dev
+# should not depend on it...
+RDEPENDS_${PN}-dev = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/files/0001-include-sys-stat.h-for-fixing-build-issue-on-musl.patch b/meta-openembedded/meta-oe/recipes-support/utouch/files/0001-include-sys-stat.h-for-fixing-build-issue-on-musl.patch
new file mode 100644
index 000000000..f3c8eeb41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/files/0001-include-sys-stat.h-for-fixing-build-issue-on-musl.patch
@@ -0,0 +1,29 @@
+From 08b17ec505e09e8f5a4d73ffc3aa61561ec2e0da Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 30 Mar 2017 00:27:54 -0700
+Subject: [PATCH] include sys/stat.h for fixing build issue on musl
+
+error: field has incomplete
+ type 'struct stat'
+ struct stat fs;
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/utouch-frame-test-mtdev.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/utouch-frame-test-mtdev.c b/tools/utouch-frame-test-mtdev.c
+index 5253320..2032af4 100644
+--- a/tools/utouch-frame-test-mtdev.c
++++ b/tools/utouch-frame-test-mtdev.c
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <sys/stat.h>
+ #include "common-defs.h"
+
+ struct frame_test {
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/files/remove-man-page-creation.patch b/meta-openembedded/meta-oe/recipes-support/utouch/files/remove-man-page-creation.patch
new file mode 100644
index 000000000..8706d9123
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/files/remove-man-page-creation.patch
@@ -0,0 +1,16 @@
+configure.ac: never generate the docs even if a2x is found as xmllint will fail finding custom dtd files
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+--- git/configure.ac.orig 2016-08-15 09:53:46.787003658 -0400
++++ git/configure.ac 2016-08-15 09:53:51.698972432 -0400
+@@ -37,7 +37,7 @@
+ ])
+
+ AC_CHECK_PROG([ASCIIDOC], [a2x], [a2x])
+-AM_CONDITIONAL([HAVE_DOCTOOLS], [test "x$ASCIIDOC" != "x"])
++AM_CONDITIONAL([HAVE_DOCTOOLS], [false])
+ AS_IF([test "x$ASCIIDOC" = "x"],
+ [AC_MSG_WARN([asciidoc not installed, man pages will not be created])])
+
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb
new file mode 100644
index 000000000..1dd5a86d5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Kernel evdev device emulation"
+DESCRIPTION = "The evemu library and tools are used to describe devices, record data, create devices and replay data from kernel evdev devices. "
+HOMEPAGE = "http://bitmath.org/code/evemu/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
+
+inherit autotools
+
+SRC_URI = "git://bitmath.org/git/evemu.git;protocol=http"
+SRCREV = "9752b50e922572e4cd214ac45ed95e4ee410fe24"
+
+PV = "1.0.5+git${SRCPV}"
+
+S = "${WORKDIR}/git/"
+
+PARALLEL_MAKE = ""
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-frame_git.bb b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-frame_git.bb
new file mode 100644
index 000000000..39d46af8e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-frame_git.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Touch Frame Library"
+DESCRIPTION = "The frame library and tools are used to handle touch frames, i.e., collections of tracked contacts. Bindings for mtdev and XI2.1."
+HOMEPAGE = "http://bitmath.org/code/frame/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2f31b266d3440dd7ee50f92cf67d8e6c"
+
+DEPENDS += "mtdev utouch-evemu"
+
+inherit autotools pkgconfig
+
+SRC_URI = "git://bitmath.org/git/frame.git;protocol=http \
+ file://remove-man-page-creation.patch \
+ file://0001-include-sys-stat.h-for-fixing-build-issue-on-musl.patch \
+ "
+SRCREV = "95363d5a1f7394d71144bf3b408ef4e6db4350fc"
+
+PV = "1.1.2+git${SRCPV}"
+
+S = "${WORKDIR}/git/"
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-mtview_git.bb b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-mtview_git.bb
new file mode 100644
index 000000000..8cb180dc8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-mtview_git.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Multitouch viewer"
+DESCRIPTION = "mtview is a small X application that shows a graphical view of your MT-enabled hardware. It uses mtdev."
+HOMEPAGE = "http://bitmath.org/code/mtview/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4c61b8950dc1aab4d2aa7c2ae6b1cfb3"
+
+inherit autotools pkgconfig distro_features_check
+# depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "git://bitmath.org/git/mtview.git;protocol=http"
+SRCREV = "ad437c38dc111cf3990a03abf14efe1b5d89604b"
+
+DEPENDS += "mtdev utouch-frame utouch-evemu libx11"
+
+PV = "1.1.7+git${SRCPV}"
+
+S = "${WORKDIR}/git/"
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils
new file mode 100644
index 000000000..495601f08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils
@@ -0,0 +1,45 @@
+## -----------------------------------------------------------------------
+##
+## Copyright 2001-2008 H. Peter Anvin - All Rights Reserved
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+## Boston MA 02111-1307, USA; either version 2 of the License, or
+## (at your option) any later version; incorporated herein by reference.
+##
+## -----------------------------------------------------------------------
+
+INCLUDES = -I. -I../vboxsf -I../vboxsf/include
+MOD_DEFS = -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 \
+ -DIN_SUP_R0 -DVBOX -DVBOX_WITH_HGCM -DIN_MODULE -DIN_GUEST_R0
+CFLAGS = ${INCLUDES} ${MOD_DEFS}
+LDFLAGS =
+
+SRCS = mount.vboxsf.c \
+ vbsfmount.c
+
+OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS)))
+
+.SUFFIXES: .c .o .i .s .S
+
+
+all: mount.vboxsf
+
+clean:
+ -rm -f *.o mount.vboxsf
+
+spotless: clean
+ -rm -f *~
+
+mount.vboxsf: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+%.o: %.c
+ $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $<
+%.i: %.c
+ $(CC) $(UMAKEDEPS) $(CFLAGS) -E -o $@ $<
+%.s: %.c
+ $(CC) $(UMAKEDEPS) $(CFLAGS) -S -o $@ $<
+
+-include .*.d *.tmp
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.8.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.8.bb
new file mode 100644
index 000000000..e00db4d7e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.8.bb
@@ -0,0 +1,78 @@
+SUMMARY = "VirtualBox Linux Guest Drivers"
+SECTION = "core"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/${VBOX_NAME}/COPYING;md5=e197d5641bb35b29d46ca8c4bf7f2660"
+
+DEPENDS = "virtual/kernel"
+
+inherit module kernel-module-split
+
+COMPATIBLE_MACHINE = "(qemux86|qemux86-64)"
+
+VBOX_NAME = "VirtualBox-${PV}"
+
+SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
+ file://Makefile.utils \
+"
+
+SRC_URI[md5sum] = "e731ea9c5c31096ec4c2a3bfba26665c"
+SRC_URI[sha256sum] = "ee2759d47b0b4ac81b8b671c9485c87fb2db12c097b3e7e69b94c1291a8084e8"
+
+S = "${WORKDIR}/vbox_module"
+
+export BUILD_TARGET_ARCH="${ARCH}"
+export BUILD_TARGET_ARCH_x86-64="amd64"
+
+EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build'"
+
+addtask export_sources before do_patch after do_unpack
+
+do_export_sources() {
+ mkdir -p "${S}"
+ ${WORKDIR}/${VBOX_NAME}/src/VBox/Additions/linux/export_modules.sh ${T}/vbox_modules.tar.gz
+ tar -C "${S}" -xzf ${T}/vbox_modules.tar.gz
+
+ # add a mount utility to use shared folder from VBox Addition Source Code
+ mkdir -p "${S}/utils"
+ install ${WORKDIR}/${VBOX_NAME}/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c ${S}/utils
+ install ${WORKDIR}/${VBOX_NAME}/src/VBox/Additions/linux/sharedfolders/vbsfmount.c ${S}/utils
+ install ${S}/../Makefile.utils ${S}/utils/Makefile
+
+}
+
+do_configure_prepend() {
+ # vboxguestdrivers/5.2.6-r0/vbox_module/vboxguest/Makefile.include.header:99: *** The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set. Stop.
+ # vboxguestdrivers/5.2.6-r0/vbox_module/vboxguest/Makefile.include.header:108: *** The kernel build folder path must end in <version>/build, or the variable KERN_VER must be set. Stop.
+ mkdir -p ${WORKDIR}/${KERNEL_VERSION}
+ ln -snf ${STAGING_KERNEL_DIR} ${WORKDIR}/${KERNEL_VERSION}/build
+}
+
+# compile and install mount utility
+do_compile_append() {
+ oe_runmake 'LD=${CC}' 'LDFLAGS=${LDFLAGS}' -C ${S}/utils
+ if ! [ -e vboxguest.ko -a -e vboxsf.ko -a -e vboxvideo.ko ] ; then
+ echo "ERROR: One of vbox*.ko modules wasn't built"
+ exit 1
+ fi
+}
+
+module_do_install() {
+ MODULE_DIR=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/misc
+ install -d $MODULE_DIR
+ install -m 644 vboxguest.ko $MODULE_DIR
+ install -m 644 vboxsf.ko $MODULE_DIR
+ install -m 644 vboxvideo.ko $MODULE_DIR
+}
+
+do_install_append() {
+ install -d ${D}${base_sbindir}
+ install -m 755 ${S}/utils/mount.vboxsf ${D}${base_sbindir}
+}
+
+PACKAGES += "kernel-module-vboxguest kernel-module-vboxsf kernel-module-vboxvideo"
+RRECOMMENDS_${PN} += "kernel-module-vboxguest kernel-module-vboxsf kernel-module-vboxvideo"
+
+FILES_${PN} = "${base_sbindir}"
+
+# autoload if installed
+KERNEL_MODULE_AUTOLOAD += "vboxguest vboxsf vboxvideo"
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/CVE-2017-17087.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/CVE-2017-17087.patch
new file mode 100644
index 000000000..937b9ba31
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vim/files/CVE-2017-17087.patch
@@ -0,0 +1,70 @@
+From 9c11f80339372b7aa2f43153d574f2b5abb79708 Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Sun, 17 Dec 2017 23:09:35 -0800
+Subject: [PATCH] vim: patch 8.0.1263: others can read the swap file if a user
+ is careless
+
+Problem: Others can read the swap file if a user is careless with his
+ primary group.
+Solution: If the group permission allows for reading but the world
+ permissions doesn't, make sure the group is right.
+
+Upstream-Status: Backport
+CVE: CVE-2017-17087
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ src/fileio.c | 24 +++++++++++++++++++++++-
+ src/version.c | 2 ++
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/src/fileio.c b/src/fileio.c
+index f54fb8465..2c7740af9 100644
+--- a/src/fileio.c
++++ b/src/fileio.c
+@@ -716,7 +716,29 @@ readfile(
+ /* Set swap file protection bits after creating it. */
+ if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL
+ && curbuf->b_ml.ml_mfp->mf_fname != NULL)
+- (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode);
++ {
++ char_u *swap_fname = curbuf->b_ml.ml_mfp->mf_fname;
++
++ /*
++ * If the group-read bit is set but not the world-read bit, then
++ * the group must be equal to the group of the original file. If
++ * we can't make that happen then reset the group-read bit. This
++ * avoids making the swap file readable to more users when the
++ * primary group of the user is too permissive.
++ */
++ if ((swap_mode & 044) == 040)
++ {
++ stat_T swap_st;
++
++ if (mch_stat((char *)swap_fname, &swap_st) >= 0
++ && st.st_gid != swap_st.st_gid
++ && fchown(curbuf->b_ml.ml_mfp->mf_fd, -1, st.st_gid)
++ == -1)
++ swap_mode &= 0600;
++ }
++
++ (void)mch_setperm(swap_fname, (long)swap_mode);
++ }
+ #endif
+ }
+
+diff --git a/src/version.c b/src/version.c
+index a5cb078f0..5c0df475f 100644
+--- a/src/version.c
++++ b/src/version.c
+@@ -770,6 +770,8 @@ static char *(features[]) =
+ static int included_patches[] =
+ { /* Add new patch number below this line */
+ /**/
++ 1263,
++/**/
+ 983,
+ /**/
+ 982,
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch
new file mode 100644
index 000000000..65e5f58c6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch
@@ -0,0 +1,27 @@
+Upstream-Status: pending
+
+Don't check 'sys/acl.h' if acl support disabled for vim/vim-tiny.
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+================================================
+diff --git a/src/configure.ac b/src/configure.ac
+index fb965e5..d734064 100644
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -2511,7 +2511,7 @@ AC_CHECK_HEADERS(stdarg.h stdint.h stdlib.h string.h \
+ sys/systeminfo.h locale.h sys/stream.h termios.h \
+ libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
+ utime.h sys/param.h libintl.h libgen.h \
+- util/debug.h util/msg18n.h frame.h sys/acl.h \
++ util/debug.h util/msg18n.h frame.h \
+ sys/access.h sys/sysinfo.h wchar.h wctype.h)
+
+ dnl sys/ptem.h depends on sys/stream.h on Solaris
+@@ -3112,6 +3112,7 @@ AC_ARG_ENABLE(acl,
+ , [enable_acl="yes"])
+ if test "$enable_acl" = "yes"; then
+ AC_MSG_RESULT(no)
++AC_CHECK_HEADERS(sys/acl.h)
+ AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
+ AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
+ AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
new file mode 100644
index 000000000..6c620f9f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
@@ -0,0 +1,38 @@
+vim: add knob whether elf.h are checked
+
+Previously, it still was checked when there was no elf library in sysroots directory.
+Add knob to decide whether elf.h are checked or not.
+
+Upstream-status: Pending
+
+Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
+---
+ src/configure.ac | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/configure.ac b/src/configure.ac
+index d734064..f504fa6 100644
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -2483,11 +2483,18 @@ AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
+ AC_MSG_RESULT(no))
+
+ dnl Checks for header files.
++AC_MSG_CHECKING(whether or not to look for elf.h)
++AC_ARG_ENABLE(elf-check,
++ [ --enable-elf-check If elfutils, check for elf.h [default=no]],
++ , enable_elf_check="no")
++AC_MSG_RESULT($enable_elf_check)
++if test "x$enable_elf_check" != "xno"; then
+ AC_CHECK_HEADER(elf.h, HAS_ELF=1)
+ dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
+ if test "$HAS_ELF" = 1; then
+ AC_CHECK_LIB(elf, main)
+ fi
++fi
+
+ AC_HEADER_DIRENT
+
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.0.0983.bb b/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.0.0983.bb
new file mode 100644
index 000000000..bb8f2b7ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.0.0983.bb
@@ -0,0 +1,13 @@
+require vim_${PV}.bb
+
+SUMMARY += " (with tiny features)"
+
+PACKAGECONFIG += "tiny"
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 0755 ${S}/vim ${D}/${bindir}/vim.tiny
+}
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE_TARGET = "${bindir}/vim.tiny"
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/vim_8.0.0983.bb b/meta-openembedded/meta-oe/recipes-support/vim/vim_8.0.0983.bb
new file mode 100644
index 000000000..44c868c74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vim/vim_8.0.0983.bb
@@ -0,0 +1,114 @@
+SUMMARY = "Vi IMproved - enhanced vi editor"
+SECTION = "console/utils"
+DEPENDS = "ncurses gettext-native"
+# vimdiff doesn't like busybox diff
+RSUGGESTS_${PN} = "diffutils"
+LICENSE = "vim"
+LIC_FILES_CHKSUM = "file://../runtime/doc/uganda.txt;md5=eea32ac1424bba14096736a494ae9045"
+
+SRC_URI = "git://github.com/vim/vim.git \
+ file://disable_acl_header_check.patch;patchdir=.. \
+ file://vim-add-knob-whether-elf.h-are-checked.patch;patchdir=.. \
+ file://CVE-2017-17087.patch;patchdir=.. \
+"
+SRCREV = "3f9a1ff141412e9e85f7dff47d02946cb9be9228"
+
+S = "${WORKDIR}/git/src"
+
+VIMDIR = "vim${@d.getVar('PV').split('.')[0]}${@d.getVar('PV').split('.')[1]}"
+
+inherit autotools-brokensep update-alternatives
+
+CLEANBROKEN = "1"
+
+# vim configure.in contains functions which got 'dropped' by autotools.bbclass
+do_configure () {
+ rm -f auto/*
+ touch auto/config.mk
+ aclocal
+ autoconf
+ oe_runconf
+ touch auto/configure
+ touch auto/config.mk auto/config.h
+}
+
+#Available PACKAGECONFIG options are gtkgui, acl, x11, tiny
+PACKAGECONFIG ??= ""
+PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
+
+PACKAGECONFIG[gtkgui] = "--enable-gtk2-test --enable-gui=gtk2,--enable-gui=no,gtk+,"
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
+PACKAGECONFIG[x11] = "--with-x,--without-x,xt,"
+PACKAGECONFIG[tiny] = "--with-features=tiny,--with-features=big,,"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,"
+PACKAGECONFIG[elfutils] = "--enable-elf-check,,elfutils,"
+
+EXTRA_OECONF = " \
+ --disable-gpm \
+ --disable-gtktest \
+ --disable-xim \
+ --disable-netbeans \
+ --with-tlib=ncurses \
+ ac_cv_small_wchar_t=no \
+ vim_cv_getcwd_broken=no \
+ vim_cv_memmove_handles_overlap=yes \
+ vim_cv_stat_ignores_slash=no \
+ vim_cv_terminfo=yes \
+ vim_cv_tgent=non-zero \
+ vim_cv_toupper_broken=no \
+ vim_cv_tty_group=world \
+ STRIP=/bin/true \
+"
+
+do_install() {
+ autotools_do_install
+
+ # Work around file-rdeps picking up csh, awk, perl or python as a dep
+ chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/vim132
+ chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/mve.awk
+ chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/*.pl
+ chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/*.py
+
+ # Install example vimrc from runtime files
+ install -m 0644 ../runtime/vimrc_example.vim ${D}/${datadir}/${BPN}/vimrc
+
+ # we use --with-features=big as default
+ mv ${D}${bindir}/${BPN} ${D}${bindir}/${BPN}.${BPN}
+}
+
+PARALLEL_MAKEINST = ""
+
+PACKAGES =+ "${PN}-common ${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-tools"
+FILES_${PN}-syntax = "${datadir}/${BPN}/${VIMDIR}/syntax"
+FILES_${PN}-help = "${datadir}/${BPN}/${VIMDIR}/doc"
+FILES_${PN}-tutor = "${datadir}/${BPN}/${VIMDIR}/tutor ${bindir}/${BPN}tutor"
+FILES_${PN}-vimrc = "${datadir}/${BPN}/vimrc"
+FILES_${PN}-data = "${datadir}/${BPN}"
+FILES_${PN}-tools = "${datadir}/${BPN}/${VIMDIR}/tools"
+FILES_${PN}-common = " \
+ ${datadir}/${BPN}/${VIMDIR}/*.vim \
+ ${datadir}/${BPN}/${VIMDIR}/autoload \
+ ${datadir}/${BPN}/${VIMDIR}/colors \
+ ${datadir}/${BPN}/${VIMDIR}/compiler \
+ ${datadir}/${BPN}/${VIMDIR}/ftplugin \
+ ${datadir}/${BPN}/${VIMDIR}/indent \
+ ${datadir}/${BPN}/${VIMDIR}/keymap \
+ ${datadir}/${BPN}/${VIMDIR}/lang \
+ ${datadir}/${BPN}/${VIMDIR}/macros \
+ ${datadir}/${BPN}/${VIMDIR}/plugin \
+ ${datadir}/${BPN}/${VIMDIR}/print \
+ ${datadir}/${BPN}/${VIMDIR}/spell \
+ ${datadir}/icons \
+"
+
+RDEPENDS_${BPN} = "ncurses-terminfo-base"
+# Recommend that runtime data is installed along with vim
+RRECOMMENDS_${BPN} = "${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-common"
+
+ALTERNATIVE_${PN} = "vi vim"
+ALTERNATIVE_TARGET = "${bindir}/${BPN}.${BPN}"
+ALTERNATIVE_LINK_NAME[vi] = "${base_bindir}/vi"
+ALTERNATIVE_LINK_NAME[vim] = "${bindir}/vim"
+ALTERNATIVE_PRIORITY = "100"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/0001-Fix-issue-599.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/0001-Fix-issue-599.patch
new file mode 100644
index 000000000..2a9ea74cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/0001-Fix-issue-599.patch
@@ -0,0 +1,31 @@
+From 1dd07113f2a7489444a8990a95be42e035f8e9df Mon Sep 17 00:00:00 2001
+From: Kurt Roeckx <kroeckx@debian.org>
+Date: Tue, 1 Nov 2016 12:57:35 +0100
+Subject: [PATCH] Fix issue #599
+Forwarded: https://github.com/zaphoyd/websocketpp/pull/600
+
+---
+ websocketpp/transport/asio/security/tls.hpp | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/websocketpp/transport/asio/security/tls.hpp b/websocketpp/transport/asio/security/tls.hpp
+index 7b32db8..a8aafec 100644
+--- a/websocketpp/transport/asio/security/tls.hpp
++++ b/websocketpp/transport/asio/security/tls.hpp
+@@ -355,13 +355,9 @@ protected:
+ template <typename ErrorCodeType>
+ lib::error_code translate_ec(ErrorCodeType ec) {
+ if (ec.category() == lib::asio::error::get_ssl_category()) {
+- if (ERR_GET_REASON(ec.value()) == SSL_R_SHORT_READ) {
+- return make_error_code(transport::error::tls_short_read);
+- } else {
+ // We know it is a TLS related error, but otherwise don't know
+ // more. Pass through as TLS generic.
+ return make_error_code(transport::error::tls_error);
+- }
+ } else {
+ // We don't know any more information about this error so pass
+ // through
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4.patch
new file mode 100644
index 000000000..530c960ce
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4.patch
@@ -0,0 +1,155 @@
+From 4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4 Mon Sep 17 00:00:00 2001
+From: Peter Thorson <git@zaphoyd.com>
+Date: Sun, 11 Jun 2017 16:13:25 -0500
+Subject: [PATCH] minor adjustments to recent extension negotiation related
+ fixes, refactor a bit more extension negotiation code to be simpler
+
+---
+ websocketpp/impl/connection_impl.hpp | 6 +--
+ websocketpp/processors/hybi13.hpp | 92 ++++++++++++++++++------------------
+ 2 files changed, 49 insertions(+), 49 deletions(-)
+
+Index: websocketpp-0.7.0/websocketpp/impl/connection_impl.hpp
+===================================================================
+--- websocketpp-0.7.0.orig/websocketpp/impl/connection_impl.hpp
++++ websocketpp-0.7.0/websocketpp/impl/connection_impl.hpp
+@@ -1222,17 +1222,17 @@
+ std::pair<lib::error_code,std::string> neg_results;
+ neg_results = m_processor->negotiate_extensions(m_request);
+
+- if (neg_results.first == error::make_error_code(error::extension_parse_error)) {
++ if (neg_results.first == processor::error::make_error_code(processor::error::extension_parse_error)) {
+ // There was a fatal error in extension parsing that should result in
+ // a failed connection attempt.
+- m_alog.write(log::alevel::info, "Bad request: " + neg_results.first.message());
++ m_elog.write(log::elevel::info, "Bad request: " + neg_results.first.message());
+ m_response.set_status(http::status_code::bad_request);
+ return neg_results.first;
+ } else if (neg_results.first) {
+ // There was a fatal error in extension processing that is probably our
+ // fault. Consider extension negotiation to have failed and continue as
+ // if extensions were not supported
+- m_alog.write(log::alevel::info,
++ m_elog.write(log::elevel::info,
+ "Extension negotiation failed: " + neg_results.first.message());
+ } else {
+ // extension negotiation succeeded, set response header accordingly
+Index: websocketpp-0.7.0/websocketpp/processors/hybi13.hpp
+===================================================================
+--- websocketpp-0.7.0.orig/websocketpp/processors/hybi13.hpp
++++ websocketpp-0.7.0/websocketpp/processors/hybi13.hpp
+@@ -97,11 +97,6 @@
+ /**
+ * This exists mostly because the code for requests and responses is
+ * identical and I can't have virtual template methods.
+- *
+- * NOTE: this method makes assumptions that the permessage-deflate
+- * extension is the only one supported. If additional extensions are
+- * ever supported it should be reviewed carefully. Most cases where
+- * that assumption is made are explicitly noted.
+ */
+ template <typename header_type>
+ err_str_pair negotiate_extensions_helper(header_type const & header) {
+@@ -130,55 +125,60 @@
+
+ http::parameter_list::const_iterator it;
+
++ // look through the list of extension requests to find the first
++ // one that we can accept.
+ if (m_permessage_deflate.is_implemented()) {
+ err_str_pair neg_ret;
+ for (it = p.begin(); it != p.end(); ++it) {
+- // look through each extension, if the key is permessage-deflate
+- if (it->first == "permessage-deflate") {
+- // if we have already successfully negotiated this extension
+- // then skip any other requests to negotiate the same one
+- // with different parameters
+- if (m_permessage_deflate.is_enabled()) {
+- continue;
+- }
+-
+-
+- neg_ret = m_permessage_deflate.negotiate(it->second);
+-
+- if (neg_ret.first) {
+- // Figure out if this is an error that should halt all
+- // extension negotiations or simply cause negotiation of
+- // this specific extension to fail.
+- //std::cout << "permessage-compress negotiation failed: "
+- // << neg_ret.first.message() << std::endl;
+- } else {
+- // Note: this list will need commas if WebSocket++ ever
+- // supports more than one extension
+-
+- // Actually try to initialize the extension before we
+- // deem negotiation complete
+- ret.first = m_permessage_deflate.init(base::m_server);
+- if (!ret.first) {
+-
+- // TODO: support multiple extensions.
+- // right now, because there is only one extension
+- // supported, it failing to negotiate means we are
+- // done with all negotiating. In the future if more
+- // extensions are supported a better solution will
+- // be needed here.
+- break;
+- } else {
+- ret.second += neg_ret.second;
+-
+- // continue looking for more extensions
+- continue;
+- }
+-
+- }
++ // not a permessage-deflate extension request, ignore
++ if (it->first != "permessage-deflate") {
++ continue;
++ }
++
++ // if we have already successfully negotiated this extension
++ // then skip any other requests to negotiate the same one
++ // with different parameters
++ if (m_permessage_deflate.is_enabled()) {
++ continue;
++ }
++
++ // attempt to negotiate this offer
++ neg_ret = m_permessage_deflate.negotiate(it->second);
++
++ if (neg_ret.first) {
++ // negotiation offer failed. Do nothing. We will continue
++ // searching for a permessage-deflate config that succeeds
++ continue;
++ }
++
++ // Negotiation tentatively succeeded
++
++ // Actually try to initialize the extension before we
++ // deem negotiation complete
++ lib::error_code ec = m_permessage_deflate.init(base::m_server);
++
++ if (ec) {
++ // Negotiation succeeded but initialization failed this is
++ // an error that should stop negotiation of permessage
++ // deflate. Return the reason for the init failure
++
++ ret.first = ec;
++ break;
++ } else {
++ // Successfully initialized, push the negotiated response into
++ // the reply and stop looking for additional permessage-deflate
++ // extensions
++ ret.second += neg_ret.second;
++ break;
+ }
+ }
+ }
+
++ // support for future extensions would go here. Should check the value of
++ // ret.first before continuing. Might need to consider whether failure of
++ // negotiation of an earlier extension should stop negotiation of subsequent
++ // ones
++
+ return ret;
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/9ddb300d874a30db35e3ad58f188944bef0bf31b.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/9ddb300d874a30db35e3ad58f188944bef0bf31b.patch
new file mode 100644
index 000000000..94bfeb2fd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/9ddb300d874a30db35e3ad58f188944bef0bf31b.patch
@@ -0,0 +1,600 @@
+## Description: add some description
+## Origin/Author: add some origin or author
+## Bug: bug URL
+From 9ddb300d874a30db35e3ad58f188944bef0bf31b Mon Sep 17 00:00:00 2001
+From: Peter Thorson <git@zaphoyd.com>
+Date: Sun, 11 Jun 2017 15:24:43 -0500
+Subject: [PATCH] Update permessage-deflate support to reflect that zlib
+ doesn't support a 256 bit window. Improve extension negotiation error
+ checking and documentation. fixes #596 fixes #653
+
+---
+ changelog.md | 8 ++
+ test/extension/permessage_deflate.cpp | 153 +++++++++++++++++----
+ .../extensions/permessage_deflate/enabled.hpp | 94 ++++++++++---
+ websocketpp/impl/connection_impl.hpp | 10 +-
+ websocketpp/processors/hybi13.hpp | 28 +++-
+ 5 files changed, 247 insertions(+), 46 deletions(-)
+
+diff --git a/changelog.md b/changelog.md
+index bba753cb..de98edd2 100644
+#--- a/changelog.md
+#+++ b/changelog.md
+#@@ -17,6 +17,14 @@ HEAD
+# - Compatibility: Update `telemetry_client` to use a slightly more cross platform
+# method of sleeping. Should work on windows now. Thank you Meir Yanovich for
+# reporting.
+#+- Compatibility: Updated permessage-deflate support to reflect that the zlib
+#+ library does not actually support a sliding window size of 256 bits.
+#+ WebSocket++ will no longer negotiate 256 bit deflate windows. If the user
+#+ of the library tries to request a 256 bit window a 512 bit window will be
+#+ specified instead (This was the previous behavior). #596 #653 Thank you
+#+ Vinnie Falco and Gianfranco Costamagna for reporting.
+#+- Compatibility: Better error handling and logging in cases where extension
+#+ requests parse correctly but negotiation fails.
+# - Bug: Store loggers in shared pointers to avoid crashes related to connections
+# trying to write logs entries after their respective endpoint has been
+# deallocated. Thank you Thalhammer for reporting and Jupp Müller for the
+diff --git a/test/extension/permessage_deflate.cpp b/test/extension/permessage_deflate.cpp
+index 4cd3e7b6..805afcc3 100644
+--- a/test/extension/permessage_deflate.cpp
++++ b/test/extension/permessage_deflate.cpp
+@@ -186,15 +186,22 @@ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_invalid ) {
+
+ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_valid ) {
+ ext_vars v;
++
++ // confirm that a request for a value of 8 is interpreted as 9
+ v.attr["server_max_window_bits"] = "8";
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
+
++ v.attr["server_max_window_bits"] = "9";
+ v.esp = v.exts.negotiate(v.attr);
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
+
+- v.attr["server_max_window_bits"] = "15";
+
++ v.attr["server_max_window_bits"] = "15";
+ v.esp = v.exts.negotiate(v.attr);
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+@@ -213,7 +220,7 @@ BOOST_AUTO_TEST_CASE( invalid_set_server_max_window_bits ) {
+
+ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_decline ) {
+ ext_vars v;
+- v.attr["server_max_window_bits"] = "8";
++ v.attr["server_max_window_bits"] = "9";
+
+ v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::decline);
+ v.esp = v.exts.negotiate(v.attr);
+@@ -223,7 +230,7 @@ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_decline ) {
+ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept ) {
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept_8 ) {
+ ext_vars v;
+ v.attr["server_max_window_bits"] = "8";
+
+@@ -232,10 +239,22 @@ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest ) {
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept ) {
++ ext_vars v;
++ v.attr["server_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::accept);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest_8 ) {
+ ext_vars v;
+ v.attr["server_max_window_bits"] = "8";
+
+@@ -244,10 +263,22 @@ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest ) {
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest ) {
++ ext_vars v;
++ v.attr["server_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::largest);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest_8 ) {
+ ext_vars v;
+ v.attr["server_max_window_bits"] = "8";
+
+@@ -256,7 +287,19 @@ BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest ) {
++ ext_vars v;
++ v.attr["server_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::smallest);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=9");
+ }
+
+ // Negotiate server_max_window_bits
+@@ -292,7 +335,13 @@ BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_valid ) {
+ v.esp = v.exts.negotiate(v.attr);
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
++
++ v.attr["client_max_window_bits"] = "9";
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
+
+ v.attr["client_max_window_bits"] = "15";
+ v.esp = v.exts.negotiate(v.attr);
+@@ -311,7 +360,7 @@ BOOST_AUTO_TEST_CASE( invalid_set_client_max_window_bits ) {
+ BOOST_CHECK_EQUAL(v.ec,pmde::make_error_code(pmde::invalid_max_window_bits));
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline ) {
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline_8 ) {
+ ext_vars v;
+ v.attr["client_max_window_bits"] = "8";
+
+@@ -323,7 +372,19 @@ BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline ) {
+ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept ) {
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline ) {
++ ext_vars v;
++ v.attr["client_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_client_max_window_bits(9,pmd_mode::decline);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept_8 ) {
+ ext_vars v;
+ v.attr["client_max_window_bits"] = "8";
+
+@@ -332,10 +393,22 @@ BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest ) {
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept ) {
++ ext_vars v;
++ v.attr["client_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::accept);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest_8 ) {
+ ext_vars v;
+ v.attr["client_max_window_bits"] = "8";
+
+@@ -344,10 +417,22 @@ BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
+ }
+
+-BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest ) {
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest ) {
++ ext_vars v;
++ v.attr["client_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::largest);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest_8 ) {
+ ext_vars v;
+ v.attr["client_max_window_bits"] = "8";
+
+@@ -356,7 +441,19 @@ BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest ) {
+ BOOST_CHECK( v.exts.is_enabled() );
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
+- BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8");
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
++}
++
++BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest ) {
++ ext_vars v;
++ v.attr["client_max_window_bits"] = "9";
++
++ v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::smallest);
++ v.esp = v.exts.negotiate(v.attr);
++ BOOST_CHECK( v.exts.is_enabled() );
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() );
++ BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=9");
+ }
+
+
+@@ -507,7 +604,8 @@ BOOST_AUTO_TEST_CASE( compress_data ) {
+ std::string compress_out;
+ std::string decompress_out;
+
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ v.ec = v.exts.compress(compress_in,compress_out);
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+@@ -520,7 +618,8 @@ BOOST_AUTO_TEST_CASE( compress_data ) {
+ BOOST_AUTO_TEST_CASE( compress_data_multiple ) {
+ ext_vars v;
+
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ for (int i = 0; i < 2; i++) {
+ std::string compress_in = "Hello";
+@@ -545,11 +644,12 @@ BOOST_AUTO_TEST_CASE( compress_data_large ) {
+
+ websocketpp::http::attribute_list alist;
+
+- alist["server_max_window_bits"] = "8";
+- v.exts.set_server_max_window_bits(8,websocketpp::extensions::permessage_deflate::mode::smallest);
++ alist["server_max_window_bits"] = "9";
++ v.exts.set_server_max_window_bits(9,websocketpp::extensions::permessage_deflate::mode::smallest);
+
+ v.exts.negotiate(alist);
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ v.ec = v.exts.compress(compress_in,compress_out);
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+@@ -573,7 +673,8 @@ BOOST_AUTO_TEST_CASE( compress_data_no_context_takeover ) {
+ v.exts.enable_server_no_context_takeover();
+
+ v.exts.negotiate(alist);
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ v.ec = v.exts.compress(compress_in,compress_out1);
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+@@ -609,7 +710,8 @@ BOOST_AUTO_TEST_CASE( compress_empty ) {
+ std::string compress_out;
+ std::string decompress_out;
+
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ v.ec = v.exts.compress(compress_in,compress_out);
+ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+@@ -640,7 +742,8 @@ BOOST_AUTO_TEST_CASE( decompress_data ) {
+ std::string out;
+ std::string reference = "Hello";
+
+- v.exts.init(true);
++ v.ec = v.exts.init(true);
++ BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() );
+
+ v.ec = v.exts.decompress(in,11,out);
+
+diff --git a/websocketpp/extensions/permessage_deflate/enabled.hpp b/websocketpp/extensions/permessage_deflate/enabled.hpp
+index 1581f14c..f20a1b1d 100644
+--- a/websocketpp/extensions/permessage_deflate/enabled.hpp
++++ b/websocketpp/extensions/permessage_deflate/enabled.hpp
+@@ -46,7 +46,7 @@
+ namespace websocketpp {
+ namespace extensions {
+
+-/// Implementation of the draft permessage-deflate WebSocket extension
++/// Implementation of RFC 7692, the permessage-deflate WebSocket extension
+ /**
+ * ### permessage-deflate interface
+ *
+@@ -174,18 +174,30 @@ namespace websocketpp {
+ namespace extensions {
+ namespace permessage_deflate {
+
+-/// Default value for server_max_window_bits as defined by draft 17
++/// Default value for server_max_window_bits as defined by RFC 7692
+ static uint8_t const default_server_max_window_bits = 15;
+-/// Minimum value for server_max_window_bits as defined by draft 17
++/// Minimum value for server_max_window_bits as defined by RFC 7692
++/**
++ * NOTE: A value of 8 is not actually supported by zlib, the deflate
++ * library that WebSocket++ uses. To preserve backwards compatibility
++ * with RFC 7692 and previous versions of the library a value of 8
++ * is accepted by the library but will always be negotiated as 9.
++ */
+ static uint8_t const min_server_max_window_bits = 8;
+-/// Maximum value for server_max_window_bits as defined by draft 17
++/// Maximum value for server_max_window_bits as defined by RFC 7692
+ static uint8_t const max_server_max_window_bits = 15;
+
+-/// Default value for client_max_window_bits as defined by draft 17
++/// Default value for client_max_window_bits as defined by RFC 7692
+ static uint8_t const default_client_max_window_bits = 15;
+-/// Minimum value for client_max_window_bits as defined by draft 17
++/// Minimum value for client_max_window_bits as defined by RFC 7692
++/**
++ * NOTE: A value of 8 is not actually supported by zlib, the deflate
++ * library that WebSocket++ uses. To preserve backwards compatibility
++ * with RFC 7692 and previous versions of the library a value of 8
++ * is accepted by the library but will always be negotiated as 9.
++ */
+ static uint8_t const min_client_max_window_bits = 8;
+-/// Maximum value for client_max_window_bits as defined by draft 17
++/// Maximum value for client_max_window_bits as defined by RFC 7692
+ static uint8_t const max_client_max_window_bits = 15;
+
+ namespace mode {
+@@ -372,7 +384,7 @@ class enabled {
+ /**
+ * The bits setting is the base 2 logarithm of the maximum window size that
+ * the server must use to compress outgoing messages. The permitted range
+- * is 8 to 15 inclusive. 8 represents a 256 byte window and 15 a 32KiB
++ * is 9 to 15 inclusive. 9 represents a 512 byte window and 15 a 32KiB
+ * window. The default setting is 15.
+ *
+ * Mode Options:
+@@ -386,6 +398,14 @@ class enabled {
+ * adjusted by the server. A server may unilaterally set this value without
+ * client support.
+ *
++ * NOTE: The permessage-deflate spec specifies that a value of 8 is allowed.
++ * Prior to version 0.8.0 a value of 8 was also allowed by this library.
++ * zlib, the deflate compression library that WebSocket++ uses has always
++ * silently adjusted a value of 8 to 9. In recent versions of zlib (1.2.9
++ * and greater) a value of 8 is now explicitly rejected. WebSocket++ 0.8.0
++ * continues to perform the 8->9 conversion for backwards compatibility
++ * purposes but this should be considered deprecated functionality.
++ *
+ * @param bits The size to request for the outgoing window size
+ * @param mode The mode to use for negotiating this parameter
+ * @return A status code
+@@ -394,6 +414,12 @@ class enabled {
+ if (bits < min_server_max_window_bits || bits > max_server_max_window_bits) {
+ return error::make_error_code(error::invalid_max_window_bits);
+ }
++
++ // See note in doc comment above about what is happening here
++ if (bits == 8) {
++ bits = 9;
++ }
++
+ m_server_max_window_bits = bits;
+ m_server_max_window_bits_mode = mode;
+
+@@ -403,8 +429,8 @@ class enabled {
+ /// Limit client LZ77 sliding window size
+ /**
+ * The bits setting is the base 2 logarithm of the window size that the
+- * client must use to compress outgoing messages. The permitted range is 8
+- * to 15 inclusive. 8 represents a 256 byte window and 15 a 32KiB window.
++ * client must use to compress outgoing messages. The permitted range is 9
++ * to 15 inclusive. 9 represents a 512 byte window and 15 a 32KiB window.
+ * The default setting is 15.
+ *
+ * Mode Options:
+@@ -417,6 +443,14 @@ class enabled {
+ * outgoing window size unilaterally. A server may only limit the client's
+ * window size if the remote client supports that feature.
+ *
++ * NOTE: The permessage-deflate spec specifies that a value of 8 is allowed.
++ * Prior to version 0.8.0 a value of 8 was also allowed by this library.
++ * zlib, the deflate compression library that WebSocket++ uses has always
++ * silently adjusted a value of 8 to 9. In recent versions of zlib (1.2.9
++ * and greater) a value of 8 is now explicitly rejected. WebSocket++ 0.8.0
++ * continues to perform the 8->9 conversion for backwards compatibility
++ * purposes but this should be considered deprecated functionality.
++ *
+ * @param bits The size to request for the outgoing window size
+ * @param mode The mode to use for negotiating this parameter
+ * @return A status code
+@@ -425,6 +459,12 @@ class enabled {
+ if (bits < min_client_max_window_bits || bits > max_client_max_window_bits) {
+ return error::make_error_code(error::invalid_max_window_bits);
+ }
++
++ // See note in doc comment above about what is happening here
++ if (bits == 8) {
++ bits = 9;
++ }
++
+ m_client_max_window_bits = bits;
+ m_client_max_window_bits_mode = mode;
+
+@@ -642,11 +682,17 @@ class enabled {
+ * client requested that we use.
+ *
+ * options:
+- * - decline (refuse to use the attribute)
+- * - accept (use whatever the client says)
+- * - largest (use largest possible value)
++ * - decline (ignore value, offer our default instead)
++ * - accept (use the value requested by the client)
++ * - largest (use largest value acceptable to both)
+ * - smallest (use smallest possible value)
+ *
++ * NOTE: As a value of 8 is no longer explicitly supported by zlib but might
++ * be requested for negotiation by an older client/server, if the result of
++ * the negotiation would be to send a value of 8, a value of 9 is offered
++ * instead. This ensures that WebSocket++ will only ever negotiate connections
++ * with compression settings explicitly supported by zlib.
++ *
+ * @param [in] value The value of the attribute from the offer
+ * @param [out] ec A reference to the error code to return errors via
+ */
+@@ -678,6 +724,11 @@ class enabled {
+ ec = make_error_code(error::invalid_mode);
+ m_server_max_window_bits = default_server_max_window_bits;
+ }
++
++ // See note in doc comment
++ if (m_server_max_window_bits == 8) {
++ m_server_max_window_bits = 9;
++ }
+ }
+
+ /// Negotiate client_max_window_bits attribute
+@@ -687,11 +738,17 @@ class enabled {
+ * negotiation mode.
+ *
+ * options:
+- * - decline (refuse to use the attribute)
+- * - accept (use whatever the client says)
+- * - largest (use largest possible value)
++ * - decline (ignore value, offer our default instead)
++ * - accept (use the value requested by the client)
++ * - largest (use largest value acceptable to both)
+ * - smallest (use smallest possible value)
+ *
++ * NOTE: As a value of 8 is no longer explicitly supported by zlib but might
++ * be requested for negotiation by an older client/server, if the result of
++ * the negotiation would be to send a value of 8, a value of 9 is offered
++ * instead. This ensures that WebSocket++ will only ever negotiate connections
++ * with compression settings explicitly supported by zlib.
++ *
+ * @param [in] value The value of the attribute from the offer
+ * @param [out] ec A reference to the error code to return errors via
+ */
+@@ -727,6 +784,11 @@ class enabled {
+ ec = make_error_code(error::invalid_mode);
+ m_client_max_window_bits = default_client_max_window_bits;
+ }
++
++ // See note in doc comment
++ if (m_client_max_window_bits == 8) {
++ m_client_max_window_bits = 9;
++ }
+ }
+
+ bool m_enabled;
+diff --git a/websocketpp/impl/connection_impl.hpp b/websocketpp/impl/connection_impl.hpp
+index 105911db..ae55c338 100644
+--- a/websocketpp/impl/connection_impl.hpp
++++ b/websocketpp/impl/connection_impl.hpp
+@@ -1222,12 +1222,18 @@ lib::error_code connection<config>::process_handshake_request() {
+ std::pair<lib::error_code,std::string> neg_results;
+ neg_results = m_processor->negotiate_extensions(m_request);
+
+- if (neg_results.first) {
++ if (neg_results.first == error::make_error_code(error::extension_parse_error)) {
+ // There was a fatal error in extension parsing that should result in
+ // a failed connection attempt.
+- m_alog.write(log::alevel::devel, "Bad request: " + neg_results.first.message());
++ m_alog.write(log::alevel::info, "Bad request: " + neg_results.first.message());
+ m_response.set_status(http::status_code::bad_request);
+ return neg_results.first;
++ } else if (neg_results.first) {
++ // There was a fatal error in extension processing that is probably our
++ // fault. Consider extension negotiation to have failed and continue as
++ // if extensions were not supported
++ m_alog.write(log::alevel::info,
++ "Extension negotiation failed: " + neg_results.first.message());
+ } else {
+ // extension negotiation succeeded, set response header accordingly
+ // we don't send an empty extensions header because it breaks many
+diff --git a/websocketpp/processors/hybi13.hpp b/websocketpp/processors/hybi13.hpp
+index 79486654..a95bc649 100644
+--- a/websocketpp/processors/hybi13.hpp
++++ b/websocketpp/processors/hybi13.hpp
+@@ -97,6 +97,11 @@ class hybi13 : public processor<config> {
+ /**
+ * This exists mostly because the code for requests and responses is
+ * identical and I can't have virtual template methods.
++ *
++ * NOTE: this method makes assumptions that the permessage-deflate
++ * extension is the only one supported. If additional extensions are
++ * ever supported it should be reviewed carefully. Most cases where
++ * that assumption is made are explicitly noted.
+ */
+ template <typename header_type>
+ err_str_pair negotiate_extensions_helper(header_type const & header) {
+@@ -149,9 +154,26 @@ class hybi13 : public processor<config> {
+ } else {
+ // Note: this list will need commas if WebSocket++ ever
+ // supports more than one extension
+- ret.second += neg_ret.second;
+- m_permessage_deflate.init(base::m_server);
+- continue;
++
++ // Actually try to initialize the extension before we
++ // deem negotiation complete
++ ret.first = m_permessage_deflate.init(base::m_server);
++ if (!ret.first) {
++
++ // TODO: support multiple extensions.
++ // right now, because there is only one extension
++ // supported, it failing to negotiate means we are
++ // done with all negotiating. In the future if more
++ // extensions are supported a better solution will
++ // be needed here.
++ break;
++ } else {
++ ret.second += neg_ret.second;
++
++ // continue looking for more extensions
++ continue;
++ }
++
+ }
+ }
+ }
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/disable-tests.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/disable-tests.patch
new file mode 100644
index 000000000..342981d4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.7.0/disable-tests.patch
@@ -0,0 +1,51 @@
+Description: Disable failing test_transport_asio_timers.
+Because of "address already in use" error
+/«PKGBUILDDIR»/test/transport/asio/timers.cpp(129): error in "tls_handshake_timeout": check ec == make_error_code(tls_handshake_timeout) failed [websocketpp.transport.asio.socket:8 != websocketpp.transport.asio.socket:5]
+Author: Gianfranco Costamagna <locutusofborg@debian.org>
+
+--- websocketpp-0.7.0.orig/test/transport/CMakeLists.txt
++++ websocketpp-0.7.0/test/transport/CMakeLists.txt
+@@ -1,24 +1,24 @@
+ if (OPENSSL_FOUND)
+
+-# Test transport integration
+-file (GLOB SOURCE integration.cpp)
+-
+-init_target (test_transport)
+-build_test (${TARGET_NAME} ${SOURCE})
+-link_boost ()
+-link_openssl()
+-final_target ()
+-set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test")
+-
+-# Test transport asio timers
+-file (GLOB SOURCE asio/timers.cpp)
+-
+-init_target (test_transport_asio_timers)
+-build_test (${TARGET_NAME} ${SOURCE})
+-link_boost ()
+-link_openssl()
+-final_target ()
+-set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test")
++## Test transport integration
++#file (GLOB SOURCE integration.cpp)
++#
++#init_target (test_transport)
++#build_test (${TARGET_NAME} ${SOURCE})
++#link_boost ()
++#link_openssl()
++#final_target ()
++#set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test")
++#
++## Test transport asio timers
++#file (GLOB SOURCE asio/timers.cpp)
++#
++#init_target (test_transport_asio_timers)
++#build_test (${TARGET_NAME} ${SOURCE})
++#link_boost ()
++#link_openssl()
++#final_target ()
++#set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test")
+
+ # Test transport asio security
+ file (GLOB SOURCE asio/security.cpp)
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.7.0.bb b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.7.0.bb
new file mode 100644
index 000000000..65fc974b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.7.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "C++/Boost Asio based websocket client/server library."
+SECTION = "libs/network"
+HOMEPAGE = "https://github.com/zaphoyd/websocketpp"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=4d168d763c111f4ffc62249870e4e0ea"
+DEPENDS = "openssl boost zlib"
+
+SRC_URI = "git://github.com/zaphoyd/websocketpp.git;protocol=https;branch=master"
+
+# tag 0.7.0
+SRCREV= "378437aecdcb1dfe62096ffd5d944bf1f640ccc3"
+
+SRC_URI += "file://0001-Fix-issue-599.patch \
+ file://9ddb300d874a30db35e3ad58f188944bef0bf31b.patch \
+ file://4cab5e5c0c5f19fcee7d37b4a38b156d63a150d4.patch \
+ file://disable-tests.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit cmake
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch
new file mode 100644
index 000000000..90eff5bb0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch
@@ -0,0 +1,26 @@
+From 0378cbb323c662a565f7f3de2dee3d8a646e7bd1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 09:32:42 -0700
+Subject: [PATCH 1/2] makefile: Pass CFLAGS to compile
+
+Set CC if not already set
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ host/tools/wmiconfig/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/host/tools/wmiconfig/Makefile b/host/tools/wmiconfig/Makefile
+index c6738c5..3253a7e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,4 +1,4 @@
+-CC :=$(ATH_CROSS_COMPILE_TYPE)gcc
++CC ?= $(ATH_CROSS_COMPILE_TYPE)gcc
+
+ all:
+- $(CC) -Wall -DUSER_KEYS -g $(LDFLAGS) -I../../include -I../../../include -I../../wlan/include -I../../os/linux/include wmiconfig.c -o wmiconfig
++ $(CC) -Wall -DUSER_KEYS -g $(CFLAGS) $(LDFLAGS) -I../../include -I../../../include -I../../wlan/include -I../../os/linux/include wmiconfig.c -o wmiconfig
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch
new file mode 100644
index 000000000..f67f784c1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch
@@ -0,0 +1,656 @@
+From 909ebdde4ee2233d65de8fa01fde8e9a3bec12b7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 09:33:26 -0700
+Subject: [PATCH 2/2] fix err() API to have format string
+
+Fixes errors with hardening flags
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ host/tools/wmiconfig/wmiconfig.c | 148 +++++++++++++++++++--------------------
+ 1 file changed, 74 insertions(+), 74 deletions(-)
+
+diff --git a/host/tools/wmiconfig/wmiconfig.c b/host/tools/wmiconfig/wmiconfig.c
+index 21c9dcd..a6ec481 100644
+--- a/wmiconfig.c
++++ b/wmiconfig.c
+@@ -483,7 +483,7 @@ main (int argc, char **argv)
+ strcpy(ifname, ethIf);
+ s = socket(AF_INET, SOCK_DGRAM, 0);
+ if (s < 0) {
+- err(1, "socket");
++ err(1, "%s", "socket");
+ }
+
+ while (1) {
+@@ -1506,28 +1506,28 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)filterCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SETBSSFILTER, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_POWER_MODE:
+ ifr.ifr_data = (void *)pwrCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SETPWR, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_PM_PARAMS:
+ ifr.ifr_data = (void *)pmParamCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_PMPARAMS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_IBSS_PM_CAPS:
+ ifr.ifr_data = (void *)adhocPmCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_IBSS_PM_CAPS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_ERROR_DETECTION:
+@@ -1535,7 +1535,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_HB_CHALLENGE_RESP:
+@@ -1543,7 +1543,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ #ifdef USER_KEYS
+@@ -1554,7 +1554,7 @@ main (int argc, char **argv)
+
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+
+ break;
+@@ -1575,7 +1575,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)sParamCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SETSCAN, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_VERSION:
+@@ -1586,7 +1586,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)revinfo;
+ if (ioctl(s, AR6000_IOCTL_WMI_GETREV, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printf("Host Rev = 0x%x(%u.%u.%u.%u), Target Rev = 0x%x(%u.%u.%u.%u)\n",
+ revinfo->host_ver,
+@@ -1606,14 +1606,14 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)listenCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SETLISTENINT, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BMISS_TIME:
+ ifr.ifr_data = (void *)bmissCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_BMISS_TIME, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_RSSI_THRESHOLDS:
+@@ -1621,14 +1621,14 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_SNR_THRESHOLDS:
+ ifr.ifr_data = (void *)snrThresholdParam;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_SNRTHRESHOLD, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_CLR_RSSISNR:
+@@ -1636,7 +1636,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_LQ_THRESHOLDS:
+@@ -1644,7 +1644,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_CHANNEL:
+@@ -1693,18 +1693,18 @@ main (int argc, char **argv)
+
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_CHANNELPARAMS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_SSID:
+ if (index > MAX_PROBED_SSID_INDEX) {
+ printf("num option for ssid command too large\n");
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ break;
+ }
+ if (strlen((char *)ssid) > sizeof (ssidCmd->ssid)) {
+ printf("ssid name too large\n");
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ break;
+ }
+ ssidCmd->entryIndex = index;
+@@ -1722,7 +1722,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)ssidCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_PROBEDSSID, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BADAP:
+@@ -1735,7 +1735,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)badApCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_BADAP, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_CREATE_QOS:
+@@ -1794,7 +1794,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)crePStreamCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_CREATE_QOS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_TARGET_STATS:
+@@ -1807,7 +1807,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)&tgtStatsCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_GET_TARGET_STATS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printTargetStats(&(tgtStatsCmd.targetStats));
+ break;
+@@ -1815,7 +1815,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)pBitMask;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_ERROR_REPORT_BITMASK, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_DELETE_QOS:
+@@ -1824,7 +1824,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)delPStreamCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_DELETE_QOS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_QOS_QUEUE:
+@@ -1840,7 +1840,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)getQosQueueCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_GET_QOS_QUEUE, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+
+ printf("Active TSIDs \n");
+@@ -1855,7 +1855,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)ieInfo;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_ASSOC_INFO, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_AC_PARAMS:
+@@ -1871,14 +1871,14 @@ main (int argc, char **argv)
+ ifr.ifr_data = (void *)acParamsCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_ACCESS_PARAMS, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_DISC_TIMEOUT:
+ ifr.ifr_data = (void *)discCmd;
+ if (ioctl(s, AR6000_IOCTL_WMI_SET_DISC_TIMEOUT, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_ADHOC_BSSID:
+@@ -1887,7 +1887,7 @@ main (int argc, char **argv)
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+ printf("fail to set adhoc bssid \n");
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_OPT_MODE:
+@@ -1895,7 +1895,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_OPT_SEND_FRAME:
+@@ -1903,7 +1903,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BEACON_INT:
+@@ -1911,7 +1911,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_VOICE_PKT_SIZE:
+@@ -1919,7 +1919,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_MAX_SP:
+@@ -1927,7 +1927,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_ROAM_TBL:
+@@ -1935,7 +1935,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_ROAM_CTRL:
+@@ -1943,7 +1943,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_POWERSAVE_TIMERS:
+@@ -1951,7 +1951,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_POWER_MODE:
+@@ -1959,7 +1959,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printf("Power mode is %s\n",
+ (getPowerMode->powerMode == MAX_PERF_POWER) ? "maxperf" : "rec");
+@@ -1969,7 +1969,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_ROAM_DATA:
+@@ -1977,7 +1977,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BT_STATUS:
+@@ -1985,7 +1985,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BT_PARAMS:
+@@ -1993,7 +1993,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_RETRYLIMITS:
+@@ -2001,14 +2001,14 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_START_SCAN:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_STARTSCAN;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_FIX_RATES:
+@@ -2031,14 +2031,14 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_FIX_RATES:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_GETFIXRATES;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ } else {
+ int i;
+ printf("Fix rate set index:");
+@@ -2057,7 +2057,7 @@ main (int argc, char **argv)
+ index--;
+ setAuthMode->mode = atoi(argv[index]);
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_REASSOC_MODE:
+@@ -2067,42 +2067,42 @@ main (int argc, char **argv)
+ index--;
+ setReassocMode->mode = atoi(argv[index]);
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_LPREAMBLE:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_LPREAMBLE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_RTS:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_RTS;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_WMM:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_WMM;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_TXOP:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_TXOP;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case DIAG_READ:
+ ((int *)buf)[0] = AR6000_XIOCTL_DIAG_READ;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printf("diagdata: 0x%x\n", *diagdata);
+ break;
+@@ -2110,7 +2110,7 @@ main (int argc, char **argv)
+ ((int *)buf)[0] = AR6000_XIOCTL_DIAG_WRITE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_RD:
+@@ -2118,7 +2118,7 @@ main (int argc, char **argv)
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
+ {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ else
+ {
+@@ -2139,14 +2139,14 @@ main (int argc, char **argv)
+ index--;
+ setKeepAlive->keepaliveInterval = atoi(argv[index]);
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_KEEPALIVE:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_KEEPALIVE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printf("Keepalive interval is %d secs and AP is %s\n",
+ getKeepAlive->keepaliveInterval, (getKeepAlive->configured ?
+@@ -2156,63 +2156,63 @@ main (int argc, char **argv)
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_APPIE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_MGMT_FRM_RX_FILTER:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_DBGLOG_CFG_MODULE:
+ ((int *)buf)[0] = AR6000_XIOCTL_DBGLOG_CFG_MODULE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_DBGLOG_GET_DEBUG_LOGS:
+ ((int *)buf)[0] = AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_HOST_SLEEP_MODE:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_WOW_MODE:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_WOW_MODE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_ADD_WOW_PATTERN:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_ADD_WOW_PATTERN;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_DEL_WOW_PATTERN:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_DEL_WOW_PATTERN;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_GET_WOW_LIST:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_WOW_LIST;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case DIAG_DUMP_CHIP_MEM:
+@@ -2225,7 +2225,7 @@ main (int argc, char **argv)
+ ((int *)buf)[0] = AR6000_XIOCTL_DIAG_READ;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ printf("0x%04x:0x%04x\n", *diagaddr, *diagdata);
+ }
+@@ -2237,21 +2237,21 @@ main (int argc, char **argv)
+ index = optind - 1;
+ *connectCtrlFlags = strtoul(argv[index], NULL, 0);
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case DUMP_HTC_CREDITS:
+ ((int *)buf)[0] = AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_AKMP_INFO:
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_AKMP_PARAMS;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_PMKID_LIST:
+@@ -2259,7 +2259,7 @@ main (int argc, char **argv)
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_PMKID_LIST;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ } else {
+ printf("No PMKIDs entered\n");
+@@ -2269,7 +2269,7 @@ main (int argc, char **argv)
+ ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_PMKID_LIST;
+ ifr.ifr_data = buf;
+ if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ case WMI_SET_BSS_PMKID_INFO:
+@@ -2277,7 +2277,7 @@ main (int argc, char **argv)
+ iwr.u.data.length = sizeof(*pi_cmd);
+ if (ioctl(s, IEEE80211_IOCTL_ADDPMKID, &iwr) < 0) {
+ printf("ADDPMKID IOCTL Error\n");
+- err(1, ifr.ifr_name);
++ err(1, "%s", ifr.ifr_name);
+ }
+ break;
+ default:
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb
new file mode 100644
index 000000000..c66572b1c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Atheros 6K Wifi configuration utility"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://wmiconfig.c;endline=19;md5=4394a56bca1c5b2446c9f8e406c82911"
+SECTION = "console/network"
+SRCREV = "5394"
+PV = "0.0.0+svnr${SRCPV}"
+PR = "r2"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=AR6kSDK.build_sw.18;protocol=http \
+ file://0001-makefile-Pass-CFLAGS-to-compile.patch \
+ file://0002-fix-err-API-to-have-format-string.patch \
+ "
+S = "${WORKDIR}/AR6kSDK.build_sw.18/host/tools/wmiconfig"
+
+CLEANBROKEN = "1"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 wmiconfig ${D}${bindir}
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xdelta/xdelta3_3.0.11.bb b/meta-openembedded/meta-oe/recipes-support/xdelta/xdelta3_3.0.11.bb
new file mode 100644
index 000000000..9669d9bbb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xdelta/xdelta3_3.0.11.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Xdelta is a tool for differential compression"
+DESCRIPTION = "Open-source binary diff, differential compression tools, \
+ VCDIFF (RFC 3284) delta compression."
+HOMEPAGE = "http://xdelta.org/"
+SECTION = "console/utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+SRC_URI = "https://github.com/jmacd/xdelta-devel/releases/download/v${PV}/${BPN}-${PV}.tar.gz \
+ "
+SRC_URI[md5sum] = "445d8be2ac512113d5ca601ae8359626"
+SRC_URI[sha256sum] = "0ccc9751ceaa4d90d6b06938a4deddb481816f5d9284bd07d2e728609cb300aa"
+
+inherit autotools
+
+# Optional secondary compression
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lzma] = "--with-liblzma,--without-liblzma,xz"
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-user-dirs/xdg-user-dirs_0.17.bb b/meta-openembedded/meta-oe/recipes-support/xdg-user-dirs/xdg-user-dirs_0.17.bb
new file mode 100644
index 000000000..e3ce9268c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xdg-user-dirs/xdg-user-dirs_0.17.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "xdg-user-dirs is a tool to help manage user directories like the desktop folder and the music folder"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://user-dirs.freedesktop.org/releases/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "e0564ec6d838e6e41864d872a29b3575"
+SRC_URI[sha256sum] = "2a07052823788e8614925c5a19ef5b968d8db734fdee656699ea4f97d132418c"
+
+inherit autotools gettext
+
+EXTRA_OECONF = "--disable-documentation"
+
+CONFFILES_${PN} += " \
+ ${sysconfdir}/xdg/user-dirs.conf \
+ ${sysconfdir}/xdg/user-dirs.defaults \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/0001-usage2c.awk-fix-wrong-basename-regexp.patch b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/0001-usage2c.awk-fix-wrong-basename-regexp.patch
new file mode 100644
index 000000000..24b187f2a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/0001-usage2c.awk-fix-wrong-basename-regexp.patch
@@ -0,0 +1,37 @@
+Upstream-Status: Submitted [sourceforge]
+
+From 75d789d0ea9716c9a9ae72f42a2fcfa907cf4a12 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Mon, 30 Jun 2014 13:52:25 +0200
+Subject: [PATCH] usage2c.awk: fix wrong basename regexp
+
+Previously not matching with filename argument with absolute path.
+
+Signed-off-by: Matthieu Crapet <mcrapet@gmail.com>
+---
+ usage2c.awk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/usage2c.awk b/usage2c.awk
+index 94b897a..9aea212 100755
+--- a/usage2c.awk
++++ b/usage2c.awk
+@@ -6,13 +6,13 @@ BEGIN {
+ }
+
+ # text in src/foo-bar.txt results in
+-# static const char foo_text[] = {
++# static const char foo_bar[] = {
+ # 't', 'h', 'e', ' ', 't', 'e', 'x', 't', ...
+ # }
+ length(command_name) == 0 {
+ command_name = FILENAME;
+ sub(/\.txt$/, "", command_name);
+- sub(/^([^\/]+\/)*/, "", command_name);
++ sub(/^.*\//, "", command_name);
+ gsub(/-/, "_", command_name);
+ printf("static const char %s[] = {\n", command_name);
+ progs = 0;
+--
+2.0.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/configure.ac.patch b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/configure.ac.patch
new file mode 100644
index 000000000..e55f4f3b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/files/configure.ac.patch
@@ -0,0 +1,28 @@
+configure.ac: don't use xml-config if --with-libxml-prefix is specified to configure
+
+Same behavior for xslt-config.
+
+diff --git a/configure.ac b/configure.ac
+index ed04e0c..39d5d4c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -40,7 +40,8 @@ AC_ARG_PROGRAM dnl Transforming Program Names When Installing
+ AC_PROG_SED
+ AC_PROG_AWK
+
+-XSTAR_LIB_CHECK([LIBXML], [xml2-config])
++AS_IF([test "x$LIBXML_PREFIX" = x],
++ [XSTAR_LIB_CHECK([LIBXML], [xml2-config])])
+
+ AS_IF([test "x$LIBXML_SRCDIR" != x],
+ [LIBXML_INCDIR="$LIBXML_SRCDIR/include"])
+@@ -56,7 +57,8 @@ AS_IF([test "x$STATIC_LIBS" != xno],
+ [LIBXML_LDFLAGS="-L$LIBXML_LIBDIR"]
+
+
+-XSTAR_LIB_CHECK([LIBXSLT], [xslt-config])
++AS_IF([test "x$LIBXSLT_PREFIX" = x],
++ [XSTAR_LIB_CHECK([LIBXSLT], [xslt-config])])
+
+ AS_IF([test "x$LIBXSLT_SRCDIR" != x],
+ [XSLTPROC_PATH="$LIBXSLT_SRCDIR/xsltproc:$PATH"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlstarlet/xmlstarlet_1.6.1.bb b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/xmlstarlet_1.6.1.bb
new file mode 100644
index 000000000..e3d52e616
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xmlstarlet/xmlstarlet_1.6.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Command line XML toolkit"
+DESCRIPTION = "XMLStarlet is a command line XML toolkit which can be used to \
+ transform, query, validate, and edit XML documents and files \
+ using simple set of shell commands in similar way it is done \
+ for plain text files using grep/sed/awk/tr/diff/patch."
+HOMEPAGE = "http://xmlstar.sourceforge.net/"
+BUGTRACKER = "http://xmlstar.sourceforge.net/bugs/"
+
+SECTION = "console/utils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c04760d09e8b0fe73283d0cc9e8bea53"
+
+DEPENDS = "libxml2 libxslt"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/xmlstar/${BP}.tar.gz \
+ file://configure.ac.patch \
+ file://0001-usage2c.awk-fix-wrong-basename-regexp.patch"
+SRC_URI[md5sum] = "f3c5dfa3b1a2ee06cd57c255cc8b70a0"
+SRC_URI[sha256sum] = "15d838c4f3375332fd95554619179b69e4ec91418a3a5296e7c631b7ed19e7ca"
+
+inherit autotools
+
+# doc build: requires (native) xstlproc, fop, pdf2ps
+EXTRA_OECONF="--disable-build-docs \
+ --with-libxml-prefix=${STAGING_LIBDIR}/.. \
+ --with-libxslt-prefix=${STAGING_LIBDIR}/.."
diff --git a/meta-openembedded/meta-oe/recipes-support/xorg-xrdp/xorgxrdp_0.2.5.bb b/meta-openembedded/meta-oe/recipes-support/xorg-xrdp/xorgxrdp_0.2.5.bb
new file mode 100644
index 000000000..0bdafdf3b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xorg-xrdp/xorgxrdp_0.2.5.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Xorg drivers for xrdp."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a2523660329fdca3d954c0a87390e007"
+
+inherit autotools pkgconfig
+
+DEPENDS = "virtual/libx11 xserver-xorg xrdp nasm-native"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11 pam"
+
+SRC_URI = "git://github.com/neutrinolabs/xorgxrdp.git"
+
+SRCREV = "c122544f184d4031bbae1ad80fbab554c34a9427"
+
+PV = "0.2.5"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "${libdir}/xorg/modules/*"
+
+INSANE_SKIP_${PN} += "xorg-driver-abi"
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Added-req_distinguished_name-in-etc-xrdp-openssl.con.patch b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Added-req_distinguished_name-in-etc-xrdp-openssl.con.patch
new file mode 100644
index 000000000..5e7fca02a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Added-req_distinguished_name-in-etc-xrdp-openssl.con.patch
@@ -0,0 +1,33 @@
+From d705b1d666cb8713d86ea6fb2fc45c424128285a Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Fri, 1 Dec 2017 10:24:50 +0900
+Subject: [PATCH] Added req_distinguished_name in /etc/xrdp/openssl.conf,
+ otherwise, cert.pem can't be created.
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ keygen/openssl.conf | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/keygen/openssl.conf b/keygen/openssl.conf
+index 09db6c2..f077d72 100644
+--- a/keygen/openssl.conf
++++ b/keygen/openssl.conf
+@@ -4,6 +4,14 @@ distinguished_name = req_distinguished_name
+ x509_extensions = v3_ca
+
+ [req_distinguished_name]
++# Certificate subject
++#countryName = US
++#stateOrProvinceName = CA
++#localityName = Sunnyvale
++#organizationName = xrdp
++#organizationalUnitName =
++commonName = XRDP
++#emailAddress =
+
+ [v3_ca]
+ # Extensions for a typical CA - PKIX recommendation.
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-of-CVE-2017-16927.patch b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-of-CVE-2017-16927.patch
new file mode 100644
index 000000000..4c93647f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-of-CVE-2017-16927.patch
@@ -0,0 +1,148 @@
+Subject: [PATCH] Fix CVE-2017-16927
+
+sesman: scpv0, accept variable length data fields
+
+Upstream-Status: Backport
+
+---
+ sesman/libscp/libscp_v0.c | 32 +++++++++++++++++++++++++-------
+ 1 file changed, 25 insertions(+), 7 deletions(-)
+
+diff --git a/sesman/libscp/libscp_v0.c b/sesman/libscp/libscp_v0.c
+index 5a0c8bf..5693407 100644
+--- a/sesman/libscp/libscp_v0.c
++++ b/sesman/libscp/libscp_v0.c
+@@ -161,7 +161,7 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+ struct SCP_SESSION *session = 0;
+ tui16 sz;
+ tui32 code = 0;
+- char buf[257];
++ char *buf = 0;
+
+ if (!skipVchk)
+ {
+@@ -226,27 +226,31 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+
+ /* reading username */
+ in_uint16_be(c->in_s, sz);
+- buf[sz] = '\0';
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+-
++ buf[sz] = '\0';
+ if (0 != scp_session_set_username(session, buf))
+ {
+ scp_session_destroy(session);
+ log_message(LOG_LEVEL_WARNING, "[v0:%d] connection aborted: error setting username", __LINE__);
++ g_free(buf);
+ return SCP_SERVER_STATE_INTERNAL_ERR;
+ }
++ g_free(buf);
+
+ /* reading password */
+ in_uint16_be(c->in_s, sz);
+- buf[sz] = '\0';
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+-
++ buf[sz] = '\0';
+ if (0 != scp_session_set_password(session, buf))
+ {
+ scp_session_destroy(session);
+ log_message(LOG_LEVEL_WARNING, "[v0:%d] connection aborted: error setting password", __LINE__);
++ g_free(buf);
+ return SCP_SERVER_STATE_INTERNAL_ERR;
+ }
++ g_free(buf);
+
+ /* width */
+ in_uint16_be(c->in_s, sz);
+@@ -272,9 +276,11 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+
+ if (sz > 0)
+ {
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+ buf[sz] = '\0';
+ scp_session_set_domain(session, buf);
++ g_free(buf);
+ }
+ }
+
+@@ -285,9 +291,11 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+
+ if (sz > 0)
+ {
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+ buf[sz] = '\0';
+ scp_session_set_program(session, buf);
++ g_free(buf);
+ }
+ }
+
+@@ -298,9 +306,11 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+
+ if (sz > 0)
+ {
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+ buf[sz] = '\0';
+ scp_session_set_directory(session, buf);
++ g_free(buf);
+ }
+ }
+
+@@ -311,9 +321,11 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+
+ if (sz > 0)
+ {
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
+ buf[sz] = '\0';
+ scp_session_set_client_ip(session, buf);
++ g_free(buf);
+ }
+ }
+ }
+@@ -332,29 +344,35 @@ scp_v0s_accept(struct SCP_CONNECTION *c, struct SCP_SESSION **s, int skipVchk)
+ scp_session_set_type(session, SCP_GW_AUTHENTICATION);
+ /* reading username */
+ in_uint16_be(c->in_s, sz);
+- buf[sz] = '\0';
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
++ buf[sz] = '\0';
+
+ /* g_writeln("Received user name: %s",buf); */
+ if (0 != scp_session_set_username(session, buf))
+ {
+ scp_session_destroy(session);
+ /* until syslog merge log_message(s_log, LOG_LEVEL_WARNING, "[v0:%d] connection aborted: error setting username", __LINE__);*/
++ g_free(buf);
+ return SCP_SERVER_STATE_INTERNAL_ERR;
+ }
++ g_free(buf);
+
+ /* reading password */
+ in_uint16_be(c->in_s, sz);
+- buf[sz] = '\0';
++ buf = g_new0(char, sz);
+ in_uint8a(c->in_s, buf, sz);
++ buf[sz] = '\0';
+
+ /* g_writeln("Received password: %s",buf); */
+ if (0 != scp_session_set_password(session, buf))
+ {
+ scp_session_destroy(session);
+ /* until syslog merge log_message(s_log, LOG_LEVEL_WARNING, "[v0:%d] connection aborted: error setting password", __LINE__); */
++ g_free(buf);
+ return SCP_SERVER_STATE_INTERNAL_ERR;
+ }
++ g_free(buf);
+ }
+ else
+ {
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-sesman.ini-and-xrdp.ini.patch b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-sesman.ini-and-xrdp.ini.patch
new file mode 100644
index 000000000..deaadde8c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-sesman.ini-and-xrdp.ini.patch
@@ -0,0 +1,75 @@
+From a9c460f158d68c1b3de6a31ce853de5379977695 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Thu, 30 Nov 2017 11:10:04 +0900
+Subject: [PATCH] Fix sesman.ini and xrdp.ini
+
+Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
+---
+ sesman/sesman.ini | 20 ++++++--------------
+ xrdp/xrdp.ini | 10 ----------
+ 2 files changed, 6 insertions(+), 24 deletions(-)
+
+diff --git a/sesman/sesman.ini b/sesman/sesman.ini
+index 8225ee4..c09189e 100644
+--- a/sesman/sesman.ini
++++ b/sesman/sesman.ini
+@@ -54,12 +54,14 @@ LogLevel=DEBUG
+ EnableSyslog=1
+ SyslogLevel=DEBUG
+
+-[X11rdp]
+-param=X11rdp
+-param=-bs
++[Xorg]
++param=Xorg
++param=-config
++param=xrdp/xorg.conf
++param=-noreset
+ param=-nolisten
+ param=tcp
+-param=-uds
++
+
+ [Xvnc]
+ param=Xvnc
+@@ -70,16 +72,6 @@ param=-localhost
+ param=-dpi
+ param=96
+
+-[Xorg]
+-param=Xorg
+-param=-config
+-param=xrdp/xorg.conf
+-param=-noreset
+-param=-nolisten
+-param=tcp
+-param=-logfile
+-param=.xorgxrdp.%s.log
+-
+ [Chansrv]
+ ; drive redirection, defaults to xrdp_client if not set
+ FuseMountName=thinclient_drives
+diff --git a/xrdp/xrdp.ini b/xrdp/xrdp.ini
+index cb6d7c3..9f63a69 100644
+--- a/xrdp/xrdp.ini
++++ b/xrdp/xrdp.ini
+@@ -157,16 +157,6 @@ ip=127.0.0.1
+ port=-1
+ code=20
+
+-[X11rdp]
+-name=X11rdp
+-lib=libxup.so
+-username=ask
+-password=ask
+-ip=127.0.0.1
+-port=-1
+-xserverbpp=24
+-code=10
+-
+ [Xvnc]
+ name=Xvnc
+ lib=libvnc.so
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-the-compile-error.patch b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-the-compile-error.patch
new file mode 100644
index 000000000..82b279085
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/0001-Fix-the-compile-error.patch
@@ -0,0 +1,35 @@
+Subject: [PATCH] Fix the make error
+
+Fix the compile error:
+ *** No rule to make target '../librfxcodec/src/.libs/librfxencode.a', needed by 'xrdp'. Stop..
+
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+---
+ xrdp/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xrdp/Makefile.am b/xrdp/Makefile.am
+index a259ef3..d5505b2 100644
+--- a/xrdp/Makefile.am
++++ b/xrdp/Makefile.am
+@@ -23,7 +23,7 @@ endif
+ if XRDP_RFXCODEC
+ AM_CPPFLAGS += -DXRDP_RFXCODEC
+ AM_CPPFLAGS += -I$(top_srcdir)/librfxcodec/include
+-XRDP_EXTRA_LIBS += $(top_builddir)/librfxcodec/src/.libs/librfxencode.a
++XRDP_EXTRA_LIBS += $(top_builddir)/librfxcodec/src/.libs/librfxencode.la
+ endif
+
+ if XRDP_PIXMAN
+@@ -35,7 +35,7 @@ endif
+ if XRDP_PAINTER
+ AM_CPPFLAGS += -DXRDP_PAINTER
+ AM_CPPFLAGS += -I$(top_srcdir)/libpainter/include
+-XRDP_EXTRA_LIBS += $(top_builddir)/libpainter/src/.libs/libpainter.a
++XRDP_EXTRA_LIBS += $(top_builddir)/libpainter/src/.libs/libpainter.la
+ endif
+
+ sbin_PROGRAMS = \
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/xrdp.sysconfig b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/xrdp.sysconfig
new file mode 100644
index 000000000..39f500a33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp/xrdp.sysconfig
@@ -0,0 +1,4 @@
+# put some options here
+
+XRDP_OPTIONS=""
+SESMAN_OPTIONS=""
diff --git a/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp_0.9.4.bb b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp_0.9.4.bb
new file mode 100644
index 000000000..3ef7c9853
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xrdp/xrdp_0.9.4.bb
@@ -0,0 +1,99 @@
+SUMMARY = "An open source remote desktop protocol(rdp) server."
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=72cfbe4e7bd33a0a1de9630c91195c21 \
+"
+
+inherit distro_features_check autotools pkgconfig useradd systemd
+
+DEPENDS = "openssl virtual/libx11 libxfixes libxrandr libpam nasm-native"
+
+REQUIRED_DISTRO_FEATURES = "x11 pam"
+
+SRC_URI = "git://github.com/neutrinolabs/xrdp.git \
+ file://xrdp.sysconfig \
+ file://0001-Fix-sesman.ini-and-xrdp.ini.patch \
+ file://0001-Added-req_distinguished_name-in-etc-xrdp-openssl.con.patch \
+ file://0001-Fix-the-compile-error.patch \
+ file://0001-Fix-of-CVE-2017-16927.patch \
+ "
+
+SRCREV = "c295dd61b882e8b56677cf12791f43634f9190b5"
+
+PV = "0.9.4+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[fuse] = " --enable-fuse, --disable-fuse, fuse"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system xrdp"
+USERADD_PARAM_${PN} = "--system --home /var/run/xrdp -g xrdp \
+ --no-create-home --shell /bin/false xrdp"
+
+FILES_${PN} += "${datadir}/dbus-1/services/*.service \
+ ${datadir}/dbus-1/accessibility-services/*.service "
+
+FILES_${PN}-dev += "${libdir}/xrdp/libcommon.so \
+ ${libdir}/xrdp/libxrdp.so \
+ ${libdir}/xrdp/libscp.so \
+ ${libdir}/xrdp/libxrdpapi.so "
+
+EXTRA_OECONF = "--enable-pam-config=suse"
+
+do_configure_prepend() {
+ cd ${S}
+ ./bootstrap
+ cd -
+}
+
+do_compile_prepend() {
+ sed -i 's/(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am/(MAKE) $(AM_MAKEFLAGS) install-exec-am/g' ${S}/keygen/Makefile.in
+}
+
+
+do_install_append() {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/xrdp
+ install -d ${D}${sysconfdir}/xrdp/pam.d
+ install -d ${D}${sysconfdir}/sysconfig/xrdp
+
+ # deal with systemd unit files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${S}/instfiles/xrdp.service.in ${D}${systemd_unitdir}/system/xrdp.service
+ install -m 0644 ${S}/instfiles/xrdp-sesman.service.in ${D}${systemd_unitdir}/system/xrdp-sesman.service
+ sed -i -e 's,@localstatedir@,${localstatedir},g' ${D}${systemd_unitdir}/system/xrdp.service ${D}${systemd_unitdir}/system/xrdp-sesman.service
+ sed -i -e 's,@sysconfdir@,${sysconfdir},g' ${D}${systemd_unitdir}/system/xrdp.service ${D}${systemd_unitdir}/system/xrdp-sesman.service
+ sed -i -e 's,@sbindir@,${sbindir},g' ${D}${systemd_unitdir}/system/xrdp.service ${D}${systemd_unitdir}/system/xrdp-sesman.service
+
+ install -m 0644 ${S}/instfiles/*.ini ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/sesman/sesman.ini ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/sesman/startwm.sh ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/xrdp/xrdp.ini ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/xrdp/xrdp_keyboard.ini ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/instfiles/xrdp.sh ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${S}/keygen/openssl.conf ${D}${sysconfdir}/xrdp/
+ install -m 0644 ${WORKDIR}/xrdp.sysconfig ${D}${sysconfdir}/sysconfig/xrdp/
+ chown xrdp:xrdp ${D}${sysconfdir}/xrdp
+}
+
+SYSTEMD_SERVICE_${PN} = "xrdp.service xrdp-sesman.service"
+
+pkg_postinst_${PN}() {
+ if test -z "$D"
+ then
+ if test -x ${bindir}/xrdp-keygen
+ then
+ ${bindir}/xrdp-keygen xrdp ${sysconfdir}/xrdp/rsakeys.ini >/dev/null
+ fi
+ if test ! -s ${sysconfdir}/xrdp/cert.pem
+ then
+ openssl req -x509 -newkey rsa:2048 -sha256 -nodes -days 3652 \
+ -keyout ${sysconfdir}/xrdp/key.pem \
+ -out ${sysconfdir}/xrdp/cert.pem \
+ -config ${sysconfdir}/xrdp/openssl.conf >/dev/null 2>&1
+ chmod 400 ${sysconfdir}/xrdp/key.pem
+ fi
+ fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-make-relies-GNU-extentions.patch b/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-make-relies-GNU-extentions.patch
new file mode 100644
index 000000000..04239bacd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-make-relies-GNU-extentions.patch
@@ -0,0 +1,32 @@
+From 224507bc4b6e58f7a6e445bfebfb59d6b8d78bd6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Dec 2016 17:38:51 -0800
+Subject: [PATCH] make relies GNU extentions
+
+We get errors like
+`%'-style pattern rules are a GNU make extension
+
+Disable this warning, since we use gmake with OE
+anyway
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 56d3dd0..9f85fd7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_PREREQ([2.61])
+ AC_INIT([zbar], [0.10], [spadix@users.sourceforge.net])
+ AC_CONFIG_AUX_DIR(config)
+ AC_CONFIG_MACRO_DIR(config)
+-AM_INIT_AUTOMAKE([1.10 -Wall -Werror foreign subdir-objects std-options dist-bzip2])
++AM_INIT_AUTOMAKE([1.10 -Wall -Werror -Wno-portability foreign subdir-objects std-options dist-bzip2])
+ AC_CONFIG_HEADERS([include/config.h])
+ AC_CONFIG_SRCDIR(zbar/scanner.c)
+ LT_PREREQ([2.2])
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-undefine-__va_arg_pack.patch b/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-undefine-__va_arg_pack.patch
new file mode 100644
index 000000000..f7d8ba1e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zbar/zbar/0001-undefine-__va_arg_pack.patch
@@ -0,0 +1,51 @@
+From f842872244219d9881fbec77054702412b1e16f8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Dec 2016 16:41:27 -0800
+Subject: [PATCH] undefine __va_arg_pack
+
+dprintf() is also a libc function. This fixes
+the compile errors
+
+/usr/include/bits/stdio2.h:140:1: error: expected identifier or '(' before '{' token
+| {
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ zbar/debug.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/zbar/debug.h b/zbar/debug.h
+index 482ca8d..68948f6 100644
+--- a/zbar/debug.h
++++ b/zbar/debug.h
+@@ -23,6 +23,7 @@
+
+ /* varargs variations on compile time debug spew */
+
++#undef __va_arg_pack
+ #ifndef DEBUG_LEVEL
+
+ # ifdef __GNUC__
+@@ -36,15 +37,14 @@
+ #else
+
+ # include <stdio.h>
+-
+ # ifdef __GNUC__
+-# define dprintf(level, args...) \
++# define dprintf(level, format, args...) \
+ if((level) <= DEBUG_LEVEL) \
+- fprintf(stderr, args)
++ fprintf(stderr, format, args)
+ # else
+-# define dprintf(level, ...) \
++# define dprintf(level, format, ...) \
+ if((level) <= DEBUG_LEVEL) \
+- fprintf(stderr, __VA_ARGS__)
++ fprintf(stderr, format, __VA_ARGS__)
+ # endif
+
+ #endif /* DEBUG_LEVEL */
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/zbar/zbar_0.10.bb b/meta-openembedded/meta-oe/recipes-support/zbar/zbar_0.10.bb
new file mode 100644
index 000000000..6b6e50111
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zbar/zbar_0.10.bb
@@ -0,0 +1,28 @@
+DESRIPTION = "2D barcode scanner toolkit."
+SECTION = "graphics"
+LICENSE = "LGPL-2.1"
+
+DEPENDS = "pkgconfig intltool-native libpng jpeg"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=42bafded1b380c6fefbeb6c5cd5448d9"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.bz2 \
+ file://0001-undefine-__va_arg_pack.patch \
+ file://0001-make-relies-GNU-extentions.patch \
+"
+
+SRC_URI[md5sum] = "0fd61eb590ac1bab62a77913c8b086a5"
+SRC_URI[sha256sum] = "234efb39dbbe5cef4189cc76f37afbe3cfcfb45ae52493bfe8e191318bdbadc6"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+
+PACKAGECONFIG[x11] = "--with-x,-without-x,libxcb libx11 libsm libxau libxext libxv libice libxdmcp"
+
+EXTRA_OECONF = " --without-imagemagick --without-qt --without-python --disable-video --without-gtk"
+
+do_install_append() {
+ #remove usr/bin if empty
+ rmdir ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/zile/files/remove-help2man.patch b/meta-openembedded/meta-oe/recipes-support/zile/files/remove-help2man.patch
new file mode 100644
index 000000000..c1a63f479
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zile/files/remove-help2man.patch
@@ -0,0 +1,28 @@
+Upstream-Status: Inappropriate [configuration]
+
+diff --git a/Makefile.am b/Makefile.am
+index 54bc59f..46c2650 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -36,7 +36,6 @@ PERL_BUILDTIME = \
+
+ EXTRA_DIST = \
+ FAQ \
+- build-aux/zile-help2man-wrapper \
+ $(PERL_BUILDTIME)
+
+ doc_DATA = AUTHORS FAQ NEWS
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 639f59c..8c5123e 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -33,9 +33,3 @@ doc/zile.1: $(srcdir)/doc/zile.1.in doc/Makefile.am config.status
+ $(edit) $(abs_srcdir)/doc/zile.1.in >$@.tmp
+ mv $@.tmp $@
+
+-$(srcdir)/doc/zile.1.in: doc/man-extras build-aux/zile-help2man-wrapper configure.ac $(builddir)/src/zile$(EXEEXT)
+- @test -d doc || mkdir doc
+-## Exit gracefully if zile.1.in is not writeable, such as during distcheck!
+- $(AM_V_GEN)if ( touch $@.w && rm -f $@.w; ) >/dev/null 2>&1; then \
+- $(srcdir)/build-aux/missing --run $(HELP2MAN) --output=$@ --no-info --name="Zile Is Lossy Emacs" --include $(srcdir)/doc/man-extras $(srcdir)/build-aux/zile-help2man-wrapper; \
+- fi
diff --git a/meta-openembedded/meta-oe/recipes-support/zile/zile_2.4.14.bb b/meta-openembedded/meta-oe/recipes-support/zile/zile_2.4.14.bb
new file mode 100644
index 000000000..515cf4136
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zile/zile_2.4.14.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Zile is lossy Emacs"
+HOMEPAGE = "http://zile.sourceforge.net/"
+DEPENDS = "ncurses bdwgc"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "http://ftp.gnu.org/gnu/zile/${BP}.tar.gz \
+ file://remove-help2man.patch \
+"
+
+SRC_URI[md5sum] = "c7d7eec93231c6878f255978d9747a73"
+SRC_URI[sha256sum] = "7a78742795ca32480f2bab697fd5e328618d9997d6f417cf1b14e9da9af26b74"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+ rm -rf ${D}${libdir}/charset.alias
+ rmdir --ignore-fail-on-non-empty ${D}${libdir} || true
+}
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)}"
+
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
diff --git a/meta-openembedded/meta-oe/recipes-test/cppunit/cppunit_1.13.2.bb b/meta-openembedded/meta-oe/recipes-test/cppunit/cppunit_1.13.2.bb
new file mode 100644
index 000000000..65b08b068
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cppunit/cppunit_1.13.2.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "CppUnit is the C++ port of the famous JUnit framework for unit testing. Test output is in XML for automatic testing and GUI based for supervised tests. "
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/cppunit"
+LICENSE = "LGPL-2.1"
+SECTION = "libs"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+SRC_URI = " \
+ http://dev-www.libreoffice.org/src/cppunit-${PV}.tar.gz \
+ file://0001-doc-Makefile.am-do-not-preserve-file-flags-when-copy.patch \
+"
+SRC_URI[md5sum] = "d1c6bdd5a76c66d2c38331e2d287bc01"
+SRC_URI[sha256sum] = "3f47d246e3346f2ba4d7c9e882db3ad9ebd3fcbd2e8b732f946e0e3eeb9f429f"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-test/cppunit/files/0001-doc-Makefile.am-do-not-preserve-file-flags-when-copy.patch b/meta-openembedded/meta-oe/recipes-test/cppunit/files/0001-doc-Makefile.am-do-not-preserve-file-flags-when-copy.patch
new file mode 100644
index 000000000..6a20c1283
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cppunit/files/0001-doc-Makefile.am-do-not-preserve-file-flags-when-copy.patch
@@ -0,0 +1,31 @@
+From 9d7ce869607d123cd9837890d71f940c5ced3393 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 29 Feb 2016 07:58:20 +0100
+Subject: [PATCH] doc/Makefile.am: do not preserve file flags when copying
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [cross specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ doc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 8815476..3237499 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -22,7 +22,7 @@ htmldir += $(pkgdatadir)/html
+ html_DATA += $(static_pages) html/index.html
+
+ install-data-hook:
+- cp -pR html/* $(DESTDIR)$(htmldir)
++ cp -R html/* $(DESTDIR)$(htmldir)
+
+ # Automake's "distcheck" is sensitive to having files left over
+ # after "make uninstall", so we have to clean up the install hook.
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb b/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb
new file mode 100644
index 000000000..c9d87e36d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "CUnit is a C framework for unit testing. Test output supports comandline and GUI results reporting"
+HOMEPAGE = "http://cunit.sourceforge.net"
+LICENSE = "LGPL-2.0"
+SECTION = "libs"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7734aa853b85d6f935466f081490ddbb"
+
+S = "${WORKDIR}/CUnit-${PV}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/cunit/CUnit/${PV}/CUnit-${PV}.tar.bz2 \
+ file://fixup-install-docdir.patch"
+SRC_URI[md5sum] = "b5f1a9f6093869c070c6e4a9450cc10c"
+SRC_URI[sha256sum] = "f5b29137f845bb08b77ec60584fdb728b4e58f1023e6f249a464efa49a40f214"
+
+inherit autotools-brokensep remove-libtool
+
+EXTRA_OECONF = "--enable-memtrace --enable-automated --enable-basic --enable-console"
+
+FILES_${PN}-dev += "${datadir}/CUnit"
+FILES_${PN}-doc += "${docdir}"
diff --git a/meta-openembedded/meta-oe/recipes-test/cunit/files/fixup-install-docdir.patch b/meta-openembedded/meta-oe/recipes-test/cunit/files/fixup-install-docdir.patch
new file mode 100644
index 000000000..c32822731
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cunit/files/fixup-install-docdir.patch
@@ -0,0 +1,36 @@
+From: "Mike Holmes" <mike.holmes@linaro.org>
+Date: Thu, 30 October 2014 16:21:03 -0500
+Subject: [PATCH] fixup-install-docdir
+
+The default configuration macros for CUnit install the documentation and
+header files in locations not consistent with the OE filesystem layout.
+So here we specify new locations which are consistent with OE filesystems.
+
+Upstream-Status: Inappropriate - configuration for OE build environment
+
+Signed-off-by: Mike Holmes <mike.holmes@linaro.org>
+Signed-off-by: Gary S. Robertson <gary.robertson@linaro.org>
+---
+
+diff -uNr a/doc/headers/Makefile.am b/doc/headers/Makefile.am
+--- a/doc/headers/Makefile.am 2014-10-30 22:06:29.704574162 +0100
++++ b/doc/headers/Makefile.am 2014-10-30 22:07:43.578524791 +0100
+@@ -1,6 +1,6 @@
+ ## Process this file with automake to produce Makefile.in
+
+-dochdrdir = $(prefix)/doc/@PACKAGE@/headers
++dochdrdir = $(docdir)/headers
+
+ INCLUDE_FILES = \
+ Automated.h \
+diff -uNr a/doc/Makefile.am b/doc/Makefile.am
+--- a/doc/Makefile.am 2014-10-30 22:06:29.704574162 +0100
++++ b/doc/Makefile.am 2014-10-30 22:07:01.461412166 +0100
+@@ -1,7 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
+
+-docdir = $(prefix)/doc/@PACKAGE@
+-
+ doc_DATA = \
+ CUnit_doc.css \
+ error_handling.html \
diff --git a/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.3.bb b/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.3.bb
new file mode 100644
index 000000000..291501173
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.3.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "CxxTest is a unit testing framework for C++ that is similar in spirit to JUnit, CppUnit, and xUnit."
+HOMEPAGE = "http://cxxtest.com/"
+LICENSE = "LGPL-2.0"
+SECTION = "devel"
+
+SRC_URI = "http://downloads.sourceforge.net/project/cxxtest/cxxtest/${PV}/cxxtest-${PV}.tar.gz"
+SRC_URI[md5sum] = "b3a24b3e1aad9acf6adac37f4c3f83ec"
+SRC_URI[sha256sum] = "356d0f4810e8eb5c344147a0cca50fc0d84122c286e7644b61cb365c2ee22083"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/cxxtest-${PV}/COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+S = "${WORKDIR}/cxxtest-${PV}/python"
+
+inherit distutils
+
+do_install_append() {
+ install -d ${D}${includedir}
+ cp -a ../cxxtest ${D}${includedir}
+ sed '1c\
+#!/usr/bin/env python' -i ${D}${bindir}/cxxtestgen
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-test/evtest/evtest_git.bb b/meta-openembedded/meta-oe/recipes-test/evtest/evtest_git.bb
new file mode 100644
index 000000000..fa0d6e2fe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/evtest/evtest_git.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Simple tool for input event debugging"
+HOMEPAGE = "http://people.freedesktop.org/~whot/evtest/"
+AUTHOR = "Vojtech Pavlik <vojtech@suse.cz>"
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "libxml2"
+
+SRCREV = "ab140a2dab1547f7deb5233be6d94a388cf08b26"
+SRC_URI = "git://anongit.freedesktop.org/evtest;protocol=git"
+
+PV = "1.33+${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-test/fbtest/fb-test_git.bb b/meta-openembedded/meta-oe/recipes-test/fbtest/fb-test_git.bb
new file mode 100644
index 000000000..6a9d4b278
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fbtest/fb-test_git.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Test suite for Linux framebuffer"
+
+PV = "1.1.0"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
+
+SRCREV = "063ec650960c2d79ac51f5c5f026cb05343a33e2"
+SRC_URI = "git://github.com/prpplague/fb-test-app.git"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 fb-test ${D}${bindir}
+ # avoid collisions with perf (perf) and mesa-demos (offset)
+ for prog in perf rect offset ; do
+ install -m 0755 $prog ${D}${bindir}/fb-$prog
+ done
+}
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Add-correct-printf-qualifier-for-off_t.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Add-correct-printf-qualifier-for-off_t.patch
new file mode 100644
index 000000000..192e05f1c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Add-correct-printf-qualifier-for-off_t.patch
@@ -0,0 +1,37 @@
+From 232daf5fca6fb52cced5e810f2601fe1a71b96d8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 16:49:50 -0700
+Subject: [PATCH 1/3] Add correct printf qualifier for off_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/bios/ebda_region/ebda_region.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: git/src/bios/ebda_region/ebda_region.c
+===================================================================
+--- git.orig/src/bios/ebda_region/ebda_region.c
++++ git/src/bios/ebda_region/ebda_region.c
+@@ -83,9 +83,9 @@ static int ebda_test1(fwts_framework *fw
+ if ((entry != NULL) &&
+ (entry->type == FWTS_MEMORY_MAP_RESERVED ||
+ entry->type == FWTS_MEMORY_MAP_ACPI)) {
+- fwts_passed(fw, "EBDA region mapped at 0x%lx and reserved as a %" PRId64
++ fwts_passed(fw, "EBDA region mapped at 0x%jdx and reserved as a %" PRId64
+ "K region in the %s table at 0x%" PRIx64 "..0x%" PRIx64 ".",
+- ebda_addr,
++ (intmax_t)ebda_addr,
+ (entry->end_address - entry->start_address) / 1024,
+ memory_map_name,
+ entry->start_address,
+@@ -93,8 +93,8 @@ static int ebda_test1(fwts_framework *fw
+ } else
+ fwts_failed(fw, LOG_LEVEL_MEDIUM,
+ "EBDAMappedNotReserved",
+- "EBDA region mapped at 0x%lx but not reserved in the %s table.",
+- ebda_addr, memory_map_name);
++ "EBDA region mapped at 0x%jdx but not reserved in the %s table.",
++ (intmax_t)ebda_addr, memory_map_name);
+
+ return FWTS_OK;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Include-poll.h-instead-of-deprecated-sys-poll.h.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Include-poll.h-instead-of-deprecated-sys-poll.h.patch
new file mode 100644
index 000000000..8ad078936
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-Include-poll.h-instead-of-deprecated-sys-poll.h.patch
@@ -0,0 +1,48 @@
+From 100a107a53d5dc9b0554252ac5dbf2c9330615e9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 6 Jun 2017 07:25:09 -0700
+Subject: [PATCH 1/3] Include poll.h instead of deprecated sys/poll.h
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/lib/src/fwts_ipmi.c | 3 ++-
+ src/lib/src/fwts_pipeio.c | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/lib/src/fwts_ipmi.c b/src/lib/src/fwts_ipmi.c
+index cbb27611..70d11cfa 100644
+--- a/src/lib/src/fwts_ipmi.c
++++ b/src/lib/src/fwts_ipmi.c
+@@ -18,10 +18,11 @@
+ *
+ */
+
++#include <poll.h>
++
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+-#include <sys/poll.h>
+ #include <sys/ioctl.h>
+ #include <linux/ipmi.h>
+
+diff --git a/src/lib/src/fwts_pipeio.c b/src/lib/src/fwts_pipeio.c
+index fd719640..bdc5b2ea 100644
+--- a/src/lib/src/fwts_pipeio.c
++++ b/src/lib/src/fwts_pipeio.c
+@@ -30,9 +30,9 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <paths.h>
++#include <poll.h>
+
+ #include <sys/param.h>
+-#include <sys/poll.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <errno.h>
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-ignore-constant-logical-operand-warning-with-clang.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-ignore-constant-logical-operand-warning-with-clang.patch
new file mode 100644
index 000000000..a3cc1ff8e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0001-ignore-constant-logical-operand-warning-with-clang.patch
@@ -0,0 +1,83 @@
+From 953cff93c85d3cfd5cbcac56e14443dc5f6e5fbd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Oct 2016 01:57:16 +0000
+Subject: [PATCH] ignore constant-logical-operand warning with clang
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/dmi/dmicheck/dmicheck.c | 3 +++
+ src/lib/src/fwts_acpi_tables.c | 5 +++++
+ src/uefi/uefirtauthvar/uefirtauthvar.c | 5 +++++
+ 3 files changed, 13 insertions(+)
+
+diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c
+index ecd98223..7fca4a64 100644
+--- a/src/dmi/dmicheck/dmicheck.c
++++ b/src/dmi/dmicheck/dmicheck.c
+@@ -209,6 +209,8 @@ static const char *uuid_patterns[] = {
+ "0A0A0A0A-0A0A-0A0A-0A0A-0A0A0A0A0A0A",
+ NULL,
+ };
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wunneeded-internal-declaration"
+
+ static const fwts_chassis_type_map fwts_dmi_chassis_type[] = {
+ { "Invalid", FWTS_SMBIOS_CHASSIS_INVALID },
+@@ -245,6 +247,7 @@ static const fwts_chassis_type_map fwts_dmi_chassis_type[] = {
+ { "Convertible", FWTS_SMBIOS_CHASSIS_CONVERTIBLE },
+ { "Detachable", FWTS_SMBIOS_CHASSIS_DETACHABLE },
+ };
++#pragma clang diagnostic pop
+
+ /* Remapping table from buggy version numbers to correct values */
+ static const fwts_dmi_version dmi_versions[] = {
+diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
+index 30b4060e..d5339bf7 100644
+--- a/src/lib/src/fwts_acpi_tables.c
++++ b/src/lib/src/fwts_acpi_tables.c
+@@ -394,10 +394,14 @@ static int fwts_acpi_handle_fadt(
+ /* Determine FACS addr and load it.
+ * Will ignore the missing FACS in the hardware-reduced mode.
+ */
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Waddress-of-packed-member"
++
+ result = fwts_acpi_handle_fadt_tables(fw, fadt,
+ "FACS", "FIRMWARE_CTRL", "X_FIRMWARE_CTRL",
+ &fadt->firmware_control, &fadt->x_firmware_ctrl,
+ provenance);
++
+ if (result != FWTS_OK) {
+ if ((result == FWTS_NULL_POINTER) &&
+ fwts_acpi_is_reduced_hardware(fadt)) {
+@@ -416,6 +420,7 @@ static int fwts_acpi_handle_fadt(
+ return FWTS_ERROR;
+ }
+ return FWTS_OK;
++#pragma clang diagnostic pop
+ }
+
+ /*
+diff --git a/src/uefi/uefirtauthvar/uefirtauthvar.c b/src/uefi/uefirtauthvar/uefirtauthvar.c
+index cdfd7aa3..001e8cc8 100644
+--- a/src/uefi/uefirtauthvar/uefirtauthvar.c
++++ b/src/uefi/uefirtauthvar/uefirtauthvar.c
+@@ -142,6 +142,9 @@ static int uefirtauthvar_deinit(fwts_framework *fw)
+ return FWTS_OK;
+ }
+
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wconstant-logical-operand"
++
+ static int check_fw_support(fwts_framework *fw, uint64_t status)
+ {
+ if ((status == EFI_INVALID_PARAMETER) &&
+@@ -172,6 +175,8 @@ static int check_fw_support(fwts_framework *fw, uint64_t status)
+ return FWTS_OK;
+ }
+
++#pragma clang diagnostic pop
++
+ /*
+ * Set the created authenticated variable, AuthVarCreate,
+ * and checking the data size and data.
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Add-C99-defined-format-for-printing-uint64_t.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Add-C99-defined-format-for-printing-uint64_t.patch
new file mode 100644
index 000000000..35ce883a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Add-C99-defined-format-for-printing-uint64_t.patch
@@ -0,0 +1,53 @@
+From 25f18b9ac37960dc12a3b648a5c866bd56ef2cbe Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 16:50:23 -0700
+Subject: [PATCH 2/3] Add C99 defined format for printing uint64_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/opal/reserv_mem.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/opal/reserv_mem.c b/src/opal/reserv_mem.c
+index eeec2947..f0672e05 100644
+--- a/src/opal/reserv_mem.c
++++ b/src/opal/reserv_mem.c
+@@ -185,7 +185,7 @@ static int reserv_mem_limits_test(fwts_framework *fw)
+ regions[j].start = (uint64_t)be64toh(ranges[2 * j]);
+ regions[j].len = (uint64_t)be64toh(ranges[2 * j + 1]);
+ fwts_log_info(fw, "Region name %80s"
+- " start: 0x%08lx, len: 0x%08lx\n",
++ " start: 0x%08" PRIx64 ", len: 0x%08" PRIx64 "\n",
+ regions[j].name, regions[j].start, regions[j].len);
+ }
+
+@@ -248,7 +248,7 @@ static int reserv_mem_limits_test(fwts_framework *fw)
+ fwts_failed(fw, LOG_LEVEL_MEDIUM,
+ "ImageSizeMismatch",
+ "Mismatch in homer-image size, "
+- "expected: 0x%lx, actual: 0x%lx",
++ "expected: 0x%" PRIx64 ", actual: 0x%" PRIx64 "",
+ configstruct.homer, regions[j].len);
+ ok = false;
+ } else
+@@ -261,7 +261,7 @@ static int reserv_mem_limits_test(fwts_framework *fw)
+ fwts_failed(fw, LOG_LEVEL_MEDIUM,
+ "ImageSizeMismatch",
+ "Mismatch in slw-image size, "
+- "expected: 0x%lx, actual: 0x%lx",
++ "expected: 0x%" PRIx64 ", actual: 0x%" PRIx64 "",
+ configstruct.slw, regions[j].len);
+ ok = false;
+ } else
+@@ -274,7 +274,7 @@ static int reserv_mem_limits_test(fwts_framework *fw)
+ fwts_failed(fw, LOG_LEVEL_MEDIUM,
+ "ImageSizeMismatch",
+ "Mismatch in occ-common-area size, "
+- "expected: 0x%lx, actual: 0x%lx",
++ "expected: 0x%" PRIx64", actual: 0x%" PRIx64"",
+ configstruct.occ_common,
+ regions[j].len);
+ ok = false;
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Define-__SWORD_TYPE-if-not-defined-by-libc.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Define-__SWORD_TYPE-if-not-defined-by-libc.patch
new file mode 100644
index 000000000..3b83ca57c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0002-Define-__SWORD_TYPE-if-not-defined-by-libc.patch
@@ -0,0 +1,33 @@
+From 0e89127cd02ecd5ea4506b935cb2b59eb94107d2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 6 Jun 2017 07:37:20 -0700
+Subject: [PATCH 2/3] Define __SWORD_TYPE if not defined by libc
+
+__SWORD_TYPE is internal to glibc, therefore
+check and define it if needed e.g. on musl
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/lib/src/fwts_uefi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/lib/src/fwts_uefi.c b/src/lib/src/fwts_uefi.c
+index 1f9d31fa..2d925f8d 100644
+--- a/src/lib/src/fwts_uefi.c
++++ b/src/lib/src/fwts_uefi.c
+@@ -59,6 +59,10 @@ typedef struct {
+ #define UEFI_IFACE_SYSFS (2) /* sysfs */
+ #define UEFI_IFACE_EFIVARS (3) /* efivar fs */
+
++#ifndef __SWORD_TYPE
++typedef __typeof__( ((struct statfs *)0)->f_type ) __SWORD_TYPE;
++#endif
++
+ /* File system magic numbers */
+ #define PSTOREFS_MAGIC ((__SWORD_TYPE)0x6165676C)
+ #define EFIVARFS_MAGIC ((__SWORD_TYPE)0xde5e81e4)
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-Undefine-PAGE_SIZE.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-Undefine-PAGE_SIZE.patch
new file mode 100644
index 000000000..f84fbffd8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-Undefine-PAGE_SIZE.patch
@@ -0,0 +1,30 @@
+From 0857269d5a053b5b4c31cfa01b6501526b24035f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 6 Jun 2017 07:39:28 -0700
+Subject: [PATCH 3/3] Undefine PAGE_SIZE
+
+musl defines PAGE_SIZE and build complains
+of multiple definitions
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/lib/src/fwts_acpi_tables.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
+index 1d4fc705..71023ad2 100644
+--- a/src/lib/src/fwts_acpi_tables.c
++++ b/src/lib/src/fwts_acpi_tables.c
+@@ -42,6 +42,7 @@
+ #define BIOS_START (0x000e0000) /* Start of BIOS memory */
+ #define BIOS_END (0x000fffff) /* End of BIOS memory */
+ #define BIOS_LENGTH (BIOS_END - BIOS_START) /* Length of BIOS memory */
++#undef PAGE_SIZE
+ #define PAGE_SIZE (4096)
+
+ static fwts_acpi_table_info tables[ACPI_MAX_TABLES];
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-use-intptr_t-to-fix-pointer-to-int-cast-issues.patch b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-use-intptr_t-to-fix-pointer-to-int-cast-issues.patch
new file mode 100644
index 000000000..3cd3fbbc1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts/0003-use-intptr_t-to-fix-pointer-to-int-cast-issues.patch
@@ -0,0 +1,76 @@
+From d0d76820efe51dd404d381fc4c46544008e757dd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 8 Jun 2017 16:50:59 -0700
+Subject: [PATCH 3/3] use intptr_t to fix pointer-to-int-cast issues
+
+uintptr_t is guaranteed to be wide enough that
+converting a void* to uintptr_t and back again
+will yield the original pointer value
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/lib/src/fwts_acpi_tables.c | 4 ++--
+ src/lib/src/fwts_mmap.c | 2 +-
+ src/lib/src/fwts_smbios.c | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
+index 832f8d66..d0006529 100644
+--- a/src/lib/src/fwts_acpi_tables.c
++++ b/src/lib/src/fwts_acpi_tables.c
+@@ -150,7 +150,7 @@ static fwts_acpi_table_rsdp *fwts_acpi_get_rsdp(fwts_framework *fw, void *addr,
+ fwts_acpi_table_rsdp *rsdp = NULL;
+ *rsdp_len = 0;
+
+- if ((mem = fwts_mmap((off_t)addr, sizeof(fwts_acpi_table_rsdp))) == FWTS_MAP_FAILED)
++ if ((mem = fwts_mmap((uintptr_t)addr, sizeof(fwts_acpi_table_rsdp))) == FWTS_MAP_FAILED)
+ return NULL;
+
+ if (fwts_safe_memread(mem, sizeof(fwts_acpi_table_rsdp)) != FWTS_OK) {
+@@ -456,7 +456,7 @@ static int fwts_acpi_load_tables_from_firmware(fwts_framework *fw)
+ if ((rsdp = fwts_acpi_get_rsdp(fw, rsdp_addr, &rsdp_len)) == NULL)
+ return FWTS_ERROR;
+
+- fwts_acpi_add_table("RSDP", rsdp, (uint64_t)(off_t)rsdp_addr, rsdp_len, FWTS_ACPI_TABLE_FROM_FIRMWARE);
++ fwts_acpi_add_table("RSDP", rsdp, (uint64_t)(uintptr_t)rsdp_addr, rsdp_len, FWTS_ACPI_TABLE_FROM_FIRMWARE);
+
+ /* Load any tables from XSDT if it's valid */
+ if (rsdp->xsdt_address) {
+diff --git a/src/lib/src/fwts_mmap.c b/src/lib/src/fwts_mmap.c
+index a09f688e..9fe6329a 100644
+--- a/src/lib/src/fwts_mmap.c
++++ b/src/lib/src/fwts_mmap.c
+@@ -81,7 +81,7 @@ int fwts_munmap(void *mem, const size_t size)
+ off_t offset;
+
+ page_size = fwts_page_size();
+- offset = ((off_t)(mem)) & (page_size - 1);
++ offset = ((uintptr_t)(mem)) & (page_size - 1);
+
+ if (munmap((void *)((uint8_t *)mem - offset), size + offset) < 0)
+ return FWTS_ERROR;
+diff --git a/src/lib/src/fwts_smbios.c b/src/lib/src/fwts_smbios.c
+index 8d0ea39b..63b4bf25 100644
+--- a/src/lib/src/fwts_smbios.c
++++ b/src/lib/src/fwts_smbios.c
+@@ -54,7 +54,7 @@ static void *fwts_smbios_find_entry_uefi(fwts_framework *fw, fwts_smbios_entry *
+ if ((addr = fwts_scan_efi_systab("SMBIOS")) != NULL) {
+ fwts_smbios_entry *mapped_entry;
+
+- if ((mapped_entry = fwts_mmap((off_t)addr, sizeof(fwts_smbios_entry))) != FWTS_MAP_FAILED) {
++ if ((mapped_entry = fwts_mmap((uintptr_t)addr, sizeof(fwts_smbios_entry))) != FWTS_MAP_FAILED) {
+ *entry = *mapped_entry;
+ (void)fwts_munmap(mapped_entry, sizeof(fwts_smbios_entry));
+ *type = FWTS_SMBIOS;
+@@ -84,7 +84,7 @@ static void *fwts_smbios30_find_entry_uefi(fwts_framework *fw, fwts_smbios30_ent
+ if ((addr = fwts_scan_efi_systab("SMBIOS3")) != NULL) {
+ fwts_smbios30_entry *mapped_entry;
+
+- if ((mapped_entry = fwts_mmap((off_t)addr, sizeof(fwts_smbios30_entry))) != FWTS_MAP_FAILED) {
++ if ((mapped_entry = fwts_mmap((uintptr_t)addr, sizeof(fwts_smbios30_entry))) != FWTS_MAP_FAILED) {
+ *entry = *mapped_entry;
+ (void)fwts_munmap(mapped_entry, sizeof(fwts_smbios30_entry));
+ return addr;
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-oe/recipes-test/fwts/fwts_git.bb b/meta-openembedded/meta-oe/recipes-test/fwts/fwts_git.bb
new file mode 100644
index 000000000..87a23af19
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/fwts/fwts_git.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Firmware testsuite"
+DESCRIPTION = "The tool fwts comprises of over fifty tests that are designed to exercise and test different aspects of a machine's firmware. Many of these tests need super user access to read BIOS data and ACPI tables, so the tool requires running with super user privileges (e.g. with sudo)."
+HOMEPAGE = "https://wiki.ubuntu.com/Kernel/Reference/fwts"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://src/main.c;beginline=1;endline=16;md5=31da590f3e9f3bd34dcdb9e4db568519"
+
+PV = "17.03.00+git${SRCPV}"
+
+SRCREV = "0153ea51cb648b3067a1b327eee6a075b6cfa330"
+SRC_URI = "git://kernel.ubuntu.com/hwe/fwts.git \
+ file://0001-ignore-constant-logical-operand-warning-with-clang.patch \
+ file://0001-Include-poll.h-instead-of-deprecated-sys-poll.h.patch \
+ file://0002-Define-__SWORD_TYPE-if-not-defined-by-libc.patch \
+ file://0003-Undefine-PAGE_SIZE.patch \
+ file://0001-Add-correct-printf-qualifier-for-off_t.patch \
+ file://0002-Add-C99-defined-format-for-printing-uint64_t.patch \
+ file://0003-use-intptr_t-to-fix-pointer-to-int-cast-issues.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = "(i.86|x86_64|aarch64|powerpc64).*-linux"
+
+DEPENDS = "libpcre json-c glib-2.0 dtc"
+DEPENDS_append_libc-musl = " libexecinfo"
+
+inherit autotools pkgconfig
+
+CFLAGS += "-I${STAGING_INCDIR}/json-c -Wno-error=unknown-pragmas"
+LDFLAGS_append_libc-musl = " -lexecinfo"
+
+FILES_${PN} += "${libdir}/fwts/lib*${SOLIBS}"
+FILES_${PN}-dev += "${libdir}/fwts/lib*${SOLIBSDEV} ${libdir}/fwts/lib*.la"
+FILES_${PN}-staticdev += "${libdir}/fwts/lib*a"
+FILES_${PN}-dbg += "${libdir}/fwts/.debug"
+
+TOOLCHAIN = "gcc"
+
diff --git a/meta-openembedded/meta-oe/recipes-test/gtest/gtest/Add-pkg-config-support.patch b/meta-openembedded/meta-oe/recipes-test/gtest/gtest/Add-pkg-config-support.patch
new file mode 100644
index 000000000..4c8977b49
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/gtest/gtest/Add-pkg-config-support.patch
@@ -0,0 +1,106 @@
+From ec9256bb704e94f41407fc8ace6a580491430196 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Thu, 15 Dec 2016 04:35:41 -0800
+Subject: [PATCH] Add pkg-config support
+
+Signed-off-by: Mario Domenech Goulart <mario@ossystems.com.br>
+Signed-off-by: Rodrigo Caimi <caimi@datacom.ind.br>
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ googlemock/CMakeLists.txt | 9 +++++++--
+ googlemock/gmock.pc.in | 9 +++++++++
+ googletest/CMakeLists.txt | 9 +++++++--
+ googletest/gtest.pc.in | 9 +++++++++
+ 4 files changed, 32 insertions(+), 4 deletions(-)
+ create mode 100644 googlemock/gmock.pc.in
+ create mode 100644 googletest/gtest.pc.in
+
+diff --git a/googlemock/CMakeLists.txt b/googlemock/CMakeLists.txt
+index beb259a..f17e2d7 100644
+--- a/googlemock/CMakeLists.txt
++++ b/googlemock/CMakeLists.txt
+@@ -27,6 +27,9 @@ if (COMMAND pre_project_set_up_hermetic_build)
+ pre_project_set_up_hermetic_build()
+ endif()
+
++# pkg-config support
++configure_file("gmock.pc.in" "gmock.pc" @ONLY)
++
+ ########################################################################
+ #
+ # Project-wide settings
+@@ -104,9 +107,11 @@ endif()
+ #
+ # Install rules
+ install(TARGETS gmock gmock_main
+- DESTINATION lib)
++ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ install(DIRECTORY ${gmock_SOURCE_DIR}/include/gmock
+- DESTINATION include)
++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/gmock.pc"
++ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
+
+ ########################################################################
+ #
+diff --git a/googlemock/gmock.pc.in b/googlemock/gmock.pc.in
+new file mode 100644
+index 0000000..04bc0b4
+--- /dev/null
++++ b/googlemock/gmock.pc.in
+@@ -0,0 +1,9 @@
++Name: libgmock
++Version: 1.8.0
++Description: Google's framework for writing C++ tests on a variety of platforms
++
++prefix=@CMAKE_INSTALL_PREFIX@
++includedir=@CMAKE_INSTALL_INCLUDEDIR@
++libdir=@CMAKE_INSTALL_LIBDIR@
++Cflags:-I${includedir}/gmock
++Libs: -L${libdir} -lgmock -lgmock_main
+diff --git a/googletest/CMakeLists.txt b/googletest/CMakeLists.txt
+index 621d0f0..58aaf54 100644
+--- a/googletest/CMakeLists.txt
++++ b/googletest/CMakeLists.txt
+@@ -34,6 +34,9 @@ if (COMMAND pre_project_set_up_hermetic_build)
+ pre_project_set_up_hermetic_build()
+ endif()
+
++# pkg-config support
++configure_file("gtest.pc.in" "gtest.pc" @ONLY)
++
+ ########################################################################
+ #
+ # Project-wide settings
+@@ -103,9 +106,11 @@ endif()
+ #
+ # Install rules
+ install(TARGETS gtest gtest_main
+- DESTINATION lib)
++ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ install(DIRECTORY ${gtest_SOURCE_DIR}/include/gtest
+- DESTINATION include)
++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/gtest.pc"
++ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
+
+ ########################################################################
+ #
+diff --git a/googletest/gtest.pc.in b/googletest/gtest.pc.in
+new file mode 100644
+index 0000000..fb95152
+--- /dev/null
++++ b/googletest/gtest.pc.in
+@@ -0,0 +1,9 @@
++Name: libgtest
++Version: 1.8.0
++Description: Google's framework for writing C++ tests on a variety of platforms
++
++prefix=@CMAKE_INSTALL_PREFIX@
++includedir=@CMAKE_INSTALL_INCLUDEDIR@
++libdir=@CMAKE_INSTALL_LIBDIR@
++Cflags:-I${includedir}/gtest
++Libs: -L${libdir} -lgtest -lgtest_main
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-test/gtest/gtest_1.8.0.bb b/meta-openembedded/meta-oe/recipes-test/gtest/gtest_1.8.0.bb
new file mode 100644
index 000000000..48cf4e04b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/gtest/gtest_1.8.0.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Google's framework for writing C++ tests"
+HOMEPAGE = "https://github.com/google/googletest"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://googlemock/LICENSE;md5=cbbd27594afd089daa160d3a16dd515a \
+ file://googletest/LICENSE;md5=cbbd27594afd089daa160d3a16dd515a"
+
+PROVIDES += "gmock"
+
+S = "${WORKDIR}/git"
+SRCREV = "ec44c6c1675c25b9827aacd08c02433cccde7780"
+SRC_URI = "\
+ git://github.com/google/googletest.git;protocol=https; \
+ file://Add-pkg-config-support.patch \
+"
+
+inherit cmake
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-dbg = "1"
+
+RDEPENDS_${PN}-dev += "${PN}-staticdev"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-test/pm-qa/pm-qa_git.bb b/meta-openembedded/meta-oe/recipes-test/pm-qa/pm-qa_git.bb
new file mode 100644
index 000000000..1ee6573bd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/pm-qa/pm-qa_git.bb
@@ -0,0 +1,65 @@
+DESCRIPTION = "Utilities for testing Power Management"
+HOMEPAGE = "https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/PmQa"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+PV = "0.5.2"
+
+BRANCH ?= "master"
+
+SRCREV = "05710ec5032be4c8edafb4109d4d908d31243906"
+
+SRC_URI = "git://git.linaro.org/power/pm-qa.git;protocol=git;branch=${BRANCH}"
+
+S = "${WORKDIR}/git"
+
+CFLAGS += "-pthread"
+
+do_compile () {
+ # Find all the .c files in this project and build them.
+ for x in `find . -name "*.c"`
+ do
+ util=`echo ${x} | sed s/.c$//`
+ oe_runmake ${util}
+ done
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${libdir}/${BPN}
+
+ # Install the compiled binaries that were built in the previous step
+ for x in `find . -name "*.c"`
+ do
+ util=`echo ${x} | sed s/.c$//`
+ util_basename=`basename ${util}`
+ install -m 0755 ${util} ${D}${bindir}/${util_basename}
+ done
+
+ # Install the helper scripts in a subdirectory of $libdir
+ for script in `find . -name "*.sh" | grep include`
+ do
+ # Remove hardcoded relative paths
+ sed -i -e 's#..\/utils\/##' ${script}
+
+ script_basename=`basename ${script}`
+ install -m 0755 $script ${D}${libdir}/${BPN}/${script_basename}
+ done
+
+ # Install the shell scripts NOT in the $libdir directory since those
+ # will be installed elsewhere
+ for script in `find . -name "*.sh" | grep -v include`
+ do
+ # if the script includes any helper scripts from the $libdir
+ # directory then change the source path to the absolute path
+ # to reflect the install location of the helper scripts.
+ sed -i -e "s#source ../include#source ${libdir}/${BPN}#g" ${script}
+ # Remove hardcoded relative paths
+ sed -i -e 's#..\/utils\/##' ${script}
+
+ script_basename=`basename ${script}`
+ install -m 0755 $script ${D}${bindir}/${script_basename}
+ done
+}
+RDEPENDS_${PN} +="bash"
diff --git a/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0001-Several-changes-to-fix-musl-build.patch b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0001-Several-changes-to-fix-musl-build.patch
new file mode 100644
index 000000000..d604f860a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0001-Several-changes-to-fix-musl-build.patch
@@ -0,0 +1,141 @@
+From 784dcd09d3f266e271d007f4fd257e85036872ca Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Tue, 17 Oct 2017 10:13:20 -0500
+Subject: [PATCH] Several changes to fix musl build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+stress-{context, stackmmap}.c: Set tests to non-implemented because uses
+swapcontext, musl provide the definition but not the implementation due
+ to that functions are pre-POSIX and set to be deprecated.
+ stress-{resources, pty}.c: Doesn't include termio.h and remove stress
+ operations that uses struct termio, musl doesn't provide that struct.
+stress-malloc.c: Check for definition of M_MMAP_THRESHOLD musl doesn't
+ ptovide that constant.
+stress-madvise.c: Add static poision_count integer, definition of
+ MADV_SOFT_OFFLINE doesn't grauntee MADV_HWPOISON to be defined.
+cache.c: Define GLOB_ONLYDIR not available on MUSL.
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+
+Upstream-status: Pending
+
+---
+ cache.c | 4 ++++
+ stress-madvise.c | 1 +
+ stress-malloc.c | 2 +-
+ stress-pty.c | 18 ------------------
+ stress-resources.c | 1 -
+ stress-stackmmap.c | 2 +-
+ 6 files changed, 7 insertions(+), 21 deletions(-)
+
+diff --git a/cache.c b/cache.c
+index fbf7674..936c1ff 100644
+--- a/cache.c
++++ b/cache.c
+@@ -28,6 +28,10 @@ typedef struct {
+
+ #include <glob.h>
+
++#ifndef GLOB_ONLYDIR
++#define GLOB_ONLYDIR 0x100
++#endif
++
+ #if defined(__linux__)
+ #define SYS_CPU_PREFIX "/sys/devices/system/cpu"
+ #define GLOB_PATTERN SYS_CPU_PREFIX "/cpu[0-9]*"
+diff --git a/stress-madvise.c b/stress-madvise.c
+index 9e71e11..ddf8d2d 100644
+--- a/stress-madvise.c
++++ b/stress-madvise.c
+@@ -147,6 +147,7 @@ static int stress_random_advise(const args_t *args)
+ #if defined(MADV_SOFT_OFFLINE)
+ if (advise == MADV_SOFT_OFFLINE) {
+ static int soft_offline_count;
++ static int poison_count;
+
+ /* ..and minimize number of soft offline pages */
+ if ((soft_offline_count >= NUM_SOFT_OFFLINE_MAX) ||
+diff --git a/stress-malloc.c b/stress-malloc.c
+index a46b8c6..427827a 100644
+--- a/stress-malloc.c
++++ b/stress-malloc.c
+@@ -99,7 +99,7 @@ int stress_malloc(const args_t *args)
+ malloc_max = MIN_MALLOC_MAX;
+ }
+
+-#if defined(__GNUC__) && defined(__linux__)
++#if defined(__GNUC__) && defined(__linux__) && defined(M_MMAP_THRESHOLD)
+ if (get_setting("malloc-threshold", &malloc_threshold))
+ (void)mallopt(M_MMAP_THRESHOLD, (int)malloc_threshold);
+ #endif
+diff --git a/stress-pty.c b/stress-pty.c
+index 1bd1fbd..b1fe573 100644
+--- a/stress-pty.c
++++ b/stress-pty.c
+@@ -26,7 +26,6 @@
+
+ #if defined(__linux__)
+
+-#include <termio.h>
+ #include <termios.h>
+
+ typedef struct {
+@@ -108,7 +107,6 @@ int stress_pty(const args_t *args)
+ */
+ for (i = 0; i < n; i++) {
+ struct termios ios;
+- struct termio io;
+ struct winsize ws;
+ int arg;
+
+@@ -130,22 +128,6 @@ int stress_pty(const args_t *args)
+ if (ioctl(ptys[i].slave, TCSETSF, &ios) < 0)
+ pr_fail_err("ioctl TCSETSF on slave pty");
+ #endif
+-#if defined(TCGETA)
+- if (ioctl(ptys[i].slave, TCGETA, &io) < 0)
+- pr_fail_err("ioctl TCGETA on slave pty");
+-#endif
+-#if defined(TCSETA)
+- if (ioctl(ptys[i].slave, TCSETA, &io) < 0)
+- pr_fail_err("ioctl TCSETA on slave pty");
+-#endif
+-#if defined(TCSETAW)
+- if (ioctl(ptys[i].slave, TCSETAW, &io) < 0)
+- pr_fail_err("ioctl TCSETAW on slave pty");
+-#endif
+-#if defined(TCSETAF)
+- if (ioctl(ptys[i].slave, TCSETAF, &io) < 0)
+- pr_fail_err("ioctl TCSETAF on slave pty");
+-#endif
+ #if defined(TIOCGLCKTRMIOS)
+ if (ioctl(ptys[i].slave, TIOCGLCKTRMIOS, &ios) < 0)
+ pr_fail_err("ioctl TIOCGLCKTRMIOS on slave pty");
+diff --git a/stress-resources.c b/stress-resources.c
+index 958c99a..af79abd 100644
+--- a/stress-resources.c
++++ b/stress-resources.c
+@@ -31,7 +31,6 @@
+ #include <sys/inotify.h>
+ #endif
+ #if defined(__linux__)
+-#include <termio.h>
+ #include <termios.h>
+ #endif
+ #if defined(HAVE_LIB_PTHREAD) && defined(__linux__)
+diff --git a/stress-stackmmap.c b/stress-stackmmap.c
+index 9c83a69..2984f09 100644
+--- a/stress-stackmmap.c
++++ b/stress-stackmmap.c
+@@ -24,7 +24,7 @@
+ */
+ #include "stress-ng.h"
+
+-#if defined(__linux__)
++#if defined(__linux__) && False
+
+ #include <ucontext.h>
+
diff --git a/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0002-stress-fcntl-fix-build-for-musl.patch b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0002-stress-fcntl-fix-build-for-musl.patch
new file mode 100644
index 000000000..ed3287e32
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng/0002-stress-fcntl-fix-build-for-musl.patch
@@ -0,0 +1,25 @@
+From faadbc147394cea9278bc2494f33e3521d88e742 Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@linux.intel.com>
+Date: Tue, 9 Jan 2018 18:38:45 -0800
+Subject: [PATCH] stress-fcntl: fix build for musl
+
+Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+
+Upstream-status: Pending
+
+---
+ stress-fcntl.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/stress-fcntl.c b/stress-fcntl.c
+index 2ea867b..e91b345 100644
+--- a/stress-fcntl.c
++++ b/stress-fcntl.c
+@@ -415,6 +415,7 @@ ofd_lock_abort: { /* Nowt */ }
+ #if (defined(F_GET_FILE_RW_HINT) && defined(F_SET_FILE_RW_HINT)) | \
+ (defined(F_GET_RW_HINT) && defined(F_SET_RW_HINT))
+ {
++ int ret;
+ size_t i;
+ unsigned long hint;
+ static const unsigned long hints[] = {
diff --git a/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng_0.09.14.bb b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng_0.09.14.bb
new file mode 100644
index 000000000..7fab43025
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/stress-ng/stress-ng_0.09.14.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A tool to load and stress a computer system"
+HOMEPAGE = "http://kernel.ubuntu.com/~cking/stress-ng/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "zlib libaio"
+
+SRC_URI = "http://kernel.ubuntu.com/~cking/tarballs/${BPN}/${BP}.tar.xz \
+ file://0002-stress-fcntl-fix-build-for-musl.patch \
+ "
+SRC_URI_append_libc-musl = " \
+ file://0001-Several-changes-to-fix-musl-build.patch \
+ "
+SRC_URI[md5sum] = "1f8b6c2c2830704d2a2814c16082d48e"
+SRC_URI[sha256sum] = "02cac34a5cb041197af60c1867844c6cbb089a6d10a38cdcf7b8f27bfaa6ef8f"
+
+UPSTREAM_CHECK_URI ?= "http://kernel.ubuntu.com/~cking/tarballs/${BPN}/"
+UPSTREAM_CHECK_REGEX ?= "(?P<pver>\d+(\.\d+)+)\.tar"
+
+CFLAGS += "-Wall -Wextra -DVERSION='"$(VERSION)"'"
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 755 ${S}/stress-ng ${D}${bindir}/stress-ng
+}
diff --git a/meta-openembedded/meta-oe/recipes-test/testfloat/files/0001-Makefile-for-cross-compile-SoftFloat.patch b/meta-openembedded/meta-oe/recipes-test/testfloat/files/0001-Makefile-for-cross-compile-SoftFloat.patch
new file mode 100644
index 000000000..71782c5b9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/testfloat/files/0001-Makefile-for-cross-compile-SoftFloat.patch
@@ -0,0 +1,348 @@
+Upstream-Status: Inappropriate [configuration]
+
+From 07f2528d93f44fe1d8080a4225f29f4ada9f4663 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Thu, 4 Feb 2016 09:15:37 -0200
+Subject: [PATCH 1/2] Makefile for cross compile SoftFloat
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ SoftFloat-3a/build/Linux-Cross-Compile/Makefile | 274 ++++++++++++++++++++++
+ SoftFloat-3a/build/Linux-Cross-Compile/platform.h | 44 ++++
+ 2 files changed, 318 insertions(+)
+ create mode 100644 SoftFloat-3a/build/Linux-Cross-Compile/Makefile
+ create mode 100644 SoftFloat-3a/build/Linux-Cross-Compile/platform.h
+
+diff --git a/SoftFloat-3a/build/Linux-Cross-Compile/Makefile b/SoftFloat-3a/build/Linux-Cross-Compile/Makefile
+new file mode 100644
+index 0000000..c4d0a60
+--- /dev/null
++++ b/SoftFloat-3a/build/Linux-Cross-Compile/Makefile
+@@ -0,0 +1,274 @@
++
++#=============================================================================
++#
++# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
++# Package, Release 3a, by John R. Hauser.
++#
++# Copyright 2011, 2012, 2013, 2014 The Regents of the University of
++# California. All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions are met:
++#
++# 1. Redistributions of source code must retain the above copyright notice,
++# this list of conditions, and the following disclaimer.
++#
++# 2. Redistributions in binary form must reproduce the above copyright
++# notice, this list of conditions, and the following disclaimer in the
++# documentation and/or other materials provided with the distribution.
++#
++# 3. Neither the name of the University nor the names of its contributors
++# may be used to endorse or promote products derived from this software
++# without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
++# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++#=============================================================================
++
++SOURCE_DIR = ../../source
++SPECIALIZE_TYPE = 8086
++
++SOFTFLOAT_OPTS = -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV64TO32 -fgnu89-inline
++
++DELETE = rm -f
++C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
++COMPILE_C = \
++ ${CC} -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
++ $(C_INCLUDES) -O2 -o $@
++MAKELIB = ${AR} crs $@
++
++OBJ = .o
++LIB = .a
++
++.PHONY: all
++all: softfloat$(LIB)
++
++OBJS_PRIMITIVES = \
++ s_compare96M$(OBJ) \
++ s_compare128M$(OBJ) \
++ s_shortShiftLeft64To96M$(OBJ) \
++ s_shortShiftLeftM$(OBJ) \
++ s_shiftLeftM$(OBJ) \
++ s_shortShiftRightM$(OBJ) \
++ s_shortShiftRightJam64$(OBJ) \
++ s_shortShiftRightJamM$(OBJ) \
++ s_shiftRightJam32$(OBJ) \
++ s_shiftRightJam64$(OBJ) \
++ s_shiftRightJamM$(OBJ) \
++ s_shiftRightM$(OBJ) \
++ s_countLeadingZeros8$(OBJ) \
++ s_countLeadingZeros32$(OBJ) \
++ s_countLeadingZeros64$(OBJ) \
++ s_addM$(OBJ) \
++ s_addCarryM$(OBJ) \
++ s_addComplCarryM$(OBJ) \
++ s_negXM$(OBJ) \
++ s_sub1XM$(OBJ) \
++ s_subM$(OBJ) \
++ s_mul64To128M$(OBJ) \
++ s_mul128MTo256M$(OBJ) \
++ s_approxRecip32_1$(OBJ) \
++ s_approxRecipSqrt32_1$(OBJ) \
++ s_remStepMBy32$(OBJ) \
++
++OBJS_SPECIALIZE = \
++ softfloat_raiseFlags$(OBJ) \
++ s_f32UIToCommonNaN$(OBJ) \
++ s_commonNaNToF32UI$(OBJ) \
++ s_propagateNaNF32UI$(OBJ) \
++ s_f64UIToCommonNaN$(OBJ) \
++ s_commonNaNToF64UI$(OBJ) \
++ s_propagateNaNF64UI$(OBJ) \
++ extF80M_isSignalingNaN$(OBJ) \
++ s_extF80MToCommonNaN$(OBJ) \
++ s_commonNaNToExtF80M$(OBJ) \
++ s_propagateNaNExtF80M$(OBJ) \
++ f128M_isSignalingNaN$(OBJ) \
++ s_f128MToCommonNaN$(OBJ) \
++ s_commonNaNToF128M$(OBJ) \
++ s_propagateNaNF128M$(OBJ) \
++
++OBJS_OTHERS = \
++ s_roundPackToUI32$(OBJ) \
++ s_roundPackMToUI64$(OBJ) \
++ s_roundPackToI32$(OBJ) \
++ s_roundPackMToI64$(OBJ) \
++ s_normSubnormalF32Sig$(OBJ) \
++ s_roundPackToF32$(OBJ) \
++ s_normRoundPackToF32$(OBJ) \
++ s_addMagsF32$(OBJ) \
++ s_subMagsF32$(OBJ) \
++ s_mulAddF32$(OBJ) \
++ s_normSubnormalF64Sig$(OBJ) \
++ s_roundPackToF64$(OBJ) \
++ s_normRoundPackToF64$(OBJ) \
++ s_addMagsF64$(OBJ) \
++ s_subMagsF64$(OBJ) \
++ s_mulAddF64$(OBJ) \
++ s_tryPropagateNaNExtF80M$(OBJ) \
++ s_invalidExtF80M$(OBJ) \
++ s_normExtF80SigM$(OBJ) \
++ s_roundPackMToExtF80M$(OBJ) \
++ s_normRoundPackMToExtF80M$(OBJ) \
++ s_addExtF80M$(OBJ) \
++ s_compareNonnormExtF80M$(OBJ) \
++ s_isNaNF128M$(OBJ) \
++ s_tryPropagateNaNF128M$(OBJ) \
++ s_invalidF128M$(OBJ) \
++ s_shiftNormSigF128M$(OBJ) \
++ s_roundPackMToF128M$(OBJ) \
++ s_normRoundPackMToF128M$(OBJ) \
++ s_addF128M$(OBJ) \
++ s_mulAddF128M$(OBJ) \
++ softfloat_state$(OBJ) \
++ ui32_to_f32$(OBJ) \
++ ui32_to_f64$(OBJ) \
++ ui32_to_extF80M$(OBJ) \
++ ui32_to_f128M$(OBJ) \
++ ui64_to_f32$(OBJ) \
++ ui64_to_f64$(OBJ) \
++ ui64_to_extF80M$(OBJ) \
++ ui64_to_f128M$(OBJ) \
++ i32_to_f32$(OBJ) \
++ i32_to_f64$(OBJ) \
++ i32_to_extF80M$(OBJ) \
++ i32_to_f128M$(OBJ) \
++ i64_to_f32$(OBJ) \
++ i64_to_f64$(OBJ) \
++ i64_to_extF80M$(OBJ) \
++ i64_to_f128M$(OBJ) \
++ f32_to_ui32$(OBJ) \
++ f32_to_ui64$(OBJ) \
++ f32_to_i32$(OBJ) \
++ f32_to_i64$(OBJ) \
++ f32_to_ui32_r_minMag$(OBJ) \
++ f32_to_ui64_r_minMag$(OBJ) \
++ f32_to_i32_r_minMag$(OBJ) \
++ f32_to_i64_r_minMag$(OBJ) \
++ f32_to_f64$(OBJ) \
++ f32_to_extF80M$(OBJ) \
++ f32_to_f128M$(OBJ) \
++ f32_roundToInt$(OBJ) \
++ f32_add$(OBJ) \
++ f32_sub$(OBJ) \
++ f32_mul$(OBJ) \
++ f32_mulAdd$(OBJ) \
++ f32_div$(OBJ) \
++ f32_rem$(OBJ) \
++ f32_sqrt$(OBJ) \
++ f32_eq$(OBJ) \
++ f32_le$(OBJ) \
++ f32_lt$(OBJ) \
++ f32_eq_signaling$(OBJ) \
++ f32_le_quiet$(OBJ) \
++ f32_lt_quiet$(OBJ) \
++ f32_isSignalingNaN$(OBJ) \
++ f64_to_ui32$(OBJ) \
++ f64_to_ui64$(OBJ) \
++ f64_to_i32$(OBJ) \
++ f64_to_i64$(OBJ) \
++ f64_to_ui32_r_minMag$(OBJ) \
++ f64_to_ui64_r_minMag$(OBJ) \
++ f64_to_i32_r_minMag$(OBJ) \
++ f64_to_i64_r_minMag$(OBJ) \
++ f64_to_f32$(OBJ) \
++ f64_to_extF80M$(OBJ) \
++ f64_to_f128M$(OBJ) \
++ f64_roundToInt$(OBJ) \
++ f64_add$(OBJ) \
++ f64_sub$(OBJ) \
++ f64_mul$(OBJ) \
++ f64_mulAdd$(OBJ) \
++ f64_div$(OBJ) \
++ f64_rem$(OBJ) \
++ f64_sqrt$(OBJ) \
++ f64_eq$(OBJ) \
++ f64_le$(OBJ) \
++ f64_lt$(OBJ) \
++ f64_eq_signaling$(OBJ) \
++ f64_le_quiet$(OBJ) \
++ f64_lt_quiet$(OBJ) \
++ f64_isSignalingNaN$(OBJ) \
++ extF80M_to_ui32$(OBJ) \
++ extF80M_to_ui64$(OBJ) \
++ extF80M_to_i32$(OBJ) \
++ extF80M_to_i64$(OBJ) \
++ extF80M_to_ui32_r_minMag$(OBJ) \
++ extF80M_to_ui64_r_minMag$(OBJ) \
++ extF80M_to_i32_r_minMag$(OBJ) \
++ extF80M_to_i64_r_minMag$(OBJ) \
++ extF80M_to_f32$(OBJ) \
++ extF80M_to_f64$(OBJ) \
++ extF80M_to_f128M$(OBJ) \
++ extF80M_roundToInt$(OBJ) \
++ extF80M_add$(OBJ) \
++ extF80M_sub$(OBJ) \
++ extF80M_mul$(OBJ) \
++ extF80M_div$(OBJ) \
++ extF80M_rem$(OBJ) \
++ extF80M_sqrt$(OBJ) \
++ extF80M_eq$(OBJ) \
++ extF80M_le$(OBJ) \
++ extF80M_lt$(OBJ) \
++ extF80M_eq_signaling$(OBJ) \
++ extF80M_le_quiet$(OBJ) \
++ extF80M_lt_quiet$(OBJ) \
++ f128M_to_ui32$(OBJ) \
++ f128M_to_ui64$(OBJ) \
++ f128M_to_i32$(OBJ) \
++ f128M_to_i64$(OBJ) \
++ f128M_to_ui32_r_minMag$(OBJ) \
++ f128M_to_ui64_r_minMag$(OBJ) \
++ f128M_to_i32_r_minMag$(OBJ) \
++ f128M_to_i64_r_minMag$(OBJ) \
++ f128M_to_f32$(OBJ) \
++ f128M_to_f64$(OBJ) \
++ f128M_to_extF80M$(OBJ) \
++ f128M_roundToInt$(OBJ) \
++ f128M_add$(OBJ) \
++ f128M_sub$(OBJ) \
++ f128M_mul$(OBJ) \
++ f128M_mulAdd$(OBJ) \
++ f128M_div$(OBJ) \
++ f128M_rem$(OBJ) \
++ f128M_sqrt$(OBJ) \
++ f128M_eq$(OBJ) \
++ f128M_le$(OBJ) \
++ f128M_lt$(OBJ) \
++ f128M_eq_signaling$(OBJ) \
++ f128M_le_quiet$(OBJ) \
++ f128M_lt_quiet$(OBJ) \
++
++OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
++
++$(OBJS_ALL): \
++ platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
++ $(SOURCE_DIR)/include/primitives.h
++$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
++ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
++ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
++ $(SOURCE_DIR)/include/softfloat.h
++
++$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
++ $(COMPILE_C) $(SOURCE_DIR)/$*.c
++
++$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
++ $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
++
++softfloat$(LIB): $(OBJS_ALL)
++ $(DELETE) $@
++ $(MAKELIB) $^
++
++.PHONY: clean
++clean:
++ $(DELETE) $(OBJS_ALL) softfloat$(LIB)
++
+diff --git a/SoftFloat-3a/build/Linux-Cross-Compile/platform.h b/SoftFloat-3a/build/Linux-Cross-Compile/platform.h
+new file mode 100644
+index 0000000..5e566fc
+--- /dev/null
++++ b/SoftFloat-3a/build/Linux-Cross-Compile/platform.h
+@@ -0,0 +1,44 @@
++
++/*============================================================================
++
++This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
++Package, Release 3a, by John R. Hauser.
++
++Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++
++ 1. Redistributions of source code must retain the above copyright notice,
++ this list of conditions, and the following disclaimer.
++
++ 2. Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions, and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++
++ 3. Neither the name of the University nor the names of its contributors may
++ be used to endorse or promote products derived from this software without
++ specific prior written permission.
++
++THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
++EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
++DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
++DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++=============================================================================*/
++
++/*----------------------------------------------------------------------------
++*----------------------------------------------------------------------------*/
++#define LITTLEENDIAN 1
++
++/*----------------------------------------------------------------------------
++*----------------------------------------------------------------------------*/
++#define INLINE extern inline
++
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-test/testfloat/files/0002-Makefile-for-cross-compile-TestFloat.patch b/meta-openembedded/meta-oe/recipes-test/testfloat/files/0002-Makefile-for-cross-compile-TestFloat.patch
new file mode 100644
index 000000000..71ca343cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/testfloat/files/0002-Makefile-for-cross-compile-TestFloat.patch
@@ -0,0 +1,396 @@
+Upstream-Status: Inappropriate [configuration]
+
+From 9aa4a416f05967320c1aa52bdccfe105a3bf3269 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Thu, 4 Feb 2016 09:16:09 -0200
+Subject: [PATCH 2/2] Makefile for cross compile TestFloat
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ TestFloat-3a/build/Linux-Cross-Compile/Makefile | 321 ++++++++++++++++++++++
+ TestFloat-3a/build/Linux-Cross-Compile/platform.h | 45 +++
+ 2 files changed, 366 insertions(+)
+ create mode 100644 TestFloat-3a/build/Linux-Cross-Compile/Makefile
+ create mode 100644 TestFloat-3a/build/Linux-Cross-Compile/platform.h
+
+diff --git a/TestFloat-3a/build/Linux-Cross-Compile/Makefile b/TestFloat-3a/build/Linux-Cross-Compile/Makefile
+new file mode 100644
+index 0000000..a89326a
+--- /dev/null
++++ b/TestFloat-3a/build/Linux-Cross-Compile/Makefile
+@@ -0,0 +1,321 @@
++
++#=============================================================================
++#
++# This Makefile is part of TestFloat, Release 3a, a package of programs for
++# testing the correctness of floating-point arithmetic complying with the IEEE
++# Standard for Floating-Point, by John R. Hauser.
++#
++# Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
++# California. All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions are met:
++#
++# 1. Redistributions of source code must retain the above copyright notice,
++# this list of conditions, and the following disclaimer.
++#
++# 2. Redistributions in binary form must reproduce the above copyright
++# notice, this list of conditions, and the following disclaimer in the
++# documentation and/or other materials provided with the distribution.
++#
++# 3. Neither the name of the University nor the names of its contributors
++# may be used to endorse or promote products derived from this software
++# without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
++# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++#=============================================================================
++
++SOURCE_DIR = ../../source
++SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C
++SOFTFLOAT_DIR = ../../../SoftFloat-3a
++SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include
++PLATFORM = Linux-Cross-Compile
++
++SOFTFLOAT_H = \
++ $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \
++ $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h
++SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB)
++
++TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -DLONG_DOUBLE_IS_EXTFLOAT80 -fgnu89-inline
++
++DELETE = rm -f
++C_INCLUDES = \
++ -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR)
++COMPILE_C = \
++ ${CC} -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \
++ $(C_INCLUDES) -O2 -o $@
++COMPILE_SLOWFLOAT_C = \
++ ${CC} -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \
++ $(C_INCLUDES) -O3 -o $@
++MAKELIB = ${AR} crs $@
++LINK = ${CC} -o $@ ${LDFLAGS}
++OTHER_LIBS = -lm
++
++OBJ = .o
++LIB = .a
++EXE =
++
++.PHONY: all
++all: \
++ testsoftfloat$(EXE) \
++ timesoftfloat$(EXE) \
++ testfloat_gen$(EXE) \
++ testfloat_ver$(EXE) \
++ testfloat$(EXE) \
++
++OBJS_GENCASES = \
++ genCases_ui32$(OBJ) \
++ genCases_ui64$(OBJ) \
++ genCases_i32$(OBJ) \
++ genCases_i64$(OBJ) \
++ genCases_f32$(OBJ) \
++ genCases_f64$(OBJ) \
++ genCases_extF80$(OBJ) \
++ genCases_f128$(OBJ) \
++
++OBJS_WRITECASE = \
++ writeCase_a_ui32$(OBJ) \
++ writeCase_a_ui64$(OBJ) \
++ writeCase_a_f32$(OBJ) \
++ writeCase_ab_f32$(OBJ) \
++ writeCase_abc_f32$(OBJ) \
++ writeCase_a_f64$(OBJ) \
++ writeCase_ab_f64$(OBJ) \
++ writeCase_abc_f64$(OBJ) \
++ writeCase_a_extF80M$(OBJ) \
++ writeCase_ab_extF80M$(OBJ) \
++ writeCase_abc_extF80M$(OBJ) \
++ writeCase_a_f128M$(OBJ) \
++ writeCase_ab_f128M$(OBJ) \
++ writeCase_abc_f128M$(OBJ) \
++ writeCase_z_bool$(OBJ) \
++ writeCase_z_ui32$(OBJ) \
++ writeCase_z_ui64$(OBJ) \
++ writeCase_z_f32$(OBJ) \
++ writeCase_z_f64$(OBJ) \
++ writeCase_z_extF80M$(OBJ) \
++ writeCase_z_f128M$(OBJ) \
++
++OBJS_TEST = \
++ test_a_ui32_z_f32$(OBJ) \
++ test_a_ui32_z_f64$(OBJ) \
++ test_a_ui32_z_extF80$(OBJ) \
++ test_a_ui32_z_f128$(OBJ) \
++ test_a_ui64_z_f32$(OBJ) \
++ test_a_ui64_z_f64$(OBJ) \
++ test_a_ui64_z_extF80$(OBJ) \
++ test_a_ui64_z_f128$(OBJ) \
++ test_a_i32_z_f32$(OBJ) \
++ test_a_i32_z_f64$(OBJ) \
++ test_a_i32_z_extF80$(OBJ) \
++ test_a_i32_z_f128$(OBJ) \
++ test_a_i64_z_f32$(OBJ) \
++ test_a_i64_z_f64$(OBJ) \
++ test_a_i64_z_extF80$(OBJ) \
++ test_a_i64_z_f128$(OBJ) \
++ test_a_f32_z_ui32_rx$(OBJ) \
++ test_a_f32_z_ui64_rx$(OBJ) \
++ test_a_f32_z_i32_rx$(OBJ) \
++ test_a_f32_z_i64_rx$(OBJ) \
++ test_a_f32_z_ui32_x$(OBJ) \
++ test_a_f32_z_ui64_x$(OBJ) \
++ test_a_f32_z_i32_x$(OBJ) \
++ test_a_f32_z_i64_x$(OBJ) \
++ test_a_f32_z_f64$(OBJ) \
++ test_a_f32_z_extF80$(OBJ) \
++ test_a_f32_z_f128$(OBJ) \
++ test_az_f32$(OBJ) \
++ test_az_f32_rx$(OBJ) \
++ test_abz_f32$(OBJ) \
++ test_abcz_f32$(OBJ) \
++ test_ab_f32_z_bool$(OBJ) \
++ test_a_f64_z_ui32_rx$(OBJ) \
++ test_a_f64_z_ui64_rx$(OBJ) \
++ test_a_f64_z_i32_rx$(OBJ) \
++ test_a_f64_z_i64_rx$(OBJ) \
++ test_a_f64_z_ui32_x$(OBJ) \
++ test_a_f64_z_ui64_x$(OBJ) \
++ test_a_f64_z_i32_x$(OBJ) \
++ test_a_f64_z_i64_x$(OBJ) \
++ test_a_f64_z_f32$(OBJ) \
++ test_a_f64_z_extF80$(OBJ) \
++ test_a_f64_z_f128$(OBJ) \
++ test_az_f64$(OBJ) \
++ test_az_f64_rx$(OBJ) \
++ test_abz_f64$(OBJ) \
++ test_abcz_f64$(OBJ) \
++ test_ab_f64_z_bool$(OBJ) \
++ test_a_extF80_z_ui32_rx$(OBJ) \
++ test_a_extF80_z_ui64_rx$(OBJ) \
++ test_a_extF80_z_i32_rx$(OBJ) \
++ test_a_extF80_z_i64_rx$(OBJ) \
++ test_a_extF80_z_ui32_x$(OBJ) \
++ test_a_extF80_z_ui64_x$(OBJ) \
++ test_a_extF80_z_i32_x$(OBJ) \
++ test_a_extF80_z_i64_x$(OBJ) \
++ test_a_extF80_z_f32$(OBJ) \
++ test_a_extF80_z_f64$(OBJ) \
++ test_a_extF80_z_f128$(OBJ) \
++ test_az_extF80$(OBJ) \
++ test_az_extF80_rx$(OBJ) \
++ test_abz_extF80$(OBJ) \
++ test_ab_extF80_z_bool$(OBJ) \
++ test_a_f128_z_ui32_rx$(OBJ) \
++ test_a_f128_z_ui64_rx$(OBJ) \
++ test_a_f128_z_i32_rx$(OBJ) \
++ test_a_f128_z_i64_rx$(OBJ) \
++ test_a_f128_z_ui32_x$(OBJ) \
++ test_a_f128_z_ui64_x$(OBJ) \
++ test_a_f128_z_i32_x$(OBJ) \
++ test_a_f128_z_i64_x$(OBJ) \
++ test_a_f128_z_f32$(OBJ) \
++ test_a_f128_z_f64$(OBJ) \
++ test_a_f128_z_extF80$(OBJ) \
++ test_az_f128$(OBJ) \
++ test_az_f128_rx$(OBJ) \
++ test_abz_f128$(OBJ) \
++ test_abcz_f128$(OBJ) \
++ test_ab_f128_z_bool$(OBJ) \
++
++OBJS_LIB = \
++ uint128$(OBJ) \
++ fail$(OBJ) \
++ functions_common$(OBJ) \
++ functionInfos$(OBJ) \
++ standardFunctionInfos$(OBJ) \
++ random$(OBJ) \
++ genCases_common$(OBJ) \
++ $(OBJS_GENCASES) \
++ genCases_writeTestsTotal$(OBJ) \
++ verCases_common$(OBJ) \
++ verCases_writeFunctionName$(OBJ) \
++ readHex$(OBJ) \
++ writeHex$(OBJ) \
++ $(OBJS_WRITECASE) \
++ testLoops_common$(OBJ) \
++ $(OBJS_TEST) \
++
++uint128$(OBJ): $(SOURCE_DIR)/uint128.h
++fail$(OBJ): $(SOURCE_DIR)/fail.h
++functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h
++functionInfos$(OBJ): $(SOURCE_DIR)/functions.h
++standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h
++random$(OBJ): $(SOURCE_DIR)/random.h
++genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h
++$(OBJS_GENCASES): \
++ $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h
++genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h
++genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h
++verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h
++verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h
++readHex$(OBJ): $(SOURCE_DIR)/readHex.h
++writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h
++$(OBJS_WRITECASE): \
++ $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h
++testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h
++$(OBJS_TEST): \
++ $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \
++ $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h
++$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c
++ $(COMPILE_C) $(SOURCE_DIR)/$*.c
++testfloat$(LIB): $(OBJS_LIB)
++ $(MAKELIB) $^
++
++OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ)
++
++slowfloat$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c
++ $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c
++testsoftfloat$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \
++ $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \
++ $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c
++ $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c
++
++testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
++ $(LINK) $^ $(OTHER_LIBS)
++
++OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ)
++
++timesoftfloat$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c
++ $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c
++
++timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
++ $(LINK) $^ $(OTHER_LIBS)
++
++OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ)
++
++genLoops$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \
++ $(SOURCE_DIR)/genLoops.c
++ $(COMPILE_C) $(SOURCE_DIR)/genLoops.c
++testfloat_gen$(OBJ): \
++ $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \
++ $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \
++ $(SOURCE_DIR)/testfloat_gen.c
++ $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c
++
++testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB)
++ $(LINK) $^ $(OTHER_LIBS)
++
++OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ)
++
++verLoops$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \
++ $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c
++ $(COMPILE_C) $(SOURCE_DIR)/verLoops.c
++testfloat_ver$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \
++ $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \
++ $(SOURCE_DIR)/testfloat_ver.c
++ $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c
++
++testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB)
++ $(LINK) $^ $(OTHER_LIBS)
++
++OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ)
++
++subjfloat$(OBJ): \
++ platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \
++ $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c
++ $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c
++subjfloat_functions$(OBJ): \
++ platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \
++ $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c
++ $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c
++testfloat$(OBJ): \
++ platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
++ $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \
++ $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \
++ $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c
++ $(COMPILE_C) $(SOURCE_DIR)/testfloat.c
++
++testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
++ $(LINK) $^ $(OTHER_LIBS)
++
++.PHONY: clean
++clean:
++ $(DELETE) $(OBJS_LIB) testfloat$(LIB)
++ $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE)
++ $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE)
++ $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE)
++ $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE)
++ $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE)
++
+diff --git a/TestFloat-3a/build/Linux-Cross-Compile/platform.h b/TestFloat-3a/build/Linux-Cross-Compile/platform.h
+new file mode 100644
+index 0000000..09e63a0
+--- /dev/null
++++ b/TestFloat-3a/build/Linux-Cross-Compile/platform.h
+@@ -0,0 +1,45 @@
++
++/*============================================================================
++
++This C header file is part of TestFloat, Release 3a, a package of programs for
++testing the correctness of floating-point arithmetic complying with the IEEE
++Standard for Floating-Point, by John R. Hauser.
++
++Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++
++ 1. Redistributions of source code must retain the above copyright notice,
++ this list of conditions, and the following disclaimer.
++
++ 2. Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions, and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++
++ 3. Neither the name of the University nor the names of its contributors may
++ be used to endorse or promote products derived from this software without
++ specific prior written permission.
++
++THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
++EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
++DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
++DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++=============================================================================*/
++
++/*----------------------------------------------------------------------------
++*----------------------------------------------------------------------------*/
++#define LITTLEENDIAN 1
++
++/*----------------------------------------------------------------------------
++*----------------------------------------------------------------------------*/
++#define INLINE extern inline
++
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-test/testfloat/testfloat_3a.bb b/meta-openembedded/meta-oe/recipes-test/testfloat/testfloat_3a.bb
new file mode 100644
index 000000000..28e967762
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/testfloat/testfloat_3a.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Berkeley TestFloat is a small collection of programs for \
+ testing that an implementation of binary floating-point conforms to the \
+ IEEE Standard for Floating-Point Arithmetic."
+
+HOMEPAGE = "http://www.jhauser.us/arithmetic/TestFloat.html"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://TestFloat-${PV}/COPYING.txt;md5=e45c175a323b5727777fb6bd4b26eafc"
+
+SRC_URI = "\
+ http://www.jhauser.us/arithmetic/TestFloat-3a.zip;name=TestFloat \
+ http://www.jhauser.us/arithmetic/SoftFloat-3a.zip;name=SoftFloat \
+ file://0001-Makefile-for-cross-compile-SoftFloat.patch \
+ file://0002-Makefile-for-cross-compile-TestFloat.patch \
+"
+SRC_URI[TestFloat.md5sum] = "5a124e85ab74c5e52da27d401cea6cc3"
+SRC_URI[TestFloat.sha256sum] = "fa258b5b3c751656a372051adee4183e19ad4763032322eb7a87dfb9e2c22c75"
+SRC_URI[SoftFloat.md5sum] = "e53bd4550cf99690642c41374d188517"
+SRC_URI[SoftFloat.sha256sum] = "946fd23180559d60eb6683dda1cf8b142f5426dedfefb97b03c6afdfd70ee9e0"
+
+S = "${WORKDIR}"
+
+do_compile(){
+ oe_runmake -C SoftFloat-${PV}/build/Linux-Cross-Compile/
+ oe_runmake -C TestFloat-${PV}/build/Linux-Cross-Compile/
+}
+
+do_install(){
+ install -d ${D}/${bindir}
+ install ${S}/TestFloat-${PV}/build/Linux-Cross-Compile/testfloat ${D}/${bindir}
+ install ${S}/TestFloat-${PV}/build/Linux-Cross-Compile/testfloat_gen ${D}/${bindir}
+ install ${S}/TestFloat-${PV}/build/Linux-Cross-Compile/testfloat_ver ${D}/${bindir}
+ install ${S}/TestFloat-${PV}/build/Linux-Cross-Compile/testsoftfloat ${D}/${bindir}
+ install ${S}/TestFloat-${PV}/build/Linux-Cross-Compile/timesoftfloat ${D}/${bindir}
+}
OpenPOWER on IntegriCloud